Перейти к содержимому
Оформить зарубежную карту за $49 Перейти
>AISTUDY_
AUTHORСвежий выпуск №031 → Git и конвейер для агента

Модуль v.2 · Урок 3

Конвейер против realtime: когда что выбирать

25 мин Проверено 22 октября 2026
v.2 / Урок 3 из 3

Чему вы научитесь

  • Сводить выбор архитектуры к нескольким понятным критериям
  • Понимать, когда конвейер выигрывает у realtime и наоборот
  • Пользоваться деревом решений для своего сценария
  • Видеть гибридные варианты между двумя крайностями
  • Знать готовые фреймворки оркестрации (LiveKit Agents, Pipecat, TEN)
  • Связывать выбор с приватностью и доступностью в РФ

Две архитектуры, один вопрос

В уроке v.0/02 мы развели два подхода: классический конвейер (VAD, STT, LLM, TTS отдельными звеньями) и единую speech-to-speech модель. Теперь решаем, что выбрать под задачу.

Спойлер: универсального ответа нет. Но есть несколько критериев, которые почти всегда дают однозначный ответ для конкретного сценария.

Критерии выбора

КритерийСклоняет к конвейеруСклоняет к realtime
Естественность диалогаДостаточно деловойНужны паузы, интонация, эмоции
Контроль над звеньямиХочу менять STT/LLM/TTS отдельноГотов взять готовый стек вендора
Цена при объёмеНужна экономия на масштабеГотов платить за простоту
Приватность и данныеДанные нельзя в облакоОблако приемлемо
Язык и локализацияНужен особый STT/TTSХватает того, что даёт вендор
Скорость запускаЕсть время на сборкуНужно быстро

Если большинство галочек слева — берите конвейер. Если справа — единую realtime-модель.

Дерево решений

flowchart TD
    A{Нужна максимальная естественность?} -->|Да| B{Облако и привязка к вендору ок?}
    A -->|Нет| C{Данные можно отдавать в облако?}
    B -->|Да| R[Единая realtime-модель]
    B -->|Нет| P[Конвейер с локальными STT/TTS]
    C -->|Да| D{Важна цена на большом объёме?}
    C -->|Нет| P
    D -->|Да| P
    D -->|Нет| R

Дерево упрощает реальность, но задаёт правильный порядок вопросов: сначала естественность, потом приватность, потом цена.

Три уровня речевых архитектур и гибрид Thinker-Talker

В открытом исследовании и 9-главном практикуме Salesforce AI Research Building Enterprise Realtime Voice Agents from Scratch (arXiv:2603.05413) все современные речевые системы делят на три архитектурных уровня в зависимости от того, насколько нативно они работают со звуком:

  • Уровень 1 — чистые речевые модели (Native Speech-to-Speech): модель «думает» звуковыми токенами без обязательного текстового слоя. Главный открытый представитель — Moshi (7B параметров, полнодуплексный режим, задержка около 200 мс на GPU NVIDIA L4). Архитектурно это самый быстрый вариант, но у таких моделей слабее логическое рассуждение и нет надёжного вызова внешних функций (function calling), без которого бизнес-агент не запишет клиента к врачу и не проверит статус заказа.
  • Уровень 2 — текстовая LLM с нативным аудиовходом и аудиовыходом (Thinker-Talker): языковая модель объединена с аудиоэнкодером и декодером речи. Мышление идёт в текстовом пространстве (Thinker), а синтез речи — в встроенном речевом декодере (Talker). Сюда входят Qwen3-Omni (30B параметров MoE, всего 3B активных на токен), Qwen2.5-Omni (7B), GLM-4-Voice (9B), Kimi-Audio (7B) и Step-Audio (130B). При этом Qwen3-Omni стала первой открытой моделью второго уровня с нативной поддержкой вызова инструментов через XML-теги <tool_call>.
  • Уровень 3 — каскадный потоковый конвейер (STT → LLM → TTS): отдельные специализированные модели распознавания, генерации текста и синтеза, связанные потоковой передачей.

