为什么 AI 每次回答不一样?—— 温度参数是 AI 的"创意调节旋钮"

试一下:你给 ChatGPT 同一个问题,连问 5 次。它会给你 5 个措辞不同、角度不同、甚至结论不完全一样的回答。

但如果你把"温度(Temperature)"调到 0------问 100 次,每次回答一字不差。

这篇文章告诉你温度具体怎么工作------从概率分布到随机采样,从"保守复读机"到"天马行空"。文末有一个纯数字推演------你可以手算一遍,彻底理解温度是做什么的。


AI 不是"想"一个答案,是"抽"一个 Token

AI 生成回答的过程不是"写出最优答案"------是逐个 Token 抽样。给定前文,模型计算下一个 Token 的"概率分布":

arduino 复制代码
前文: "今天天气真"
         ↓ 模型计算
候选 Token:
  好  → 概率 0.45
  不  → 概率 0.20
  热  → 概率 0.15
  冷  → 概率 0.08
  糟  → 概率 0.05
  棒  → 概率 0.04
  烂  → 概率 0.02
  其他 → 聚合概率 0.01

模型实际上给词典里 5 万个 Token 每个都算了一个概率------大部分 Token 的概率接近 0------但每个都有一个数。

如果每次选概率最高的 Token()------每次回答都是"今天天气真好"------千篇一律,一模一样的答案。但 AI 实际是抽样------概率高的 Token 更容易被抽中------但不是绝对被选中。 被抽中的概率是 45%, 是 20%, 是 15%。有时候(虽然概率低)------"糟"会被抽中 → "今天天气真糟"------然后整个回答的方向就完全不同了。

这个概率分布和抽样机制------就是 AI"随机性"和"创造性"的唯一来源。


温度是怎么工作的:在抽样之前,先"拉伸"或"压缩"概率

温度(Temperature,通常写作 T)是一个 0 到 2 之间的参数。在抽取 Token 之前,它先把所有候选的"原始分数"(logits)除以 T------然后再做 Softmax 变成概率------然后再抽样。

ini 复制代码
原始分数(logits):  [4.0, 2.5, 1.0, 0.3]   ← "好/不/热/冷" 的 logits
                                ↓ 每个分数 ÷ Temperature
T=0.5 → 除以 0.5 →  [8.0, 5.0, 2.0, 0.6]   → Softmax → 概率更陡峭
T=1.0 → 除以 1.0 →  [4.0, 2.5, 1.0, 0.3]   → Softmax → 概率不变
T=1.5 → 除以 1.5 →  [2.7, 1.7, 0.7, 0.2]   → Softmax → 概率更平坦

T < 1(低温度):除以一个小于 1 的数 = 放大所有原始分数 = 让高分的更高、低分的更低 = 概率分布变陡峭 = 模型几乎只抽最高概率的 Token → 回答确定、保守、固定。

T = 1(默认):不改动原始分数 = 模型用自己真实的概率分布来抽样 → 有创造力但可预测。

T > 1(高温度):除以一个大于 1 的数 = 缩小所有原始分数 = 高低分趋近 = 概率分布变平坦 = 低概率 Token 也有机会被抽中 → 回答跳脱、从不同角度切入、但也容易胡说。


一个手算例子:T=0.5 vs T=1.0 vs T=2.0

假设下一个 Token 只有四个候选:

复制代码
Token       Logit(原始分数)
好          4.0
不          2.0
热          1.0
冷          0.5

Softmax 公式:P(i) = e^(logit_i/T) / Σ(e^(logit_j/T))

T = 1.0(默认)

ini 复制代码
e^4.0 = 54.6     →  54.6 / 61.5 = 88.8%
e^2.0 = 7.4      →   7.4 / 61.5 = 12.0%
e^1.0 = 2.7      →   2.7 / 61.5 =  4.4%
e^0.5 = 1.6      →   1.6 / 61.5 =  2.6%
总和 = 61.5

"好"被抽中的概率 88.8%,"不"有 12% 机会------AI 大多数时候说"好",20 次里有大概 3 次说别的。有变化,但不离谱。

T = 0.5(低温度)

ini 复制代码
e^(4.0/0.5) = e^8.0  = 2981    →  2981 / 3057 = 97.5%
e^(2.0/0.5) = e^4.0  = 54.6    →    55 / 3057 =  1.8%
e^(1.0/0.5) = e^2.0  = 7.4     →     7 / 3057 =  0.2%
e^(0.5/0.5) = e^1.0  = 2.7     →     3 / 3057 =  0.1%
总和 ≈ 3057

