Работающее демо · подготовлено 7 сентября 2026

WebRTC / Voice AI

Короткая голосовая или текстовая сессия через собственную WebRTC-инфраструктуру. Транспорт и LangGraph работают реально, ASR/LLM/TTS заменены обозначенными моками.

История кода: с октября 2025. Публичный runtime и собственный TURN: 7 сентября 2026.Версия b16c978814 кадров интерфейса

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 / Проверка

Что попробовать

  1. Подключитесь без микрофона и отправьте echo: ответ проходит исходный граф.
  2. Проверьте шаблонный ответ, таймаут LLM и успешный запрос после отмены.
  3. Разрешите микрофон, дождитесь аудиокадров на сервере и примените мок ASR.
  4. Откройте 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, проверка, развёртывание и реальные измерения.

Открыть документацию →Скачать материалы ↓