Инженеры Salesforce AI Research замерили реальную задержку до первого звука (TTFA — Time-to-First-Audio) на одной видеокарте NVIDIA H200 и в облаке (arXiv:2603.05413, таблицы 3–5):

КонфигурацияЗадержка до первого звука (TTFA)Вызов функций (Tools)Полный self-hostВ чём инженерный нюанс
Qwen2.5-Omni-7B (попредложенческий стрим)~13 200 мс (RTF 1,94×)НетДаДиффузионный декодер Talker генерирует 1 с звука почти 2 с — для живого звонка не годится
Qwen3-Omni-30B-A3B (локально через Transformers)~145 694 мс (4,6 ток/с)ДаДаБэкенд HuggingFace Transformers в 36 раз медленнее vLLM на MoE-архитектуре
Qwen3-Omni в облаке (DashScope Realtime API)~702 мс (лучший 685 мс)ЧастичноНетБыстрый стриминг за счёт проприетарного сервера аудиодекодера в облаке Alibaba
Двухшаговый гибрид: Qwen3-Omni Thinker (vLLM) + внешний TTS~736 мс (516 мс + 220 мс)ДаДа (с локальным TTS)Модуль Thinker на vLLM 0.13+ выдаёт 168 ток/с напрямую из звука и убирает отдельное звено STT
Каскадный конвейер (Deepgram Nova-3 + vLLM Qwen2.5-7B + ElevenLabs)~755 мс (лучший 729 мс)ДаДаПолный контроль над каждым звеном, предсказуемый function calling

Отсюда главный практический вывод на 2026 год: пока для речевого декодера Talker в Qwen3-Omni нет открытого быстрого сервера уровня vLLM, для полностью локального (self-hosted) корпоративного агента с вызовом функций выбор стоит между классическим трёхшаговым конвейером (STT → LLM → TTS, ~755 мс) и двухшаговым гибридом (Qwen3-Omni Thinker на vLLM → быстрый TTS, ~736 мс), где мультимодальная модель слушает голос напрямую без отдельного STT.

Гибрид: лучшее из двух миров

В коммерческих проектах границы между подходами размываются ещё сильнее:

  • Двухшаговый конвейер (Audio-LLM + TTS). Вместо связки STT + LLM звук подаётся сразу в мультимодальную модель (Qwen3-Omni Thinker на локальном vLLM за 516 мс или облачный Gemini Flash), а текстовый поток озвучивается быстрым кастомным TTS с клонированным голосом бренда.
  • Realtime для разговора, конвейерные инструменты вокруг. Speech-to-speech ведёт диалог, а транскрипцию, аналитику и запись делают отдельные сервисы.
  • Разные сценарии — разные архитектуры. Простой FAQ-агент на дешёвом конвейере, сложные продажи — на realtime.

На чём собирать: фреймворки оркестрации

Собирать конвейер или гибрид с нуля не нужно — есть зрелые open-source фреймворки, которые скрепляют звенья (VAD, STT, LLM, TTS или realtime-модель), добавляют телефонию, прерывания и управление сессией:

  • LiveKit Agents (github) — самый популярный фреймворк на WebRTC-транспорте; включает встроенный аудиодетектор конца реплики (TurnDetector), подавление фоновых голосов (BVC), декоратор @function_tool и адаптеры отказоустойчивости (FallbackAdapter).
  • Pipecat от Daily (github) — гибкий фрейм-ориентированный конвейер с 68+ интеграциями, где процессор SentenceAggregator автоматически режет поток токенов LLM на предложения перед отправкой в TTS.
  • TEN — модульный open-source фреймворк для мультимодальных и речевых агентов.

По замерам Hamming AI на 4 млн звонков готовые фреймворки дают end-to-end задержку порядка 750–950 мс (требует проверки под вашу нагрузку).

Практикум: отказоустойчивый агент на LiveKit с умным определением пауз и резервированием

В реальном продакшене у голосового конвейера две главные беды: агент перебивает задумавшегося клиента на середине фразы, а при минутном сбое или лимите (Rate Limit) у провайдера STT/LLM/TTS звонок обрывается тишиной.