"好"的概率被压到 97.5%------AI 几乎每次都说"好"------回答高度统一、一行不差、像规范说明书。

T = 2.0(高温度)

ini 复制代码
e^(4.0/2.0) = e^2.0  = 7.4     →  7.4 / 13.0 = 56.9%
e^(2.0/2.0) = e^1.0  = 2.7     →  2.7 / 13.0 = 20.8%
e^(1.0/2.0) = e^0.5  = 1.6     →  1.6 / 13.0 = 12.3%
e^(0.5/2.0) = e^0.25 = 1.3     →  1.3 / 13.0 = 10.0%
总和 ≈ 13.0

"好"的概率降到了 56.9%,"不"有 20.8%,"热"和"冷"合计 22.3%------AI 经常不走寻常路------回答有创意、但也可能不准确。50 次输出里------大概只有 28 次是"好"------剩下的 22 次可能让你想不到。


不同温度的"人格"

温度 AI 的样子 适合场景 风险
0 每次都选最高概率的 Token------输出完全确定 代码、数学、翻译、事实提取 没有灵活性,小概率的正确选择永远不被考虑
0.2-0.5 稳定、保守、精准 技术文档、合同条款、答案需要可复现 回答僵化,语感不自然
0.7-1.0 准确和创意平衡 日常对话、文章写作、头脑风暴 有些不确定性
1.2-1.5 创造性强,少走寻常路 创意文案、写诗、找灵感 有 5-10% 概率输出偏离正轨
1.5-2.0 非常随机,逻辑链易断裂 几乎没人用------只是实验性调参 高概率胡说八道

温度 = 0 时 AI 不是"更聪明"------它只是完全不冒风险 。但在需要创意的场景里,不冒风险 = 表现平庸。温度 = 1.2 时 AI 不是"更聪明"------它只是更敢犯错------在需要灵感的场景里这是好事,但在写生产代码时是坏事。


另一个相关参数:Top-P(Nucleus Sampling)

除了温度,还有一个常见参数------Top-P。它的逻辑跟温度不同:

css 复制代码
Top-P = 0.9 的意思是:
把候选 Token 按概率降序排列 → 从最高概率开始累加 → 
只在累加概率达到 90% 以内的 Token 里取样 → 剩下的 10% 直接丢弃

温度调整的是"概率分布的陡峭程度"------所有的 Token 概率都变了,但都还有机会被选中。Top-P 调整的是"候选池的大小"------它把低概率 Token 直接砍掉,只在一个动态大小的"靠谱 Token 池"里做抽样。

两个参数可以同时使用。在实践中------大多数时候你只需要关心温度的直觉:把温度想成一个旋钮------"要精确回答调到 0"、"要创意调到 1.0"------对大部分实际场景足够用了。


一句话总结

温度不是让 AI 更聪明或更笨------它是让概率分布更陡峭或更平坦。温度 0 = 固定输出,温度 1 = 真实的概率分布,温度 2 = 每个 Token 概率趋于均匀。你要精确选低温度,你要创意选中温,你要惊喜(或灾难)选高温度。AI 的"随机性"不是故意掺水------是抽样机制跟概率分布发生相互作用后的自然结果。

相关推荐
MomentYY1 小时前
RAG 建库:资料是怎么存进去的?
人工智能·agent·ai编程
Georgewu2 小时前
AI领域的各种Engineering是什么意思?
ai编程
阿沐沐,2 小时前
Codex CLI 沙箱与审批配置:从 workspace-write 扩展可写目录和命令网络权限
gpt·ai·chatgpt·ai编程
大霞上仙3 小时前
Trae vs Kiro 两款主流AI编程IDE对比
ai编程
buhuipao3 小时前
我为什么没做另一套 AI 聊天界面,而是给 Codex / Claude Code 做了个本地控制台
ai编程
清泓y4 小时前
深度学习算法
算法·ai·语言模型·面试
晴天166 小时前
AI应用开发(Claude Code的技术原理)-Day03
人工智能·ai编程
沸点小助手6 小时前
掘金VibeLaunch 沸点秀获奖公示🎊
aigc·ai编程
9i编程6 小时前
AI BI Helper 开发实录 01:文本向量与 Milvus 向量数据库集成
人工智能·openai·ai编程