Метрики задержки AI API: TTFT, первый ответ и скорость вывода

Руководство по Request Timeline: Upstream Headers, первое SSE Event, эффективный ответ, видимый текст, полная задержка и скорость вывода.

Задержка AI API — не одна цифра. Для streaming-request нужно отдельно фиксировать Upstream Headers, первое непустое SSE Event, первый полезный Content или Action, первый видимый текст и завершение ответа. Эти точки отвечают на разные вопросы и не должны все называться TTFT.

Для текстового чата Time to First Visible Text обычно отражает пользовательское восприятие. В Reasoning- или Tool Workflow Function Arguments могут стать первым эффективным результатом раньше. Generation Speed измеряется отдельно после начала вывода.

Сначала построить Request Timeline

Используйте монотонные часы и единый Origin:

t0  Gateway получает Request
t1  начинает Upstream Request
t2  приходят Upstream Response Headers
t3  первое непустое SSE Event
t4  первый эффективный Content или Action
t5  первый видимый Text Delta
t6  Upstream Body завершается или закрывается
t7  Gateway Handler завершается

Не в каждом запросе есть все точки. Отсутствующее значение должно оставаться absent, а не 0.

Поле Что измеряет Граница
auth_ms Аутентификация Локальная фаза
distribution_ms Channel Selection и Routing Локальная фаза
body_read_ms Чтение Request Body Медленная загрузка до Routing
upstream_headers_ms Upstream Start до Headers Origin — начало upstream
first_sse_event_ms Receipt до первого Event Может быть только Metadata
first_response_ms Receipt до эффективного Content/Action Text, Reasoning, Function Arguments
first_text_delta_ms Receipt до видимого текста Может отсутствовать
upstream_done_ms Receipt до закрытия upstream Close не всегда означает успех
total_handler_ms Receipt до конца Relay Ближайшая Gateway E2E мера
visible_output_tps Tokens / видимое окно Пользовательская диагностика, не общий TPS

Нельзя вычитать Duration с разными Origins.

У TTFT несколько практических значений

Руководство NVIDIA NIM обычно включает в TTFT сеть, Queue и Prompt Prefill и исключает пустые начальные ответы. Современный Stream до текста может отправить Metadata, Reasoning, Function Arguments, Tool Input или Heartbeat.

Название Рекомендуемое значение Применение
Time to Headers Start до Upstream Headers Сеть и Admission
Time to First Event До первого непустого SSE Transport Liveness
Time to First Effective Response До полезного Content/Action Agents и Reasoning
Time to First Visible Text До отображаемого текста Пользовательский Chat

Если Dashboard показывает TTFT, он должен указывать конкретное определение.

Разделить Responsiveness и Generation Speed

end_to_end_latency = final_response_time - request_start_time
visible_generation_window = final_response_time - first_visible_text_time
visible_output_tps = output_tokens / visible_generation_window_seconds

Inter-token Latency исключает TTFT и обычно делит оставшееся время на output_tokens - 1. Нельзя считать SSE Events как Tokens: одно Event может содержать ноль или несколько Tokens.

Ранний текст с низким TPS быстро начинается и медленно продолжается; поздний текст с высоким TPS выглядит зависшим и быстро заканчивается. Per-user TPS и Aggregate Throughput также различаются.

Reasoning и Tools могут предшествовать тексту

В Text-only first_response_ms и first_text_delta_ms близки. Function Arguments на 1,8 секунды и текст на 6,4 означают ранний Action без видимой прозы.

  • Terminal Agent может измерять First Effective Action;
  • Text-only UI — First Visible Text;
  • Tool API может вообще не иметь текста;
  • ранний SSE Envelope доказывает соединение, но не полезный прогресс.

AI API Streaming Guide описывает Parsing, Cancellation и Idle Timeout. Метрики считаются после корректной классификации Events.

Диагностировать этапы в фиксированном порядке

Симптом Метрика Проверить
Медленно до Headers upstream_headers_ms Network, Admission, Queue, Route, Region
Headers быстро, Output поздно first_response_ms Model Queue, Prefill, Reasoning, Inflight
Event быстро, Output поздно SSE→Response Gap Metadata, Heartbeat, Reasoning Startup
Action быстро, Text поздно Response→Text Gap Tool/Reasoning, Composition
Text быстро, Generation медленно visible_output_tps Decode, Contention, Long Context
Upstream нормален Локальные поля Auth, Policy, Client Upload

Одна метрика не доказывает Root Cause. Нужны Route, Region, Provider и Concurrent Load.

Прочитать три синтетических Trace

Trace A: ожидание Headers

Metric Value
upstream_headers_ms 6 100 ms
first_response_ms 6 350 ms
first_text_delta_ms 6 400 ms
total_handler_ms 9 200 ms
visible_output_tps 42

Основное ожидание до Headers. Проверяйте Route, Admission, Network, Region и Load до UI.

Trace B: Action раньше текста

Metric Value
upstream_headers_ms 240 ms
first_response_ms 2 900 ms
first_text_delta_ms 8 700 ms
total_handler_ms 10 200 ms
visible_output_tps 55

Action есть на 2,9 секунды, текст — ещё через 5,8. Исследуйте Reasoning или Tools; увеличение Header Timeout бесполезно.

Trace C: быстрый старт, медленная генерация

Metric Value
upstream_headers_ms 260 ms
first_response_ms 420 ms
first_text_delta_ms 430 ms
total_handler_ms 20 430 ms
visible_output_tps 9,8

Текст начинается быстро, но генерируется около 20 секунд. Сравните Output Length, Context, Channel, Inflight и Provider. First-output Timeout не обнаружит проблему.

Сравнивать только контролируемые условия

Фиксируйте Model и Route, распределения Tokens, Streaming, Reasoning Effort, Tools, Region, Network Path, Concurrency, Sampling, Max Output, Warmup, Retry Policy, Sample Size и Percentile Method.

Сравнивайте p50, p95 и p99, а не одну среднюю. Ошибки и Timeouts должны оставаться в данных. Разные Prompts, длины и Concurrency нельзя выдавать за рейтинг скорости моделей.

Хранить Metadata, а не Content

Для диагностики достаточно Request ID, Timestamp, Model, Group, Channel Reference, Status, Token Counts, Timing Fields, Event Counts, Inflight, приблизительного Region и классификатора вроде upstream_headers_slow.

Не требуется хранить Prompts, Responses, API Keys или открытые идентификаторы. Metadata также требует Retention и Access Control.

Начинайте с Timeline, используйте Reliable AI API Routing для сравнения Attempts и AI API Error Troubleshooting для связи Timing с итоговым Status. Это разделяет Admission, Model Startup, Reasoning/Tools, Visible Generation и локальный Overhead.