
Claude Fable 5.1 迁移指南:修复工具选择 400 错误
从 Claude Fable 5 迁移到 Fable 5.1,避免工具调用中断、对话历史丢失、思考块绑定和回滚问题。
从 Claude Fable 5 迁移到 Claude Fable 5.1 并非一行代码改名那样简单。新模型拒绝强制工具选择,将保留的思考块绑定到产生它们的对话前缀,也无法将思考块回传到更早的 Claude 版本。因此一个集成可能通过单轮烟雾测试,在第一个结构化输出请求、压缩对话或回滚时仍然失败。
安全迁移有三个部分:用自动选择加模式强制替换强制工具调用,保持多轮历史仅追加,测试每条可能将对话切换回更早版本的路由。如果使用 OpenAI 兼容路由,先读 Claude Fable 5.1 请求指南;下面的原生例子使用 Anthropic Messages API,这样每个破坏性变更都清晰可见。
快速答案
- 改原生模型 ID 为
claude-fable-5-1,然后删除强制tool_choice模式;any和指定工具会返回 HTTP 400。[1] - Fable 5.1 thinking 块之后保持系统提示、工具和早期消息前缀不变。用追加新指令替代改写历史。[1]
- 测试每条回滚路由:更早的 Claude 模型无法读 Fable 5.1 思考块,所以 API 会在继续前删除它们。[1]
- 自适应思考保持开启。用
effort替换手动 token 预算,在发布前在 CI 中测试前缀不匹配。[1]
首先,清点你正在迁移的代码路径
搜索范围比字面上的模型 ID 要宽。一个封装器可能会把通用的"必需工具"设置翻译为 Anthropic 的 tool_choice: {"type":"any"},在对话存储中保留思考块,或在每个请求中改变系统提示。发布后不久出现的 OpenCode 问题是一个有用的例子:它的结构化输出适配器选择了必需工具使用,变成了 Anthropic 不支持的 any 模式并产生了 400。[6]这个问题展示了真实的集成模式;Anthropic 的迁移指南是 API 行为的权威。
审计这些组件后再编辑:
| 组件 | 搜索什么 | 预期失败 |
|---|---|---|
| 模型选择 | claude-fable-5、别名、回滚列表 | 旧模型仍然接收一些流量 |
| 工具适配器 | tool_choice、required、any、指定工具 | 400 invalid_request_error |
| 结构化输出 | 合成工具、schema 包装器 | 包装器静默强制一个工具 |
| 对话存储 | thinking、redacted_thinking、签名 | 编辑后思考块签名无效 |
| 压缩 | 摘要注入、尾部保留、消息删除 | 后面的块绑定到旧前缀 |
| 动态提示 | 当前日期、权限、启用的工具 | 系统或工具前缀每轮变化 |
| 重试和回滚 | 更早的 Claude 模型 ID | Fable 5.1 思考块在切换时被删除 |
| 保留策略 | ZDR 工作区或组织 | 请求在生成前被拒绝 |
如果可能,在序列化请求边界处做清单。应用对象即使 SDK 或提供商适配器改写它们也可能看起来不变。
第 1 步:更新模型 ID,但保持其他部分可观测
原生 ID 是 claude-fable-5-1。Fable 5.1 保留 100 万 token 上下文窗口,支持最多 128,000 输出 token,使用始终开启的自适应思考。[2]用相同的生产流量形状开始,记录请求 ID、状态码、停止原因、token 使用、工具调用和回滚。
不要用这次迁移来同时改变 effort、压缩、提示措辞和工具框架。一个狭隘的首次部署使 400 或行为变化可以追溯。建立兼容性后,在工作负载上扫描 low、medium、high、xhigh 和 max,而非假设旧设置是最优的。Anthropic 文档说 high 是默认值。[1]
如果前任集成提供了这两个配置,也要删除:
# 两个对 Claude Fable 5.1 都无效。
thinking={"type": "disabled"}
thinking={"type": "enabled", "budget_tokens": 12000}Fable 5.1 决定何时何时思考多少。用作前缀的尾随助手消息也会返回 400,所以在系统或用户内容中表达输出指令。[1]
第 2 步:替换强制工具选择
兼容性边界是精确的:
tool_choice 值 | Fable 5 | Fable 5.1 |
|---|---|---|
{"type":"auto"} | 支持 | 支持 |
{"type":"none"} | 支持 | 支持 |
{"type":"any"} | 支持 | HTTP 400 |
{"type":"tool","name":"record_summary"} | 支持 | HTTP 400 |
检查适用于 Messages、Message Batches 和 token 计数。报告的错误说工具选择类型 tool 和 any 对该模型不支持。[1]重试相同的请求体无法帮助。
这是常见的迁移前模式:
response = client.messages.create(
model="claude-fable-5",
max_tokens=4096,
tools=[record_summary_tool],
tool_choice={"type": "tool", "name": "record_summary"},
messages=[
{"role": "user", "content": "Summarize the meeting notes."}
],
)对于 Fable 5.1,使用自动选择,把要求放在当前指令中,让工具严格:
record_summary_tool = {
"name": "record_summary",
"description": "Record the structured meeting summary.",
"strict": True,
"input_schema": {
"type": "object",
"properties": {
"summary": {"type": "string"},
"action_items": {
"type": "array",
"items": {"type": "string"},
},
},
"required": ["summary", "action_items"],
"additionalProperties": False,
},
}
response = client.messages.create(
model="claude-fable-5-1",
max_tokens=4096,
tools=[record_summary_tool],
tool_choice={"type": "auto"},
messages=[{
"role": "user",
"content": (
"Summarize the meeting notes, then call record_summary "
"with the summary and action items."
),
}],
)strict: true 在模型调用工具时约束参数;它不重建运输层保证工具必须被调用。你的应用必须验证响应包含所需的工具使用块。Anthropic 也建议当强制工具仅为获得符合 schema 的 JSON 时通过 output_config.format 用 JSON 输出。[1]
如果应用必须在对话中途要求一个指定工具,在最新用户消息后追加一个 role: "system" 消息。命名工具,陈述这一轮它是必需的,告诉模型以这个调用开始。在后来的历史中保持那个系统消息。这保留了早期前缀;改写顶层系统提示不会。[1]
把"模型忽略了指令"视为已处理的结果。拒绝轮次,在有限策略下重试,或安全地失败。不要把提示描述为绝对强制机制。
第 3 步:保留思考,只在 API 支持的方向
每个 Fable 5.1 思考块携带模型和对话绑定信息。兼容性是单向的:
Fable 5 思考 ───────► Fable 5.1 可以读它
Opus 5 思考 ───────► Fable 5.1 可以读它
Fable 5.1 思考 ──X──► Fable 5 无法读它
Fable 5.1 思考 ──X──► Opus 5 无法读它Claude Mythos 5.1 是文档记录的例外,可以读 Fable 5.1 块。当路由器、拒绝回滚或客户端重试把对话发送到更早的模型时,API 删除目标无法读的块。请求仍然可能成功,删除的输入 token 不计费,但目标必须在没有那个推理的情况下重新规划。[1]
这对回滚评估很重要。Fable 5 的首次请求和 Fable 5.1 的首次请求不等于从 5.1 中途切换到 5。测量两者。启用思考绑定 beta 记录 input_transformations;model_binding_mismatch 指出因模型变化删除的块。
第 4 步:让对话前缀仅追加
Fable 5.1 思考块对于精确的系统提示、工具集和前面的消息历史有效。在重放块前改变任何这些可能对无效思考签名产生 400。[1]
常见的意外编辑包括:
- 用新时间戳重建系统提示;
- 从顶层
tools数组添加或删除工具; - 删除旧工具结果以节省 token;
- 在保留最近轮思考块的同时插入摘要;
- 删除下一请求的每轮提醒;
- 从同一个 URL 获取不同的图像或文档字节。
最后一个情况很容易遗漏:绑定涉及文件字节而不仅是 URL 字符串。对于跨轮重用的文件,Anthropic 建议一个稳定的 Files API file_id 或 base64 内容。[1]
首选这些模式:
- 追加新轮不改早期字节;
- 追加对话中系统消息以改变指令;
- 对工具改变使用支持的工具添加和工具删除块;
- 使用服务端压缩或上下文编辑;
- 如果在客户端压缩,用一个摘要和新用户轮替换整个历史,不携带旧思考块。
那最后一个客户端形状故意简单。保持最近轮在新摘要后只有在删除他们的 thinking 和 redacted_thinking 块时才安全,因为那些块是针对摘要前的历史创建的。[1]
在用户之前诊断前缀不匹配
Anthropic 对 2026 年 8 月 31 日或之后创建的账户默认强制对话前缀检查。较早的账户可能不会失败,除非他们选择进入控制,这为库用于客户密钥创建危险的"对我们密钥有效"测试间隙。[1]
在分段会话中使用 beta 控制:
response = client.beta.messages.create(
model="claude-fable-5-1",
max_tokens=4096,
thinking={
"type": "adaptive",
"block_binding": {
"prefix_mismatch_behavior": "drop_block"
},
},
messages=conversation,
betas=["thinking-binding-controls-2026-08-01"],
)
for change in response.input_transformations or []:
print(change.path, change.reason)用 drop_block,API 删除第一个不匹配的思考块和后面的每个思考块,然后报告 prefix_binding_mismatch。用默认 error,它拒绝请求。当降级继续比失败更好时用 drop_block;在 CI 中用 error 立即暴露历史突变。[1]
相同无效请求体的自动重试无法修复不匹配。要么恢复原始前缀,删除受影响的思考块,要么显式请求一次删除行为。
重新检查不产生 400 的行为
兼容性测试也应覆盖安静的改变。Anthropic 说 Fable 5.1 可能在长代理循环中发出更少的平行工具调用,产生更少的进度消息,在 low effort 时调用搜索或检索更少。[3]这些都不一定表示缺陷,但每一个都可以改变延迟或产品行为。
围绕应用需要的东西建立断言:
- 对于可并行化的读,记录每轮调用和总往返次数。
- 对于进度 UI,要求用户面更新在定义的间隔而不是假设它们出现。
- 对于检索基础的答案,明确检索条件并拒绝缺少必需证据的答案。
- 对于编辑代理,验证改变文件列表并在需要小补丁时阻止整文件改写。[4]
也保持拒绝处理。Fable 5.1 可以返回 stop_reason: "refusal" 带 stop_details.category;不要把空答案文本视为运输失败。任何回滚必须考虑单向思考兼容性。[2]
FAQ
为什么 Fable 5.1 对我的结构化输出请求返回 400?
审查序列化 Anthropic 请求。一个框架可能通过用 tool_choice: any 强制一个合成工具来实现结构化输出。Fable 5.1 拒绝 any 和指定 tool 选择。切换到自动工具选择加严格 schema 和明确指令,或使用 Anthropic 的 JSON 输出机制。
strict: true 保证 Claude 调用工具吗?
否。它保证调用工具时参数符合 schema。指令可以要求调用,但你的应用仍需确认预期的工具使用块存在并处理其缺失。
Fable 5.1 能继续 Fable 5 对话吗?
是的。Fable 5.1 可以读来自 Fable 5 和其他文档记录的早期 Claude 模型的保留思考。反向不兼容:更早的目标在 Fable 5.1 思考块被删除后接收对话。
我能改变轮之间的系统提示吗?
不能通过在重放后面 Fable 5.1 思考块时改写前缀。追加对话中系统消息并保留在历史中。如果应用故意启动新对话,它可以使用新系统提示,因为没有旧思考块要保留。
最安全的客户端压缩策略是什么?
用一个摘要消息加新用户轮替换所有早期历史,不重放旧思考块。如果保留最近尾部,从尾部删除思考和清空思考块或使用文档删除行为。
迁移降低每个 API 账单吗?
否。输入和输出列表价格保持 $10 和 $50 per 百万 token。缓存读更便宜,但任务成本也依赖输出、轮数、effort、重试和缓存是否保持有效。[5]Fable 5.1 成本分解单独处理该计算。
发布门:所有行通过前不要部署
| 门 | 通过条件 |
|---|---|
| 模型路由 | 每个生产别名在预期的地方解析到 claude-fable-5-1 |
| 强制工具 | 没有序列化请求包含 tool_choice: any 或指定强制工具 |
| 必需输出 | 丢失工具调用和无效数据在应用代码中安全地失败 |
| 思考历史 | 多轮、工具改变和压缩测试显示无意外前缀不匹配 |
| 回滚 | 降级测试容忍删除的 5.1 思考并不双执行副作用 |
| 保留 | 目标工作区允许模型必需的保留策略 |
| 行为检查 | 检索、进度、工具批处理、拒绝和文件编辑范围满足产品标准 |
绿色单轮响应只证明模型 ID 和凭证工作。绿色迁移在工具调用后、历史改变后和通常只在生产已经压力下运行的回滚后锻炼对话。
References
- Anthropic, 迁移到 Claude Fable 5.1 和 Claude Mythos 5.1, accessed September 7, 2026.
- Anthropic, Claude Fable 5.1 概述, accessed September 7, 2026.
- Anthropic, Claude Fable 5.1 的新增功能, accessed September 7, 2026.
- Anthropic, 提示 Claude Fable 5.1, accessed September 7, 2026.
- Anthropic, API 价格, accessed September 7, 2026.
- OpenCode, Issue #46735: Claude Fable 5.1 结构化输出工具选择错误, accessed September 7, 2026. The issue is cited as an integration example; API behavior is sourced from Anthropic.
更多文章

Seedance 视频最长能做多长?2.0 为 15 秒,2.5 为 30 秒
Seedance 2.0 每次可生成 4–15 秒视频,Seedance 2.5 支持 4–30 秒。本文说明时长设置、成本与场景衔接方法。


FLUX 3 视频价格完全指南:草稿、高清、全高清与续生成
计算 FLUX 3 视频在草稿、高清、全高清、关键帧和视频续生成等各模式下的成本差异,详解草稿到成品的完整工作流程和 5-20 秒档位总价。


如何停止 Claude Code 权限提示
Claude Code 有六种权限模式。自动模式使用分类器审查,规则可以解决重复提示的命令,特殊配置文件会静默忽略自动模式。
