Metrik latency AI API: TTFT, response pertama, dan kecepatan output
Panduan Request Timeline untuk memisahkan upstream Header, SSE Event pertama, response efektif, teks terlihat, total latency, dan output speed.
Latency AI API bukan satu angka. Untuk streaming request, catat waktu upstream Header, SSE Event tidak kosong pertama, Content atau Action efektif pertama, teks terlihat pertama, dan penyelesaian response. Semua milestone menjawab pertanyaan berbeda dan tidak boleh disebut “TTFT” secara bersamaan.
Untuk chat teks, Time to First Visible Text biasanya mewakili pengalaman pengguna. Pada workflow reasoning atau Tool, Function Arguments dapat menjadi output efektif lebih awal. Generation Speed diukur terpisah setelah output dimulai.
Bangun Request Timeline sebelum menamai metrik
Gunakan Clock monotonik dan satu Origin:
t0 gateway menerima request
t1 memulai upstream request
t2 upstream response headers tiba
t3 SSE Event tidak kosong pertama
t4 Content atau Action efektif pertama
t5 Text Delta terlihat pertama
t6 upstream Body selesai atau tertutup
t7 gateway Handler selesai
Tidak semua request memiliki semua milestone. Nilai yang tidak ada tetap absent, bukan 0.
| Field | Pengukuran | Batas penting |
|---|---|---|
auth_ms |
Autentikasi | Local phase |
distribution_ms |
Channel Selection dan Routing | Local phase |
body_read_ms |
Membaca Request Body | Menemukan upload lambat |
upstream_headers_ms |
Upstream Start hingga Headers | Origin bukan Gateway Receipt |
first_sse_event_ms |
Receipt hingga Event pertama | Bisa hanya Metadata |
first_response_ms |
Receipt hingga Content/Action efektif | Text, Reasoning, Function Arguments |
first_text_delta_ms |
Receipt hingga teks terlihat | Dapat tidak ada |
upstream_done_ms |
Receipt hingga upstream tutup | Close tidak selalu sukses |
total_handler_ms |
Receipt hingga akhir relay | Gateway E2E terdekat |
visible_output_tps |
Tokens / visible window | Diagnosis pengguna, bukan system TPS |
Jangan mengurangi duration dengan Origin berbeda.
TTFT memiliki beberapa arti praktis
Panduan benchmark NVIDIA NIM biasanya memasukkan network, queue, dan prompt prefill ke TTFT serta mengecualikan response awal kosong. Stream modern dapat mengirim Metadata, Reasoning, Function Arguments, Tool Input, atau Heartbeat sebelum teks.
| Nama | Definisi | Penggunaan |
|---|---|---|
| Time to Headers | Start hingga Upstream Headers | Network dan Admission |
| Time to First Event | Hingga SSE Event tidak kosong | Transport Liveness |
| Time to First Effective Response | Hingga Content/Action berguna | Agent dan Reasoning |
| Time to First Visible Text | Hingga teks dapat dirender | Pengalaman chat |
Dashboard TTFT harus menjelaskan definisi yang dipakai.
Pisahkan responsivitas dan 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 mengecualikan TTFT dan biasanya membagi waktu tersisa dengan output_tokens - 1. Jangan hitung SSE Event sebagai Token; satu Event dapat berisi nol atau beberapa Token.
Teks cepat dengan TPS rendah terasa responsif lalu melambat. Teks lambat dengan TPS tinggi terasa diam lalu selesai cepat. Per-user TPS dan Aggregate Throughput juga berbeda.
Reasoning dan Tool dapat muncul sebelum teks
Pada Text-only, first_response_ms dan first_text_delta_ms berdekatan. Function Arguments pada 1,8 detik dan teks pada 6,4 detik berarti Action sudah tersedia tetapi pengguna belum melihat prosa.
- Terminal Agent dapat memakai First Effective Action;
- UI teks memakai First Visible Text;
- Tool API mungkin tidak menghasilkan teks;
- SSE Envelope awal hanya membuktikan koneksi.
Panduan AI API Streaming menjelaskan parsing, Cancellation, dan Idle Timeout. Hitung metrik setelah Event diklasifikasikan dengan benar.
Diagnosis tahap lambat dalam urutan tetap
| Gejala | Metrik | Periksa |
|---|---|---|
| Lambat sebelum Headers | upstream_headers_ms |
Network, Admission, Queue, Route, Region |
| Headers cepat, Output terlambat | first_response_ms |
Model Queue, Prefill, Reasoning, Inflight |
| Event cepat, Output terlambat | Gap SSE→Response | Metadata, Heartbeat, Reasoning Startup |
| Action cepat, Text terlambat | Gap Response→Text | Tool/Reasoning, Composition |
| Text cepat, Generation lambat | visible_output_tps |
Decode, Contention, Long Context |
| Upstream normal | Local fields | Auth, Policy, Client Upload |
Satu metrik tidak membuktikan Root Cause. Gabungkan Route, Region, Provider, dan Concurrent Load.
Baca tiga synthetic trace
Trace A: menunggu 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 |
Sebagian besar waktu sebelum Headers. Periksa Route, Admission, Network, Region, dan Load sebelum UI.
Trace B: Action sebelum teks
| 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 muncul pada 2,9 detik, teks 5,8 detik kemudian. Periksa Reasoning atau Tool; menambah Header Timeout tidak membantu.
Trace C: mulai cepat, generasi lambat
| 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 |
Teks mulai cepat tetapi generation hampir 20 detik. Bandingkan Output Length, Context, Channel, Inflight, dan Provider. First-output Timeout tidak mendeteksi pola ini.
Bandingkan hanya pada kondisi terkontrol
Catat Model dan Route, distribusi Token, Streaming, Reasoning Effort, Tools, Region, Network Path, Concurrency, Sampling, Max Output, Warmup, Retry Policy, Sample Size, dan Percentile Method.
Bandingkan p50, p95, p99, bukan satu Average. Pertahankan Timeout dan Error. Prompt, panjang, atau Concurrency berbeda tidak boleh menjadi ranking kecepatan model.
Simpan Metadata, bukan Content
Request ID, Timestamp, Model, Group, Channel Reference, Status, Token Counts, Timing Fields, Event Counts, Inflight, Coarse Region, dan classifier seperti upstream_headers_slow biasanya cukup.
Prompt, Response, API Key, dan identitas plaintext tidak diperlukan. Terapkan Retention dan Access Control pada Metadata.
Mulai investigasi dari Timeline, gunakan Reliable AI API Routing untuk membandingkan Attempts dan AI API Error Troubleshooting untuk menghubungkan Timing dengan terminal Status. Dengan itu Admission, Model Startup, Reasoning/Tools, Visible Generation, dan local Overhead dapat dipisahkan.