先这样答
大模型生成文本的方式是自回归:每一步只预测下一个 token,输出一个概率分布,采样出其中一个,把它接到已生成内容的末尾,再预测下一个,循环到出现终止符号为止。「一个字一个字往外蹦」不是界面特效,就是这个逐 token 循环的直接表现,流式输出只是把循环的每一步实时展示出来。
为什么这样设计:模型的训练目标就是「给前文预测下一个 token」,生成和训练用的是同一套机制,模型练什么就用什么,最稳。工程上,已生成部分的中间计算结果可以缓存复用(这个缓存就是 KV Cache),但新位置的计算必须等上一个 token 定下来才能开始,所以生成天然是串行的,速度受序列长度影响。
收一句:自回归把「写一段话」拆成「连续猜下一个词」,和训练目标完全一致,代价是没法整体并行生成。围绕它的提速工作,都是在不改变这个循环的前提下减少每步成本或步数。
面试官会怎么追问
- 「为什么不一次生成整段?」 模型的输出是每个位置的概率分布,没有一步出全文的机制,同时确定所有 token 和训练目标对不上。非自回归生成有研究,但文本领域主流仍是自回归,因为它效果稳、和训练方式一致。
- 「串行生成怎么提速?」 思路是减少步数或压低每步成本:KV Cache 避免重复计算历史;投机解码用小模型先草拟几个 token,大模型一次验证多个;服务端再做批量调度提高硬件利用率。这些都不改变自回归本身。
- 「模型能修改已经生成的部分吗?」 不能。自回归只往前走,前面的 token 一旦生成就固定了,后面的生成都以它为条件,错误会一直带着往下走。这也是长回答容易中途跑偏后一路偏到底的原因。
回答的坑
- 把逐字输出当成模型「边想边改」的写作过程。每一步只是条件概率采样,模型不会回头修改,也没有整篇的草稿在背后。
- 以为流式输出是「生成完再假装打字」。流式就是边生成边返回,自回归机制天然支持;非流式只是等循环走完一次性给你。
同系列的题
—— 本题完 ——