Модуль v.0 · Урок 2
Анатомия звонка: конвейер против speech-to-speech
Чему вы научитесь
- Называть все звенья голосового агента и понимать роль каждого
- Различать классический конвейер и единую speech-to-speech модель
- Объяснять, что такое латентность и turn-taking
- Понимать, почему порог около 800 мс — граница «живого» диалога
- Выбирать словарь, на котором говорит весь остальной трек
Звонок как конвейер
Классический голосовой агент собран из нескольких звеньев, через которые последовательно проходит звук.
flowchart LR
A[Микрофон / телефон] --> B[VAD: детектор речи]
B --> C[STT / ASR: речь в текст]
C --> D[LLM: понимание и ответ]
D --> E[TTS: текст в речь]
E --> F[Динамик / телефон]
- VAD (детектор голосовой активности) понимает, когда человек начал и закончил говорить.
- STT / ASR превращает речь в текст.
- LLM понимает запрос и формирует ответ текстом.
- TTS озвучивает ответ голосом.
- Транспорт доставляет звук: по телефонной сети (SIP), через браузер (WebRTC) или сырым аудиопотоком (WebSocket).
Плюс конвейера — контроль и дешевизна: каждое звено можно выбрать отдельно и поменять. Минус — задержки и ошибки накапливаются на каждом стыке.
Единая speech-to-speech модель
В 2024–2026 годах отрасль сдвинулась к другому подходу: единым realtime моделям, которые принимают звук и отдают звук напрямую, без распайки на STT, LLM и TTS.
Так работают облачные OpenAI Realtime, Google Gemini Live и xAI Grok Voice, а в открытых весах в 2026 году к ним приблизились мультимодальные модели семейства Qwen2.5-Omni и Qwen3-Omni (arXiv:2603.05413). Они дают паузы, интонацию, перебивание и эмоциональную окраску, потому что не теряют звуковую информацию между звеньями.
| Подход | Сильные стороны | Слабые стороны |
|---|---|---|
| Конвейер (VAD-STT-LLM-TTS) | Контроль, дешевизна, замена любого звена | Накопление задержки и ошибок, менее естественно |
| Единая speech-to-speech | Естественность, паузы, barge-in, простота | Меньше контроля, привязка к вендору, цена |
Обе архитектуры сегодня живут параллельно. Выбор между ними — тема отдельного урока v.2/03.
Латентность и turn-taking
Главный инженерный вызов голосового агента — не «ум» модели, а задержка и естественная передача хода реплики (turn-taking).
Латентность — это время от момента, когда человек закончил говорить, до момента, когда агент начал отвечать. Turn-taking — это умение не перебивать собеседника и вовремя вступать в разговор.
Если агент думает дольше секунды, человек начинает говорить снова, переспрашивает или кладёт трубку. Поэтому в голосе борьба за миллисекунды важнее, чем борьба за пару баллов в бенчмарке модели.
Почему потоковый конвейер вдвое быстрее пошагового: буфер предложений
В наивном пошаговом (turn-based) конвейере каждое звено ждёт, пока предыдущее закончит работу целиком: сначала полностью распознаётся реплика, затем LLM генерирует весь абзац ответа, и только после этого TTS озвучивает его. По замерам открытого учебника Building Enterprise Realtime Voice Agents from Scratch (arXiv:2603.05413) суммарное ожидание в таком режиме составляет около 400 мс (STT) + 800 мс (LLM) + 400 мс (TTS) = 1600 мс — для живого телефонного разговора это провал.
В потоковом (streaming) конвейере звенья работают внахлёст, а ключевым связующим звеном между LLM и TTS выступает буфер предложений (Sentence Buffer в кастомных сборках или SentenceAggregator в Pipecat):
- Как только STT отдаёт подтверждённую фразу (
is_final=True), LLM начинает выдавать ответ по одному токену через поток Server-Sent Events (SSE). - Буфер предложений копит токены до первой границы предложения и немедленно отправляет первое готовое предложение в потоковый TTS, пока LLM параллельно дописывает второе и третье.
- Первые звуковые чанки уходят абоненту уже через
400 мс (STT) + 300 мс (первое предложение LLM) + 200 мс (TTFB синтеза) ≈ 755–900 мс(arXiv:2603.05413). Остальные предложения синтезируются фоном, пока человек слушает первое.
Чтобы буфер предложений не рвал речь на куски и не создавал микропауз, в боевом коде соблюдают четыре правила (arXiv:2603.05413, раздел 4.5):
- Граница по знакам конца предложения: разрезать поток по точке, восклицательному или вопросительному знаку, за которым идёт пробел или перенос строки.
- Фильтр ложных точек: не резать строку на сокращениях (
г.,ул.,т.д.,руб.,Dr.,Mr.) и десятичных дробях (3.14,10.5). - Минимальная длина фрагмента: не отправлять в TTS куски короче 10 символов (например, одиночное «Да.»), чтобы синтезатор не задыхался на крошечных запросах и сохранял слитную интонацию.
- Принудительный сброс (flush): когда поток токенов от LLM завершился, сразу отправить остаток буфера в TTS, даже если в конце не было точки.
От простого VAD к умному определению пауз (Audio Turn Detector)
Детектор голосовой активности (например, компактная модель Silero VAD весом 2 МБ, обрабатывающая 32-миллисекундный чанк звука менее чем за 1 мс на CPU — arXiv:2603.05413) управляет конечным автоматом состояний звонка:
IDLE → LISTENING— абонент начал говорить;LISTENING → PROCESSING— зафиксирована тишина заданной длины (например, 550–700 мс), реплика уходит в обработку;PROCESSING → SPEAKING— агент озвучивает ответ;SPEAKING → INTERRUPTED → LISTENING— абонент перебил агента (barge-in): воспроизведение мгновенно сбрасывается, а микрофон снова слушает человека.
Но у чистого VAD есть фундаментальная слабость: он слышит только тишину и не понимает смысла и интонации. Если клиент скажет: «Секунду, сейчас посмотрю номер договора…» и замолчит на полторы секунды, обычный VAD решит, что реплика окончена, и агент бесцеремонно перебьёт собеседника.
В 2025–2026 годах поверх VAD ставят семантический аудиодетектор конца реплики (например, встроенный TurnDetector в LiveKit Agents — документация LiveKit). В отличие от старых текстовых детекторов, аудиомодель анализирует сырой звук напрямую — одновременно учитывая смысл слов, высоту тона, темп и незавершённую интонацию (даже до того, как STT вернул текст):
| Параметр | Обычный VAD по тишине | VAD + Audio Turn Detector |
|---|---|---|
| Реакция на паузу «Дайте подумать…» | Перебивает через 500–700 мс тишины | Ждёт до max_delay (2,5 с), понимая, что мысль не закончена |
Минимальная задержка после явной точки (min_delay) | 0,5 с (LiveKit Docs) | 0,3 с — агент отвечает быстрее, когда интонация явно завершена |
Максимальное ожидание при заминке (max_delay) | 3,0 с | 2,5 с с настраиваемым порогом уверенности (unlikely_threshold) |
| Где крутится модель | Локально на CPU (Silero VAD, менее 1 мс) | Облачная v1 (высокая точность) с автопереключением на локальную CPU-модель v1-mini при таймауте >1 с |
Именно связка быстрого VAD (для мгновенного перебивания barge-in) и умного детектора конца реплики (чтобы не перебивать задумавшегося человека и быстрее отвечать на короткие вопросы) даёт ощущение разговора с живым оператором.
Где здесь LLM
«Мозг» агента — это языковая модель. В конвейере вы вольны взять любую: Claude Opus 5 или Sonnet 5, GPT-5.6 (Sol и Terra), Gemini 3.6 Pro или Gemini 4 Argon, Grok 4.20, а из открытых и доступных в РФ без западного биллинга моделей — DeepSeek V4.1 Flash, Qwen 3.8, GLM-5.2 или Kimi K2.6.
В единой speech-to-speech архитектуре модель встроена в API вендора и отдельно её не поменять. Это и есть та самая плата за естественность: вы получаете готовый голос, но теряете свободу выбора «мозга».
Следующий урок
Первый голосовой агент на готовой платформе — соберём рабочий демо-звонок без кода за один урок.