延迟优化
问题
AI 应用响应太慢(首 Token 延迟 > 3s),用户体验差,如何优化?
答案
一、延迟指标
| 指标 | 含义 | 用户感知 |
|---|---|---|
| TTFT | Time To First Token,首 Token 延迟 | 最关键 — 用户感知"开始响应" |
| TPS | Tokens Per Second,生成速度 | 阅读流畅度 |
| E2E Latency | 端到端完成时间 | 总等待时间 |
二、延迟优化全景
三、关键优化手段
1. 流式输出 — 最重要的感知优化
// 流式渲染将 TTFT 从 "等全部生成完" → "等第一个 Token"
// 用户感知延迟从 5s → 0.3~0.5s
const stream = await openai.chat.completions.create({
model: 'gpt-4o',
messages: [{ role: 'user', content: query }],
stream: true, // 开启流式
})
for await (const chunk of stream) {
const text = chunk.choices[0]?.delta?.content ?? ''
process.stdout.write(text) // 逐 Token 展示
}
核心观点
流式输出是 AI 应用 必须 开启的功能,它将用户感知延迟降低一个数量级。
2. 模型选择与量化
| 方案 | TTFT 改善 | 效果影响 |
|---|---|---|
| GPT-4o → GPT-4o-mini | 3~5 倍 | 简单任务无影响 |
| 70B → 7B 开源模型 | 5~10 倍 | 复杂任务有损 |
| FP16 → INT8 量化 | 1.5~2 倍 | 基本无损 |
| FP16 → INT4 量化 | 2~3 倍 | 轻微有损 |
3. Prompt 精简
输入 Token 数直接影响 TTFT(Prefill 阶段):
| 优化 | 效果 |
|---|---|
| 去除冗余 System Prompt | 节省 20~50% 输入 |
| 历史消息摘要压缩 | 节省 50~80% |
| RAG 结果截断至 Top3 | 节省 30~60% |
常见面试问题
Q1: TTFT 和 TPS 哪个更重要?
答案:
TTFT 更重要。用户对"何时开始响应"最敏感,研究显示超过 2s 无响应用户就感到焦虑。TPS 只要 > 5 tokens/s 就能跟上人的阅读速度。
Q2: 推测解码(Speculative Decoding)如何加速?
答案:
用一个小模型(draft model)快速预测多个 Token,再用大模型一次性验证。验证比逐个生成快,因此总吞吐量提升 2~3 倍。
小模型预测: [A, B, C, D] — 快
大模型验证: [A, B, C, ✗] — 一次验证前 3 个
接受 A, B, C → 大模型从 D 位置重新生成
Q3: 端到端延迟的瓶颈通常在哪?
答案:
网络延迟 (~50ms) → Prompt 序列化 (~10ms) → Prefill (~200ms~2s) → Decode (~1~10s)
- 短回答:瓶颈在 Prefill(取决于输入 Token 数)
- 长回答:瓶颈在 Decode(取决于输出 Token 数)
- Prefill 优化靠压缩输入,Decode 优化靠 KV Cache 和硬件加速