Chỉ số latency AI API: TTFT, response đầu tiên và tốc độ output

Hướng dẫn theo Request Timeline để tách upstream Header, SSE Event đầu, response hiệu quả, text hiển thị, total latency và output speed.

Latency của AI API không phải một con số. Với streaming request, cần ghi riêng lúc upstream Header đến, SSE Event không rỗng đầu tiên, Content hoặc Action hữu ích đầu tiên, văn bản hiển thị đầu tiên và lúc response hoàn tất. Các milestone trả lời câu hỏi khác nhau và không nên đều gọi là TTFT.

Trong chat văn bản, Time to First Visible Text thường phản ánh trải nghiệm người dùng. Với reasoning hoặc Tool workflow, Function Arguments có thể là output hiệu quả sớm hơn. Generation Speed là phép đo riêng sau khi output bắt đầu.

Xây dựng Request Timeline trước khi đặt tên metric

Dùng Clock đơn điệu và một Origin:

t0  gateway nhận request
t1  bắt đầu upstream request
t2  upstream response headers đến
t3  SSE Event không rỗng đầu tiên
t4  Content hoặc Action hiệu quả đầu tiên
t5  Text Delta hiển thị đầu tiên
t6  upstream Body hoàn tất hoặc đóng
t7  gateway Handler hoàn tất

Không phải request nào cũng có mọi mốc. Giá trị không tồn tại phải để absent, không phải 0.

Field Đo lường Ranh giới
auth_ms Xác thực Local phase
distribution_ms Chọn Channel và Routing Local phase
body_read_ms Đọc Request Body Phát hiện upload chậm
upstream_headers_ms Upstream Start đến Headers Origin không phải Gateway Receipt
first_sse_event_ms Receipt đến Event đầu Có thể chỉ là Metadata
first_response_ms Receipt đến Content/Action hiệu quả Text, Reasoning, Function Arguments
first_text_delta_ms Receipt đến Text hiển thị Có thể không tồn tại
upstream_done_ms Receipt đến upstream đóng Close không luôn là thành công
total_handler_ms Receipt đến cuối Relay Gateway E2E gần nhất
visible_output_tps Tokens / Visible Window Chẩn đoán người dùng, không phải System TPS

Không trừ các Duration có Origin khác nhau.

TTFT có nhiều ý nghĩa thực tế

Hướng dẫn benchmark NVIDIA NIM thường tính network, queue và prompt prefill trong TTFT, đồng thời bỏ response đầu rỗng. Stream hiện đại có thể phát Metadata, Reasoning, Function Arguments, Tool Input hoặc Heartbeat trước văn bản.

Tên Định nghĩa Dùng cho
Time to Headers Start đến Upstream Headers Network và Admission
Time to First Event Đến SSE Event không rỗng Transport Liveness
Time to First Effective Response Đến Content/Action hữu ích Agent và Reasoning
Time to First Visible Text Đến Text có thể render Trải nghiệm chat

Dashboard dùng TTFT phải ghi rõ định nghĩa.

Tách Responsiveness khỏi 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 loại TTFT và thường chia thời gian còn lại cho output_tokens - 1. Không đếm SSE Event như Token; một Event có thể chứa không hoặc nhiều Token.

Text đầu nhanh với TPS thấp bắt đầu tốt rồi chậm. Text đầu muộn với TPS cao trông như đứng yên rồi hoàn tất nhanh. Per-user TPS và Aggregate Throughput cũng khác nhau.

Reasoning và Tool có thể đến trước Text

Trong Text-only, first_response_msfirst_text_delta_ms gần nhau. Function Arguments ở 1,8 giây và Text ở 6,4 giây nghĩa là hệ thống đã có Action nhưng người dùng chưa thấy văn bản.

  • Terminal Agent có thể dùng First Effective Action;
  • UI chỉ hiển thị chữ dùng First Visible Text;
  • Tool API có thể không bao giờ có Text;
  • SSE Envelope sớm chỉ chứng minh kết nối.

Hướng dẫn AI API Streaming giải thích parsing, Cancellation và Idle Timeout. Chỉ tính metric sau khi phân loại Event đúng.

Chẩn đoán giai đoạn chậm theo thứ tự cố định

Triệu chứng Metric Kiểm tra
Chậm trước Headers upstream_headers_ms Network, Admission, Queue, Route, Region
Headers nhanh, Output muộn first_response_ms Model Queue, Prefill, Reasoning, Inflight
Event nhanh, Output muộn Gap SSE→Response Metadata, Heartbeat, Reasoning Startup
Action nhanh, Text muộn Gap Response→Text Tool/Reasoning, Composition
Text nhanh, Generation chậm visible_output_tps Decode, Contention, Long Context
Upstream bình thường Local fields Auth, Policy, Client Upload

Một metric không chứng minh Root Cause. Kết hợp Route, Region, Provider và Concurrent Load.

Đọc ba synthetic trace

Trace A: chờ 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

Phần lớn thời gian trước Headers. Kiểm tra Route, Admission, Network, Region và Load trước UI.

Trace B: Action trước Text

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 xuất hiện ở 2,9 giây, Text sau đó 5,8 giây. Kiểm tra Reasoning hoặc Tool; tăng Header Timeout không giúp.

Trace C: bắt đầu nhanh, sinh chậm

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

Text đến nhanh nhưng Generation gần 20 giây. So sánh Output Length, Context, Channel, Inflight và Provider. First-output Timeout không phát hiện trường hợp này.

Chỉ so sánh trong điều kiện kiểm soát

Ghi Model và Route, phân phối Token, Streaming, Reasoning Effort, Tools, Region, Network Path, Concurrency, Sampling, Max Output, Warmup, Retry Policy, Sample Size và Percentile Method.

So sánh p50, p95, p99 thay vì Average. Giữ Timeout và Error trong dữ liệu. Prompt, độ dài hoặc Concurrency khác nhau không tạo ranking tốc độ model hợp lệ.

Lưu Metadata, không lưu Content

Request ID, Timestamp, Model, Group, Channel Reference, Status, Token Counts, Timing Fields, Event Counts, Inflight, Coarse Region và classifier như upstream_headers_slow thường đủ.

Không cần lưu Prompt, Response, API Key hoặc danh tính plaintext. Metadata cũng cần Retention và Access Control.

Bắt đầu điều tra từ Timeline, dùng Reliable AI API Routing để so Attempts và AI API Error Troubleshooting để nối Timing với Terminal Status. Nhờ đó có thể tách Admission, Model Startup, Reasoning/Tools, Visible Generation và Local Overhead.