LIVE

Задержка TTS API: методы точного измерения сетевой и генеративной latency

Замер TTFB на потоковом TTS-эндпоинте возвращает 50 мс. Первый чанк с PCM-данными приходит через 200 мс после первых байт. Пользователь слышит звук через 250 мс. Наивный TTFB-бенчмарк занижает фактическую задержку в 5 раз.

Обновлено26 октября 2026 г.
Чтение5 мин
Задержка TTS API: методы точного измерения сетевой и генеративной latency

Анатомия задержки в TTS API: из чего складывается общая latency пайплайна

Это систематическая ошибка, которая возникает при тестировании скорости TTS API без парсинга аудиоконтейнера потока.

Общая latency пайплайна складывается из трёх компонент: сетевого RTT (DNS, TCP, TLS), серверного инференса (генеративная задержка) и буферизации на клиенте. Каждый компонент откусывает из бюджета, заданного диалоговым контекстом.

Целевая пауза между репликами человека и агента — около 200 мс. Норма естественного диалога — 100–300 мс. В каскадном пайплайне (STT + LLM + TTS) на TTS API обычно выделяют 200–400 мс. Одна только стадия синтеза речи упирается в потолок всего диалогового бюджета. При суммарной задержке свыше 500 мс пользователи начинают перебивать агента или сбрасывать звонок.

Ключевая метрика для голосового ИИ-агента — TTFA (Time to First Audio): первый воспроизводимый звуковой сэмпл. Не сетевой TTFB, не время получения HTTP-ответа. Первые байты потока содержат метаданные контейнера или тишину.

Ловушки сетевого TTFB: почему первые байты потока обманывают разработчиков

Пример: сервер отвечает первыми байтами за 50 мс. Это 44 байта заголовка WAV или страницы идентификации Ogg/Opus. Первый чанк с реальными аудиоданными придёт на 200 мс позже. Итоговая задержка до воспроизведения — 250 мс. Наивный TTFB-замер фиксирует 50 мс.

Параметр замераНаивный TTFBTTFA
Что фиксируетПервые байты HTTP-ответаПервый чанк с PCM-данными
Учитывает заголовки контейнераНет — байты съедаются как аудиоПарсится и отбрасывается
Учитывает начальную тишинуНетОтсекается до первого ненулевого сэмпла
Соответствие слышимому звукуНетДа

Разрыв между TTFB и TTFA зависит от контейнера. WAV содержит 44 байта заголовка, которые сервер отправляет первыми. MP3 вставляет ID3-тег. Ogg-страницы содержат блок идентификации и комментариев. Плюс некоторые провайдеры генерируют начальные сэмплы тишины, которые физически присутствуют в потоке, но аудио для пользователя не производят.

Замер TTFB без парсинга контейнера даёт результат, который не коррелирует с пользовательским восприятием. При декомпозиции пайплайна эта ошибка маскирует реальное bottleneck-место: разработчик видит «50 мс TTFB — отлично» и не ищет источник оставшихся 200 мс.

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

Для измерения генеративной задержки нужен тест-харнесс, который парсит поток на уровне байтов. Библиотека-контейнерер (как pydub для WAV или soundfile для Ogg) открывает поток, отсекает заголовок и отдаёт первые PCM-сэмплы.

Алгоритм замера TTFA:

1. Отсечь байты заголовка контейнера: 44 байта для WAV, страницы идентификации и комментариев для Ogg/Opus. Для MP3 — ID3v2-тег, если он присутствует.

2. Отфильтровать начальные сэмплы тишини, если провайдер их генерирует. Порог определяется как первый сэмпл с амплитудой выше установленного уровня (обычно −60 дБFS).

3. Зафиксировать временную метку первого ненулевого сэмпла — это и есть TTFA.

4. Разделить TTFA на сетевое плечо (до прихода первых байт от сервера) и генеративную задержку (от первых байт до первого чанка с PCM). Для чистого замера серверного инференса использовать локальный эндпоинт или считать сетевую составляющую как отдельный компонент.

Если провайдер отдаёт аудио через WebSocket или WebRTC, накладные расходы протокола варьируются от реализации SDK и не поддаются обобщённому учёту. Для сравнительных бенчмарков между провайдерами стоит фиксировать один и тот же транспортный протокол на всех тестируемых API.

Парсинг контейнера — единственная операция, которая превращает TTFB в измеримую TTFA. Без неё числовой результат бенчмарка лишён смысла.

Декомпозиция сетевого плеча: curl-тайминги и влияние географии эндпоинтов

