生成与采样:讲清温度。
"为什么完全相同的提示词我得到了不同的答案?"——这个问题揭示了思考 LLM 方式上最重要的转变:模型并不返回一个答案,它返回一个概率分布,再由一个独立的采样步骤把它变成你看到的文本。本篇解释这个步骤,揭开你在每个 API 里都见过的 temperature 旋钮的神秘面纱,并给你一个由任务驱动的设定规则。
模型输出的是一个分布,而非一个词。
在每一个生成步骤,模型并不选择下一个令牌。它产出一个覆盖其词汇表中每个令牌的概率分布——对接下来可能是什么的十万多种可能性各给一个置信分。在那之后,才由一个独立的采样步骤从该分布中选出一个令牌。然后被选中的令牌被接上,整个过程对下一个令牌重复进行。
Prompt: "The capital of France is"
Model's distribution over the next token:
" Paris" -> 0.85
" the" -> 0.04
" a" -> 0.02
" located" -> 0.02
" home" -> 0.01
... ~100,000 more tokens, almost all near zero ...
Sampling picks ONE. Then repeat for the token after that.
这就是那个能化解一整类困惑的思维模型:模型真正的输出是整个排了序的分布。"生成"是一长串"先分布、再选取"步骤的序列。相同提示词是否给出相同文本,完全取决于这个选取是怎么做的。
温度:多么强烈地偏向首选。
温度是一个单一数字(通常 0 到约 2),它在采样前重塑分布,控制最高概率的令牌相对其余令牌被偏向的强度。它不改变模型"想"什么——底层分布是相同的。它只改变采样在多大程度上果断地押注那个领跑者。
- 温度 0——总是取概率最高的那个单一令牌。分布实际上被塌缩到它的峰值。最可重复、最可预测、最少变化。有时称为"贪婪"。
- 温度 ≈ 1——大致按模型的分布原样采样。它自然的可变性水平:通常是那个可能的令牌,但合理的替代项确实会浮现。
- 温度 ≈ 2——平坦化分布。不太可能的令牌也获得了真实机会。输出变得更令人意外、更多样,但也更不连贯、更易出错。
temperature 0 temperature 1 temperature 2 |# |# |# |# |## |### |# |#### |##### |# . . . . . |####### . . |######### one peak, always likely wins but nearly flat, picks the top variety is real anything can appear Same underlying distribution; temperature only reshapes it.
实用的心象:温度是施加在文本上的一个"稳妥行事 ↔ 冒险尝试"旋钮。低温度紧贴最可能的路径;高温度则有意偏离它。
按任务选温度,而非按口味。
这个设定应当跟随任务,而非个人偏好。一个可靠的指南:
- 分类、提取、结构化输出:0 – 0.2。存在正确答案;你想要概率最高的那个。多样性在这里纯属坏处。
- 智能体中的工具调用/决策:0 – 0.3。你想要对相同输入有可预测的行为。"调用哪个工具"上的随机性是 bug,不是特性。
- 代码生成:约 0.2 – 0.4。低,但不为零——对新问题保留一点灵活,同时贴近走熟了的模式。
- 摘要、改写:约 0.3 – 0.7。措辞的多样性确实可取;内容反正受约束。
- 头脑风暴、创意写作:约 0.7 – 1.0 以上。你想要惊喜。那个最可能的单一令牌往往是最平庸、最难记的。
你也可能遇到 top_p(核采样),一个相关的旋钮,它转而截断分布——只从概率之和达到 top_p(如 0.9)的最小顶部令牌集合中采样。直觉上它限定了被采样令牌可以多么不可能。大多数应用只调温度,把 top_p 留在默认值;只在你有特定故障要缓解时才动它。
陷阱:"温度 0 是确定性的。"
最具影响的误解。温度 0 让输出大大更一致,但它不是相同结果的保证,原因与采样随机性毫无关系:
- 浮点非确定性。推理服务器为提高效率把许多请求批在一起。具体的批次改变了微小数值加法的顺序,而浮点加法并非完美满足结合律。通常不可见——但偶尔足以翻转哪个令牌排第一,尤其当前两名几乎打平时。
- 模型快照更新。相同的 API 模型名称随时间可能指向略有更新的权重。相同的调用,略有不同的分布。
- 服务端变化。缓存、路由和故障转移机制,即使在温度 0 下也会引入小扰动。
所以把温度 0 视为"低方差",绝不是"零方差"。如果你需要测试中真正的可重现性,在支持时把温度 0 与固定的 seed 结合,最好再固定模型版本——并且仍要预期偶发漂移,因为服务商把种子记录为尽力而为,而非合同保证。
真正的升级:当模型对相同提示词给出不同答案时,停止说它"错了"。它是在从一个分布里采样。有用的问题不是"它为什么不是确定性的?",而是"分布是否以适当的置信度集中在正确答案上?"——而这是可测量的。一个 80% 时间正确的模型,并不会因为某一次落在另外那 20% 里就坏了;那是采样,按设计运作。想要一致就用低温度,想要广度就用高一点的温度,并在多次运行而非单次运行上评判质量。