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_ms và first_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.