调用 Claude 5 系列模型报 "temperature is deprecated" 400 错误

更新于 2026-08-21

一句话:新模型已弃用 temperature 参数,请求里带上就直接 400。删掉这个参数即可。

现象

自己写脚本调用 API 时返回 400:

{"type":"error","error":{"type":"invalid_request_error",
 "message":"`temperature` is deprecated for this model"}}

同样的代码在旧模型上工作正常。

原因

Claude 5 家族等较新的模型不再接受 temperature 参数。它不是被忽略,而是直接判为非法请求

从旧模型迁移时最容易踩到——很多现成代码里都习惯性带着这个参数。

解决

temperature 从请求体里删掉:

# ✗ 旧写法
payload = {
    "model": "claude-sonnet-5",
    "max_tokens": 900,
    "temperature": 0.7,          # 这一行导致 400
    "messages": [{"role": "user", "content": question}],
}

# ✓ 新写法
payload = {
    "model": "claude-sonnet-5",
    "max_tokens": 900,
    "messages": [{"role": "user", "content": question}],
}

需要控制输出稳定性怎么办

如果原本靠 temperature=0 来保证结果可复现,替代思路:

  • 在提示词里约束输出格式,比如要求只返回 JSON、只回答一个词
  • 做关键词存在性判定而不是全文比对,这样轻微措辞差异不影响结论
  • 需要严格结构化时,用工具调用(tool use)让模型按 schema 输出

怎么确认

去掉参数后重发同一个请求,返回 200 即为修复:

curl -sS https://api.anthropic.com/v1/messages \
  -H "content-type: application/json" \
  -H "x-api-key: $ANTHROPIC_API_KEY" \
  -H "anthropic-version: 2023-06-01" \
  -d '{"model":"claude-sonnet-5","max_tokens":32,
       "messages":[{"role":"user","content":"ok"}]}' | head -c 200

相关

同类问题还有 top_ptop_k 等采样参数在部分模型上的支持差异。写跨模型脚本时,只传必需参数modelmax_tokensmessages)最稳妥,可选参数按模型能力再加。

还没把 Claude Code 跑起来?

Code2AI(code2ai.codes)提供官方 Claude Code 命令行的订阅制接入, 配置两个环境变量即可开始使用,支持全系列 Claude 模型,额度在控制台实时可查。

其他排查记录

← 回到故障排查知识库