把大模型的温度设 0,按理说应该每次都给出一样的答案,可实际用下来,同样的提问偶尔还是会有差别。大多数时候答案一致,差别恰恰藏在工程细节里,值得拆开看。
采样链路里温度在哪一步
模型每一步输出的其实是整张词表的概率分布,温度是在分布上做缩放的旋钮:温度调低,高概率词更突出;设到 0,分布退化为只认最高分。进来的是原始分数,发生的是缩放与归一化,出去的是候选词的最终概率。
设 0 的意思是每步都选当前分数最高的词,这叫贪心解码。理论上同样的输入、同样的模型,每一步的选择都唯一,输出就该完全一致。顺带一提,温度只管缩放,不管候选范围,截断候选集的是另一类参数,两者常被混为一谈。
为什么要有温度这个旋钮:温度为 0 意味着永远选最稳的那条路,回答可靠但容易千篇一律;温度调高,低概率词获得出场机会,表达更多样。产品按场景定默认值,问答类偏低,创作类偏高,本文只关心设 0 这一头。
贪心也会撞上并列
变数首先来自并列:两个词的分数几乎打平时,浮点舍入的微小差异就能让最高分的选择翻转,后面整段跟着改道。岔路口在长回答里很多,一路小差异滚到最后,就长成两段明显不同的文字。
批处理也埋着差异:同一批里其他请求会影响计算的分组与顺序,浮点加法不满足严格可交换,顺序一变,最后几位小数就抖。你在 DeepSeek、讯飞星火里重复同一提问,多数次答案一致、偶尔换个说法,常是这类微小抖动在起作用。并列还不止词与词之间:整句话的分枝概率咬得极近时,多走一步才见分晓,用户看到的是两段都通顺却不一样的回答,源头都在那零点几的分差。并列概率在小词表上少见,在常用词密集的日常表达里并不罕见,越接近日常用语的问题,越容易踩到分岔路口。
浮动还来自哪些环节
服务端不止一个模型副本:不同机器、不同精度设置,比如半精度或量化版本,算出的分数会有系统性微差,路由到哪台就得到哪台的结果。版本一更新,答案变化更明显。
输入的隐性状态也会作祟:同样的提问如果带着不同的历史消息或系统设定,输入就不完全相同,输出自然有别。对齐输入时还要注意隐性信息:知识检索注入的片段、时间相关的系统提示,都可能悄悄改变输入。判断输出是否该一样,要把这些前提对齐再比。想验证是哪一类波动,可以做个小实验:同一时刻连发两次相同提问,结果一致多半是并列与浮点;隔几分钟再发出现差异,则更像副本或版本不同,实验比猜测省时间。做实验时避开高峰时段,能少受批内扰动干扰。
四类波动来源,按触发条件和怎么验证分开看。
| 波动来源 | 触发条件 | 用户看到的样子 | 怎么验证 |
|---|---|---|---|
| 并列分数打平 | 两个词的分数几乎打平,浮点舍入的微小差异让最高分的选择翻转 | 长回答中途改道,长出两段都通顺却不一样的文字 | 同一时刻连发两次仍一致,多半是这一类 |
| 批内分组与顺序 | 同批其他请求影响计算的分组与顺序,浮点加法不满足严格可交换 | 多数次答案一致,偶尔换个说法 | 避开高峰时段发问,少受批内扰动 |
| 多副本与精度设置 | 路由到不同机器,或半精度、量化版本 | 分数有系统性微差,路由到哪台就得到哪台的结果 | 固定版本、固定精度、固定输入再比较 |
| 输入的隐性状态 | 历史消息、系统设定、检索注入的片段、时间相关提示不同 | 同样的提问得到不同的输出 | 把提问与上下文对齐到逐字一致 |
- 自查:先确认提问与上下文逐字一致;再确认服务版本与精度设置;接着考虑并列分数的舍入翻转;最后排除批内计算顺序的浮点抖动。
输出波动还和后续环节有关,批大小和延迟的取舍是怎么权衡的?决定了你和其他请求怎么分算力,思考模型的思考段是怎么生成的?标记切换解释先想后答的流程,重试的退避是怎么算的?越等越久和超时后的部分结果怎么处理?半截答案覆盖失败与中断的情形。
温度设 0 快问快答三则
- 温度 0 就完全没有创造力吗?:对采样而言是的,但提示词本身仍能引导出多样的表达。
- 想要完全复现结果怎么办?:固定版本、固定精度、固定输入,条件全锁死再比较。
- 温度越高越离谱吗?:高温只是放大低概率词的出场机会,内容是否跑偏还要看模型本身,判断内容质量还是要看下游评测。


