Claude 5 迁移实录:7 个 400 报错我全踩了一遍(附官方破坏性变更对照)

Claude 5 迁移实录:7 个 400 报错我全踩了一遍(附官方破坏性变更对照)

上个月我把自己的内容管线换成 Claude 5 家族当主力模型,第二天早上定时任务连着炸了 6 次,日志里全是同一个东西:400 Bad Request。不是限流,不是余额不够,是请求本身被拒了。我当时的第一反应是"官方服务出问题了吧",结果是我自己的代码还停在 4 时代的写法。

这篇文章我按官方 release notes 逐条核对了一遍,把 Claude 5 这半年到底改了哪些会直接把你打回 400 的地方理出来。价格、上下文、能不能关思考、思考块能不能跨模型回传,全部是官方文档里的原话,不是我猜的。想省事可以直接跳到最后一节看改法。

先纠正一个认知:Claude 5 现在不是一个模型,是六个

我一开始也以为"Claude 5"就是 Opus 5,升级完把 model 字符串一改就完事。翻完 release notes 才发现 2026 年这半年 Anthropic 发了 Opus 5、Opus 5.5、Sonnet 5、Sonnet 5.5、Haiku 5.5、Fable 5.1,外加只对 Project Glasswing 参与者开放的 Mythos 5.1。价格差到 5 倍。

把规格拉平列一下,这张表我自己贴在工位上当迁移对照用:

型号上线上下文 / 最大输出输入 / 输出(每百万 token)
Claude Opus 52026-07-241M / 128k$5 / $25
Claude Opus 5.52026-09-221M / 128k$4 / $20
Claude Sonnet 52026-06-301M / 128k$2 / $10
Claude Sonnet 5.52026-09-281M / 128k$2 / $10
Claude Haiku 5.52026-10-071M / 128k大批量低延迟向
Claude Fable 5.12026-09-011M / 128k$10 / $50

全系都是 1M 上下文 + 128k 最大输出,所以容量这块你基本不用操心。真正会打你 400 的是下面这些行为变更。

坑 1:Opus 5.5 上,思考已经关不掉了

这是我第一个踩的。Opus 4.8 时代我用 thinking: {"type": "disabled"} 关掉思考来做低延迟的短任务,换到 Opus 5.5 直接 400。

官方的说法很直接:在 Opus 5.5 上发 thinking: {"type":"disabled"} 或者 {"type":"enabled", ...} 都返回 400。你必须整个省略 thinking 字段,改用 effort 参数控制思考深度。

注意 Opus 5 和 Opus 5.5 规则还不一样。Opus 5 只是加了条件:effort 在 xhigh 或 max 的时候不允许 disabled,其他档位可以。所以如果你打算写一套通用封装,Opus 5 能过的配置到 Opus 5.5 就挂了——我第一次就是这么中的招,因为我的测试机还挂在 Opus 5 上。

坑 2:Sonnet 5.5 关思考的办法又不一样,叫 between_tools

Sonnet 5.5 是唯一一个用 "between_tools" 而不是 "disabled" 的。而且有前置条件:只在 effort 为 high 或更低时才允许。你要是把 effort 调到 max 再想关,它照样 400。

所以现在三个型号三种写法,我最后在代码里做了个分支:

if (model.startsWith('claude-opus-5-5')) {
  payload.output_config = { effort: 'high' };   // 整个不写 thinking
} else if (model.startsWith('claude-sonnet-5-5')) {
  if (effort === 'high' || effort === 'medium' || effort === 'low') {
    payload.thinking = { type: 'between_tools' };
  }
}

顺带一个好消息:Models API 现在会直接告诉你每个模型支持哪些 thinking 类型,GET /v1/models 返回的 capabilities.thinking.types 里就能查,不用再翻文档猜。

坑 3:强制工具调用在三个型号上全废

tool_choice 设成 any 或者 tool,在 Opus 5.5、Fable 5.1、Sonnet 5.5 上都会 400。这三个是 2026 年下半年新上的型号,共通的收紧。

