按下发送,回答逐字浮现——这几十秒里,你的消息在 DeepSeek、豆包的服务器内部走完一整条流水线。一条消息的旅程要经过拼装、预填充、逐字解码、停止判定四站,本文按时间顺序还原全程,看完你就知道延迟都花在哪。
进站:拼装与预填充
第一站拼装:聊天模板把系统提示、历史对话与你的新消息合成一段带角色记号的序列。第二站预填充:模型对整段序列并行计算,给每个字生成键值缓存,只算一次——不管输出多长,这段成本固定。前缀缓存是怎么命中的那篇讲的快车道就开在这一站:公共开头若已缓存,直接跳过大部分预填充,首字延迟立减,这是所有对话产品的提速第一招。
在途:逐字解码的循环
第三站解码:模型基于已有序列挑下一个字,附进序列再挑下一个,循环往复。每一步都要走完注意力与前馈的计算,重复循环是怎么自我强化的那篇讲的复读风险、随机种子是怎么影响输出的那篇讲的掷骰,都发生在这一站的每一步里。投机解码这类优化动的也是这一站——让小模型起草、大模型批量验证,缩短循环次数;MoE 的共享专家是干嘛的那篇讲的结构设计,则决定每步计算内部要开多少工位。
旅程速查表:四站与可优化点
- 拼装:模板正确性决定后续质量
- 预填充:前缀缓存省重复劳动
- 解码:投机解码、KV 共享压缩每步成本
- 停止:EOS 判定与上限截断把关
- 排查慢与怪,先定位卡在哪一站,再对症下药
出站:停止判定与返回
循环不会永远转:模型生成 EOS 记号、撞上长度上限或命中停止词,任一条件满足即停。全文组装后流式推回你的屏幕,你看到的逐字浮现,就是服务端边生成边推送——首字之后每几十毫秒送出一小段,观感远好于干等全文。蒸馏时老师的哪些答案值得学那篇讲的训练侧工艺、低秩分解是怎么省参数的那篇讲的体积压缩,决定了这条流水线底层跑的是哪个型号——旅程天天走,楼是提前盖好的。
| 体感 | 卡在哪一站 | 先查什么 |
|---|---|---|
| 首字等得久 | 拼装与预填充 | 输入长度、模板是否正确、前缀缓存是否命中 |
| 吐字慢 | 逐字解码 | 每步解码成本、并发与带宽 |
| 说不停 | 停止判定 | EOS 判定、长度上限与停止词 |
| 逐字浮现而非整段 | 返回方式 | 是否走流式推送,首字后每段间隔多长 |
关于请求旅程的三个常问问题
- 为什么回答开头等得久、后面越来越快?:开头要等预填充整段算完,首字延迟由此而来;进入逐字解码后每步只算一个字,流式输出就顺滑了。
- 多轮对话每一轮都要重走全程吗?:预填充理论上要处理包含历史的全序列,但前缀缓存命中时公共部分直接复用,重复成本大幅下降。
- 流式输出和一次性返回是两条流水线吗?:生成过程相同,区别只在交付方式——边生成边推或算完再发,后者显得更慢但总耗时一致。
全程四站记心里:拼装、预填充、解码、停止,延迟的账一笔一站对得上。再把延迟账串起来:首字延迟主要花在拼装校验与预填充,生成速度主要取决于每步解码成本,而总时长还受停止条件影响——该停不停会白烧算力,停得太早则答案不完整。定位卡顿先拆环节:首字慢查预填充与缓存命中,中途慢查解码成本与带宽,结尾拖查停止条件。这几个环节各自都有对应的优化手段,理解旅程的分站结构,就理解了所有推理优化的着力点在哪。把这趟旅程和日常体验对上号:等得久、吐字慢、说不停、答非所问,四类抱怨分别对应四站里的四类问题,逐个排查比盲目换模型有效得多。下次遇到响应异常,先别急着重试,按四站定位一遍,往往比盲目重试更快找到原因。


