Temperature 越高越有创造力吗?从概率分布、Top-K 到 LangChain 工作流

同一个问题连续问大模型几次,得到的答案往往不完全相同。

有时只是措辞变化,有时连结论和代码实现都会发生改变。很多人会把这种现象简单归结为"AI 有随机性",然后开始反复调整 temperature:写代码就设为 0,写文案就拉到 1。

temperature 究竟改变了什么?它会不会直接给模型增加创造力?Top-KTop-P 又是在控制什么?

要理解这些参数,必须回到大模型最基础的工作方式:根据当前上下文,预测下一个 Token。

一、大模型不是直接想出一句完整答案

假设上下文中已经出现了"你好",模型准备生成下一个 Token。经过 Transformer 计算后,它不会立即得到唯一答案,而是得到一组候选 Token 的分数。

为了便于理解,可以把分数转换成下面这样的概率分布:

候选 Token 概率
0.60
0.15
0.10
0.05
0.01
其他 Token 0.09

"吗"的概率最高,但概率最高不代表模型每次都必须选它。

生成阶段通常有两类策略:

  • 贪心选择:永远选择当前概率最高的 Token;
  • 采样选择:按照概率分布随机抽取一个 Token。

如果始终使用贪心选择,输出通常比较稳定,但也容易机械、重复;如果允许在候选 Token 中采样,表达会更加多样,但错误和偏离主题的风险也会上升。

temperatureTop-KTop-P,就是在真正抽取 Token 之前调整候选范围和概率分布。

二、Temperature 改变的是概率分布的形状

模型最初输出的通常不是概率,而是一组称为 Logits 的原始分数。Temperature 会在 Softmax 之前参与计算:

text 复制代码
调整后的概率 = softmax(logits / temperature)

它不是凭空增加新的候选词,而是在重新调整已有候选词之间的概率差距。

Temperature 较低

当 Temperature 小于 1 时,高分候选会变得更加突出,低分候选的机会进一步下降。概率分布会更"尖锐"。

text 复制代码
原始分布:吗 0.60、啊 0.15、呀 0.10......
降低温度:吗的优势继续扩大,其他候选更难被选中

输出通常具有以下特点:

  • 稳定性更高;
  • 多次执行的差异更小;
  • 更适合工具调用、信息提取、代码生成和结构化输出;
  • 但也可能更加保守、重复。

Temperature 较高

当 Temperature 大于 1 时,不同候选之间的概率差距会缩小,原本概率较低的 Token 获得更多机会。概率分布会更"平缓"。

输出通常更加多样,但同时也可能出现:

  • 偏离原始要求;
  • 选择不常见的表达;
  • 事实错误增多;
  • 格式约束更难保持。

因此,Temperature 控制的不是"模型聪不聪明",而是生成时愿意在多大程度上尝试低概率候选

Temperature 为 0 怎么理解

从数学公式看,Temperature 不能直接除以 0。API 中的 temperature: 0 通常是服务端提供的一种特殊配置,用来尽量采用最稳定的生成策略。

它也不意味着任何情况下都能获得完全相同的结果。模型版本、服务端实现、并行计算、工具返回内容和上下文变化,都可能使输出发生差异。

所以更准确的说法是:

temperature: 0 会尽量降低采样随机性,但不等于绝对确定。

三、Top-K:先把候选数量限制住

Temperature 调整的是概率差距,Top-K 控制的是最多保留多少个候选 Token

如果设置:

text 复制代码
Top-K = 3

模型会先按照概率从高到低排序,只留下前三个候选:

候选 Token 原始概率
0.60
0.15
0.10

"美""坏"和其他候选会被排除,然后系统对剩余三个 Token 重新归一化,再执行采样。

Top-K 较小时:

  • 候选范围更集中;
  • 输出更容易保持主题;
  • 但表达可能单一。

Top-K 较大时:

  • 候选范围更宽;
  • 表达可能更加丰富;
  • 低质量 Token 进入采样范围的概率也会增加。

需要注意,Top-K 并不是所有大模型 API 都直接开放的参数。它常见于 Hugging Face Transformers 和部分开源模型推理框架;OpenAI 兼容接口更常见的是 temperaturetop_p

