Прерывания голосового агента в полнодуплексном режиме: управление и восстановление

Редакция OdiRouter

Прерывания работы голосовых агентов в полнодуплексном режиме представляют собой проблему управления еще до того, как станут проблемой моделирования. Пользователь может заговорить, пока ассистент воспроизводит аудио, исправить запрос на середине фразы или сказать «стоп» после подготовки вызова инструмента. Для таких моментов приложению нужна политика, чтобы останавливать нужную работу, сохранять нужный контекст и не представлять ответ, который больше не актуален.

OdiRouter может обеспечить границу доступа к модели в этой архитектуре. Начните с OdiRouter introduction, чтобы настроить доступ к API и определить идентификаторы моделей. Оставьте захват с микрофона, воспроизведение, решения о ходе диалога и безопасность действий в ведении вашего приложения. API модели может предоставлять рассуждения и сгенерированный вывод, но не может решать, как ваш интерфейс должен обрабатывать аудиофрагмент или ожидающее бизнес-действие.

Рассматривайте обнаружение прерываний как решение, принимаемое политикой

Голосовая активность — это сигнал, а не команда. Короткий звук может быть шумом в помещении, аудио ассистента, просачивающимся через динамик, подтверждающей репликой вроде «да» или фактическим запросом на переход хода пользователю. Полнодуплексная система должна сопоставлять аудиоданные с состоянием диалога, прежде чем прерывать саму себя.

Зафиксируйте состояния, которые распознаёт ваш продукт. Обычно достаточно небольшого набора:

Текущее состояние

Входящий сигнал

Безопасное действие по умолчанию

Воспроизводится аудио ассистента

Чётко различимая речь пользователя

Остановить локальное воспроизведение и начать оценку прерывания

Ассистент генерирует текст или аудио

Пользователь говорит «стоп» или начинает новый запрос

Отменить поток ответа и пометить незавершённый ответ как прерванный

Инструмент готовит действие с побочным эффектом

Исправление от пользователя

Приостановить или отменить действие, пока исправленное намерение не будет подтверждено

Действие инструмента уже выполнено

Прерывание пользователем

Объясните зафиксированный результат и предложите следующее безопасное действие

Звук с низкой уверенностью распознавания

Возможное эхо или фоновый шум

Продолжайте прослушивание, не отменяя активный ответ

Маркировка вашего продукта может отличаться. Важно то, что у каждого государства есть свой владелец и определенная процедура передачи прав. Один и тот же аудиосигнал не должен независимо друг от друга приостанавливать воспроизведение, удалять стенограмму и повторять вызов инструмента. При наличии задержки эти пути могут расходиться.

Создайте слой управления звуком вне вызова модели.

Уровень управления звуком отвечает за захват микрофона, воспроизведение через динамики, буферизацию и локальную синхронизацию. Он должен предоставлять контроллеру диалога компактный поток событий, например speech_started, speech_stable, speech_ended, playback_stopped и network_delayed.

Браузерные приложения могут проверять ограничения захвата медиаданных, такие как echoCancellation, noiseSuppression, sampleRate и latency, если браузер их поддерживает. Проверьте значение MDN MediaTrackConstraints reference, вместо того чтобы предполагать, что данная настройка доступна или эффективна на каждом устройстве. Для развертываний WebRTC полезным справочным материалом для измерений, связанных с джиттером, потерей пакетов и буферизацией, является WebRTC statistics specification.

Для эха необходима явная стратегия. Если вывод ассистента попадает в микрофон, детектор может ошибочно принять его за новую реплику пользователя. Поведение устройств различается, поэтому тестируйте как с динамиками, так и с наушниками. Сохраняйте небольшую временную шкалу воспроизведения, чтобы контроллер мог сопоставлять обнаруженный звук с недавним аудио ассистента, а не считать каждое наложение намерением пользователя.

Отменяйте по порядку и сохраняйте журнал аудита

Как только прерывание принято, отменяйте по порядку. Сначала остановите слышимое воспроизведение. Затем остановите или отбросьте оставшиеся фрагменты ответа. Далее уведомите все ожидающие рабочие процессы инструментов. Наконец, обновите видимую расшифровку и состояние. Это снижает вероятность того, что пользователь услышит ответ после того, как интерфейс сообщит о его отмене.

