把同一个问题连续发送给大模型,有时会得到几种不同的表达;即使提示词没有变化,代码方案、标题建议乃至答案结构也可能出现差异。
这种现象并不一定是接口异常。大多数生成式语言模型在输出时,并不是一次性“想好”整段文字,而是根据当前上下文预测下一个Token的概率,再通过一定的采样策略选出一个Token。新Token加入上下文后,模型继续预测下一步,直到生成结束。
temperature、top_p和seed等参数,控制的正是这个选择过程。它们常被简单概括为“创造力按钮”,但在实际工程中,参数设置还会影响输出稳定性、评测方法和故障定位。
本文从生成过程出发,说明这些参数分别改变了什么,以及OPC中国相关的小型AI应用应如何避免常见误用。
一、大模型不是从完整答案库中挑选一句话
假设输入是:
数据库连接超时,首先应该检查……
模型会根据已有上下文,为可能出现的下一个Token计算一组分数。候选项可能包括“网络”“配置”“连接池”“服务”等,每个候选项对应不同概率。
如果模型选择了“网络”,下一轮预测的上下文就变成“首先应该检查网络……”。随后每一步都会受到前面选择的影响。一开始很小的分支差异,经过几十或几百次生成后,可能形成明显不同的答案结构。
因此,生成过程同时包含两部分:
- 模型分布:模型根据训练和上下文判断哪些候选Token更可能;
- 解码策略:系统如何从候选分布中选出实际输出。
提示词、模型版本和上下文会改变第一部分;temperature、top_p等参数主要作用于第二部分。
二、Temperature改变的是概率分布的“陡峭程度”
模型先为每个候选Token产生一个原始分数,通常称为logit。简化后,温度采样可以写成:
P(token_i) = softmax(logit_i / T)
其中T就是temperature。
温度较低时
概率差异会被放大。原本最可能的候选项变得更加突出,低概率候选更难被选中,输出通常更集中、更稳定。
这适合:
- 信息抽取;
- 分类和路由;
- 代码修复;
- 基于材料的事实问答;
- 固定格式的业务回复。
温度较高时
概率分布会变得更平缓。原本概率不高的候选也获得更多机会,输出通常更丰富,但偏离常见表达或任务约束的可能性也会增加。
这更适合:
- 头脑风暴;
- 文案方向探索;
- 标题候选生成;
- 故事、比喻和创意表达;
- 同一主题的多方案设计。
需要注意:低温度不等于答案正确,高温度也不等于内容优质。
温度只能调整模型在已有概率分布上的选择方式。如果提示词缺少关键信息、检索资料错误,或者模型本身不知道答案,把温度调低只会让它更稳定地输出某种结果,并不会自动补充事实依据。
三、Top P改变的是“允许进入抽签箱的候选范围”
top_p使用的是核采样(Nucleus Sampling)思路。
系统先把候选Token按概率从高到低排序,再从最可能的Token开始累加,直到累计概率达到设定阈值。只有进入这个集合的Token参与后续采样,其余候选被暂时排除。
假设某一步有如下候选:
| 候选Token | 原始概率 |
| 网络 | 0.42 |
| 连接池 | 0.25 |
| 配置 | 0.18 |
| 数据库 | 0.10 |
| 其他 | 0.05 |
如果top_p=0.7,系统会从最高概率开始累计。“网络”与“连接池”的概率之和是0.67,尚未达到0.7;加入“配置”后达到0.85,因此候选集合通常包含前三项。
如果top_p较低,候选集合更小,输出更集中;如果top_p较高,更多长尾候选可以参与,输出会更加多样。
它与temperature的差异可以这样理解:
- temperature保留候选集合,重新调整候选之间的概率差距;
- top_p根据累计概率,动态裁剪候选集合。
四、为什么通常不建议同时大幅调整Temperature与Top P
两者都会改变文本多样性。如果一次同时修改,就很难判断输出变化究竟来自哪个参数。
阿里云百炼的文本生成文档建议,为准确评估参数效果,每次只调整一个;Completions接口文档也指出,由于两者都能控制文本多样性,建议只设置其中一个。
这不是说接口在技术上一定禁止同时传入,而是工程调试需要控制变量。
例如,某次发布后发现客服回复突然变得冗长。如果模型、系统提示词、temperature和top_p同时发生变化,问题很难定位。反过来,如果保存了完整调用参数,并且每次只改变一个变量,回归原因就清晰得多。
五、Seed能让结果“尽可能一致”,但不是永久快照
随机种子seed用于初始化采样过程中的随机状态。在模型、输入、参数和服务条件相同的情况下,使用相同seed,通常能够让结果更接近或尽可能一致。
它适合用于:
- 对比两版提示词;
- 复现一次异常输出;
- 构建相对稳定的回归测试;
- 演示不同参数对同一输入的影响。
但seed不应被理解为绝对复现承诺。官方接口文档使用的表述也是“尽可能返回相同的结果”。以下变化仍可能导致输出改变:
- 模型别名指向了新的版本;
- 服务端推理实现发生变化;
- 上下文、空格或消息顺序改变;
- 工具调用、联网检索或知识库结果变化;
- 并行计算中存在非确定性;
- 其他采样参数没有保持一致。
如果业务需要审计,不能只保存seed。还应记录模型ID或快照版本、完整消息、调用参数、知识库版本、工具返回、请求时间和原始输出。
六、还有哪些参数容易与采样混淆
max_tokens
它限制最多生成多少Token。它控制输出长度上限,不等于模型会把答案自动压缩到这个长度。上限过小,结果可能在句子中间被截断。
stop
当生成内容即将触发指定字符串或Token时停止。它适合控制结构边界,例如生成到分隔符就结束,但不能代替输出格式校验。
presence_penalty
存在惩罚通常用于降低模型重复已经出现内容的倾向,鼓励引入新内容。参数过高也可能让回答为了避开已有词语而变得不自然。
frequency_penalty
频率惩罚会根据Token已经出现的次数调整后续概率,主要用于控制反复用词。它与“事实重复”不是同一个概念,不能解决模型重复表达同一观点的所有情况。
不同模型和接口支持的参数可能不同,默认值也可能变化。实际使用时应以所选模型和接口的当前文档为准,而不是把一套参数无差别复制到所有模型。
七、参数应该按任务风险设置,而不是按“行业推荐值”照抄
网上经常出现诸如“写作temperature设为0.9,代码设为0.2”的配置表。这些数值可以作为实验起点,却不能直接视为最佳答案。
同样是内容写作,任务也可能完全不同:
- 生成20个选题方向,需要较高多样性;
- 根据已确认资料写产品说明,需要更强约束;
- 润色现有文章,希望保留原意;
- 生成多个标题后由人筛选,允许一定探索;
- 自动发布对外内容,则需要更严格的事实和格式检查。
真正决定参数的,不是“它属于写作还是代码”,而是:
- 输出是否允许多种正确答案;
- 错误是否容易发现和撤销;
- 是否有人进行最终筛选;
- 结果是否会直接触发外部动作;
- 任务更重视覆盖率、一致性还是创造性。
允许人工挑选的内部草稿,可以扩大候选空间;会直接进入数据库、发给客户或调用工具的结果,应优先追求可验证和可约束。
八、低温度不能解决幻觉,可靠性需要独立设计
这是最值得单独强调的误区。
模型对一个错误候选给出最高概率时,低温度反而可能更稳定地选择它。事实可靠性需要其他机制共同保证:
- 提供正确、充分的上下文;
- 使用知识库或检索结果补充事实;
- 要求输出引用对应证据;
- 对日期、金额、枚举值进行程序校验;
- 不确定时允许模型拒答;
- 高风险结果进入人工复核;
- 用固定评测集持续检测正确率。
采样参数解决的是“如何从候选中选择”,RAG、工具调用、结构校验和人工审核解决的是“答案依据是否可靠”。两类问题不能混为一谈。
九、如何做一次可解释的参数实验
可以选择30到100条具有代表性的输入,固定模型版本、系统提示词和上下文,只修改一个参数。
例如设计三组:
EXPERIMENTS = [
{"name": "low", "temperature": 0.1, "seed": 20260731},
{"name": "medium", "temperature": 0.6, "seed": 20260731},
{"name": "high", "temperature": 1.0, "seed": 20260731},
]
每条输入可以重复运行若干次,并记录:
- 任务正确率;
- 格式通过率;
- 多次回答的一致程度;
- 有效方案的覆盖数量;
- 人工修改时间;
- 延迟和Token消耗。
如果是创意任务,不能只评估“是否一致”,还要看候选之间是否真的提供了不同价值;如果是抽取任务,多样性通常不是优点,应重点观察字段正确率和格式稳定性。
测试时最好使用模型的固定快照版本。若只能使用动态别名,则应记录测试日期,避免模型更新后无法解释结果变化。
十、从探索到上线,可以采用两阶段生成
对于一人开发者,一个实用方法是把“探索”与“执行”分开。
探索阶段
让模型生成多个备选方向,允许较高多样性。此时结果只作为内部材料,不直接触发发布、付款或数据修改。
执行阶段
选定方案后,降低生成自由度,补充事实资料、输出结构和禁止事项,再经过规则检查或人工确认。
例如制作一篇技术文章时,可以先生成10个选题角度,再选出一个角度;正式成文时固定大纲和参考资料;发布前再单独完成事实核对。这样既能利用采样带来的探索能力,又不会把随机性带入所有环节。
十一、一套适合小型AI应用的配置原则
在OPC中国相关的智能体或工作流中,可以遵循以下顺序:
- 先定义任务和可接受错误,而不是先调整参数;
- 使用模型默认值建立基线;
- 每次只改变temperature或top_p中的一个;
- 用固定样本比较,而不是凭一次回答判断;
- 低风险创意任务可以保留多样性;
- 高风险结构化任务加强约束、校验和人工确认;
- 保存模型版本、输入、参数与原始输出;
- 模型或提示词升级后重新运行评测。
参数本身没有“越低越专业”或“越高越智能”的属性。只有与任务目标匹配,才有实际意义。
结语
大模型的每个回答,都是一连串Token选择共同形成的结果。temperature改变候选概率分布的陡峭程度,top_p决定哪些候选能够进入采样集合,seed则帮助相同条件下的生成过程更具确定性。
理解这些参数,并不是为了找到一组万能数值,而是为了建立可解释的调试方法:知道为什么输出会变、怎样控制变量、如何保存实验条件,以及哪些可靠性问题根本不能靠采样参数解决。
当参数配置与固定评测、证据检索、规则校验和人工复核配合起来,大模型才会从“偶尔给出好答案的工具”,逐步变成一个可以观察、比较和改进的工程组件。