四、Top-P:根据累计概率动态选择候选

Top-P 也叫 Nucleus Sampling,中文常译为核采样。

它不固定候选数量,而是从概率最高的 Token 开始累加,保留累计概率达到或超过指定阈值的最小候选集合。

假设:

text 复制代码
Top-P = 0.8

按照前面的概率分布开始累加:

text 复制代码
吗:0.60
吗 + 啊:0.75
吗 + 啊 + 呀:0.85

加入第三个 Token 后累计概率超过 0.8,因此这次保留"吗、啊、呀"三个候选。

Top-P 与 Top-K 的区别在于候选数量是否固定:

参数 选择方式 特点
Top-K 固定保留概率最高的 K 个 Token 候选数量固定
Top-P 保留累计概率达到 P 的最小集合 候选数量随分布变化

当模型非常确定时,少量 Token 的累计概率就能达到 Top-P;当概率比较分散时,需要保留更多 Token。因此,Top-P 对不同上下文的适应性更强。

五、三个参数怎样共同参与生成

从概念上看,一次 Token 采样可以理解为:

text 复制代码
上下文
→ 模型计算下一个 Token 的 Logits
→ Temperature 调整概率差距
→ Top-K 或 Top-P 缩小候选范围
→ 重新归一化概率
→ 按概率抽取一个 Token
→ 把新 Token 加入上下文
→ 继续预测下一个 Token

这个过程会一直循环,直到模型生成结束标记,或者达到最大输出长度。

不过,参数越多不代表控制越精确。以当前 DeepSeek Chat Completion 接口为例,官方文档建议通常修改 temperaturetop_p 中的一个,而不是同时调整两个。

原因很简单:两个参数都会改变最终的采样空间。如果同时修改,很难判断输出变化究竟来自哪一个参数,也不利于后续测试和复现。

正确的调参方式应该是:

  1. 保持 Prompt、模型和测试数据不变;
  2. 每次只改变一个参数;
  3. 使用同一组问题重复执行;
  4. 比较正确率、格式稳定性、重复性和内容多样性;
  5. 根据真实业务结果选择参数,而不是直接照搬一个"万能值"。

六、为什么 Agent 和 RAG 项目经常使用 temperature: 0

在现有的 LangChain Agent 项目中,模型配置使用了:

javascript 复制代码
const model = new ChatOpenAI({
  modelName: process.env.DEEPSEEK_MODEL || 'deepseek-chat',
  apiKey: process.env.DEEPSEEK_API_KEY,
  temperature: 0,
  configuration: {
    baseURL: 'https://api.deepseek.com/v1',
  },
});

这里使用低 Temperature,并不是因为 Agent 完全不需要创造力,而是因为这类任务更重视可控性。

例如,一个 Agent 需要决定:

  • 是否调用工具;
  • 调用哪一个工具;
  • 参数应该填写什么;
  • 拿到工具结果后是否继续执行。

如果模型在这些步骤中过度追求多样性,可能会选择错误工具、生成不符合 Schema 的参数,或者在相同输入下采用差异很大的执行路径。

RAG 也有类似需求。检索到的资料已经提供了事实依据,模型的主要任务是根据资料组织答案,而不是自由发挥。因此,较低 Temperature 通常更符合问答、摘要和事实整理任务。

但要特别注意:

降低 Temperature 只能减少输出波动,不能修复错误知识、检索失败或上下文缺失。

如果 RAG 没有检索到正确文档,即使 temperature: 0,模型仍然可能基于错误或不完整的上下文生成答案。

七、Temperature 在 LangChain 工作流中的位置

LangChain 的作用,是把 Prompt、模型、输出解析器和工具等节点连接成一条工作流。

例如,一条基础链可以表示为:

javascript 复制代码
const creativeChain = storyPrompt
  .pipe(creativeModel)
  .pipe(outputParser);

await creativeChain.invoke('一段 prompt');

对应的执行顺序是:

text 复制代码
输入
→ PromptTemplate 组织提示词
→ ChatModel 根据参数生成内容
→ StringOutputParser 解析模型输出
→ 返回业务结果