onAcceptedInterruption(event):
  stopLocalPlayback()
  cancelActiveResponse(event.turnId)
  markTranscriptTurnInterrupted(event.turnId)
  pausePendingToolWork(event.turnId)
  requestClarificationOrNewTurn(event)

Это псевдокод, а не контракт API OdiRouter. Адаптируйте его к своему потоковому клиенту, средству запуска инструментов и пользовательскому интерфейсу. Идентификатор отмены должен поступать в каждый компонент, который всё ещё может выводить результат или фиксировать выполненную работу.

После отмены сохраняйте две записи. В пользовательской записи должно быть указано, что предыдущий ответ был прерван. Операционная запись должна фиксировать тип события, время, идентификатор активного хода, статус инструмента и причину принятого решения. Не записывайте ненужные аудиоданные или конфиденциальный контент исключительно для отладки. Для регулируемых или высокорисковых действий требуйте подтверждения перед выполнением и сделайте путь эскалации видимым для пользователя.

Отделяйте отмену ответа от отката действия

Остановку речи можно отменить. Завершённое внешнее действие может быть необратимым. Определите для каждой операции инструмента границу фиксации:

  • До этой границы прерывание пользователем может отменить ожидающую работу.

  • На границе зафиксируйте, была ли операция завершена, завершилась сбоем или требует сверки.

  • После достижения границы не следует утверждать, что действие было отменено, если это не подтверждено базовой системой.

Например, процесс бронирования может подготавливать варианты, пока помощник говорит. Если пользователь прервёт ввод до подтверждения, черновик следует удалить. Если подтверждение уже инициировало запись, запросите результат, прежде чем предлагать исправление. Тот же принцип применим к заявке в службу поддержки, запросу на оплату или команде устройства.

Четко обозначьте границы API модели.

После принятия решения о прерывании, контроллер разговора может отправить измененный ход выбранной модели. При выборе конечной точки для вашей нагрузки ознакомьтесь с текущим OdiRouter model catalog, а затем сверяйте сведения о доступности и интеграции с официальной документацией. Не закладывайте жёстко в поведение продукта имя модели, ожидание latency или возможности голоса, не проверив их для используемой вами конечной точки.

Для API-интеграции полезен краткий пакет контекста: подтверждённый текст пользователя, маркер прерывания, последнее стабильное состояние помощника и любой результат инструмента, пересёкший границу фиксации. В него не обязательно включать каждый отброшенный аудиофрагмент. Более чистый контекст упрощает объяснение того, почему следующий ответ изменил направление.

Тестируйте поведение при прерываниях как систему

Тестируйте весь цикл, а не только распознавание речи. Включите следующие условия:

  • Пользователь начинает говорить поверх первого слова аудиосообщения помощника.

  • Пользователь говорит «стоп» после буферизации аудио, но до фиксации действия инструмента.

  • Воспроизведение помощника проникает в микрофон.

  • Фоновый голос, телевизор или уведомление создают ложное срабатывание.

  • Сеть задерживает аудиокадр или сообщение об отмене.

  • Пользователь делает паузу, начинает фразу заново или меняет запрос, пока помощник говорит.

  • Инструмент возвращает результат после отмены и пытается обновить интерфейс.

Отслеживайте несколько показателей для каждого тестового запуска: принятые прерывания latency, долю ложных прерываний, отменённые фрагменты ответа, которые всё же были воспроизведены, и операции инструментов, потребовавшие сверки. Сопоставляйте эти записи с краткими отчётами об инцидентах с учётом конфиденциальности, чтобы команда могла отличить ошибку аудио от ошибки управления состоянием.

Начните с документированной интеграции

Первой версии не нужна сложная машина состояний, однако ей необходимы чётко определённая ответственность и безопасные значения по умолчанию. Начните с OdiRouter documentation, проверьте актуальные варианты моделей в model catalog и используйте OdiRouter pricing, когда будете готовы оценить интеграцию. Выстраивайте политику прерываний с учётом ваших пользователей, инструментов и границ риска.

Источники

#голосовой агент врывается#обнаружение голосовой активности#отмена ответа#прерывания работы полнодуплексного голосового агента