AI 通关攻略 · 第 5 关 | Temperature & Top_p:如何让 AI 稳定又富有创造力

7 阅读4分钟

AI 通关攻略 · 第 5 关 | Temperature & Top_p:如何让 AI 稳定又富有创造力

为什么要调节这些参数

LLM 是"下一个 token 预测机器"——给定前文,它会给每个可能的 token 打一个概率分,然后选一个输出。

但怎么"选"? 这里有两种基本策略:

  • 贪婪选择(Greedy):永远选概率最高的 token。输出稳定但缺乏变化,容易重复
  • 采样(Sampling):按概率分布随机选。更有创造性但可能不稳定

Temperature 和 Top_p 就是控制"采样"行为的两个核心参数。


1. Temperature(温度)

1.1 什么是 Temperature?

Temperature(温度)是一个控制输出随机性的参数,源自统计力学的概念。

数学原理:

softmax(probabilities, T) = exp(logits[i] / T) / Σ exp(logits[j] / T)
  • T(Temperature)越大 → 各 token 的概率被"抹平",随机性增加
  • T(Temperature)越小 → 概率差异被"放大",高概率 token 更容易被选中
  • T = 1.0 → 原始概率分布,不做调整
  • T → 0 → 等同于贪婪选择

简单理解:把 Temperature 想象成"烤箱温度"。温度越高,分子运动越剧烈,结果越"出乎意料";温度越低,分子运动越保守,结果越"保守稳定"。

1.2 不同 Temperature 的效果

Temperature效果适用场景
0 ~ 0.2极度确定,几乎每次都差不多代码生成、数据提取、精确问答
0.3 ~ 0.5略微有变化,保持较高准确性翻译、摘要、技术文档
0.6 ~ 0.8有创意但不离谱写作助手、对话聊天
0.9 ~ 1.2高随机性,富有创意头脑风暴、故事创作、艺术内容
> 1.5极高随机性,可能不稳定几乎不用,容易产生乱码

1.3 Temperature 的实际调整建议

问:我想要 AI 稳定可靠地回答我的技术问题
答:设置 Temperature = 0.1 ~ 0.3

问:我想让 AI 帮我写一个有创意的故事开头
答:设置 Temperature = 0.7 ~ 0.9

问:我要让 AI 每次回答数学题都正确
答:设置 Temperature = 0.1(甚至更低)

2. Top_p(核采样)

2.1 什么是 Top_p?

Top_p(也叫 Nucleus Sampling,核采样)也是一种控制随机性的方法,但策略不同。

工作原理:

  1. 把所有 token 按概率从高到低排序
  2. 从最高概率开始累加,累加到超过 Top_p 值(比如 0.9)
  3. 只保留在这个累加范围内的 token,其余全部排除
  4. 从保留下来的 token 中按概率重新归一化后随机选一个

类比:想象你面前有一堆不同颜色的球,每种颜色代表一个可能的 token。Top_p=0.9 的意思是:只留下能组成 90% 概率总体的那些颜色的球,然后从这些球里随机选一个。

2.2 Top_p 与 Temperature 的关系

参数控制什么类比
Temperature整体随机性的"强度"烤箱温度(决定整体混乱程度)
Top_p随机性的"范围"(只保留概率前多少的 token)只从最可能的几个选项里随机挑

两者通常二选一使用,不建议同时调高。最佳实践是:

  • 固定 Top_p(如 0.9),
  • 只调 Temperature

或者:

  • 固定 Temperature(如 0.7),
  • 只调 Top_p

2.3 Top_p 的取值建议

Top_p效果
0 ~ 0.3极度保守,只选最可能的几个 token
0.5 ~ 0.7平衡创造性
0.8 ~ 0.95最常用的默认值,创造性和稳定性兼顾
1.0不限制,所有 token 都参与

推荐默认值:Top_p = 0.9,Temperature = 0.7(大多数场景的"安全区")


3. 两者的典型组合场景

场景 1:代码生成

# 需要确定性,代码不能随机
Temperature = 0.1
Top_p = 0.9

场景 2:AI 客服对话

# 需要稳定但自然
Temperature = 0.5
Top_p = 0.9

场景 3:营销文案写作

# 需要有创意但不跑偏
Temperature = 0.8
Top_p = 0.9

场景 4:诗歌/故事创作

# 需要高创造性
Temperature = 1.0
Top_p = 0.95

场景 5:精确数据提取(JSON 结构化输出)

# 需要极度稳定
Temperature = 0.0   # 设为0几乎等价于贪婪选择
Top_p = 1.0

注意:当 Temperature = 0 时,LLM 的行为是确定性的——同样的输入永远得到同样的输出。但不同的 LLM 厂商对 Temperature = 0 的处理可能略有差异。


4. 常见误区

❌ 误区 1:Temperature 越高,输出越"聪明"

Temperature 只控制随机性,不影响模型的能力。高 Temperature 可能让你得到更多样化的答案,但不会更准确,反而可能更容易出错。

❌ 误区 2:Top_p = 1.0 是最"完整"的选择

Top_p = 1.0 意味着所有 token 都参与采样,包括概率极低的垃圾 token。在某些生成过程中,这些低概率 token 可能会意外出现,破坏输出的连贯性。

❌ 误区 3:每次都要调这两个参数

对于大多数日常使用,默认值(Temperature ≈ 0.7,Top_p ≈ 0.9)已经够用。只有在特殊需求(如需要极致稳定性或极致创意)时才需要调整。


5. 总结

参数控制类比默认值
Temperature随机性的强度烤箱温度0.7
Top_p参与采样的 token 范围从最可能的几个中随机挑0.9

记住一个原则:

  • 要稳定 → 低 Temperature + 低 Top_p
  • 要创意 → 高 Temperature + 高 Top_p
  • 代码/数据/精确问答 → Temperature = 0 或 0.1
  • 创意写作/头脑风暴 → Temperature = 0.8 ~ 1.0