temperature 和 top_p 分别在调什么?什么场景调低、什么场景调高?

Q1-03采样参数高频temperaturetop_p采样确定性effort

谁在问:一面必问(各类公司通用);2026 起常带参数弃用追问

口语化问法

  • temperature 和 top_p 有什么区别?你项目里是怎么设的?
  • 为什么一般不建议两个一起调?
  • 你说抽取任务要设 temperature=0——那它能保证同一张单子每次跑出来都一样吗?

考察意图

表面是送分题,实际是一个双层筛子。

第一层筛「知不知道两个参数的机制差异」——这层大部分人能过。第二层才是真正拉开差距的:有没有把 temperature=0 误当成确定性保证,以及知不知道 2026 年这层旋钮正在被厂商收回。第二层过不去的候选人,通常也没做过一致性回归测试和跨模型迁移。

参考答案

图 2 · 60 分与 90 分差在哪:代价、演进、怎么验证

60

60 分答案(及格线)

模型每一步会输出一个在词表上的概率分布。

temperature 调的是这个分布的形状:低温放大候选之间的差距,分布更尖锐、输出更确定;高温压平差距,让低概率的词也有机会,输出更发散。

top_p 是核采样,按概率从高到低累加,累计到 p 就截断,只在这个「核」里采样,相当于砍掉长尾

一个改形状,一个砍范围。抽取、分类、生成 JSON 这类要可预期的任务用低温;文案、起名、头脑风暴用高温。一般只调一个,两个同时收紧容易让输出僵化重复。

90

90 分答案(有生产经验的回答)

在上面基础上加三点:

第一,temperature=0 不等于可复现。 贪心解码只去掉了采样这一层随机,上游还有:浮点加法不满足结合律、GPU 归约顺序随批次变化;服务端动态批处理导致 kernel 选择不同;MoE 路由在批内有交互;以及同名模型的小版本更新。所以我在设计文档里从来只写「高度稳定」,并配一个多次采样一致率的指标,不写「确定性输出」。

第二,也有低温反而错的场景。 self-consistency 这类多路采样投票,温度必须不为 0——否则多次采样完全相同,投票机制直接失效。造评测集、做数据增强时同理,需要的是覆盖度。

第三,截至 2026-08,这层旋钮正在退场。 Claude Opus 4.7 及以后、Sonnet 5 上,把 temperature / top_p / top_k 设成非默认值直接返回 400;OpenAI 的推理模型同样拒绝非默认采样参数。原因是推理型模型内部要跑多条路径再择优,压到 0 会让路径塌缩。取而代之的是 effort 这类「花多少力气」的控制(low / medium / high / xhigh / max),它影响的是整个响应的 token 花费,包括工具调用次数。所以现在我把「稳定性」拆开分配:格式稳定交给结构化输出,事实稳定交给检索与校验,风格稳定交给系统提示词,深度与成本交给 effort。

追问链

图 1 · 五层追问树:面试官会往哪儿挖
五层拧的是同一颗旋钮:它到底能保证什么、还剩多久

  1. 两个一起调会发生什么?为什么建议只动一个?

    期望作用叠加且互相掩盖 —— 低温已让分布尖锐,再压 top_p 等于二次收窄、容易陷入重复;高温再放大 top_p 则彻底失控。更实际的理由是可归因性:只动一个,才能把效果变化归到这个变化上
    信号从「调参要可归因」角度回答 → 比只背「官方建议只调一个」强一档
  2. temperature=0 能保证同样输入同样输出吗?

    期望不能。至少说出两条机制原因:浮点归约顺序 / 动态批处理 / MoE 路由 / 版本漂移
    信号本题最重要的分水岭:答「能」→ 基本没做过一致性回归测试;答「不能」却说不出任何机制原因 → 听说过、没验证过
  3. 那要做到真正可复现,你怎么做?

    期望分层:能用代码保证的绝不交给模型(枚举映射、数值计算、格式拼装)→ 结构层用约束解码保证 schema 合法 → 语义层做多次采样一致率监控并设阈值告警 → 供应商侧固定具体模型版本号、不用浮动别名 → seed 只在明确支持时当辅助。核心是可复现是系统属性,不是参数属性
    信号说出「把确定性需求下沉到代码」或等价表述 → 明确的正向信号
  4. 有没有反过来的场景 —— 温度调低反而是错的?

    期望self-consistency / best-of-n 这类要采样多样性的方法(温度为 0 则多次采样完全相同,投票直接失效);创意与命名任务;用模型造评测集、做数据增强时需要覆盖度
    信号举得出 self-consistency → 通常真读过评测相关实践,而不只是调过参
  5. 抽取服务靠 temperature=0 稳效果,新模型直接 400,业务不许回退,怎么办?

    期望止血修在正确的层:网关按能力白名单剔参数,不在业务代码加 if(升级就重演) → ② 控制点重分配:格式给结构化输出、语义靠提示词收紧加字段级校验、深度与成本改 effort(同会话内恒定,否则击穿 prompt 缓存) → ③ 重做基线:控制维度换了一套,旧经验不能映射,评测集上重跑一致率与准确率定 effort → ④ CI 加跨模型参数兼容性检查
    信号主动点出「SDK 能编译过、只有服务端才拒」→ 迁移过;答「换回还支持这参数的老模型」或「try-catch 忽略掉」→ 差
送分题的壳,淘汰题的芯:第 2 层temperature=0 ≠ 可复现)答错的,基本没做过一致性回归;第 5 层考旋钮被厂商收回之后,你把控制点搬到哪一层。

评分要点

  1. 说清 temperature 改分布形状、top_p 截断候选范围
  2. 给出至少两类任务的具体取值区间
  3. 说明为什么一般只调一个(可归因性)
  4. 明确 temperature=0 ≠ 可复现,并给出机制原因
  5. 知道存在「低温反而错」的场景(如多路采样投票)
  6. 知道 2026 年新一代模型已弃用这些参数、改用 effort 类控制
  7. 能把「稳定性」拆解给多个责任层,而不是压在一个参数上
  8. 迁移方案落在网关层与评测重做,而非业务代码打补丁

常见错误

把 temperature 直接等同于「创造力」或「聪明程度」。
建议「两个都调到 0.2 会更稳」,暴露没理解二者作用重叠。
坚称 temperature=0 输出必然完全一致,且从没验证过。
只会背取值区间,说不出自己项目里为什么取这个值。
不知道推理型模型不接受这些参数,仍把它当成通用旋钮。
含糊标志词:「一般设 0.7 就行」「这个影响不大」「框架默认值挺好的」。

关联学习