Голосовые ИИ-агенты часто перебивают собеседника или отвечают невпопад. Причина — не в скорости модели, а в том, как система определяет конец реплики. Замер на Yandex Realtime API показал: из 1275 мс задержки перед ответом 1200 мс — это ожидание таймера тишины, и только 75 мс — работа самой модели. Автор эксперимента предлагает детектор на правилах русского синтаксиса, который сокращает задержку до 316 мс.
Речевые API определяют конец реплики через VAD — детектор голосовой активности — с порогом молчания. У OpenAI Realtime это параметр silence_duration_ms, у Яндекса — аналогичный, у коммерческих платформ — ручка в интерфейсе с подписью «Пауза для завершения речи». Логика простая: замолчал на N миллисекунд — значит, договорил. Проблема в том, что человек молчит в двух разных ситуациях: когда закончил мысль и когда подбирает слово. Акустически это одно и то же, различить их по громкости невозможно — различие лежит в том, что было сказано до паузы.
| silence_duration_ms | Первый звук ответа | Что агент расслышал |
|---|---|---|
| 400 | 3 мс | только «здравствуйте» |
| 800 | 5 мс | только «здравствуйте» |
| 1200 | 1275 мс | всю фразу целиком |
Автор провёл замер на синтезированной речи, чтобы исключить влияние дикции. Фраза — типовая для входящего звонка: «Здравствуйте!» → пауза → «Подскажите, шкаф Норд есть в наличии и когда сможете привезти?». Речь подавалась в Yandex Realtime API кусками по 20 мс, менялся только silence_duration_ms. Результаты: при пороге 400 мс агент отвечал через 3 мс, но слышал только «здравствуйте» — вопрос про шкаф терялся. При 800 мс — аналогично. При 1200 мс фраза распознавалась целиком, ответ приходил по существу, но ценой секунды с четвертью тишины. При этом даже на 1200 мс обрывы случались примерно через раз: из семи прогонов три ответа были «Здравствуйте, чем могу помочь?» вместо ответа по делу.
При пороге 400 мс агент отвечает на приветствие, не слыша вопроса: VAD срабатывает в паузе после «Здравствуйте!».
Главная цифра: 1275 мс задержки минус 1200 мс порога = 75 мс на распознавание, генерацию ответа и синтез речи. Речевая модель работает практически мгновенно. Всё, что собеседник воспринимает как «система тормозит», — это ожидание секундомера, которое задаёт разработчик. Отсюда вывод: оптимизировать здесь нечего. Ни более быстрая модель, ни более близкий регион, ни стриминг не дадут ничего, пока в схеме стоит фиксированный таймер. Задержку создаёт не вычисление, а решение о том, что человек договорил.
Решение автора — детектор на правилах русского синтаксиса. Он не заменяет таймер, а решает, какой таймер взять: договорил → короткое ожидание (250 мс); не договорил → длинное (1400 мс); непонятно → среднее (700 мс). Правила ловят висящие служебные слова («мне нужно два шкафа и»), инфинитив без дополнения («сколько будет стоить»), заходы и приветствия («здравствуйте», «скажите пожалуйста»), заминки («ну это самое»), диктовку номера (семь и более числительных подряд — телефон назван целиком) и разговорные хвосты вопроса («это робот что ли»).
В результате задержка сокращается с 1200 мс до 316 мс, а число обрывов — с 38 до 2. Детектор работает на правилах, без обучения и без GPU, всё воспроизводимо. Автор подчёркивает: подход применим не только к Yandex API, но и к OpenAI Realtime, где параметр silence_duration_ms настраивается аналогично. Для русскоязычных голосовых ассистентов это практичный способ улучшить диалог без замены модели.

