「同一个问题问两遍,AI 给的答案居然不一样」——这不是模型不稳定,而是你没调过一个叫 temperature 的参数。它和搭档 top_p 一起,控制着模型每吐一个字时的随机程度。这篇把两个旋钮讲清楚:各自管什么、什么场景填多少,以及为什么官方建议只调一个。
两个旋钮分别在调什么?
temperature(温度)决定「敢不敢选冷门答案」。模型每生成一个字,本质上都是在一堆候选里抽签,每个候选带一个概率分数。温度调到 0,它每次都只挑概率最高的那个,输出最稳;温度越高,低概率的候选也有机会被抽中,于是答案更多样,也更容易跑偏。取值范围一般是 0 ~ 2,默认 1。
top_p(核采样)决定「从哪些候选里抽」。它先把候选按概率从高到低排队,只保留累计概率刚好达到 top_p 的那一小撮,其余的直接踢出局,再在圈内抽签。top_p 设为 0.9,意味着只考虑最核心的那九成概率;设为 1 就等于全部都考虑。取值范围 0 ~ 1,默认 1。
划重点:只调一个。temperature 和 top_p 都在改变「抽签的范围」,同时改两个,效果会互相抵消,出了好结果也很难复现。日常习惯是只动 temperature,top_p 保持默认。
具体怎么调?按场景抄这张表
下面的区间是实践里比较通用的起点,不是标准答案。先用中间值跑一遍,效果不满意再往两端微调。
- 写代码、结构化抽取、翻译:temperature 0 ~ 0.3。这类任务要的是唯一正确答案,让模型保守一点,比如 kimi-k3、deepseek-v4-pro
- 知识库问答、客服话术:0.3 ~ 0.6。需要准确,但语气别太机械
- 公众号初稿、邮件、日常写作:0.7 ~ 1.0。这是「有点变化但不离谱」的舒适区,glm-5.3、claude-sonnet-5 在这个区间表现都稳
- 起标题、头脑风暴、创意发散:1.0 ~ 1.3。要的就是不按套路出牌,跑偏了再挑
- 超过 1.3:谨慎使用。再往上就进入胡言乱语区,事实性错误会明显变多
至于 top_p,日常保持在 0.9 ~ 1.0 就够用;确实需要更保守时降到 0.8 左右。别一路降到 0.5 以下——那会把本来合理的词也一起筛掉,句子容易变得干瘪重复。
一个可以直接照抄的请求示例
以写代码场景为例,只需要在请求体里多带两个字段(接口地址 https://api.aigcbreeze.cn/v1,OpenAI 兼容格式):
{"model": "kimi-k3", "temperature": 0.2, "top_p": 1, "messages": [{"role": "user", "content": "把这个函数改写成异步写法"}]}
两个参数都不传时,服务端会用模型自己的默认值(多数模型 temperature 和 top_p 都默认 1)。写脚本批量处理时,建议把 temperature 显式写死在请求里,避免上游默认值调整导致输出风格漂移。
调试小技巧:固定同一段提示词,只改一个参数值连跑三次,比来回换提示词更容易判断到底是哪个变量在起作用。
常见问题
temperature 设成 0,为什么结果还是不完全一样?
三个常见原因:一是服务端为了吞吐会把多个请求并行打包计算,浮点运算的先后顺序不固定;二是提示词里只要有一处没被完全限定(比如没规定输出格式),模型本来就有多个合理答案;三是一些客户端会在请求里覆盖你的设置,比如为了「更有创意」自己加了温度。
调这两个参数会多花钱吗?
不会。计费只看输入和输出的 token 数量,参数怎么填都是免费的,具体单价可以在 模型列表页里逐个查。
推理型模型需要调吗?
大部分不用。部分推理模型官方文档明确说明 temperature、top_p 这类采样参数不生效——传了也不报错,只是不起作用,因为它们的输出由思考过程决定。想让这类模型的回答稳定,正确做法是在提示词里把约束和输出格式写死。