Temperature 越高越有创造力吗?从概率分布、Top-K 到 LangChain 流程
把同一个问题连续询问大模型多次,得到的回答通常不会完全一致。
差异有时只体现在措辞上,有时甚至会改变结论与代码实现。许多人简单地将其归因于“AI 有随机性”,随后便开始反复调整 temperature:编写代码时设为 0,创作文案时提高到 1。
但 temperature 它实际改变的究竟是什么?是否会直接增强模型的创造力?Top-K 和 Top-P 控制的对象又是什么?
根据当前上下文来预测下一个 Token,是大模型最基础的工作方式;这些参数也必须从这里理解。
一、大模型不会一次想出完整答案
经过 Transformer 计算,模型得到的是一组候选 Token 的分数,并非立即确定的唯一答案。假设“你好”已经出现在上下文中,此时模型正准备生成下一个 Token。
为了更容易理解,可将这些分数转换为如下概率分布:
| 候选 Token | 概率 |
|---|---|
| 吗 | 0.60 |
| 啊 | 0.15 |
| 呀 | 0.10 |
| 美 | 0.05 |
| 坏 | 0.01 |
| 其他 Token | 0.09 |
虽然“吗”拥有最高概率,但这并不意味着模型每次都必须选择它。
生成阶段一般包含两类策略:
- 贪心选择:当前概率最高的 Token 始终会被选中;
- 采样选择:一个 Token 从概率分布中被随机抽取。
始终采用贪心选择时,输出一般更加稳定,却容易显得机械和重复;允许在候选 Token 中进行采样,则能让表达更加多样,同时也会增加错误或偏离主题的风险。
temperature、Top-K 和 Top-P,候选范围和概率分布会在真正抽取 Token 前由此得到调整。
二、概率分布的形状如何受 Temperature 影响
一组称为 Logits 的原始分数,通常才是模型最初的输出,而不是概率;进入 Softmax 计算前,Temperature 会参与其中:
调整后的概率 = softmax(logits / temperature)
它不会凭空产生新的候选词,只会重新调节现有候选词之间的概率差距。
较低的 Temperature
高分候选在 Temperature 小于 1 时会进一步凸显,低分候选获得机会的可能性则会下降,最终形成更“尖锐”的概率分布。
原始分布:吗 0.60、啊 0.15、呀 0.10……降低温度:吗的优势继续扩大,其他候选更难被选中
此时输出通常呈现以下特征:
- 稳定性更高;
- 多次运行产生的差异更小;
- 工具调用、信息提取、代码生成和结构化输出更适合这类设置;
- 但也可能显得更加保守和重复。
较高的 Temperature
候选之间的概率差距会在 Temperature 大于 1 时缩小,使原本概率较低的 Token 得到更多机会,概率分布因而更加“平缓”。
输出一般更加多样,但也可能同时出现:
- 偏离最初要求;
- 采用不常见的表达;
- 增加事实错误;
- 更难维持格式约束。
所以,Temperature并不决定“模型聪不聪明”,它控制的是生成过程尝试低概率候选的程度。
如何理解 Temperature 为 0
,在 API 中的含义需要结合实现理解,因为数学公式不允许 Temperature 直接除以 0。 temperature: 0 一般是服务端提供的特殊配置,目的是尽可能使用最稳定的生成策略。
完全相同的结果并不能因此在任何情况下得到保证;上下文变化、工具返回内容、并行计算、服务端实现以及模型版本,都可能导致输出不同。
因此,更准确的表述是:
三、Top-K:预先限制候选数量
最多能够保留的候选 Token 数量由 Top-K 控制,而候选之间的概率差距由 Temperature 调整。
假如设置:
Top-K = 3
前三个候选会在模型完成概率由高到低的排序后被保留下来:
| 候选 Token | 原始概率 |
|---|---|
| 吗 | 0.60 |
| 啊 | 0.15 |
| 呀 | 0.10 |
系统会排除“美”“坏”和其他候选,再对剩下的三个 Token 重新归一化,随后执行采样。
Top-K 较小时:
- 候选范围更加集中;
- 输出更容易围绕主题;
- 但表达形式可能较为单一。
Top-K 较大时:
- 候选范围更加宽泛;
- 表达形式可能更丰富;
- 采样范围也会更有可能纳入低质量 Token。
需要留意,Top-K 这一参数并非由所有大模型 API 直接开放。部分开源模型推理框架和 Hugging Face Transformers 中较为常见;而在 OpenAI 兼容接口中,更常见的是 temperature 与 top_p。
四、累计概率如何让 Top-P 动态确定候选
核采样是 Top-P 常见的中文译名,它也被称作 Nucleus Sampling。
候选数量并不固定:从概率最高的 Token 起进行累加,累计概率达到或超过指定阈值时,对应的最小候选集合将被保留。
假设:
Top-P = 0.8
依据前述概率分布依次累加:
吗: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 采样,从概念上可以按以下过程理解:
上下文→ 模型计算下一个 Token 的 Logits→ Temperature 调整概率差距→ Top-K 或 Top-P 缩小候选范围→ 重新归一化概率→ 按概率抽取一个 Token→ 把新 Token 加入上下文→ 继续预测下一个 Token
模型生成结束标记或达到最大输出长度后,持续循环的这个过程才会停止。
控制精确程度不会简单地随参数增多而提高。当前 DeepSeek Chat Completion 接口就是一例,按照官方文档,通常建议修改 temperature 或 top_p 其中一个,而非同时调整两者。
原因很直接:两个参数都会改变最终采样空间。若同时修改,不仅难以判断输出变化由哪个参数引起,也会给后续测试和复现带来困难。
正确的调参方法应当是:
- 保持 Prompt、模型和测试数据不变;
- 每次仅修改一个参数;
- 针对同一组问题重复运行;
- 内容多样性、重复性、格式稳定性和正确率都需要纳入比较;
- 依据真实业务结果确定参数,不直接套用所谓“万能值”。
六、temperature: 0 经常用于 Agent 和 RAG 项目的原因
以下模型配置出现在现有 LangChain Agent 项目中:
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。
但必须特别注意:
如果 RAG 未能检索到正确文档,即便 temperature: 0,模型依然可能依据错误或残缺的上下文生成回答。
七、LangChain 工作流如何安排 Temperature
LangChain 的作用,是把 Prompt、模型、输出解析器和工具等节点连接成一条工作流。
例如,基础链可以采用如下表示:
const creativeChain = storyPrompt.pipe(creativeModel).pipe(outputParser);await creativeChain.invoke('一段 prompt');
对应的执行顺序是:
输入→ 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 调整;
- 概率最高的 K 个候选由 Top-K 固定保留;
- 候选集合由 Top-P 按照累计概率动态确定;
- 工具调用、RAG 和结构化任务通常更适配低 Temperature;
- 较高的 Temperature能够增加多样性,但不代表模型能力得到提高;
- 固定测试集是调参的基础,同时每轮只能改变一个变量。
可靠的 AI 应用并不依赖一个适合全部任务的 Temperature,而应根据工作流内各节点承担的职责,分别调控稳定性与多样性。
-
07.29
天马祈福开启《全球使命3》共赴神器星愿盛宴
-
07.29
《大航海时代:凯旋航线》“启航测试”今日15点扬帆开启
-
07.29
遗忘之海摇滚螃蟹实战打法指南
-
07.29
我要当老祖福地各项功能使用指南
-
07.29
饥困荒野黑夜影怪实战打法指南
-
07.29
龙族卡塞尔之门汐月神枢绘梨衣技能机制详解
-
-
下载
- |
-
-
下载
- 《行尸走肉第一章》免安装中文汉化硬盘版下载
- 单机|436 MB
- 一款以动作冒险为主题的游戏
-
-
下载
- 《街头霸王X铁拳》免安装中文汉化硬盘版下载
- 单机|111MB
- 一款非常好玩的格斗游戏
-
-
下载
- |
-
-
下载
- 《暗黑破坏神3》免安装繁体中文正式版下载
- 单机|7630 MB
- 一款以角色扮演为主题的游戏
-
-
下载
- 《马克思佩恩3》免安装硬盘版下载
- 单机|27033 MB
- 一款以第三人称射击为主题的游戏