Claude Fable 5 回退处理实操:怎么发现静默切到 Opus 4.8,并让代理代码处理拒绝
一个 900 分的 Hacker News 讨论把问题说得很直:如果 Fable 5 不再帮你,你也不会知道。默认确实如此,但不是完全无迹可查。下面逐项说明每个渠道会发生什么、代理循环该加哪条分支、哪些地方不能用 `fallbacks`,以及何时不该为 Fable 付钱。
Claude Fable 5 带着安全分类器上线,会检查攻击性网络安全、危险生物/化学、以及能力提取类请求。分类器一触发,你拿到的不是错误。在 Claude Code 这类客户端应用里,请求会被静默改到 Opus 4.8 上重跑。直接调用 API 时,你会收到一个成功的 HTTP 200 响应,但里面是拒绝。Anthropic 说,平均来看这影响不到 5% 的会话;但它自己的评测运行里,20.9% 的尝试触发了这件事。发布后那场讨论把真正的问题说清了:默认情况下,没有任何提示告诉你它发生过。
本文是 Fable 5 判决的配套实操指南:每个行为、每个检测入口、每条决策规则都放在这里。来源在文末。
每个渠道实际发生什么
| 渠道 | 分类器触发后 | 能看出来吗? |
|---|---|---|
| Claude Code(以及客户端应用) | 请求会自动在 Opus 4.8 上重跑;会话继续 | 截至 6 月 10 日,没有文档说明内置提示 |
| 直接调用 Messages API | 请求被 阻断:HTTP 200,带 stop_reason: "refusal" | 可以,看下面这些响应字段 |
直接调用 API 并启用 fallbacks 参数(测试版) | 自动用你列出的模型重试 | 可以,响应会说明哪个模型回答了 |
坑在这个不对称上。API 用户可以识别每一次拒绝;应用用户拿到的是静默换模型。如果你为 Fable 5 支付 2× 价格,而且这份工作确实在意模型差异,那么客户端默认行为会让你没法确认最后是谁回答的。
在自己的代理代码里识别拒绝
被阻断的请求是正常响应,不是异常。关键看三个字段:
stop_reason会返回"refusal",而不是end_turn或tool_use。stop_details.category会说明触发了哪个分类器:"cyber"、"bio"或"reasoning_extraction"。- 响应状态是 HTTP 200;只按状态码重试的逻辑永远看不到它。
所有绑定 Fable 5 的代理循环都需要这条分支:
response = client.messages.create(model="claude-fable-5", ...)
if response.stop_reason == "refusal":
category = response.stop_details.category if response.stop_details else None
log_fallback(task_id, category) # count these — see below
response = client.messages.create(model="claude-opus-4-8", ...) # your own fallback
如果循环只处理 end_turn 和 tool_use,遇到拒绝时通常不会崩溃,而是没有明显错误地停住,常常停在流程中间。先加这条分支,再谈切换模型;不要等第一次静默卡住之后再补。
统计你的回退率。 公开数字从 5%(Anthropic 的平均会话数据)到 20.9%(它自己的 Terminal-Bench 尝试)再到 2%(Artificial Analysis 的独立任务测量)都有。你的代码库会有自己的数字,而这个数字决定这类工作值不值得为 Fable 5 付钱。每次拒绝打一条日志,一周内就能看出趋势。
可选启用的 fallbacks 参数
API 可以替你重试:可选启用的 fallbacks 参数(测试版)列出分类器触发后要切到的模型,响应会报告实际由哪个模型回答。它既自动,也能追踪;这点和客户端应用的行为不同。
按迁移指南,它不支持这些渠道:Message Batches API、Amazon Bedrock、Vertex AI 和 Microsoft Foundry。在这些渠道里,上面的手动分支是唯一选择。(它支持 Claude API 和 Claude Platform on AWS。)
计费规则也算清楚了:输出前就被拒绝的请求不计费;如果分类器在流式输出中途触发,只为已经生成的内容付费;同时会有“回退抵扣”(原文: “fallback credit”)退还切换模型时产生的提示词缓存成本。
在 Claude Code 里
- 官方文档很直接地说明了哪些人会遇到它:渗透测试、CTF 练习、生物相关代码库会触发回退,而且常常第一条请求就触发(原文: “often on the first request”)。在 Fable 5 上做安全工作,本质上经常是在用 Fable 5 的价格跑 Opus 4.8。
- 回退目标可以配置:
ANTHROPIC_DEFAULT_FABLE_MODEL会改变 Claude Code 重跑时使用的模型(默认值:Anthropic API 上的 Opus 4.8)。DISABLE_PROMPT_CACHING_FABLE用于缓存相关调试。 - 截至 2026 年 6 月 10 日,没有文档说明完成回退后会有提示。如果你的工作必须知道到底由哪个模型回答,目前唯一能追踪的路径是直接调用 API,并处理拒绝分支。
什么时候别再纠缠,直接固定用 Opus
- 安全或生物相关工作:文档说第一条请求就触发很常见。运行
/model opus,或者在你的测试框架里固定用claude-opus-4-8,直接省下一半钱。 - 不能接受运行中途换模型的流水线(评测、对可复现性敏感的运行):要么用拒绝分支让问题明显暴露,要么别用 Fable 5。
- 批量工作负载:没有
fallbacks支持;但也没有价格溢价,因为通过 Batch API 使用 Fable 5 的价格等于交互式 Opus 4.8。离线工作里,拒绝分支加 50% 批量折扣,是最好的组合。 - 其他情况:继续用 Fable 5,加分支,记录回退率,让你自己的数字决定。
什么情况会让本文更新
Claude Code 出现有文档说明的回退提示(这是发布讨论里被要求最多的修复);fallbacks 参数正式可用,或者覆盖目前缺失的渠道;5%/20.9%/2% 之外,出现按领域公布的触发率;或者分类器类别发生变化。
配套阅读
- Claude Fable 5 对比 Opus 4.8:发布日判决 —— 定价、带正确标签的评测,以及其他细节
- Claude Code 价格拆解 —— 套餐、用量权重,以及哪些操作会消耗额度
- 管理长时间运行的代理 —— 静默换模型最容易伤到的自主工作流
- 你的
CLAUDE.md是攻击面 —— 代理安全的另一面:你的代理会自动信任什么
来源
- Anthropic 文档 —— 介绍 Fable 5 和 Mythos 5(回退设计、分类)
- Anthropic 文档 —— 迁移指南(拒绝字段、
fallbacks参数、计费、渠道支持) - Anthropic —— Fable 5 & Mythos 5 系统卡(20.9% Terminal-Bench 拒绝率,第 255 页)
- Claude Code 文档 —— 模型配置(触发工作负载、环境变量)
- Artificial Analysis —— Fable 5(GDPval 任务上测到 2% 回退)
- Hacker News —— “If Claude Fable stops helping you, you’ll never know”