Приветствую всех. Мне необходимо создать абсолютно полностью локальную систему для двухстороннего голосового взаимодействия с выбранными нейронками:
Speech-to-Text -> LLM -> Text-to-Speech
Ключевые концепции:
1. Всё должно происходить в рамках одного ПК (или одной локальной сети): захват голоса, его передача на генерацию, получение ответа и преобразование в звук.
2. Должна быть вариативность, простота и гибкость в выборе любого из компонентов системы: выбор любой из "влезающих в VRAM" LLM, возможность менять голосовые движки и сами голоса, а также возможно даже непосредственно Speech-to-Text часть.
3. Конечно же, крайне сильно минимизировать задержки на каждом из этапов, насколько это возможно, для достижения близкой к real-time коммуникации.
4. Как можно более дружелюбное интерактивное взаимодействие пользователя с системой, то есть чтоб можно было, к примеру, сказать "стоп" и в реальном времени остановить "говорилку", ну и чтоб можно было говорить одновременно с воспроизведением и эти данные не потерялись и т.д.
5. Одновременная работа как с русским, так и английским языками, если не в рамках одного промпта/запроса, то хотя бы в рамках одного диалога.
6. Возвожность последующего расширения функционала до полноценного "ИИ-ассистента" с возможностями по типу записи файлов, календарей, будильников, сохранения инфы в RAG, парсинга PDF и т.д.
Что я смог найти на текущий момент:
0) HomeAssistant -- хороший вариант, но немного из другой сферы и не совсем подходит для всех из задач (пока что)
1)
https://github.com/kyutai-labs/moshi очень крутой проект для коммуникации действительно в реальном времени, но, как понимаю, LLM прибита гвоздями к распознаванию голоса и его генерации (и без поддержки русского)
2)
https://github.com/THUDM/GLM-4-Voice/blob/main/REA... какая-то жёсткая тема от китайцев (и опять без русского)
3)
https://github.com/ILikeAI/AlwaysReddy какой-то похожий проект с реддита, но чел тоже не профессиональный программист
4)
https://github.com/PromtEngineer/Verbi -- проект человека, который я пытался запустить 2 часа и на финальных этапах столкнулся с адом python зависимостей и неработоспособностью пакетов что бы я не делал
Что я нашёл из того, "из чего" можно сделать мой проект:
1)
https://github.com/rhasspy/piper -- генерация голоса в т.ч. русского
2)
https://github.com/livekit/agents и
https://github.com/livekit-examples/voice-assistan... -- для AI приложений в реальном времени
3)
https://github.com/myshell-ai/OpenVoice и
https://github.com/myshell-ai/MeloTTS -- Instant voice cloning и High-quality multi-lingual text-to-speech library (но опять же без русского, к сожалению)
4)
https://github.com/ggerganov/whisper.cpp или
https://github.com/SYSTRAN/faster-whisper или
https://github.com/3choff/FastWhisperAPI -- для распознавания голоса на основе локального Опенсорс решения от OpenAI
5)
https://github.com/snakers4/silero-vad -- штука для определения голосового ввода, так понимаю, может юзаться для добавления интерактивности (прерывания своим голосом текущее проигрывание ответа нейронки и прочее)
6)
https://github.com/LostRuins/koboldcpp -- лучшая программа для запуска любых моих GGUF моделей, просто один бинарник, который работает (а также предоставляет доступ к API ендпоинту)
Вообще есть чел, который сделал решение очень близкое к тому, что мне самому хотелось бы, но весь его код и сам проект за пейволлом ютубовской мемберки (что несомненно крайне кринжово с его стороны), так ещё, как понимаю, его код не настолько гибок, насколько мне хотелось бы (и опять же без поддержки русского):
https://www.youtube.com/watch?v=VpB6bxh4deM
Так вот, сразу вижу множество проблем:
1. Как весь данный зоопарк из 3-4+ моделей адекватно собрать и разместить в своих ресурсах за наименьшее число шагов и как можно более эффективно обойдя все критические проблемы с производетильностью, pip зависимостями и прочими ужасами?
2. Как будет происходить развёртывание и где? Docker с пробросом GPU (благо, на Линуксе это относительно просто)? Если так, то один контейнер или несколько? Или прямо на bare metal всё во всяких venv'ах? Как не сойти с ума от резолвинга зависимостей и прочего?
3. Как лучше всего реализовать запросы к API для достижения near real-time коммуникации? Т.к. пока LLM долго генерит, она же в принципе может передавать сгенерированные токены уже на вывод голосовой модели для воспроизведения, чтоб пользователь не ждал. Как это лучше всего сделать и контроллировать?
4. Как адекватно решить проблемы одновременного захвата русско-английской речи, а также генерации голоса в англо-русском выхлопе LLM?
5. Как и где это всё будет запускаться, откуда и через что будет вводится и выводится: просто скриптом в терминале, который будет захватывать аудиопоток с микрофона и выводить звук прямо "из себя", или же лучше будет это делать через веб-интерфейс?
Сразу оговорюсь: Ни в коем случае не хочу использовать API не своих сервисов. Также я не хотел бы юзать ollama или что-то подобное т.к. планирую тестировать и использовать различные модели с разными архитектурами (а вот тот koboldcpp с этим прекрасно справляется, поэтому для меня он в высшем приоритете). Я не знаю, как я буду это всё "программировать", потому что опыта в этом у меня нет, максимум на что способен -- дёргать API трёх-четырёх моделей и пересылать между ними данные. Также я готов воспользоваться уже готовыми решениями, переделав их под себя, но я не вижу ни одного, которое удовлетворило мои бы потребности, особенно по части русского языка и кастомных LLM (та же gemma-2-9b-abliterated.gguf). Также в идеале реализовать доп юзкейс: чтоб через проброшенные порты ко мне могли коннектится на условную веб-морду и "говорить" с моей моделью, но это уже мелочи в которых я уже варюсь (главное разобраться с веб-мордой хаха).
Мои текущие системки: Artix(Arch) Linux на ПК с i7-7700K (разогнанный) + 32 RAM + GTX 1080 Ti. Прекрасно понимаю, что одной моей GTX 1080 Ti на это всё не хватит, поэтому придётся распараллеливать модели на проц + ОЗУ, а возможно даже и оффлоаднуть что-то на ноут или VPS и т.д.
Я рассчитывал, что это будет довольно сложный личный проект, но не ожидал, что настолько как будто бы невозможный, а особенно для понимания и "вката", особенно учитывая потребность в русском языке. У меня на данный момент просто ещё не до конца в голове укладывается, как что, с чем и через что должно конкретно взаимодействовать для адекватного результата и как вообще всё связать. Нашёл кучу проектов и не знаю, как их правильно соединить вместе (я не программист), поэтому надеюсь, что тут мне смогут разъяснить все микромоменты, чтоб я обрёл почву под ногами и у меня что-либо получилось по началу.
Может кто-то в русскоязычном комьюнити что-то подобное реализовывал уже или делал нечто близкое к этому? Сколько искал -- не нашёл. Может кто-то из вас даже занимался похожими проектами или частями? Я был бы очень рад получить как можно большую информацию по тому, куда мне следует копать и куда смотреть.
Спасибо большое за прочтение, надеюсь на крайне подробные ответы для меня, как для новичка в этом, от реальных экспертов в области.