Temperature 属于模型节点的配置,不属于 PromptTemplate,也不是输出解析器的能力。

同一个应用可以根据任务选择不同的模型节点:

  • 严谨模型负责事实提取、分类、工具决策和格式化输出;
  • 创意模型负责标题、故事、营销表达和方案发散;
  • 输出解析器负责把最终结果转换成业务需要的格式。

这种设计比在整个应用中使用同一个 Temperature 更合理。因为真实工作流中的每个节点,对稳定性和多样性的要求并不相同。

八、不同任务可以从什么范围开始测试

下面的数值不是固定标准,而是便于开始测试的经验范围。不同模型、不同服务商的实际表现可能不同。

任务 可尝试的 Temperature 主要目标
工具调用、结构化提取 0~0.2 参数稳定、格式准确
RAG 问答、资料摘要 0~0.3 忠于上下文、减少发挥
技术解释、普通对话 0.2~0.6 在稳定与自然之间平衡
标题和文案方案 0.6~0.9 增加表达差异
故事、创意发散 0.8~1.2 扩大候选空间

调高 Temperature 之前,应该先把 Prompt 的目标、上下文和输出要求写清楚。一个模糊的 Prompt 配上高 Temperature,只会放大不确定性,不会自动得到高质量创意。

九、几个常见误区

1. Temperature 越高,模型越聪明

错误。Temperature 不会改变模型已经学到的知识,也不会增强推理能力,只会改变生成阶段的采样分布。

2. Temperature 越高,内容一定越有创意

错误。更随机只意味着候选范围更宽,也可能产生不相关、低质量或事实错误的内容。创意质量还依赖模型能力、Prompt、上下文和筛选流程。

3. Temperature 设置为 0,就不会产生幻觉

错误。幻觉可能来自训练知识局限、问题含糊、上下文缺失、检索错误或工具结果错误。低 Temperature 只能让模型更倾向于高概率表达。

4. 所有模型都支持 Top-K

错误。不同厂商暴露的采样参数不同。写代码前应该查看当前模型的接口文档,不要把某个推理框架的参数直接搬到另一个 API。

5. Temperature 和 Top-P 一起大幅调整更有效

不一定。多个变量同时变化会让结果更难分析。优先固定其中一个,只测试另一个参数的影响。

总结

大模型的每一步生成,本质上都是在候选 Token 的概率分布中做选择。

  • Temperature 调整候选之间的概率差距;
  • Top-K 固定保留概率最高的 K 个候选;
  • Top-P 根据累计概率动态确定候选集合;
  • 低 Temperature 更适合工具调用、RAG 和结构化任务;
  • 高 Temperature 可以增加多样性,但不等于提高模型能力;
  • 调参应该基于固定测试集,每次只改变一个变量。

真正可靠的 AI 应用,不是找到一个适用于所有任务的 Temperature,而是根据工作流中每个节点的职责,分别控制稳定性和多样性。

相关推荐
今天AI了吗1 小时前
Spring AI 框架实战:Java 后端集成大模型的架构设计与工程落地
java·人工智能·python·spring·机器学习
用户938515635071 小时前
Vibe Coding 的“驾驶”指南:从“失控屎山”到“精准驯服”
人工智能
机器人落地派1 小时前
AI把工作做快了,为什么你反而更累了?
人工智能·ai·人形机器人·ai应用
硅徒1 小时前
IoT 固件的协议 Fuzzing:对私有协议做覆盖率引导测试
人工智能
RunesKee洛迦科技1 小时前
基于应变片的剪刀刀臂剪应力应变测量
人工智能·无线传输·runeskee·多通道压力变送器·应变采集·剪应变·剪刀
深海鱼在掘金1 小时前
深入浅出RAG——第3章:向量数据库入门
人工智能
小柯南敲键盘1 小时前
AI批量翻译Temu商品标题的Python实践
开发语言·人工智能·python
动物园猫2 小时前
人群密度目标检测数据集:8,000张图像 | 目标检测
人工智能·目标检测·计算机视觉