先这样答
直接回答:模型每一步生成的是整个词表上的概率分布,训练完成后分布本身是固定的,但「从这个分布里选哪个 token」由采样决定。默认 temperature 大于 0,选择带随机性,同一个问题每次的采样路径不同,输出文本就不同。不确定性来自采样这个动作,不来自模型本身在变化。
随机是设计而不是缺陷。每步都取最高概率(贪心解码)输出最稳,但开放式问题下答案千篇一律,还容易陷入重复,对话场景需要一点多样性才自然。需要稳定的场景把 temperature 设为 0 或调低,输出基本就一致了。还剩一个尾巴:推理是浮点运算,批处理、并行切分这些实现细节可能让数值有细微差异,长序列下被放大后仍可能出现个别 token 不同,所以「严格逐字可复现」在工程上要额外努力才接近。
收一句:不确定性来自采样机制加工程实现两层,前者是产品设计,后者是工程现实。面试时把这两层分开讲,就比大多数回答清楚。
面试官会怎么追问
- 「
temperature=0为什么还不保证完全一致?」 同样的计算在不同批大小、不同硬件、不同并行方式下,浮点求和顺序可能不同,微小数值差异在长序列里可能被放大成不同的 token 选择。要接近可复现,得固定随机种子、固定运行环境,并接受「基本一致」。 - 「关键业务怎么保证输出稳定?」 三件事配合:
temperature调到 0;提示词里固定输出格式,用程序校验结构,不合法就重试;对高频相同请求做结果缓存。指望模型每次逐字相同不现实,可靠靠的是校验和兜底。 - 「输出每次不同,是不是说明模型不可信?」 要区分两件事:措辞层面的变化在低温度下不影响事实内容,事实判断是稳定的;不可信的来源是模型本身的错误,不是采样随机。把随机性和正确性混在一起谈,是最常见的概念混淆。
回答的坑
- 把每次输出不同归因为「模型在实时学习」。推理时参数完全冻结,一次回答不会改变模型;对话里的「记忆」是历史被放进了上下文窗口,不是模型变了。
- 以为
temperature=0就能过逐字断言的测试。实现层面的非确定性仍在,对模型输出做逐字比对的测试天然容易间歇性失败,关键场景要靠格式校验和容错设计。
同系列的题
—— 本题完 ——