Голос в реальном времени vs. пакетная обработка — телефонный ИИ-агент это не чат-бот
Когда поставщик предлагает вам «телефонного ИИ-агента», задайте ему один вопрос: «Какова ваша сквозная задержка между окончанием речи пользователя и началом ответа?»
Если ответ превышает 1,5 секунды — это не телефонный агент. Это чат-бот с приклеенным спереди модулем ASR / TTS.
Правило 800 мс
Человек по телефону терпит паузу после своего вопроса. Но у этой паузы есть порог: свыше 800 мс собеседник кажется «зависшим». На 1 500 мс звонящий говорит «алло?». На 3 000 мс он вешает трубку, решив, что проблема со связью.
Целевой показатель для серьёзного голосового агента, таким образом: менее 800 мс между окончанием речи и первым слышимым байтом ответа.
Разложим это на составляющие.
Бюджет времени в деталях
[речь пользователя]──▶[ASR streaming]──▶[LLM]──▶[TTS streaming]──▶[аудио на выход]
~150ms ~80ms ~? ~250ms ~50ms
Из ~800 мс доступного времени около 270 мс расходуется на ASR + TTS + транспорт. Остаётся 530 мс для LLM — включая время prefill, рассуждения и генерацию первого токена.
Следствия:
- GPT-4 Turbo без стриминга: ~2 000 мс на генерацию ответа в 200 токенов. Исключено.
- GPT-4o со стримингом: ~400 мс до первого токена в удачные дни, ~800 мс в неудачные. Приемлемо, но впритык.
- Claude Haiku со стримингом: ~250 мс до первого токена. Комфортно.
- Llama 3 8B, обслуживаемая vLLM: ~150 мс до первого токена. Отлично (и приватно).
Серьёзная голосовая архитектура, следовательно, требует:
- Всё в режиме стриминга — ASR, LLM, TTS. Ни одного звена в пакетном режиме.
- Модель LLM выбирается по TTFT (time to first token), а не по баллу MMLU.
- TTS начинает говорить на первом полученном токене, а не после завершения полного ответа.
Barge-in
В текстовом канале пользователь ждёт, пока бот закончит. По телефону он перебивает. Три раза из пяти в естественных разговорах.
Голосовой агент, который не умеет обрабатывать прерывание, кажется «роботизированным» — он продолжает говорить, пока пользователь пытается его перебить. Это невыносимо и сразу же выдаёт плохо построенного бота.
Технически barge-in требует:
- TTS немедленно останавливается, когда ASR обнаруживает исходящий голосовой сигнал от пользователя.
- LLM отбрасывает незавершённый ответ (без возражений).
- Буфер исходящего аудио мгновенно очищается (иначе слышен остаточный полуслог).
- История разговора отмечает, что ответ не был услышан полностью, — чтобы случайно не повторить его.
Это техническая деталь, которая меняет всё в ощущении от взаимодействия.
Работа с неопределённостью
По телефону ASR регулярно ошибается. Там, где текстовый чат-бот всегда получает точный текст, набранный пользователем, голосовой агент получает часто несовершенную транскрипцию.
Работающие стратегии:
- Запрашивать подтверждение по критичным позициям (номер дела, сумма, необычная фамилия). Не систематически — это становится невыносимым.
- Не доверять LLM слепо, когда ASR неоднозначен. Если полученная фраза — «Я хочу расторгнуть договор» с низким показателем уверенности, лучше спросить «Вы имели в виду расторгнуть ваш договор?», чем запускать процедуру расторжения.
- Пресекать отклонения — агента, уходящего от сценария, следует возвращать узлом condition / operator, а не промптом, которого «должно хватить».
Телефон — это тоже стек
Помимо ИИ, телефонный агент требует:
- SIP-транка от оператора связи (Twilio, Voxbone, OVH, Sewan…).
- Медиашлюза (LiveKit-SIP, FreeSWITCH, Asterisk), который говорит на SIP со стороны оператора и на WebRTC со стороны платформы.
- Транскрайбера, устойчивого к шуму, акцентам и перекрывающимся голосам.
- Синтезатора, корректно произносящего имена собственные, числа и даты.
Ни один из этих элементов не тривиален. Все они взаимодействуют между собой.
Что берёт на себя betool
Голосовая архитектура betool — LiveKit + LiveKit-SIP + выделенный worker + каскадный стриминг LLM — покрывает вышеперечисленные требования из коробки. Вы сохраняете контроль над:
- SIP-транком (ваш оператор, ваши номера).
- Моделями (BYOK или приватные модели).
- Параметрами (целевая задержка, агрессивность barge-in, откат на человеческий голос).
Вы не настраиваете сантехнику реального времени — это задача платформы. Вы проектируете разговор, что и является настоящей бизнес-задачей.