Temperature、Top-k、Top-p 分别控制什么?

调大模型的"口味":Temperature、Top-k、Top-p 三大采样参数详解
你有没有遇到过这种情况——问大模型同一个问题,它每次给的答案都不一样?
这不是 bug,而是刻意设计的"创造力"。
但如果你想要稳定、可复现的输出呢?
这背后的操控者,就是 Temperature、Top-k、Top-p 这三个采样参数。它们像是调酒师的配方,决定了你的大模型输出是"高度一致的马天尼"还是"每次都有惊喜的莫吉托"。
大模型是怎么"选词"的
要理解这三个参数,先得搞清楚大模型是怎么输出文字的。
大模型的本质是一个概率机器。在输出每个词时,模型会为所有可能的下一个词计算一个概率,然后从这些概率中"抽一个"出来。

举个例子。当模型输出到"今天天气真"这几个字后,下一个词可能是:
- "好":概率 40%
- "不错":概率 30%
- "糟糕":概率 20%
- "诡异":概率 10%
这就是一个概率分布。采样就是从这个分布里随机抽一个词。
为什么不能直接选概率最高的"好"?
因为那样的话,模型每次都会输出同样的内容。问十次"今天天气怎么样",得到十次"今天天气真好"。这不是智能,是复读机。
所以随机采样带来了多样性。但随机性太强也有问题——可能抽到概率只有 10% 的"诡异",输出变成"今天天气真诡异"。
这三个参数的作用,就是控制"随机"的度。
Temperature:控制概率分布的"温度"
Temperature 是一个缩放因子,它会改变概率分布的形状。
公式很简单:先拿原始分数除以温度,再做 softmax 得到新概率。
调整后的概率 = softmax(原始分数 / 温度)

温度高会发生什么?
温度大于 1 时,分布会变平滑。高概率词的优势被削弱,低概率词的机会增加。
拿前面的例子继续算:
- 温度 1.5 时,"好"从 40% 降到 30%,"诡异"从 10% 升到 15%
- "好"和"诡异"的概率差距变小了
这意味着模型更愿意"冒险",尝试不那么确定的词。
温度低会发生什么?
温度小于 1 时,分布会变尖锐。高概率词的 probability 更高,输出更确定。
温度 0.3 时再算一遍:
- "好"从 40% 飙升到 75%
- "诡异"几乎归零
这就是为什么低温度适合需要准确性的场景。
温度为零会怎样?
温度等于 0 时,模型直接退化为贪婪采样——永远选最高概率的词。
"今天天气真好"变成固定输出。
温度就像调鸡尾酒。温度高像加冰块,各种味道混合均匀;温度低像浓缩烈酒,主味特别突出。
记住一个原则:温度越高越有创造力,温度越低越保守。
Top-k:固定候选池的"守门员"
Top-k 的策略很直接:每一步只从概率最高的 k 个词里选,其他词概率直接归零。

具体流程是这样的:
第一步,给所有词按概率排序。
第二步,只保留前 k 个。
第三步,把这 k 个词的概率重新归一化。
第四步,从这 k 个里随机抽一个。
k = 1 就是贪婪采样,k 等于所有词等于不做限制。
Top-k 的优点是简单。设置 k = 50 就永远只从前 50 个候选词里选,计算量固定。
但缺点也很明显:k 值需要手动设定,不够灵活。
想象两种情况。第一种,分布很集中——"好"概率 95%,其他词加起来才 5%。这时候 k = 50 完全没必要,k = 2 就够了。
第二种,分布很分散——前 10 个词概率都差不多,都是 8%、7%、6%。这时候 k = 5 可能把第 6 名的词误伤了。
Top-k 像个固执的选秀评委。k = 10 就是硬性规定"只让前 10 名选手进决赛"。问题是,有些比赛前 3 名实力超群,有些比赛前 20 名旗鼓相当。
硬卡人数,有时候不公平。
Top-p:动态候选池的"智能筛选"
Top-p 的思路完全不同。它不按人头算,按概率算。
从累积概率最高的词开始选,直到累积概率超过阈值 p。

