从 Claude Opus 4.7 开始,temperature、top_p、top_k 不再接受非默认值。请求中设置这些参数会返回 400,最稳妥的迁移方式是直接省略。
Anthropic 的弃用说明还明确列出了 Claude Opus 4.8 和 Claude Sonnet 5。这意味着接入层不应只为某个模型 ID 写一次性补丁,而应该根据模型能力决定是否发送参数。
这三个参数原来控制什么
它们都用于干预模型生成下一个 token 时的采样过程:
temperature改变概率分布的平滑程度。top_p只在累计概率达到阈值的候选集合中采样。top_k只在概率最高的前 K 个候选中采样。
它们都在控制“模型如何从候选 token 中选择”,但并不等价,也不保证输出完全可复现。即使过去把 temperature 设为 0,Anthropic 也从未保证每次输出相同。
先把官方结论和工程推断分开
Anthropic 的参数弃用说明和模型迁移指南明确给出了两点:
- 非默认采样参数会触发
400。 - 应省略这些参数,并使用 Prompt 引导模型行为。
官方没有完整公开移除它们的底层原因。下面只能算工程推断:
- 新模型会自适应安排推理过程,外部采样参数的价值可能降低。
- Agent 和工具调用更依赖结构稳定性,多个采样旋钮会扩大不可预测的组合空间。
temperature、top_p、top_k同时存在时,跨模型、跨平台很难维持一致语义。
这些推断可以帮助理解接口演化,但不能写成 Anthropic 的官方解释。
第一步:删除采样参数
旧请求:
{
model: "claude-opus-4-8",
temperature: 0.2,
top_p: 0.9,
}新请求的必要变化只有删除这些字段:
{
model: "claude-opus-4-8",
}创造性、简洁程度和保守程度改用明确的 Prompt 表达:
提出 5 个差异明显、非常规的方案。只输出一个证据最充分的方案;不确定时明确说明,不要猜测。这不是说 Prompt 能精确复刻旧采样器,而是把业务真正关心的行为直接说清楚。
第二步:需要推理时再启用 adaptive thinking
thinking 与 output_config.effort 控制的是推理模式和推理强度,不是 temperature 的替代品。只有任务确实需要更深推理时,才额外配置:
{
model: "claude-opus-4-8",
thinking: {
type: "adaptive",
},
output_config: {
effort: "high",
},
}如果省略 thinking,请求可以不启用 thinking。不要为了迁移三个采样参数,就机械地给所有请求打开高强度推理。
格式稳定性应交给结构约束
低 temperature 从来不能保证合法 JSON。需要稳定格式时,应优先使用:
- Structured Outputs。
- JSON Schema。
- Tool Schema。
- 严格的解析、校验和失败处理。
Prompt 可以降低偏离格式的概率;受约束的输出机制才能在生成层面限制非法结构。
多模型系统不要再统一暴露 temperature
如果业务层把 temperature 作为所有模型的统一配置,升级模型时很容易把“不支持的底层参数”一路透传到 Provider。更稳妥的做法是让上层描述行为意图,再由适配器映射到不同模型实际支持的能力:
type ModelBehavior = {
effort?: "low" | "medium" | "high";
creativity?: "strict" | "balanced" | "creative";
verbosity?: "concise" | "normal" | "detailed";
outputSchema?: JSONSchema;
};适配层需要维护模型能力表:哪些模型支持采样参数,哪些支持 effort,哪些支持结构化输出。不要假设名字相同的参数在不同 Provider 上拥有相同语义。
最后的判断
过去:业务层直接控制 token 采样
现在:业务层描述期望行为,适配层按模型能力映射这次变化不只是删除三个字段。它提醒多模型系统:稳定的抽象应该围绕业务意图和可验证输出,而不是围绕某一家模型当前暴露的解码旋钮。