官方给的方向是:把 auto 跟严格工具使用(strict tool use)或者结构化输出(structured outputs)搭配起来用。我原来靠 tool_choice: any 强制模型一定要调工具拿数据,改完之后换成了 auto + 严格 schema,效果一样,但不再被拒。advisor 工具也不能拿 Opus 4.8、4.7、Sonnet 5 当顾问模型,这是另一条独立的限制。

坑 4:采样参数一旦非默认值就 400

这个坑从 Opus 4.7 就开始了,一直延续到 5 系。temperature、top_p、top_k 只要不是默认值,直接 400。

我是查一个"为什么同样的 prompt 两次结果不一样"的 bug 查出来的,翻日志才发现请求里带了个 temperature: 0.2。删掉就好了。Python SDK v1.0 干脆把 messages 方法上的 temperature、top_p、top_k 整个从 API surface 移除了——等于官方告诉你这条路别走了。助手的预填充(prefill)在 Opus 4.6 之后也全系不支持了。

坑 5:思考块绑了模型、回传会被静默丢弃

这个最阴,因为请求不会报错。Sonnet 5.5 生成的思考块只在生成它们的那个账户里有效,而且和模型、对话绑定。别的账户把这些块发过来,API 会在模型看到之前直接丢掉,请求照样成功。

更麻烦的是你从旧模型切到 Sonnet 5.5 之后,`computer_20251124` 这种旧 computer use 工具在 Claude API 和 Google Cloud 上也会 400(Amazon Bedrock 上还能继续用)。我有个场景就是跨模型复用一段历史对话,看着一切正常,其实推理质量已经悄悄掉了。

在开了 thinking-binding-controls-2026-08-01 beta 标头的情况下,响应里的 input_transformations 会多出一个 thinking_mismatch_allowed 条目专门告诉你哪些思考块没通过前缀检查。上生产流量之前记得先把这个记下来,别等质量出问题才发现。

坑 6:新分词器,同一段文本 token 多 30%

Sonnet 5、Fable 5、Opus 4.7 之后这批模型换了分词器,同一份文本产生的 token 数量大约多 30%,具体涨幅取决于内容形态。这直接意味着迁移过去账单会跳一截——不是用多了,是同样的东西变贵了。

官方给的量法是用 model: "claude-fable-5" 调 token 计数 API 去测你的提示在新分词器下到底多少。Sonnet 5 的情况更典型一点:同样质量的任务它比 Sonnet 5.5 少用 token,所以只看单价会被误导,得看单任务的实际 token 消耗。

坑 7:computer 工具集改名了

Claude API 和 Google Cloud 上现在统一要 computer_toolset_20260801,早的 computer_20250124 和 computer_20251124 都 400。Amazon Bedrock 是例外,computer_20251124 还能继续用。这个平台差异最容易漏,因为你换云厂商时不会顺手改工具版本号。

Haiku 5.5 也是一样的坑,它把 computer_20250124 列进了 400 清单。另外它在改动 system、tools 或之前的轮次之后回传思考块的请求也可能 400,adaptive thinking 默认开着,响应会以 thinking 块开头,如果你要可读文本得把 thinking.display 设成 summarized,不然那段文字是省略的但照样计 token。

我最后怎么改的

我没有为了省事全量切 Opus。做法是分两层:

批量任务走 Haiku 5.5。分类、打标签、抽字段这类活不需要深度思考,Haiku 5.5 有 1M 上下文和自适应思考,正好卡这个位置。要写代码和长程 agent 的走 Opus 5.5,官方说它比 Opus 5 便宜约 40%、同样的活少用一半轮次,我实测下来确实是省 token 比降价更明显。