还是用前面的例子。四个候选词的概率分别是 0.4、0.3、0.2、0.1。
设置 p = 0.8。从最大的开始累加:
- "好":0.4,累加 0.4,没超过 0.8,继续
- "不错":0.3,累加 0.7,没超过 0.8,继续
- "糟糕":0.2,累加 0.9,超过 0.8,停
最终候选池是"好、不错、糟糕"三个词。
分布集中时,候选词少。假设"好"概率是 0.9,其他加起来 0.1,p = 0.9,只需要"好"一个词就够了。
分布分散时,候选词多。如果前三个词概率都是 0.3,p = 0.8,就需要三个词才够。
p 通常设置在 0.85 到 0.95 之间。越低越保守,越高越开放。
Top-p 的优势是自适应。分布集中时自动缩小范围,分布分散时自动扩大范围。
它不需要你知道该选几个词,只需要你告诉它"我想覆盖多少概率"。
Top-k 和 Top-p 有什么区别
这两种方法的核心区别:一个是数人头,一个是算总分。

Top-k 按排名硬选,Top-p 按概率软卡。
Top-k 每次采样的候选词数量固定,不管分布什么样。Top-p 的候选词数量动态变化,紧跟分布走势。
Top-k 更可预测,但可能在极端情况下表现不佳。Top-p 更灵活,但候选池大小不稳定。
实际应用怎么选?
大多数情况下,Top-p 是更好的默认选择。它不需要你猜测该选几个词,系统自己会判断。
有些系统会组合使用:先 Top-k 过滤掉明显的噪音词,再 Top-p 从剩余词里精细筛选。
这种做法在词表特别大的时候能提升效率。但对大多数场景,单独用 Top-p 就够了。
实战调参指南
说了这么多,具体怎么用?

代码生成、精确问答。这类场景需要准确稳定的输出。温度设 0 到 0.3,Top-p 设 0.8 到 0.9。模型会更倾向于最高概率的选择,减少胡编乱造。
日常写作、新闻摘要。需要逻辑连贯,但也要适度变化。温度设 0.3 到 0.7,Top-p 用默认 0.9。输出既不会太死板,也不会太离谱。
创意写作、广告文案。需要多样性,要有不同的表达方式。温度设 0.7 到 1.2,Top-p 设 0.9 到 0.95。让模型敢想敢写,就算概率低的词也有机会出场。
对话聊天、角色扮演。需要有个性,但不能太跳脱。温度设 0.7 到 1.0,Top-p 设 0.9 到 0.95。保持角色一致性的同时有合理的随机变化。
这里有个重要原则:这三个参数要配合着用,不是单选其一。
温度是油门踏板,控制整体激进程度。Top-p 是方向盘,决定候选池的大小微调。
温度很低时,Top-p 基本没意义。概率分布已经尖锐到只有一两个词可选了,再怎么调 p 都是那一个。
温度很高时,Top-p 更重要。分布被拉平了,需要靠 p 来划定候选范围。
实操建议:先从温度 0.7、Top-p 0.9 开始。根据效果微调。
想要更稳定就降温度,想要更有创意就升温度。Top-p 一般不需要频繁调整,0.9 是安全的默认值。
如果需要完全可复现的结果,温度设 0,Top-p 设 1.0 或更低,再配合固定随机种子。
三个参数配合使用就像调一杯鸡尾酒。Temperature 决定了整体的烈度,Top-k 和 Top-p 决定了你能从哪些配料中挑选。
记住一个原则:需要确定性就低温加小采样池,需要创造性就高温加大采样池。
下回调参时,先问自己:我更需要稳定输出还是多元变化?
但问题来了:大模型的"幻觉"问题。模型明明输出了流畅连贯的文字,为什么有时候内容却是错的?
这就是下一篇文章要聊的了。
