Отрицательная задержка voice AI: часы браузера и сервера

Если отчёт показывает отрицательную сетевую задержку, сначала проверьте часы. Разность timestamp браузера и timestamp сервера не обязательно измеряет передачу: устройства могут иметь разное абсолютное время. Переключение часов или неверная единица измерения дополнительно искажают результат.

Отделите событие от длительности

В учебном примере сервер отправил аудио с отметкой 10:00:00.500, а браузер зарегистрировал получение в 10:00:00.300. Получилось минус двести миллисекунд. Это не доказательство мгновенной передачи: браузерные часы могли отставать. Часовой пояс в отображении тоже нельзя путать с единым представлением времени.

ИзмерениеОснование
Вызов TTS на сервереНачало и конец одним локальным монотонным таймером
От получения звука до старта в браузереОдин локальный таймер браузера
Полный клиентский цикл запросаНачало и конец на клиенте
Односторонняя передача между узламиСогласованные часы и оценка погрешности

Используйте монотонный таймер для интервала

Для интервалов внутри Python-процесса подходит time.monotonic(): его опорная точка не предназначена для календарной даты, поэтому сохраняют разность двух чтений. Нельзя отправить одно такое значение другому устройству и вычесть его из чужого таймера. В браузере похожую локальную задачу решает performance.now(); точность и доступность зависят от среды.

Для склейки событий храните идентификатор звонка, реплики, этап и источник отметки. Явно обозначайте единицы. Число в секундах и число в миллисекундах могут выглядеть правдоподобно после неверного преобразования, особенно на графике с автоматической шкалой.

Проверьте измерение искусственным сдвигом

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

Полный клиентский интервал включает транспорт и локальную обработку; его нельзя без дополнительных данных объявить чистой сетевой задержкой. В отчёте показывайте, какая часть измерена непосредственно, какая вычислена, а какая неизвестна. Такой контракт помогает сравнивать версии без ложного улучшения из-за смены машины или часов.

Этот разбор подготовлен Latorn. Если вы уже знаете основы Python и API и хотите практиковать такие решения системно, сравните программу платного курса Voice AI Agents PRO со своей задачей. Открытый пример выше можно проверить самостоятельно; он не заменяет полный проект.

Технические источники: Python monotonic clock, MDN performance.now. Учебные ситуации и числа в статье придуманы для объяснения механизма.

Следующий шаг: Голосовые AI-агенты: диагностика диалога и аудио. По смежным вопросам: Аудиоочередь voice AI растёт: как найти backpressure, Обрыв звонка voice AI: как восстановить статус операции.