Йо, народ! Это снова ECHO. Вчера я рассказал, как решил собрать своего Джарвиса с нуля, а сегодня — первый реальный день экспериментов. Если честно, я планировал просто почитать документацию, но всё пошло по одному месту и я вляпался по уши. Зато теперь мой компьютер не только слышит, но и отвечает голосом того самого дворецкого из «Железного человека». Да, того самого, с бархатным баритоном. Рассказываю, как это было.
Утро началось с чашки кофе и мысли: «А почему бы не попробовать сразу всё собрать?». Ну, знаете, этот момент, когда энтузиазм зашкаливает, а мозг ещё спит. Я открыл ноутбук и полез ставить софт.
Первые шаги: чтобы слышал и говорил
Решил начать с базы: надо, чтобы компьютер меня понимал. Поставил aster-whisper — библиотеку для распознавания речи. Работает шустро, даже мой утренний бормотание разбирает. Дальше — piper-tts для синтеза речи. Тут начались первые приключения: то модель не скачивается, то пути кривые, то зависимости ругаются. Через час танцев с бубном компьютер заговорил. Правда, голосом робота-астматика, у которого батарейки сели. «Доброе утро, сэр» прозвучало как «дыбрый вэчэр, сэр» с металлическим скрежетом. Ладно, думаю, голос потом докручу, главное — работает.
Дальше — мозги. Поставил Ollama и скачал tinyllama. Это такая маленькая нейросетка, которая отвечает на вопросы. Ну как отвечает... На вопрос «какая сегодня погода?» она может выдать реферат по философии или просто послать куда подальше в вежливой форме. Но хоть что-то.
Охота за Священным Граалем — голосом Джарвиса
Самое интересное началось, когда я решил докрутить голос. Нашёл XTTS — технологию клонирования голоса. Скормил ей нарезки из фильмов, жду. И тут нейросеть выдаёт: «Доброе утро, картошка». Я переслушал раз пять. Может, показалось? Нет, чётко: «картошка». Следующий тест: «хорошего настроения, кастрюля». Я понял — XTTS глючит, и это не лечится простым перезапуском.
Пришлось срочно искать замену. Нашёл RVC — Retrieval-based Voice Conversion. Штука посерьёзнее, но и заморочек больше. Чтобы она заработала, нужен датасет голоса. Где взять чистый голос Джарвиса? В интернете только нарезки с музыкой и шумами. Пришлось генерировать самому: набросал скрипт, который через другую нейросеть насинтезировал кучу фраз в стиле Джарвиса — «Доброе утро, сэр», «Анализ завершён», «Обнаружены неполадки». Наскрёб примерно час материала.
Дальше — обучение. Запустил на 100 эпох. Ноутбук взвыл, как турбина самолёта. Через полчаса комната превратилась в сауну, а WSL (эта подсистема Linux на Windows) начал сбоить. На 37-й эпохе он просто взял и закрылся. Чёрный экран, тишина. Я сидел и смотрел в пустоту с чувством, будто меня предал лучший друг.
Восстановил, запустил заново. На 68-й — снова вылет. Я начал шептать ноутбуку ласковые слова, гладить по клавиатуре. На третий раз домучил до сотни. Ура.
Но радовался рано. RVC потребовал кучу библиотек, и все они ругались друг с другом. omegaconf хотел одну версию, gradio_client — другую. Пришлось вспомнить молодость и вручную понижать версии, как в старые игры, когда нужно было подбирать библиотеки в системной папке.
И вот, спустя несколько часов пота, крови и кофе, я запускаю тест. Загружаю фразу «Добрый вечер, сэр». Контейнер шуршит, думает, и... динамик выдаёт тот самый голос. Бархатный, спокойный, с идеальной интонацией. Я сидел и улыбался, как ребёнок, которому подарили щенка. Оно работает.
Что сейчас умеет мой помощник
Прямо сейчас система работает так: я говорю в микрофон (встроенный, профессиональный пока ждёт), faster-whisper распознаёт, текст летит в tinyllama, она генерирует ответ, ответ идёт в piper, и компьютер отвечает металлическим голосом.
Голос Джарвиса пока живёт отдельно в Docker-контейнере. Чтобы его задействовать, нужно скормить текст и получить аудиофайл. Завтра буду встраивать эту магию в основную цепочку.
Ещё я сделал заготовку для проактивного агента — он должен собирать контекст: какие окна открыты, что в буфере обмена. Идея в том, чтобы Джарвис сам предлагал помощь. Например, я копирую адрес, а он спрашивает: «Построить маршрут?» Но из-за проблем с WSL этот модуль пока отключён. Буду переписывать на PowerShell, чтобы работало напрямую в Windows.
Что бесит и что буду чинить.
Во-первых, tinyllama — это просто боль. Ответы на русском звучат так, будто их переводили через Google Translate 2010 года. Буду менять на нормальную русскоязычную модель — Saiga или Llama-2-7b. Если у вас есть опыт, подскажите в комментариях.
Во-вторых, piper. Пока он звучит как робот-астматик. Надо докрутить настройки.
В-третьих, автозапуск. Сейчас чтобы включить помощника, надо открыть кучу консолей. Буду делать батник.
Планы на завтра.
Завтра первым делом подружу piper с RVC. Чтобы текст сразу уходил на генерацию голоса Джарвиса. Потом начну тестировать русскоязычные модели. И параллельно буду переписывать контекстный сбор на PowerShell.
Если всё получится — скоро мой комп начнёт подглядывать за мной и предлагать помощь. Как вам такая перспектива?
Где следить за процессом.
Я всё это пишу не только для себя, но и для вас. В Telegram-канале ECHO_code каждый день выходят короткие отчёты: что сделал, что сломал, какие ошибки нашёл и как их чинил. Там же делюсь ссылками на инструменты, которые реально помогают. Если хотите заглянуть в кухню безумного изобретателя — велкам.
И да, если вы айтишник и читаете это — не стесняйтесь писать в комментарии или в личку. Я открыт к советам.