Своя LLM вместо Алисы¶
Частично реализовано
Полная замена облака Алисы своим сервером уже работает: см. quasard ниже. Гибридного варианта пока нет. Это когда общие вопросы уходят в свою модель, а умный дом, таймеры и голос Алисы остаются облачными. Если вы делали такой прокси, дополните страницу.
Цель: отвечать на общие вопросы своей моделью (ChatGPT, Claude, Ollama), сохранив умный дом, музыку, таймеры и голос Алисы.
Что известно¶
- Голосовые запросы колонка отправляет не обычным HTTP-запросом к
backendUrl, а по отдельному соединению с «uniproxy». Его адрес задаётся ключамиuniProxyUrlиuniProxyQuicUrlв/system/vendor/quasar/quasar.cfg(ключи есть в прошивке Лайт 3.21). quasar.cfgлежит на rootfs, его можно править послеmount -o remount,rw /.
Как устроен голосовой тракт
Разбор потока (локальные спотеры → uniproxy, protobuf Alice API, события AsrResult/
AliceResponse/TtsSpeak, TTS) есть на странице Голосовой тракт Алисы.
Там же, в конце, написано, что это значит для своего ASR/LLM.
quasard¶
От автора — @amirilivice
Репозиторий: amirilivice/quasard. Неофициальный проект, с Яндексом не связан. Только для своих устройств и в исследовательских целях.
Готовый бэкенд, который полностью заменяет облако Алисы. Колонка думает, что говорит с Яндексом, но активация, голосовой цикл и музыка идут через ваш сервер, наружу станция больше не ходит. Название — от внутреннего имени бэкенда умных устройств Яндекса (quasar).
Как устроено¶
Яндекс Станция ──DNS доменов Яндекса → ваш сервер──> quasard
│
HTTP (oauth / quasar / метрики) ◄────────────┤ мок активации и конфигурации колонки
│
WebSocket uniproxy (/uni.ws) ◄────────────┘ голосовой цикл:
микрофон Ogg/Opus → Silero VAD (конец фразы) → GigaAM (речь в текст)
→ LLM (стриминг ответа по фразам) → F5-TTS (голос) → Ogg/Opus на колонку
- Активация без облака. Сервер сам отвечает на oauth,
register,get_sync_info,device_listи метрики. Обновления прошивки заблокированы, чтобы колонка не обновилась на версию, которая всё сломает. - Оба протокола uniproxy. На прошивках ~1.56 это JSON, на 3.x бинарный protobuf
AAPI. Формат сервер определяет по первому кадру. Схемы для 3.x восстановлены из прошивки и лежат вalice_server/aliceapi.desc. - Распознавание: GigaAM v3 (
v3_e2e_rnnt, сразу с пунктуацией) плюс Silero VAD для конца фразы. Занимает около 1 ГБ видеопамяти. - Ответы: любой OpenAI-совместимый API (Groq, Ollama, vLLM, LM Studio…), с историей
диалога. Характер задаётся в файле
system_prompt.txt(создаётся рядом с конфигом), он перечитывается на лету. - Стриминг по фразам. Ответ LLM режется по знакам препинания. Первая готовая фраза сразу озвучивается и уходит на колонку, пока модель дописывает остальное, поэтому станция начинает говорить почти без паузы.
- Голос: клон по 10–15-секундному образцу на F5-TTS (русские веса ESpeech, ~3.4 ГБ видеопамяти). Запасной вариант без GPU — Edge TTS.
- Музыка из Яндекс Музыки: «Моя волна», поиск по исполнителю/треку/альбому, «дальше», «назад», лайк/дизлайк, пауза, «что сейчас играет».
- Быстрые команды без LLM: громкость, «стоп», bluetooth, сброс диалога.
Чем отличается от цели этой страницы¶
quasard не проксирует запросы в облако Яндекса, а заменяет его целиком. Поэтому:
- голос свой (клон или Edge TTS), а не Алисы;
- облачного умного дома и сценариев Яндекса нет: из «навыков» есть музыка и быстрые команды;
- зато всё работает локально, без аккаунта в облаке Алисы и без интернета (кроме LLM-API и музыки, если они облачные).
Гибрид «своя LLM для болтовни + облако для остального» на базе quasard сделать можно: сервер уже разбирает оба протокола uniproxy и видит распознанный текст. Не хватает только проксирования остальных запросов в настоящий uniproxy.
Что понадобится¶
- Windows или Linux, видеокарта NVIDIA (проверялось на RTX 5080, 16 ГБ); Python 3.12, uv, ffmpeg.
- Роутер, на котором можно увести домены Яндекса на свой ПК (у автора — OpenWrt), принудительный DNS и сертификат, которому доверяет колонка. Подробно, с примерами для OpenWRT, в docs/TRAFFIC_CAPTURE.md.
- Ключ к LLM-API (по умолчанию бесплатный Groq) или локальная модель.
Быстрый старт из клона репозитория (подробнее — в
README, там же start.ps1 для Windows):
Сервер слушает порты 80 (HTTP) и 443 (HTTPS) — на них DNS роутера и уводит домены Яндекса.
Проверить без колонки можно имитаторами: tools/activation_sim.py (активация),
tools/station_sim.py --text "Привет" (диалог), tools/fake_llm.py (LLM без ключа).
Ограничения¶
- Прямые ссылки Яндекс Музыки отдаются через редирект. Сервер проходит его за колонку, потому что плеер старой прошивки редиректы не любит.
- Скорость и качество голоса зависят от GPU: на слабой карте первая фраза приходит с задержкой ~1–2 с.
- Бесплатные тарифы LLM-API ограничены по числу запросов в день.
Что нужно выяснить¶
- Протокол uniproxy: какие сообщения идут в обе стороны и как отличить «болталку» от
команд умного дома. (Основное описано в Голосовом тракте. Рабочий
разбор JSON и protobuf-кадров
AAPIесть в quasard:alice_server/uniproxy.py,alice_server/aliceapi.desc.) - Как подставить свой текст в ответ, чтобы его озвучила Алиса. (Локально — через API glagol, как интеграция YandexStation для Home Assistant, см. Сеть → glagol. При полной замене бэкенда, как в quasard, озвучивает уже свой TTS, не голос Алисы.)
- Как прошивка проверяет сервер (TLS, сертификаты) при подмене адреса. (Пиннинга нет, см.
Подводные камни; работает и
ws://без TLS.) - Как сделать гибрид: свою LLM для общих вопросов, а умный дом, таймеры и голос Алисы оставить облачными, проксируя остальное в настоящий uniproxy.