返回列表

温度(Temperature)与采样:大模型生成回答的稳定性

大模型生成的回答为什么有时候特别稳,有时候又飘得没边?关键因素之一是温度(Temperature)。

 

温度只管"随机度",不管"对不对"。要准的任务把它调低,要活的任务把它调高,设置错了,同一道题可能给出两种相反的答案。本文想把温度从原理到工程用法讲清楚,再拆解几个常见误区,帮你在调参时少走弯路。

 

 

温度到底是什么

 

 

温度是大模型生成时的随机度参数。低温度输出更确定,高温度更发散、更有创意。

 

得先说清模型的生成方式。它不是一次性写出整句话,而是逐 token 输出,专业说法叫自回归生成。每输出一个 token 之前,模型对着词表里几十上百万个候选,算一遍"下一个该是谁"的概率。温度就是调节这些概率如何被使用的系数。

温度等于 0 时,模型通常挑概率最高的那个词,确定,但也死板。温度等于 1,大致是模型原本算出来的分布。继续调高,分布被拉平,冷门词也有了出场机会。同一个 prompt 生成两次得到不一样的稿子,背后就是温度在起作用。要讲清一点:温度是采样阶段的控制参数,和模型权重、训练过程无关,它不改变模型掌握了多少知识,只改变每一步怎么挑词。

 

 

概率是怎么被拧动的

 

 

我们先把原理拆分来看。模型每一步给一堆候选词的概率,温度调低就压扁分布、偏向高概率词,调高就拉平、允许冷门词出场。

 

具体说,模型先给每个候选打一个原始分数,叫 logits,再做一步 softmax 转成概率。温度 T 作用在 softmax 之前:p_i = exp(z_i / T) / Σ exp(z_j / T)。T 小于 1,高分被放大、低分被压得更低,分布变尖,更容易选头名。T 大于 1,高低分差距被抹平,大家概率接近,冷门词也能冒头。两个极限值得记住:T 趋近 0,分布塌缩到唯一最高分项,等价于贪心解码(greedy decoding);T 趋近无穷,分布趋近均匀,每个候选等可能被抽到。温度真正调节的,是输出分布的熵。

 

举个具体的。假设下一步候选是"报告""文章""猫",原概率 0.7、0.2、0.1。T 调到 0.5,差距拉大,通常会选"报告"。T 调到 2,三者挤到 0.4、0.3、0.3 附近,偶然输出"猫"也不奇怪。发散感就是从这儿来的。

 

顺带说采样。标题里写了"采样",不能只讲温度。采样发生在温度缩放之后:模型先按 T 把分布调好,再从中抽取。top-k 是在概率最高的前 k 个里挑,top-p(也叫核采样,nucleus sampling)是在累计概率加到 p 的最小候选集合里挑。它们管"从多大的候选池里抽",温度管"池里每个候选被抽中的倾斜度",三者共同决定最终文本。一个常被忽略的点:top-p 和温度要配合调,只压温度不收池子,发散度仍可能偏高。部分框架默认温度是 1.0,但默认值不代表适合你的任务,仍要按场景重设。

 

 

工程上怎么用

 

 

取数、分类这类要稳的场景,温度要低;头脑风暴、文案这类要活的场景,温度可高。一个参数设错了,结果忽左忽右,排查许久才发现是温度档位的问题。

 

落到具体任务上,几个常见档位可以参考:

字段抽取,比如从发票、合同里提取金额和日期,温度放 0 到 0.2,有助于保持格式一致,下游系统才好接。

分类打标,比如舆情正负面、工单归类,温度 0.1 上下,避免模型前后判标不一致。

NL2SQL 这类翻译活,把自然语言翻成 SQL,通常需要低温,翻错一个字段整条查询就失效。

代码生成,偏低但留一点随机,纯 0 容易卡在重复片段。

摘要,0.3 左右,既忠实又不至于太死板。

翻译,低温,要求译文准确,通常不宜自由发挥。

客服自动回复,低温有助于保持口径一致,避免同一问题给出两种说法引发误解。

医疗、法律这类问答,低温配合检索增强,事实优先。

数据清洗与规整,低温有助于保持规则执行一致,避免同一批数据两种处理口径。

创意命名、营销文案,0.7 到 0.9,需要多版不同稿件供挑选。

闲聊机器人、角色对话,中高温度,回答更自然。

 

再补两条工程细节。对字段抽取、NL2SQL 这类强结构任务,低温通常还要配合约束解码或结构化输出(JSON mode、function calling)把格式锁死,单靠低温仍可能偶尔跑偏。另外在检索增强(RAG)架构里,问答节点更应保持低温:温度越高,模型越容易偏离检索证据去编造,随机度管不了事实,这一点在带知识库的系统里要分清楚。

 

不过有时也不要觉得温度越低越好。T 等于 0 虽然确定,但模型容易陷进循环,反复输出同一个词、同一句话,影响阅读体验。多个候选概率本来就接近时,硬压到 0 反而让输出陷入停滞,丢掉该有的灵活。留一点温度,0.1 到 0.3,往往比纯 0 稳。要减少循环,更可靠的做法是开启重复惩罚(repetition penalty)或在解码层设置 no-repeat-ngram,温度只是辅助手段。

 

还有调温度并不能能修知识错误。这是很深的误会。温度只动概率分布的形状,不动模型"到底知道什么"。模型本来就不懂的事,低温可能让它更笃定地说错。事实层面的错,得靠检索增强、知识库、工具调用去补。

 

前面讲了原理,这里落到产品实践。小艾智能体的 LLM Node 允许按节点类型单独设温度,各个节点分别设置,不强制全局统一。问答类的节点和 SQL 翻译节点走低温,有助于保持准确,因为答错一个数、翻错一个字段都会带来明确的返工成本。辅助写作用的节点走高温,有助于增加多样性,文案、摘要这类任务需要多版不同稿件供挑选。同一个工作流里,不同节点各设各的,取数和创意有助于分别兼顾稳定度和灵活度。