Fish Audio для прямого общения агента в Яндекс.Телемосте

concept fish-audio fish-speech voice-agent telemost webrtc livekit realtime-tts modified: 2026-09-18 11:23 · canonical

Fish Audio для прямого общения агента в Яндекс.Телемосте

Короткий вывод

Для Telemost Recorder есть два разных продукта Fish Audio. Новый fishaudio/fish-agent-sdk-web + hosted Fish Agents потенциально закрывает WebRTC-разговор, STT, turn-taking, interruption handling, TTS и подключение собственного OpenAI-compatible LLM, но пока находится в private beta. Доступный для реализации без beta базовый путь — streaming STT/VAD → Hermes → Fish Audio WebSocket TTS. fish-speech следует рассматривать как self-hosted TTS-движок для специального сценария. источник

Главное ограничение: Fish Agents находится в private beta. Поэтому buildable MVP по умолчанию — текущий streaming STT + Hermes/OmniRoute + Fish Audio WebSocket TTS; Fish Agents нужно проверить параллельным gated spike и повысить до приоритетного варианта только после получения доступа и latency/quality теста. источник

Что именно дают проекты Fish Audio

ПроектРоль в звонкеПригодность для TelemostОграничение
[fish-agent-sdk-web](https://github.com/fishaudio/fish-agent-sdk-web)Готовая разговорная сессия по LiveKit WebRTCПерспективный gated spikeHosted/private beta; сам по себе не входит в комнату Телемоста
[fish-audio-python](https://github.com/fishaudio/fish-audio-python)API-клиент: ASR + streaming TTSХорош для собственного конвейераTurn-taking, barge-in и audio bridge остаются на нашей стороне
[fish-audio-typescript](https://github.com/fishaudio/fish-audio-typescript)Node SDK: realtime TTS, ASR, voicesЕстественен для текущего Node/Puppeteer стекаМолодой SDK; browser WS всё равно требует backend proxy
[WebSocket TTS /v1/tts/live](https://github.com/fishaudio/docs/blob/main/api-reference/asyncapi.yml)Принимает текст частями, возвращает аудиочанкиХорош для минимизации time-to-first-audioТолько TTS, не полный агент
[fish-speech](https://github.com/fishaudio/fish-speech)Self-hosted S2/S2-Pro TTSТолько если нужны локальность и контроль24 GB VRAM; коммерческая лицензия отдельно; локальный API документирован как HTTP TTS
realtime-vc-guiПреобразование голосаНе решает задачу агентаНет STT/LLM/диалога

Где находится реальная сложность

Fish Audio решает речевой интеллект, но не мост между двумя независимыми WebRTC-комнатами. У агента должны одновременно существовать:

1. входящий звук участников Телемоста; 2. входной аудиотрек Fish Agent или streaming STT; 3. исходящий звук Fish Agent/Fish TTS; 4. микрофонный трек бота, публикуемый обратно в Телемост; 5. подавление эха и правило прерывания, чтобы агент не слушал собственный голос.

Текущая ветка Telemost Recorder уже перехватывает remote MediaStreamTrack через monkey-patch RTCPeerConnection, пишет общий микс и per-track Opus/WebM. Но в ней нет подтвержденного обратного канала, который публикует синтезированный звук как микрофон в комнату. Поэтому первая инженерная задача — не замена TTS, а двунаправленный audio bridge. source

Рекомендуемая архитектура MVP

Официального realtime media API Телемоста в проверенной документации не найдено. Поэтому базовая транспортная архитектура — Chromium как обычный участник плюс раздельные виртуальные аудиоустройства: telemost_out.monitor для входящей речи и bot_mic для исходящего TTS.

Вариант A — Fish Agents sidecar, gated spike

ЭтапРеализация
Телемост → агентTelemost WebRTC interceptor передает PCM 16 kHz mono в bridge; bridge публикует его как пользовательский audio track в LiveKit-сессию Fish Agent.
Разум агентаFish Agents вызывает наш OpenAI-compatible streaming endpoint; за ним работает Hermes/OmniRoute и доступ к Baza.
Агент → ТелемостBridge подписывается на удаленный audio track Fish Agent, ресемплирует и направляет его в virtual microphone, выбранный Chromium как микрофон бота.
ПрерываниеНа время речи агента сохраняется вход от людей, но из STT/VAD исключается собственный playout; при речи участника Fish Agents выполняет interruption handling.
НаблюдаемостьСохранять live transcript, режимы listening/thinking/speaking, timestamps первого текста/первого аудио, disconnect reason.

Почему sidecar, а не попытка вставить SDK прямо в страницу Телемоста: SDK управляет своей LiveKit-сессией и микрофоном; Телемост — другая WebRTC-система. Отдельный bridge делает маршрутизацию явной, тестируемой и не зависит от внутреннего DOM Телемоста больше необходимого.

Вариант B — собственный конвейер, buildable MVP

Telemost remote audio → WebRTC/Silero VAD → streaming STT → wake phrase/semantic routing → Hermes/LLM streaming → Fish WebSocket TTS → jitter buffer → virtual mic Телемоста.

Плюсы: доступен без Fish Agents beta, можно оставить существующий Deepgram STT и всю агентскую память у Hermes. Для оркестрации можно использовать Pipecat, где есть официальная интеграция FishAudioTTSService, либо реализовать компактный Node-sidecar рядом с Puppeteer. Fish WebSocket должен открываться server-side: browser WebSocket не умеет передавать требуемые auth/model headers. Минусы: самостоятельно реализуются endpointing, interruption, backpressure, отмена TTS, защита от self-echo и сбор метрик. Это расширение ранее описанного интерактивного голосового агента для встреч.

Вариант C — self-hosted fish-speech

Использовать лишь после отдельного GPU benchmark. Официальные требования указывают 24 GB VRAM для inference, а лицензия требует отдельного разрешения для коммерческого использования. Для первого Telemost MVP это тяжелее и рискованнее hosted API. источник

Решение

Рекомендуется двухконтурный spike:

1. Сначала сделать минимальный Telemost audio bridge: telemost_out.monitor → PCM capture и заранее подготовленная PCM-фраза → bot_mic; проверить слышимость без эха. 2. На этом мосте собрать доступный контур Deepgram streaming STT → Hermes → /v1/tts/live; использовать latency="balanced", FlushEvent на границах фраз и немедленную отмену playback/TTS/LLM при barge-in. 3. Параллельно проверить доступ к Fish Agents и отдельно измерить fish-agent-sdk-web с custom LLM endpoint. 4. Переключить MVP на hosted Fish Agents только если beta-доступ, русский язык, сквозная задержка, приватность и стоимость проходят критерии.

Критерии приемки прототипа

КритерийЦель MVP
Time-to-first-audio после конца реплики≤ 1.5 с, измерять p50/p95
Прерывание агентской речи человеком≤ 300 мс от VAD-события до остановки playout
Самопрослушивание0 ложных ответов на собственный голос в 20 тестовых диалогах
Стабильность30 минут звонка без разрыва bridge
Русская речьсубъективный MOS-тест + WER/ошибки имен на фиксированном наборе
Recoveryавтоматическое восстановление после краткого сетевого разрыва либо явное завершение с причиной

Цифры выше — целевые инженерные критерии, а не опубликованные гарантии Fish Audio.

Риски

Связанные страницы