Работающее демо · подготовлено 7 сентября 2026
WebRTC / Voice AI
Короткая голосовая или текстовая сессия через собственную WebRTC-инфраструктуру. Транспорт и LangGraph работают реально, ASR/LLM/TTS заменены обозначенными моками.
01 / Задача
Реальное аудиосоединение и управляемый граф диалога
Диалоговый runtime должен связать сигналинг, передачу медиа, маршрутизацию запроса и завершение сессии, не оставляя незакрытых соединений.
Для кого: Разработчики голосовых интерфейсов и real-time AI-систем.
Мой вклад
- WebRTC-транспорт, обмен через DataChannel и оркестрация исходного LangGraph.
- Сценарии echo, маршрутизация в free_speech, отмена по таймауту и повтор.
- Собственный ограниченный TURN, короткие сессии и наблюдаемые счётчики без записи аудио.
Интерфейс в работе
Сценарии, детали и состояния02 / Технологии
Стек и его роль
WebRTC / aiortc
Настоящие ICE, DTLS/SRTP, аудио и DataChannel.
coturn
Собственный ограниченный relay, временные credentials и peer allowlist.
Python / aiohttp
HTTPS-сигналинг за Nginx, жизненный цикл сессий и счётчики.
LangGraph
Исходная маршрутизация echo/free_speech, память и отмена.
03 / Решения
Как устроен проект
- Браузер использует relay через собственный coturn. SDP ограничен одним аудиопотоком и DataChannel.
- Исходный WorkflowEngine и handlers сохранены; MockIO заменяет внешние AI-вызовы.
- ASR возвращает фиксированную фразу только после фактического получения аудиокадров. Вместо TTS передаётся короткий тон.
- Сессия живёт 90 секунд и допускает десять сообщений. Старое закрытие соединения проверяет идентичность сессии и не завершает новую.
04 / Проверка
Что попробовать
- Подключитесь без микрофона и отправьте echo: ответ проходит исходный граф.
- Проверьте шаблонный ответ, таймаут LLM и успешный запрос после отмены.
- Разрешите микрофон, дождитесь аудиокадров на сервере и примените мок ASR.
- Откройте stats, сбросьте контекст и дождитесь автоматического завершения через 90 секунд.
Подтверждённые результаты
- Сохранено 14 содержательных кадров фактического интерфейса.
- Дата, сценарий и версия указаны у каждого кадра.
- Максимум RAM контейнеров в коротком тесте: 89.62 MiB. Общие службы учитываются отдельно; магазин включает свою БД.
- Измерено 2 повторений сценария; медиана 3660.5 мс, максимум 4226 мс. Время включает браузер и HTTPS; методика и ограничения приложены.
- Два аудиопотока подтверждены серверными кадрами и browser getStats. Третье подключение отклонено лимитом.
Границы и ограничения
- Фиксированная ASR-фраза не является распознаванием речи. Короткий тон не является синтезированной речью.
- Одновременно разрешены две сессии; третья отклоняется. Аудио не записывается, контекст хранится в памяти и удаляется.
- TURN разрешает peer только на адресе собственной VPS, имеет квоты и короткие credentials.
- Микрофонные QA-потоки созданы синтетическим устройством Chromium; передача DTLS/SRTP, TURN и счётчики медиа реальны.
Нужны детали реализации?
Архитектура, code-map, API, проверка, развёртывание и реальные измерения.
Открыть документацию →Скачать материалы ↓