调用 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_p、top_k 等采样参数在部分模型上的支持差异。写跨模型脚本时,只传必需参数(model、max_tokens、messages)最稳妥,可选参数按模型能力再加。
还没把 Claude Code 跑起来?
Code2AI(code2ai.codes)提供官方 Claude Code 命令行的订阅制接入, 配置两个环境变量即可开始使用,支持全系列 Claude 模型,额度在控制台实时可查。