故障排查指南
Claude API 在 temperature、top_p、top_k 上返回 400 错误:如何修复
你的 Claude 请求在 API 版本 2026-10-21 上开始返回 400?移除 temperature、top_p 和 top_k,或者固定旧版本。步骤见内文。

你的 Claude 请求昨天还能正常工作,你把它迁移到了 API 版本 2026-10-21(anthropic- 请求头,或为此构建的 SDK 版本),现在却返回 400。查看请求体:如果其中包含 temperature、top_p 或 top_k,那就是原因。删除这三个字段,请求就能通过。
根据 Anthropic 针对版本 2026-10-21 的迁移指南(https://platform.claude.com/docs/en/api/migration-2026-10-21, 于 2026 年 10 月 24 日核对),Messages 或 Message Batches 请求只要发送这三个字段中的任意一个,就会返回 400 错误。即使该值是参数的默认值,也会发生。请在你的请求中查找 400 状态码和这些字段名。
失败请求的样子#
假设你有一个小脚本,让 Claude 总结一张工单,并用较低的 temperature 保持回答稳定:
import anthropic
client = anthropic.Anthropic()
reply = client.messages.create(
model="<your Claude model>",
max_tokens=500,
temperature=0.2, # <- this line now causes the 400
messages=[{"role": "user", "content": "Summarise this ticket in two lines: ..."}],
)用纯 HTTP 也是同样的情况。如果你自己设置版本请求头,下面这一行就是让你切换到新行为的代码:
curl https://api.anthropic.com/v1/messages \
-H "x-api-key: $ANTHROPIC_API_KEY" \
-H "anthropic-version: 2026-10-21" \
-H "content-type: application/json" \
-d '{"model": "<your Claude model>", "max_tokens": 500, "top_p": 0.9,
"messages": [{"role": "user", "content": "Hello"}]}'修复方法:移除这三个参数#
从每个 Messages 和 Message Batches 请求中删除 temperature、top_p 和 top_k。没有它们,模型会使用默认值采样(temperature 1.0),与省略这些参数的 2023-06-01 请求完全一样。
reply = client.messages.create(
model="<your Claude model>",
max_tokens=500,
messages=[{"role": "user", "content": "Summarise this ticket in two lines: ..."}],
)
最新的主要 SDK 版本和 ant CLI(2.0.0)已经完全不再包含这些参数,因此升级后你必须从代码中移除它们。400 来自那些使用 anthropic- 发出、但仍携带这三个字段之一的请求。.NET IChatClient 适配器采取了更温和的方式:它们现在会忽略 ChatOptions.、TopK 和 TopP。各语言的确切 SDK 版本号在指南的 Upgrade steps 标签页中。
如果你不使用 SDK 直接调用 API,版本就是 anthropic- 请求头,而 2026-10-21 是开启新规则的值。
移除后回答会改变吗?#
取决于模型,指南在这一点上很明确。
- Claude 4.7 及更高版本已经只接受默认采样值。对你来说没有任何变化:它们之前按默认值采样,现在仍然如此。
- 接受其他值的模型,例如 Claude Sonnet 4.6:如果你之前调低
temperature以获得更一致的输出,这种效果会消失,且没有其他设置可以替代它。
如果某个特定请求确实依赖非默认值,指南给了你两个选择:停止发送该参数并接受默认采样,或者让那一个请求继续使用 anthropic-。
如果你的回答必须严格一致,请把一致性放进提示词中:固定的输出格式、你想要的回答的简短示例,以及代码中拒绝任何不符合格式内容的检查。这比一个数字要费事,但它不依赖采样旋钮。
看到 400 时的快速检查清单#
- 在项目中搜索
temperature、top_p、top_k,包括封装和共享配置文件。 - 检查批处理任务:该规则适用于使用 2026-10-21 创建的 Message Batch 中的每个请求,因此请查看批处理中每个请求的参数。
- 检查发生了什么变化:SDK 主版本、CLI 版本,或
anthropic-请求头。version - 移除这些字段,或者如果该请求需要非默认值,就把它固定到
2023-06-01。 - 在重新启动大批量任务之前,先运行一个请求。
Claude 和 OpenAI 风格 API 共用一条代码路径#
一种常见设置:用一个辅助函数构建请求,然后将其发送到 Anthropic Messages 或 OpenAI 风格的 Chat Completions 端点。最简单的修复方法是拆分参数。只在 OpenAI 风格的分支中保留 temperature,不要把它加到 Messages 分支中。
在 Chat Completions 格式中,该设置是普通的请求字段。在 CheapTokens 上,它通过 OpenAI 兼容地址 https:/ 工作。下面是一个发往 DeepSeek-V4-Flash 的请求(380K 上下文,每次回答最多 32,768 个输出 token),使用 CheapTokens 文档中的完整模型 ID:
curl https://api.cheaptokens.dev/v1/chat/completions \
-H "Authorization: Bearer $CHEAPTOKENS_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "deepseek-ai/DeepSeek-V4-Flash-0731",
"temperature": 0.2,
"max_tokens": 300,
"messages": [{"role": "user", "content": "Summarise this ticket in two lines: ..."}]
}'像这样一个请求,输入 1,000 个 token、输出 300 个 token,按当前价格花费 $0.000045。DeepSeek-V4-Flash 全天只有一个价格,没有高峰时段,一个余额即可覆盖所有模型。对于同样代码路径、390K 上下文窗口,还有 GLM-5.3-Flash(zai-,最多 8,192 个输出 token)。所有模型的当前价格见定价页面。
要了解该设置的行为,请阅读系统提示词和 temperature:它们的作用及设置方法。要从 Python 调用 Claude 格式的 Messages,请参阅使用 CheapTokens 的 Anthropic Python SDK。基础地址和密钥设置见 CheapTokens 文档。