Ниже — рабочий паттерн боевого агента (адаптированный из практических курсов LiveKit & DeepLearning.AI и livekit-voice-agent-course-yt), который решает обе проблемы сразу:

  1. FallbackAdapter на каждом звене (STT, LLM, TTS): если основной провайдер вернул ошибку или не ответил вовремя, сессия на лету без обрыва звонка переключается на резервную модель.
  2. Семантический детектор конца реплики (TurnDetector / MultilingualModel): слушает интонацию и смысл поверх Silero VAD, чтобы не перебивать человека на паузах «сейчас вспомню…».
  3. Подавление фоновых голосов (noise_cancellation.BVC()): отсекает голоса коллег в офисе, телевизор на фоне и эхо динамика, чтобы они не вызывали ложный barge-in.

Отказоустойчивый голосовой агент на LiveKit Agents с FallbackAdapter и TurnDetector

python
Нажмите на строку — увидите объяснение

Если собираете конвейер с нуля: 9 шагов и 5 неочевидных граблей

Когда вам нужен полный контроль без внешних фреймворков (например, под закрытый контур компании), архитектура самописного потокового агента складывается из девяти последовательных модулей (руководство Salesforce AI Research, arXiv:2603.05413):

  1. Потоковый STT (deepgram_streaming.py или локальный ASR): постоянный WebSocket, куда микрофон шлёт 20-миллисекундные чанки звука (PCM int16, 16 кГц, моно — ровно 640 байт на чанк). Промежуточные результаты (is_final=False) показываем в интерфейсе, но в LLM отправляем только финальные (is_final=True).
  2. Потоковая LLM с вызовом функций (vllm_function_calling.py): локальный сервер vLLM с OpenAI-совместимым /v1/chat/completions и stream=True (P50 до первого токена — 337 мс на Qwen2.5-7B-Instruct).
  3. Потоковый TTS (elevenlabs_streaming.py / локальный Orpheus TTS или CosyVoice): вызов потокового метода stream(), отдающего первые байты аудио за 200–220 мс (в 10–20 раз быстрее реального времени).
  4. Буфер предложений (sentence_buffer.py): склейка токенов LLM до точки/вопроса (минимум 10 символов, фильтр сокращений) и параллельная отправка первого предложения в TTS, пока LLM генерирует следующие.
  5. Двунаправленный WebSocket-сервер (server.py на FastAPI): бинарные фреймы 16 кГц PCM от клиента к серверу, бинарные фреймы 24 кГц PCM от сервера к клиенту плюс управляющие JSON-сообщения (transcript, agent_speaking, agent_done).
  6. Конечный автомат VAD (vad_basics.py на Silero VAD): отслеживание переходов IDLE → LISTENING → PROCESSING → SPEAKING и мгновенный сброс очереди воспроизведения при перебивании (INTERRUPTED).
  7. Браузерный клиент на AudioWorklet (app.js): захват микрофона на частоте браузера с нарезкой по 20 мс в отдельном аудиопотоке (без блокировки UI), воспроизведение через очередь с линейной интерполяцией частоты и серверный echo gate (приглушение входа микрофона, пока говорит агент).
  8. Рекурсивный цикл инструментов (agent.py, tools.py): если LLM вместо текста вернула tool_calls (например, check_availability → schedule_appointment), агент выполняет цепочку функций, добавляет ответы в историю и повторно вызывает LLM до получения финального текста для озвучки.
  9. Сквозной бенчмарк (benchmark.py): замер P50/Min/Max по каждому звену отдельно и в перекрывающемся потоке.

Как не ошибиться

Главная ошибка — выбирать архитектуру по моде, а не по сценарию. «Все берут realtime, возьму и я» приводит к привязке к вендору там, где хватило бы дешёвого конвейера, и наоборот.

Сделайте проще: пройдите дерево решений с реальными ответами про свой бизнес. В большинстве случаев оно даст ясный ответ за минуту.


Следующий урок

SIP, WebRTC и PSTN: как звонок доходит до агента — разберём транспортный слой телефонии.