每个 LLM API 暴露 temperature、top_p、top_k 的某种组合当采样参数。它们控制模型怎么从机率分布挑下一个 token。大部分 builder 永远留默认;某些默认值对特定任务产出明显比替代品差的输出。
模型怎么挑下一个 token
每一步,LLM 在它整个词汇(看模型 5 万到 20 万 token)上产出机率分布。「给定目前 context,下一 token 是『banana』机率 0.4、『apple』0.3、『orange』0.1、...」
采样参数决定实际从这分布挑哪个 token。不同参数产不同输出风格:
- 永远挑最高机率 → 确定性、常常无聊
- 按机率随机抽 → 多样、有时奇怪
- 中间 → 有创意但连贯
Temperature
Temperature 控制采样前分布变得多「平」或「尖」。范围通常 0 到 2。
- Temperature = 0 — 模型永远挑最高机率 token。输出确定性。同 input 永远产同 output。对一致性重要的任务(抽取、分类、结构化输出)有用。
- Temperature = 0.3-0.5 — 轻微变化但仍聚焦。code 生成、事实 Q&A、技术写作好。
- Temperature = 0.7 — 常见默认。创意跟连贯平衡。chat、摘要、一般任务好。
- Temperature = 1.0 — 完整按模型分布的「自然」采样。创意写作、头脑风暴好。
- Temperature > 1.0 — 越来越随机。打破 pattern 有用;1.5 以上很快变不连贯。
陷阱:大部分 API 默认 0.7 或 1.0。技术任务这太高。降下来。
Top-p(核采样)
Top-p 把采样限制到累积机率至少 p 的最小 token 集合。
- Top-p = 1.0 — 停用、考虑所有 token。
- Top-p = 0.9 — 常见有用值。只考虑共占 90% 机率质量的 token。
- Top-p = 0.5 — 受限很多。只 top token。
Top-p 是动态:在自信情境(一个 token 80% 可能),它挑那一个 token。在不确定情境(机率散在多候选),它考虑更多。
Top-k
Top-k 把采样限制到 k 个最高机率 token。
- Top-k = 1 — 同 temperature 0(永远挑顶)。
- Top-k = 40 — 常见默认。考虑 top 40 token。
- Top-k = 0 — 停用(从完整分布采样)。
Top-k 在现代 API 较少暴露(Anthropic Claude 不暴露;OpenAI 不暴露;Gemini 有)。
它们怎么组合
实际上多参数设定时:
- 先套 temperature 缩放(重塑分布)
- 套 top-k 过滤(只留 top k token)
- 套 top-p 过滤(只留累积到 p 的 token)
- 从剩下采样
大部分人单独用 temperature 或 temperature + top-p。三个都用是过头,会产混乱互动。
各任务的务实设定
结构化输出(JSON、code、分类):
- Temperature: 0
- Top-p: 1.0(temp=0 时无关)
- 为什么:你要一致、可解析的输出
技术 Q&A:
- Temperature: 0.2-0.4
- Top-p: 0.9
- 为什么:事实但允许措辞微变
创意写作:
- Temperature: 0.7-1.0
- Top-p: 0.9-0.95
- 为什么:多样但保持连贯
头脑风暴 / ideation:
- Temperature: 1.0-1.2
- Top-p: 0.95
- 为什么:探索分布、拿不寻常想法
Chat(默认):
- Temperature: 0.5-0.7
- Top-p: 0.9
- 为什么:平衡;大部分 API 一般用的默认
常见错误
结构化任务 temperature 设太高。 「从这文字抽 email 地址」用 temperature 0.7 有时回对 email、有时回编造变体。抽取用 temperature 0。
创意任务 temperature 设太低。 「生 10 个产品名想法」用 temperature 0.2 回 10 个几乎一样的名字。用 temperature 0.9-1.2。
不必要混 top-p 跟 top-k。 挑一个加 temperature。三个的互动效果微妙、很少值得认知 overhead。
把 temperature 当音量。 高不是「更有创意」、是「更随机」。~1.2 以上有品质悬崖、输出变不连贯。
推理模型不同
像 o3、DeepSeek R1、有 extended thinking 的 Claude 等模型,采样参数对推理过程有不同影响。很多 API:
- 推理模型不暴露 temperature
- 默认建议 temperature 1.0(因为模型做自己的结构化探索)
- 有时显示不同最佳实践
用推理模型的话,读 provider 特定指引。
什么时候不要想这些
随意 chat 使用。默认通常 OK。
规模化 production。测试后设一次 temperature,放着。
推理模型。信 provider 建议。
第一轮原型。先让 prompt work 再调采样。
调整重要的时候
- 建结构化输出管线(抽取、分类):低 temperature 关键
- 创意工具,输出多样性是产品:高 temperature 重要
- 评估:在多 temperature 测模型行为揭示能力 vs 随机运气
- 成本优化:不必要撞 max_tokens 的话低 temperature 能减 token 用量
决策树
- 需要一致 JSON / 结构化输出:temperature = 0
- 事实 Q&A 或技术内容:temperature = 0.2-0.4
- 一般 chat:temperature = 0.5-0.7(默认 OK)
- 创意写作或头脑风暴:temperature = 0.9-1.2
- 没时间想:留默认;输出错时再回来
下一步
- 在你具体任务测 temperature 0、0.5、1.0 — 挑 work 的
- production 任务,记录 prompt 旁边的采样参数
- 特别读推理模型的采样
- 读 beam search 跟 contrastive search(较少见但对某些任务有用)