同一段提示词,连着提交两次,回答的开头就不一样。有人以为模型在「状态不稳」,有人怀疑是不是网络抖动。都不是。这是模型本身的设计:它输出的不是唯一答案,而是一个概率分布里抽出来的一个样本。
温度、随机种子、top_p 这几个参数,动的是抽样方式,不是模型的知识。理解这一点,很多困惑就散了。
模型的工作方式是预测下一个词。给定前面所有内容,它算出每个候选词的概率,然后从中选一个。这个「选」的动作,就是随机性的来源。
如果每次都用概率最高的那个词,回答会固定,但也会变得呆板、重复、绕圈。真实文本里,同一句话有多种合理说法,全都押最高概率反而写不出人话。所以设计上要留一点随机。
把概率分布想象成一副灌了铅的骰子:某些面重,落到的机会大;某些面轻,偶尔也能出现。温度这个参数,调的就是铅灌得有多重。

温度调低,概率高的候选更容易被选中,概率低的几乎没机会。表现是回答稳定、用词保守、重复跑多次结果接近。
低温度适合要准确的任务。从合同里抽出甲方乙方的名称、把一段话里的日期挑出来、按固定格式输出字段,这些场景要的是别出花样。
温度调高,低概率的候选也有机会冒出来。表现是用词跳、句子结构多变、偶尔冒出意想不到的表达。
高温适合要发散的任务。起标题、想广告语、编故事开头、头脑风暴列方向,这些任务要的是多样性,稳定反而没用。
温度调到很低,回答会开始重复,同一段话换个说法再说一遍,或者在几个词之间来回打转。温度调到很高,会出现语法散架、逻辑跳跃、答非所问。这两个方向的失败方式不一样,但都很难看。
多数通用对话场景,平台预设的温度落在中低区间。用户感知不到这个参数,是因为产品已经替你选了一个稳妥值。
种子是随机数的起点。计算机的随机是伪随机:给一个起点,后面的一串数就固定了。起点相同,抽出来的序列就相同。
所以固定种子,可以在同样温度下复现同样的输出。这对调试很要紧。你改了一句提示词,想确认效果变化是不是这句改出来的,就得把种子锁住,否则两次结果的差异里混着随机的成分,判断不出来。
种子有一个常见的误解:它能跨平台复现。实际上不能。不同厂商的模型不同,同一模型不同版本的实现也可能不同,同一个种子在 A 平台和 B 平台抽出来的东西毫无关系。种子只在同一环境、同一模型版本、同一参数组合下有效。
有些平台的接口根本不接受种子参数,有些接受但内部做了并行计算,结果仍会有微小差异。要求严格可复现的系统,靠的不是种子,而是把模型的输出再走一遍规则校验,把不稳定的部分挡在外面。
温度调的是概率的「陡峭程度」,top_p 和 top_k 调的是「候选范围」。
top_k 是只保留概率最高的 k 个候选,其余直接排除。k 设成 1,等于永远选最高的那个,输出固定。k 设成 50,候选面就宽了。
top_p 换个思路:把候选按概率从高到低累加,累到 p 为止,只在累加到的这一小撮里抽。p 设成 0.9,意思是只在占九成概率质量的那批词里选;p 设成 0.5,范围更窄,更保守。
两套参数有重叠的功能,多数平台只暴露其中一个。工程上的经验是:动一个,别两个一起动。两个一起改,出了效果你分不清是谁的功劳。
同类的旋钮还有几个名字:重复惩罚、频率惩罚、存在惩罚。它们的作用是压低已经出现过的词的概率,让模型别在原地打转。写长文、写代码时这几档有用,调得过高会让模型刻意回避必要的重复词,把「的」「是」这类高频字也压下去,句子就散了。
网页版产品很少把温度、种子暴露给用户,原因不神秘。
多数用户调了会更差。把温度从默认值拉到很高,第一次看到新鲜的表达会兴奋,第十次发现答非所问就明白问题了。产品方宁愿替用户守住一个稳妥区间。
同一个数值在不同任务上意味不同。写诗的合适温度和查法规的合适温度差得远,产品按功能切成了几个入口,每个入口后面绑一套预设,比让用户在同一个页面里自己试要省事。
各家参数名一样,含义不完全一样。A 平台温度 0.7 的手感,未必等于 B 平台温度 0.7。把参数摊在明面上,用户会拿数值横向对比,得出的结论经常是错的。

把邮件内容整理成结构化的字段、把自然语言里的金额识别出来、把一段非标准表格转成固定列,这类任务把温度压到接近 0。要的是每次结果一致,错也要错得一样,方便排查。
写十条不同角度的推广语、给产品起五个名字、生成几版活动方案。这类任务把温度抬到中高,并且一次多跑几遍,从结果里挑。不是让模型一次给你最好的,是让它给你足够多的选项。
这类场景的矛盾最突出。温度高一点,回答自然、不像模板;温度低一点,不容易说出越界的话。实际做法是温度取中低,再用一层规则或审核模型兜底,把不合规的表达挡回去。
每天要处理几千条工单分类、几万条评论打标。这类任务的评判标准是整体准确率和稳定性,单个结果的好坏次要。温度固定在低区间,跑完抽检一批,看错误集中在哪些类别。
不完全是。多数实现里温度设到 0 会退化成「取最高概率」,看起来确定,但底层计算有浮点误差,并行批次之间也可能有微小差别。追求严格一致的系统,不能只靠这一个参数。
有人把温度当成「让模型更聪明」的开关,觉得调高就答得更好。这个理解错了方向。温度只改变抽样的分散程度,模型知道的东西一点没变。回答变差或变好,是因为抽样抽到了不同的路径,不是因为知识变多了。
把任务说清楚、给出示例、限定输出格式,这些动作对结果的影响,比在温度上试十几档要大。先改提示词,再动参数,顺序反了会浪费很多时间。

如果用的是网页版产品,通常看不到这些参数,也不需要看。产品已经把温度按场景调好了。想得到不同的结果,更快的办法是换一种问法,或者明确要求「换个角度再说一遍」。
如果用的是接口,先按任务类型定一个初值:抽取类接近 0,问答类 0.3 到 0.7,创意类 0.8 以上。跑二十条真实样本,看结果分布,再微调。调完把参数写进配置,别留在代码里,不然下一个人接手会找不到。
需要复现的问题,把种子、温度、模型版本三个值一起记下来。只记其中一个,等于没记。
这些参数的存在,说明模型不是查表机器。它的输出是一个抽样结果,抽样规则可调。知道规则在哪,就不会把随机当成故障,也不会把偶发的好结果当成能力。