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 示例
相关概念