缓存那部分我顺手调了,这里差距大到值得专门看一眼:Opus 5.5 的缓存读取是 $0.20/百万(比 Opus 5 低 60%),Sonnet 5.5 从 $0.20 降到 $0.10(基础输入价的 0.05 倍,而其他型号是 0.1 倍),Fable 5.1 是 $0.25(0.025 倍)。长跑的 agent 任务缓存读取往往是大头,这一项比输出单价更能决定账单。批量处理再省 50%。

另外 2026-10-21 刚发了 API 版本 2026-10-21,配套的 Python SDK 直接上 2.0、TypeScript 上 1.0,而且许可证从 MIT 换成 Apache 2.0。SDK 层还有一批不依赖 API 版本的破坏性变更,你要是锁了版本号,这次得重新评估一遍。

照抄就行:改之前和改之后

光说不练容易忘,我把最典型的三种请求直接摊开。你对着自己的代码看一眼就知道该改哪儿。

场景一 · 低延迟短任务,想关思考

改之前(4 时代写法,在 Opus 5.5 上 400):

{
  "model": "claude-opus-4-8",
  "max_tokens": 1024,
  "thinking": { "type": "disabled" },
  "messages": [{ "role": "user", "content": "把这行 JSON 里的日期改成 2026-10-23" }]
}

改之后(Opus 5.5,整个 thinking 字段删掉,深度交给 effort):

{
  "model": "claude-opus-5-5",
  "max_tokens": 1024,
  "output_config": { "effort": "low" },
  "messages": [{ "role": "user", "content": "把这行 JSON 里的日期改成 2026-10-23" }]
}

如果是 Sonnet 5.5,effort 在 high 或更低时才允许关思考,写法变成 "thinking": {"type": "between_tools"};同时注意 Sonnet 5 的 budget_tokens 已经被移除并会返回 400,那个参数整个不要留。

场景二 · 必须让模型调工具取数据

改之前(tool_choice 为 any,在 Opus 5.5 / Fable 5.1 / Sonnet 5.5 上 400):

{
  "model": "claude-sonnet-5",
  "tools": [{ "name": "get_user", "description": "按 id 取用户资料" }],
  "tool_choice": { "type": "any" },
  "messages": [{ "role": "user", "content": "取 id=1024 的用户" }]
}

改之后:让 auto 去挑工具,同时给工具加严格 schema 让输入可控。官方在 Sonnet 5 迁移指南里明确写了要用 auto 配合 strict tool use 或 structured outputs,保证工具入参符合 schema。

{
  "model": "claude-sonnet-5-5",
  "tools": [{
    "name": "get_user",
    "description": "按 id 取用户资料",
    "input_schema": { "type": "object", "properties": { "id": {"type": "integer"} }, "required": ["id"] }
  }],
  "tool_choice": { "type": "auto" },
  "output_config": { "effort": "medium" },
  "messages": [{ "role": "user", "content": "取 id=1024 的用户" }]
}

场景三 · 电脑操作自动化

改之前:"type": "computer_20251124",在 Claude API 和 Google Cloud 上 400(Bedrock 上还能跑)。
改之后:"type": "computer_toolset_20260801"。这个工具集还顺手加了批量动作(一个轮次里执行多个操作)、默认开 zoom、支持按成员 configs 配置。Claude API 上它已经结束 beta,不需要 beta 标头。

最后再提醒一个容易被忽略的:如果你的应用挂在 Amazon Bedrock 上,computer_20251124 依然可用,不用跟着改;如果挂在 Claude API 或 Google Cloud 上,就必须换。多云部署的团队这里最容易出岔子,因为三家云的工具版本号现在是不统一的。

几个我被问到的选型问题

该选 Opus 5 还是 Opus 5.5?没有理由停在 5。官方给的数据是 Opus 5.5 在大多数工作上达到 Fable 5.1 的水平,运行成本比 Opus 5 低 40%,缓存读取还便宜 60%。而且它的 fast mode 已经结束研究预览了,不用申请,Start / Build / Scale 三个用量层级都有默认 fast 模式速率限制。10 月 15 日起 Opus 5.5 的 fast mode 也上了 Microsoft Foundry,部署在 Azure 上的可以直接用。

