升级Sonnet 5.5后API报400?思考模式、工具调用和历史消息怎么改
逐项排查 Sonnet 5.5 升级后的400错误:disabled思考、强制工具调用、对话历史和computer use兼容性,附最小请求示例。
只换模型ID,可能就会让原本正常的 Sonnet 5 接入报错。Sonnet 5.5 改变了支持的思考设置、强制工具选择、思考历史处理以及部分工具兼容性。升级后出现 HTTP 400,应先看错误正文和实际发出的请求,再决定是否修改认证或重试。
本文依据 Anthropic 的 Sonnet 5.5迁移指南与变化说明,核对日期为 2026 年 9 月 29 日。示例是按文档整理的请求格式,不代表 Ofox 在真实 API 上复现了每种错误。401、429 或供应商特有的 404 需要分别排查。
先找出不兼容的字段
| 旧配置 | Sonnet 5.5的变化 | 第一步处理 |
|---|---|---|
thinking.type: disabled | 被拒绝 | 改用between_tools,effort不高于high |
手动enabled搭配budget_tokens | 被拒绝 | 改用支持的adaptive thinking或between_tools |
tool_choice.type: any或tool | 被拒绝 | 改用auto,由应用检查工具选择 |
| 编辑历史后重放思考块 | 可能违反对话绑定规则 | 保持只追加历史,或按文档处理应丢弃的块 |
Claude API/Google Cloud上的computer_20251124 | 被拒绝 | 迁移到受支持的computer工具集,并更新循环 |
| 较旧的advisor模型搭配 | 部分组合被拒绝 | 查看支持的advisor列表 |
computer use 这一行不能推广到所有供应商。同一官方页面说明 Amazon Bedrock 仍接受旧的 computer_20251124 工具。平台范围也是修复方案的一部分。
谨慎替换disabled思考
下面是依据文档整理的最小纯文本请求,不带工具,适用于原生 Claude API 的 POST /v1/messages:
{
"model": "claude-sonnet-5-5",
"max_tokens": 1024,
"thinking": {"type": "between_tools"},
"output_config": {"effort": "high"},
"messages": [{"role": "user", "content": "Return a one-sentence summary of this task: verify a CSV total."}]
}
这只是请求体,不是完整 HTTP 客户端。还需要按 Messages API要求提供认证和 API 版本请求头。凭据放在自己的环境中,不要写进复制的示例或日志。
between_tools 关闭的是开始执行前的思考,并不承诺所有工具流程都没有思考块。工具之间的进度说明仍可能使用这种块。该模式接受 low、medium、high,不接受 xhigh、max,也不接受 display、budget_tokens 等额外字段。要使用 xhigh 或 max,应使用 adaptive thinking。组合不兼容时,重复请求不会解决参数校验错误。
替换强制工具调用后,仍要检查行为
把 tool_choice 改成 auto 会改变行为:模型可以决定是否调用工具。在支持的工具定义里加入 strict: true,验证的是工具输入结构,并不会强制选中该工具。应用仍要检查预期调用是否实际发生。这些 schema 功能也依赖平台:迁移指南指出,Amazon Bedrock 上的 Sonnet 5.5 不支持结构化输出,包括 strict tool use。
如果做数据提取,先判断是否真的需要工具调用。结果只是数据、不是动作时,结构化输出可能更合适。应测试合法输出、缺少必填信息、拒绝响应和意外的自然语言回答。请求不再报 400,并不等于迁移完成。
保持对话历史的一致性
Sonnet 5.5 的思考块与模型及对话绑定。修改早先的系统提示词、工具定义或消息,同时重放后面的思考块,可能触发绑定错误。官方默认强制规则适用于指定平台上在 2026 年 8 月 31 日 00:00 UTC 或之后创建的账户;较早账户和显式启用设置要另行核对。
最简单的设计是只追加历史。保持返回块原样,用文档规定的方法处理对话中途变更。如果确实要编辑历史,应按迁移指南处理受影响的块及 beta 控制。不要把“每次都删除全部思考块”当作通用修法,它会改变对话,也可能丢失有用上下文。
切换模型还有单独规则。目标模型无法读取的块可能被丢弃,这与编辑前缀导致的绑定失败不同。应记录具体错误或转换元数据,不要把所有问题统称为“invalid signature”。较早场景可参考思考块签名排错指南。
HTTP成功的响应也要检查
有些回归不会返回 HTTP 错误。工具调用之间较长的进度说明可能放在思考块中,而 adaptive 默认显示行为会省略这些块的文本。只渲染 text 块的界面可能看似没有动静,实际上请求有效。应核对 adaptive 模式的 thinking.display 文档,或受支持的 between_tools 模式。
还要区分拒绝响应与传输失败。文档描述了 HTTP 200 搭配 stop_reason: refusal 及附加详情的情况。HTTP 成功状态不能证明任务完成。应明确处理返回结果,不要反复提交相同的被拒绝任务。
切换生产流量前的验证
保留一组小型测试输入:纯文本、工具调用、多轮对话、编辑历史、流式更新和拒绝处理。核对请求格式、响应解析器、工具结果对应关系及用户可见输出。每次保存客户端版本和精确模型ID;排查时保留旧接入的回滚配置。
更完整的上线检查见升级决策指南,CLI选模见 Claude Code设置指南。本文讨论原生 API 变化,第三方网关可能增加自己的适配层和错误。
常见问题
- 可以继续保留disabled吗?
- Sonnet 5.5 不支持该字段值。文档替代方式是
between_tools配 high 或更低档位;更高 effort 使用 adaptive thinking。 - strict工具模式会强制调用工具吗?
- 不会。结构校验和工具选择是两件事。应用必须处理未调用预期工具的响应。
- 只要400就一定是模型升级的问题吗?
- 不是。先读精确错误并隔离变化的字段。消息格式错误、供应商适配和其他无效参数也可能返回 400。