Сетевая задержка в публичном интернете составляет 20–200 мс в зависимости от географии клиента и точки присутствия сервера. Для разложения сетевого плеча на компоненты используется curl с флагом -w:

Параметр curlЧто измеряет
%{time_namelookup}Разрешение DNS
%{time_connect}Установка TCP-соединения
%{time_appconnect}SSL/TLS рукопожатие
%{time_starttransfer}Первый байт ответа (TTFB)

Разность %{time_starttransfer} − %{time_appconnect} даёт интервал от готовности TLS-туннеля до первого ответа сервера — это примерная нижняя граница генеративной задержки, но верхняя граница до парсинга контейнера.

География эндпоинта — один из самых заметных факторов latency. Внедрение региональных эндпоинтов (multi-region serving) снижает TTFB на 50–200 мс — от 20 до 40 % глобально — за счёт сокращения сетевого плеча до дата-центра. Для мультирегиональных продакшенов геолокация клиента и POP сервера должны фиксироваться в каждом замере. Latency без указания этих двух координат несравнима с latency другого провайдера.

Процентили P50–P99 и коэффициент RTF: стандарты бенчмаркинга под нагрузкой

Два независимых измерения, которые часто путают: процентили latency и скорость генерации относительно длительности аудио.

Процентили вместо средних

Средние (mean) метрики скрадывают всплески из-за холодного старта, очередей и троттлинга под нагрузкой. Стандарт измерений Voice-AI требует фиксации:

  • P50 — медиана для типичного пользователя;
  • P90 или P95 — типичный худший случай;
  • P99 — всплески холодного старта и rate limiting.

Разрыв между P50 и P99 указывает на проблемы масштабирования. Маленький P50 при большом P99 — троттлинг под нагрузкой или неэффективная маршрутизация к GPU.

RTF: скорость генерации

RTF (Real-Time Factor) вычисляется как время генерации, делённое на продолжительность сгенерированного аудио:

RTF = время генерации / длительность звука

RTF < 1.0 — необходимое условие потокового синтеза в реальном времени без заиканий буфера. Легковесные модели, вроде Kokoro на GPU, достигают RTF порядка 0.03: 3 секунды аудио синтезируются за 90 мс. Тяжёлые zero-shot модели клонирования голоса ведут себя иначе — RTF близок к единице или превышает её, что делает их непригодными для диалоговых агентов без серверного ускорения.

Режим синтезаКритичная метрикаПрименение
Streaming (потоковый)TTFA, RTF < 1.0Диалоговые агенты, телефония, ассистенты
Batch (пакетный)RTF, общее время обработкиОзвучка файлов, дубляж, подкасты

Пакетная генерация и потоковый синтез — разные задачи. Замер latency для batch-рендера не показывает производительность в диалоговом контексте. Benchmarks от вендоров на прогретых одиночных запросах в продакшене часто дают задержку в 2–3 раза выше.

Сухой итог

Задержка TTS API измеряется через TTFA, не через TTFB. Точный замер требует парсинга контейнера потока (44 байта WAV-заголовка, Ogg-страницы), отсечения начальной тишины и фиксации первого ненулевого сэмпла. Сетевое плечо разбирается curl-таймингами, география эндпоинта фиксируется обязательно. Метрики берутся в процентилях P50–P99, RTF считается отдельно. Вендорские бенчмарки на прогретых запросах не отражают поведение в телефонном канале. Для сравнения провайдеров нужен единый тест-харнесс с фиксированным транспортом, геолокацией и протоколом парсинга.

Частые вопросы

Почему наивный замер TTFB искажает реальную задержку TTS API?
Наивный замер фиксирует первые байты HTTP-ответа, которые могут содержать лишь заголовки контейнера или начальную тишину, а не реальные аудиоданные.
Что такое TTFA и чем эта метрика отличается от TTFB?
TTFA означает Time to First Audio и измеряет время до появления первого воспроизводимого звукового сэмпла, в то время как TTFB фиксирует получение самых первых байт ответа до парсинга контейнера.
Как измерить генеративную задержку с помощью тест-харнесса?
Для этого нужно отсечь байты заголовка контейнера, отфильтровать начальную тишину по уровню амплитуды и зафиксировать временную метку первого ненулевого сэмпла.
Как география эндпоинтов влияет на сетевую latency?
Использование региональных эндпоинтов снижает TTFB на 50–200 мс за счет сокращения сетевого плеча до дата-центра клиента.
Какое значение RTF необходимо для потокового синтеза речи?
Коэффициент RTF должен быть меньше 1.0, что означает генерацию аудио быстрее его длительности для работы без заиканий буфера.