Интерактивный голосовой ассистент и триггеры автовыхода для Telemost / Meeting Recorder
Интерактивный голосовой ассистент и триггеры автовыхода для Meeting Recorder 🎙️🤖
Суть концепции
Эволюция проекта Telemost / Meeting Recorder от пассивного слушателя (Passive Scribe, который только молча записывает встречу и генерирует пост-саммари) к активному интерактивному участнику (Active In-Meeting Voice Agent).
Ассистент подключается к звонку (Яндекс.Телемост, Google Meet, Zoom, MS Teams), слушает контекст в реальном времени, способен отвечать на голосовые вопросы участников голосом прямо в эфир конференции, извлекать факты из базы знаний Baza / LLM Wiki и корректно покидать встречу по голосовой кодовой команде.
Практическая ветка реализации через Fish Audio разобрана отдельно: Fish Audio для прямого общения агента в Яндекс.Телемосте. Исследование уточняет, что hosted Fish Agents уже закрывает STT/turn-taking/interruption/TTS, но всё равно требует собственного моста между LiveKit и WebRTC-аудио Телемоста.
---
1. Архитектура Full-Duplex аудиопотока
Для двустороннего голосового участия рекордер разделяется на два встречных потока данных с низкой задержкой (End-to-End Latency < 1.5 сек):
| Модуль | Компонент | Технологический стек | Функция |
|---|---|---|---|
| Слух (Audio In) | WebRTC Track Interceptor | WebRTC MediaStream, Chromium AudioContext | Непрерывный захват входящего звука всех участников звонка с разделением по трекам. |
| Потоковый STT | Streaming Voice-to-Text | Deepgram Nova-2 WebSockets / Sherpa-ONNX / Groq Whisper Streaming | Быстрая транскрибация аудио в текст на лету с задержкой < 300 мс. |
| Детектор обращений | Wake-Word & Intent Classifier | Regex / Mini-LLM / Semantic Router | Выделение моментов, когда участники обращаются к агенту («Светочка, подскажи...») или отдают системную команду. |
| Рассуждения (Brain) | Realtime LLM & Wiki RAG | Groq Llama-3.3-70B / DeepSeek V3 / Claude 3.5 | Анализ контекста встречи + поиск ответов в Baza и формирование краткого устного ответа. |
| Голос (Audio Out) | Low-Latency TTS | Yandex Uniproxy (nastya / shitova.us) / Cartesia / ElevenLabs | Синтез естественной речи в Opus/PCM за < 400 мс. |
| Эфир (Virtual Mic) | Virtual Microphone Shim | navigator.mediaDevices.getUserMedia mock в Puppeteer / Virtual PulseAudio | Воспроизведение синтезированного звука в микрофонную дорожку бота внутри звонка. |
---
2. Механизм голосового Q&A в реальном времени
Логика работы цикла диалога:
1. Мониторинг потока: Бот постоянно анализирует входящий текст от Streaming STT. 2. Активация (Wake-word): При обнаружении имени («Светочка...», «Ассистент...») открывается окно активного запроса. 3. Контекстное обогащение: Запрос передается в LLM с системным промптом:
- Краткая история текущей встречи (последние 5–10 минут стенограммы);
- Релевантные факты из корпоративной базы знаний;
- Формат ответа: строго разговорный русский язык, 1–3 предложения, без списков и псевдографики.
4. Стриминг голоса в звонок: Чанки текста сразу отправляются в TTS WebSocket (Yandex Uniproxy), и полученные аудио-буферы проигрываются в виртуальный микрофон встречи.
---
3. Управляемый автовыход по кодовой фразе (Graceful Exit Trigger)
Одна из ключевых запланированных фич — возможность попросить бота завершить работу прямо голосом в звонке, не переходя в Telegram-интерфейс.
Поддерживаемые фразы:
- «Светочка, покинь встречу»
- «Светочка, отключись»
- «Бот, заверши запись»
- «Светочка, спасибо, ты свободна»
Пошаговый протокол Graceful Teardown:
[Участник произносит: «Светочка, покинь встречу»]
│
▼
Streaming STT детектирует фразу
│
▼
1. Голосовой отклик в эфир (Voice Ack):
«Хорошо, отключаюсь. Запись и саммари отправляю в Telegram.»
│
▼
2. Завершение медиапотоков:
MediaRecorder.stop() ──► закрытие WebRTC tracks ──► финализация файлов
│
▼
3. Корректный выход из комнаты:
Клик по кнопке «Выйти» / page.close() / browser.close()
│
▼
4. Запуск пост-обработки:
transcribe.js (AssemblyAI / Whisper) ──► summarize.js (Groq / DeepSeek)
│
▼
5. Доставка артефактов:
Отправка текста и аудио в Telegram-чат и выгрузка на Яндекс.Диск
---
4. Поэтапный план реализации (Roadmap)
| Этап | Задача | Результат | Статус |
|---|---|---|---|
| Этап 1 | Мультиплатформенность рекордера | Драйверы для Яндекс.Телемост, Google Meet и Zoom на едином ядре. | 🔄 В работе |
| Этап 2 | Exit-Triggers (Автовыход по фразе) | Интеграция легковесного потокового STT (Deepgram/VAD) и логики graceful teardown по голосовой команде. | 📋 Запланировано |
| Этап 3 | Virtual Audio Injection (Виртуальный микрофон) | Реализация впрыска аудиопотока в getUserMedia Puppeteer/Chromium для воспроизведения звуков и речи бота. | 📋 Запланировано |
| Этап 4 | In-Meeting Q&A & Voice Synthesis | Полноценный голосовой агент: Wake-Word → Realtime RAG по Baza → Yandex Uniproxy TTS → эфир встречи. | 🎯 Целевой ориентир |
---