Голосовой ИИ-агент Cloudflare: как найти причину задержки
Разбираем turnmetrics в Cloudflare: по этапам и исходам находим причину задержки или молчания голосового ИИ-агента — от транскрибации до TTS.

Когда голосовой ИИ-агент Cloudflare отвечает медленно или молчит, теперь можно точно установить, на каком этапе остановилась реплика. И только потом — менять модель, переписывать промпты или доплачивать за более быстрый синтез речи. @cloudflare/voice 0.4.0 присваивает каждой голосовой и текстовой реплике типизированный исход и метрики по этапам. Поэтому первый вопрос при отладке теперь звучит не «кого из провайдеров заменить?», а «какой этап дал сбой?».
Голосовой ИИ-агент: коротко о диагностике
Установите @cloudflare/voice@^0.4.0 вместе с agents@^0.22.0, подпишитесь на событие turnmetrics и группируйте реплики по turnId, source, outcome и тем полям времени, которые действительно присутствуют. Релиз Cloudflare от 11 сентября охватывает завершённые голосовые и текстовые реплики, пустой вывод, лимиты модели, фильтрацию контента, ошибки модели, ошибки синтеза речи и прерванные реплики.
Это существенное отличие от актуального руководства по Voice, обновлённого 16 июня: в нём всё ещё показаны четыре метрики совместимости — llm_ms, tts_ms, first_audio_ms и total_ms. Они описывают успешные непустые голосовые реплики, но не объясняют, почему текстовая реплика, пустой ответ, прерывание или сбой завершились без звука.
Старый набор метрик похож на квитанцию о доставке: из неё видно, сколько шла успешно доставленная посылка. VoiceTurnMetrics больше напоминает историю сканирований: один идентификатор сопровождает посылку от приёмки и сортировки до отправки и завершения, а при сбое показывает, где именно она остановилась.
client.addEventListener("turnmetrics", (turn) => {
console.log(turn.outcome, turn.turnTotalMs);
});Та же итоговая сводка доступна через VoiceClient, useVoiceAgent() и useVoiceInput(). Последний вариант работает только с преобразованием речи в текст, поэтому показывает лишь те метрики речи и транскрибации, которые способен измерить.

Что на самом деле показывают метрики задержки
Рабочая единица здесь — одна реплика. turnId служит идентификатором для корреляции, source показывает, поступил ли ввод голосом или текстом, а outcome фиксирует, чем всё закончилось. Все остальные поля содержат длительность в миллисекундах.
Не складывайте эти значения. По данным Cloudflare, все метрики используют единые серверные часы и могут пересекаться. Наглядный пример — разбиение по предложениям: модель ещё продолжает отдавать поток, пока готовые предложения уже синтезируются. Если сложить длительность работы модели и TTS, часть реального времени будет учтена дважды.
Отсутствующая метрика — тоже улика: соответствующая точка жизненного цикла не была достигнута. У текстовой реплики не должно быть полей преобразования речи в текст. При исходе no_output не стоит настраивать TTS: модель ничего не создала для передачи синтезатору. Если нет ttsToFirstAudioMs, TTS так и не дошёл до первой отправки аудио сервером.
Есть важная граница: воспроизведение в браузере не входит в VoiceTurnMetrics. Cloudflare исключает его, поскольку Worker и браузер работают по независимым часам. Если сервер быстро отправил первый аудиофрагмент, но пользователь всё равно слышит паузу, проверяйте транспорт, декодирование, маршрутизацию на устройство и клиентское воспроизведение.
Перед работой с продакшеном проведите три контрольных теста
Это наблюдения из контролируемых тестов SDK, а не замеры задержки в продакшене. Их задача — подтвердить, что инструменты корректно классифицируют заранее известные сценарии, прежде чем вы начнёте доверять им на звонках клиентов. Используйте нейтральные запросы и не записывайте тексты разговоров в логи.
Тест 1: завершённая голосовая реплика
Начните звонок, произнесите одну короткую заранее выбранную фразу и не перебивайте агента до конца ответа. В тесте самого Cloudflare для этого сценария приходят source: "speech", outcome: "completed", turnId, метрики транскрибации, обработки потока модели, работы TTS и общей длительности реплики.
Здесь проверяется структура, а не скорость относительно конкурентов. Убедитесь, что в финальной сводке указан тот же turnId и присутствуют ожидаемые поля этапов. Не превращайте миллисекунды одного локального запуска в публичное заявление о скорости.
Тест 2: завершённая текстовая реплика
Отправьте фиксированное сообщение через sendText(). Так вы обходите преобразование речи в текст и сразу попадаете в onTurn(). В контролируемом тесте Cloudflare приходят source: "text", outcome: "completed" и метрики потока модели, но отсутствуют speechStartToFirstInterimMs, speechStartToFinalMs и afterTranscribeMs.
Поэтому текстовая реплика — удобный контрольный сценарий. Если голосовые ответы кажутся медленными, а сопоставимые текстовые реплики быстро доходят до первого текста модели, вероятнее искать причину в транскрибации, определении конца реплики или передаче управления в onTurn(), а не в самой модели.
Тест 3: контролируемый пустой ответ
В ветке, доступной только в тестовой среде, настройте onTurn() так, чтобы для одной заранее заданной входной фразы он возвращал пустой поток. Тест самого Cloudflare классифицирует такую голосовую реплику как no_output: события с транскриптом ассистента, сообщение с метриками совместимости и состояние speaking не возникают.
Это самый чистый способ доказать, что тишина не всегда вызвана TTS. В реплике вообще не было текста ответа для синтеза. После проверки удалите тестовую ветку и никогда не привязывайте её включение к пользовательскому тексту разговора.

