做成本 / 延迟工程,第一步是理解 LLM 生成分两个阶段(NVIDIA 推理优化指南):
- Prefill(预填充)——一次性并行处理整段 prompt、算出第一个 token,是矩阵-矩阵运算,能打满 GPU 算力,属计算受限(compute-bound),决定首 token 时间(TTFT)。
- Decode(解码)——按自回归逐个吐 token,每步是矩阵-向量运算、算力利用率低,瓶颈是把权重和 KV 从显存搬进 GPU 的带宽,属显存带宽受限(memory-bound),决定逐 token 间隔(ITL)。
这条分界就是后面所有优化的地基:减 prompt 长度主要省 prefill / TTFT,减输出长度主要省 decode / 总时长。
由此得到一条反直觉但很实用的结论(Anthropic 降延迟文档 + NVIDIA):输出 token 通常单价高于输入 token,而且因为 decode 是逐 token、显存受限的串行过程,生成长度往往是端到端总时长的主导项——少生成 token 比少喂 token 对延迟影响更大。
Anthropic 官方给的降延迟三招正对应这点:
1. 选对模型——速度敏感的场景用更快的 Claude Haiku;
2. 优化 prompt 和输出长度——让模型简洁、用 max_tokens 设硬上限;
3. 用流式(streaming)——让首 token 尽早到达,改善体感响应。
一个细节坑:要求「按句 / 段限制」比「按精确字数限制」更有效,因为模型是按 token 而非按词计数的。
📷 配图位:一条横向时间轴,左段标「Prefill(compute-bound,决定 TTFT)」一整块并行处理 prompt,右段标「Decode(memory-bound,决定 ITL/总时长)」一个个串行吐出的小方块,箭头标注「输出越长,这段越长」