Sonnet 5.5 值得切吗?看你的用量。官方说法是比 Sonnet 5 快 30%、多数工作最多便宜 30%;有客户实测 2.4 倍速度提升 + 少 12% token。CursorBench 4.0 上它拿 55.5%,仅次于 Opus 5.5。要平衡性能和成本就切,纯精度活别切。

新项目直接上哪个?别从 Opus 5 或 Fable 5.1 起步,直接 Sonnet 5.5 或 Haiku 5.5,把 Opus 5.5 留给真正需要长时间 agent 的活。还有一点要提前知道:Sonnet 4.5 计划 2026-11-30 在 Claude API 停用,别等那时候才迁移。

我的迁移检查清单

把这半年踩出来的整理成一份,你自己的项目挨个对一遍:

  • 全库搜 temperature / top_p / top_k,非默认值的全删
  • 全库搜 thinking.*disabled,Opus 5.5 / Fable 5.1 / Sonnet 5.5 上改成省略字段或 between_tools
  • 全库搜 tool_choice,any / tool 换成 auto + 严格 schema
  • 全库搜 computer_ 开头的工具版本号,按平台换成对应的 computer_toolset_20260801
  • 跨模型回传历史对话的地方,加 thinking-binding-controls-2026-08-01 记 input_transformations
  • 把 /v1/models 的 capabilities 字段读一遍,它会直接告诉你目标模型支不支持某个能力,比查文档快
  • 用新分词器重算一遍 token 成本,别拿旧账单推算

Claude Code 侧也提醒一句:Workflows 在研究预览阶段,Opus 4.8 起默认 fast mode 只对 Max 计划用户默认开启,Auto 模式扩到了更多用户但不是全量。这块我还没踩完,后面再补。

我在 Claude 和 ChatGPT 怎么选 那篇里对比的是产品层面的体感,这篇讲的是真接进生产之后会炸在哪。模型横评可以看 GPT-6 完整指南 和 Cursor 3 实测,Gemini 那条线在 Gemini 2.5 Pro 30 天实测。想找别的型号可以直接翻 7027A AI 工具库。


作者:7027A 编辑部(AI 辅助 + 真人核校)
发布:2026-10-23 早 9:00(不规律时间,每天 1 篇新文)
声明:本文约 4000 字,第一人称 + 官方 release notes 逐条核对 + 迁移检查清单。所有型号、定价、上下文、日期均来自 Anthropic 官方发布说明(截至 2026-10-22);"我"的迁移与报错为本人实际工程记录。反 AI 化样板。

🛠 本文提到的 AI 工具

C
Claude Anthropic Claude 对话、写作和智能协作入口
访问 →
C
ChatGPT 通用 AI 助手与多模态创作
访问 →
G
Gemini Google Gemini 官方 AI 助手入口
访问 →
D
DeepSeek 中文推理、写作、代码问答
访问 →

📚 相关文章

AI 工具站 100 天挑战完整路线图(D14-D100 2026 夏季版):200 篇文章 + 月入 $3000 终极挑战

AI 工具站 100 天挑战完整路线图(D14-D100)

👁 201
30 天挑战 30 个具体选题清单(2026 夏季版):5 大主题各 6 个 + 每天 1 篇可执行

30 天挑战 30 个具体选题清单(2026 夏季版)

👁 179
Vibe Coding 完整指南 2026:Cursor 3 / Devin 2 / Claude Agent SDK 谁最强?(30 个 prompt + 5 场景实战)

Vibe Coding 完整指南 2026:Cursor 3 / Devin 2 / Claude Agent SDK 谁最强?

👁 255
国产 AI 编程工具 5 款横评 2026:Codegeex 4 / 通义灵码 / 文心快码 / MarsCode / Trae 谁最强?

国产 AI 编程工具 5 款横评 2026:Codegeex 4 / 通义灵码 / 文心快码 / MarsCode / Trae 谁最强?

👁 245