Семь исходов — семь разных диагнозов
Исход — это метка для маршрутизации проблемы. Если свести все случаи тишины к одному общему сбою, главное преимущество релиза будет потеряно.
Различать no_output, output_limit, content_filtered и model_error важно: для звонящего все четыре случая могут выглядеть одинаково — «агент ничего не сказал». Но лишь один из них в первую очередь указывает на логику промпта или пустого потока. И ни один не требует сначала покупать более быстрый голос.
Где это принесёт пользу в первую очередь
Больше всего новая диагностика помогает там, где неверный вывод заставляет переделывать работу или без необходимости менять провайдера.
1. Агенты поддержки, которые внезапно замолкают
Инженерная команда поддержки может сохранять не содержащие контента сводки реплик рядом с идентификатором обращения, группировать случаи тишины по исходу и направлять каждую группу ответственным за модель, безопасность, TTS или подключение. Результат — меньше передач между командами на основе догадок. Кластер no_output уходит команде логики ответа, а кластер tts_error — команде голосового тракта.
2. Агенты для записи и бронирования
Команда автоматизации клиники или ресторана может прогнать фиксированный сценарий бронирования, связать все реплики и сравнить, на каком этапе появляется задержка до и после релиза. Ценность для бизнеса — не в более красивом графике. Важно понять, ждал ли звонящий транскрибацию, текст модели, синтез речи или локальное воспроизведение, прежде чем менять процесс, который приносит выручку.
3. Регрессионное тестирование голосовых агентов
Продуктовая команда может поддерживать небольшой набор известных сценариев для речи, текста, пустого вывода и прерывания. В каждой сборке можно проверять финальный исход и наличие полей, а затем сравнивать распределения по этапам между релизами. Так изменившийся путь сбоя обнаружится раньше, чем его скроет общий сквозной показатель.
4. Сравнение провайдеров без обвинения не того слоя
Команда, выбирающая речевого провайдера, может зафиксировать промпт и модель, а затем в контролируемых запусках сравнивать ttsToFirstAudioMs и работу TTS. Если задержка возникает до появления текста модели, сравнение TTS не имеет смысла. Если измерения показывают узкое место именно в TTS, сравнение API для синтеза речи с низкой задержкой будет своевременным, а не преждевременным.
5. Настройка многоязычной транскрибации
Многоязычный сервис может выполнять одно и то же задание с заранее известными фразами на каждом поддерживаемом языке и отдельно анализировать время до промежуточной и финальной транскрипции, не смешивая его со временем модели. Так можно обнаружить проблему транскрибации или определения конца реплики, которую скрыл бы единый показатель всей реплики. Точность всё равно требует отдельной оценки: быстрая транскрибация может оказаться неверной.
6. Интерфейсы с текстом и голосом
Приложение для выездных специалистов может сравнить контрольную текстовую реплику с голосовой при одной и той же логике агента. Поскольку текст обходит STT, разрыв между двумя маршрутами сужает область поиска до приёма речи и финализации реплики. Общие поля turnId, источника и исхода позволяют использовать единую схему диагностики для обоих каналов.
7. Телефонные сценарии с частыми перебиваниями
Команда, заменяющая IVR, может намеренно перебивать длинные ответы и убеждаться, что возникает aborted, а не считать такие реплики необъяснимыми сбоями. Это очищает отчётность об ошибках и помогает безопаснее работать с отменой. Но такая проверка не доказывает, что пользователям нравится поведение при перебивании, поэтому по-прежнему нужны прослушивание аудио и пользовательские тесты.
Как это меняет решение о бюджете
Новое событие подходит для первичной диагностики этапов внутри тестового приложения Cloudflare. Полноценную платформу контроля качества голосовых систем оно не заменяет.
Разница важна, потому что специализированные продукты решают гораздо более широкую задачу и стоят соответственно. У Coval тариф Starter стоит $100 в месяц, а Growth — $500 в месяц; в них входят симуляция, мониторинг, хранение трасс и функции оценки. Roark предлагает стартовый кредит $50, тариф Team за $500 в месяц с расходованием суммы по мере использования и Enterprise от $4,000 в месяц.
Если насущный вопрос звучит как «какой этап сделал эту реплику Cloudflare медленной или беззвучной?», сначала подключите turnmetrics, а уже потом покупайте более широкий стек. Если нужны симуляция звонков, скоринг, оповещения, долгосрочные трассы, ручная проверка, комплаенс-процессы или сравнение разных платформ, событие SDK будет лишь исходным материалом. Честное разделение бюджета таково: инструменты — для диагностики, QA-продукт — для построения рабочего процесса вокруг неё.
Три продукта, которые стоит создать
1. Нативная для Cloudflare консоль диагностики реплик
Это самая сильная возможность. Продукт принимает не содержащие контента VoiceTurnMetrics, группирует исходы, показывает распределения времени по этапам и связывает события через turnId. Покупатели голосовых агентов коммерчески ценны: по данным DataForSEO, запрос ai voice agent в США набирает 6,600 поисков в месяц, имеет коммерческий интент и CPC $51.22. Узкий запрос voice agent latency получает лишь 10 поисков в месяц: это нишевая точка входа для специалистов, а не массовый потребительский продукт.
Минимальная продаваемая версия должна включать сборщик событий, настройки хранения, фильтры по источнику и исходу, сравнение показателей до и после релиза и правила маршрутизации из финальной таблицы ниже. Давление рынка на цену уже видно: цены Coval начинаются с $100 в месяц, а более широкие командные тарифы Coval и Roark стоят $500 в месяц.
Ограничение — зависимость от одной платформы. Cloudflare может расширить собственный интерфейс, а браузерное воспроизведение не входит в стабильную сводку реплики. Защитой продукта должен стать рабочий процесс: сравнение релизов, доказательства регрессий, контроль приватности и быстрый путь от проблемного кластера к ответственному владельцу.
2. Проверка регрессии задержки для пул-реквестов
Такой продукт запускает фиксированные сценарии речи, текста, пустого вывода и прерывания на предварительном развёртывании, а затем блокирует релиз, если возникает неправильный исход или измеряемый этап ухудшается относительно базового уровня команды. По данным DataForSEO, запрос voice ai agent получает 880 поисков в месяц в США при CPC $36.64. Более конкретный low latency voice agent набирает лишь 10 поисков в месяц, но его CPC составляет $29.34 — ещё один небольшой сигнал с дорогими кликами.
Для MVP нужны тестовый раннер, хранилище базовых значений, проверки исходов, сравнение перцентилей и краткий отчёт для CI. Сравнивать следует только сопоставимые сценарии, не складывая пересекающиеся метрики.
Ограничение — реалистичность теста. Синтетический микрофонный тракт не воспроизводит все сети звонящих, акценты, браузеры, устройства и участки телефонии. Продавать такой продукт стоит как защиту релизов, а не как доказательство качества в продакшене.
3. Лаборатория сравнения провайдеров с разбивкой по этапам
Продукт позволит команде зафиксировать почти весь конвейер, по одному менять провайдеров и сравнивать тот этап, на который каждый из них действительно влияет. DataForSEO сообщает о 40 поисках в месяц в США для запроса voice agent platform; у него коммерческий интент и CPC $44.12. Объём скромный, но стоимость клика показывает: поставщики конкурируют за небольшую группу серьёзных покупателей.
Для MVP нужны воспроизводимые промпты и тестовые аудиофайлы, конфигурация провайдеров, сводки по этапам, доли исходов и экспортируемый отчёт для принятия решений. Ценность продукта в том, что быстрый TTS-провайдер не получит незаслуженную похвалу за улучшение модели — или вину за задержку транскрибации.
Ограничение — точность атрибуции. VoiceTurnMetrics измеряет точки жизненного цикла SDK, а не полную трассу провайдера. Размещение в сети, воспроизведение в браузере, качество ввода и внутренние очереди провайдера всё равно требуют отдельных доказательств.
Чего эти метрики не решают
Метрики реплики показывают, где искать. Они не говорят, была ли транскрипция верной, ответ — полезным, голос — естественным, задача звонящего — выполненной, а воспроизведение на клиенте — плавным.
Для локальной диагностики может пригодиться поток событий в консоли браузера: он объединяет серверные события жизненного цикла с событиями микрофона, подключения, первого аудио и воспроизведения. Используйте его лишь как временный отладочный инструмент. По данным Cloudflare, по умолчанию он отключён, а названия событий и поля могут меняться, поэтому это не стабильный контракт для аналитики.
Стабильная сводка намеренно не содержит контента, но ваши собственные сообщения могут свести эту защиту на нет. Cloudflare удаляет известные поля с контентом, однако не анализирует произвольные тела ответов провайдера. Не включайте в собственные строки ошибок транскрипты, промпты, аргументы инструментов, идентификаторы клиентов и другие данные разговора.
Наконец, руководство по Voice всё ещё помечено как Beta. Фиксация версий, контролируемый набор тестов и проверка каждого релиза — часть внедрения, а не административная уборка.
Что ещё ищут по этой теме
Что такое Cloudflare Realtime Agents?
Cloudflare Realtime Agents — более ранняя среда для голосовых систем реального времени на базе WebRTC, оркестрации конвейера и настраиваемых компонентов речи и модели. Рассматриваемый здесь пакет @cloudflare/voice — голосовой стек Agents SDK, работающий через WebSocket. Это связанные голосовые продукты Cloudflare, однако релиз метрик реплики от 11 сентября относится именно к @cloudflare/voice.
Как работают голосовые агенты реального времени?
В типичной реплике система принимает речь, преобразует её в текст, пропускает его через логику приложения и модели, синтезирует ответ в речь и воспроизводит аудио звонящему. Пакет Cloudflare передаёт звук с микрофона потоково через WebSocket, запускает onTurn(), разбивает потоковый текст модели по предложениям и возвращает синтезированное аудио.
Есть ли у Cloudflare ИИ-агенты?
Да. Agents SDK от Cloudflare предоставляет агентов с состоянием на базе Durable Objects, а @cloudflare/voice добавляет полноценные маршруты для голоса и речевого ввода. Согласно актуальному руководству, голосовой пакет остаётся в статусе Beta.
Где находится репозиторий Cloudflare Agents на GitHub?
Официальный репозиторий — cloudflare/agents на GitHub. Типы и тесты для голосового режима показывают стабильную схему реплики и контролируемое поведение исходов, на которых основан релиз.
Что сделать в понедельник: направляйте проблему по данным
На следующей неделе добавьте обработчик события в тестовую сборку и прогоните три контролируемых сценария выше. Сохраняйте только сводки без контента. А затем вместо инстинктивной смены модели используйте эту таблицу.
Если вам нужна система голосовой поддержки с таким диагностическим циклом, я помогу спроектировать и запустить её.
- Последнее обновление
- 12 сент. 2026 г.
- Категория
- Build







