400 invalid_request_error,同样的请求昨天还好好的

环境: python + 中转站
没改过代码

报错全文:

{"type":"error","error":{"type":"invalid_request_error","message":"max_tokens: Field required"}}

{"type":"error","error":{"type":"invalid_request_error","message":"messages: Input should be a valid list"}}

{"type":"error","error":{"type":"invalid_request_error","message":"temperature: Input should be a valid number, unable to parse string as a number"}}

查了下资料,说最常见原因是「Anthropic 缺 max_tokens」,但我这个场景……求大佬指点。

这个我们在报错百科里做过完整排查,直接给结论:

400 是你的请求体不符合接口规范,服务端拒绝解析。 Anthropic 的 400 有一个高频坑:忘了传 max_tokens(它是必填项,OpenAI 那边是可选)。

修法(节选自百科,完整版见正文链接):

最小可复现请求

先用这个跑通,再一点点加参数:

curl https://api.anthropic.com/v1/messages \
  -H "x-api-key: $KEY" \
  -H "anthropic-version: 2023-06-01" \
  -H "content-type: application/json" \
  -d '{
    "model": "claude-sonnet-5-5",
    "max_tokens": 1024,
    "messages": [{"role": "user", "content": "Hello"}]
  }'

跑通了再逐个加:system → temperature → tools → stream。

messages 的正确结构

[
  {"role": "user", "content": "第一条"},
  {"role": "assistant", "content": "回复"},
  {"role": "user", "content": "第二条"}
]

常见错误:

  • content 写成对象而不是数组/字符串
  • role 写成 human / ai
  • 第一条就是 assistant

完整排查文档(含全部概率排序和责任判定):Claude API Error 400:请求格式错误怎么解决 · 报错百科 · docai.cc
按这个改完基本就通了。还报错的话把你改后的完整报错贴上来,我再看。