Latency / TTFT
延迟与首 Token 时间TTFT = 用户看到第一个字之前等了多久——直接决定体感。
详解
Latency 泛指整体响应延迟,而 TTFT(Time to First Token,首 token 时间)是其中最影响用户体感的子指标——从发出请求到客户端收到第一个 token 的时间。非流式调用没有 TTFT 概念,用户必须等整个回答生成完毕;开启流式输出后,TTFT 通常只有几百毫秒,用户感觉模型"立刻开始回答"。影响 TTFT 的因素主要有三:网络 RTT(往返时延,选近的 API 端点)、提示词长度(更长的前缀要更久才能算完,启用 Prompt Caching 可大幅缩短)、服务端负载(高峰期排队)。工程优化优先级:首先开启流式输出(对体感改善立竿见影);其次对长且固定的 System Prompt 启用缓存;最后选择离用户最近的区域端点。总生成时延(TTFT + 生成速度 × token 数)才是评估完整体验的指标。
一个类比
就像餐厅上菜:TTFT 是"服务员把第一道菜端到桌上"的时间,整体延迟是"最后一道菜上完"的时间。就算总共点了十道菜,只要第一道菜快速上来,客人就不会觉得"等了好久"。流式输出就是这个策略——先端来头盘,让客人有得吃,厨房继续做后面的。
举个例子
import anthropic, time
client = anthropic.Anthropic()
start = time.perf_counter()
ttft = None
# 流式调用:第一个 token 到达时记录 TTFT
with client.messages.stream(
model="claude-sonnet-4-6",
max_tokens=256,
messages=[{"role": "user", "content": "解释什么是机器学习,用三段话"}]
) as stream:
for text in stream.text_stream:
if ttft is None:
ttft = time.perf_counter() - start # 第一个 token 的时刻
print(text, end="", flush=True)
total = time.perf_counter() - start
print(f"\nTTFT: {ttft*1000:.0f} ms,总耗时: {total*1000:.0f} ms")PYTHON 示例
相关概念
- → Streaming· 流式输出
- → Prompt Caching· 提示词缓存