Claude Fable 5回退到Opus 4.8详解

了解Claude Fable 5安全机制如何与生产API系统中的Opus 4.8回退行为协同工作。

By Dora 2 min read

我是 Dora。我已经将生产流量路由到 Claude Fable 5 大约一周了。时间够长,足以观察到回退行为的触发;时间也够短,我还记得哪些事情让我感到意外。这篇文章写给那些刚刚集成了 Fable 5、看到无害提示词返回 stop_reason: "refusal" 的人——或者即将遇到这种情况、不想在凌晨两点才发现的人。

简短版本: Claude Fable 5 的回退不是错误,而是模型发布方式中有据可查的一部分。当安全分类器拒绝某个请求时,API 返回 HTTP 200 以及一个拒绝停止原因,Anthropic 为你提供三种方式,可以在 Claude Opus 4.8 上重试该请求而不丢失用户。如果你把它当作需要捕获的异常,你会处理失当。如果你把它当作路由决策,它就能干净地嵌入流程。

我将介绍什么会触发回退API 实际返回什么如何实现重试,以及对计费的影响

为什么 Opus 4.8 在 Fable 5 路由中很重要

Fable 5 的安全机制与回退行为

Fable 5 是 Anthropic 目前广泛发布的能力最强的模型,它附带了位于模型前端的安全分类器。当分类器标记某个请求时,Fable 5 不会作出回应。该请求可以在 Claude Opus 4.8 上重新运行,并告知用户这一情况。相关内容记录于 Anthropic 关于 Claude Fable 5 和 Mythos 5 的公告

Anthropic 表示,分类器平均触发的会话比例不足 5%。这个数字与我目前的观察相符。大多数情况下,你不会注意到回退机制的存在。

Mythos 5 的访问限制背景

Mythos 5 与 Fable 5 是同一个底层模型,只是去掉了分类器。它并非公开可用。访问渠道通过 Project Glasswing,目前仅限于网络安全合作伙伴以及一个独立受信访问计划下的小规模生物学研究人员。如果你还没有访问权限,你就是在 Fable 5 上构建产品。anthropic mythos 的品牌命名在这里可能令人困惑——Mythos 是模型系列,Fable 5 是该系列中公开可用的成员。

本文其余部分,假设你的代码调用的是 Fable 5。

为什么回退是产品特性,而不只是错误路径

这一点我花了一点时间才内化。Opus 4.8 并不是降级体验。它是上一代 Opus 层级,依然能力出众,而且不运行相同的分类器。因此路由逻辑是:先尝试最强的模型,如果分类器拒绝,则回退到两个月前还是旗舰的那个模型。用户无论如何都能得到答案。这就是整个设计。

回退不是错误报告,而是你的代码代表用户做出的路由决策。

什么会触发回退或拒绝

网络安全、生物/化学及蒸馏类别

stop_details.category 字段告诉你哪个分类器触发了。Fable 5 上已公布的类别包括 cyberbioreasoning_extraction——最后一个针对看起来像是试图逆向工程或蒸馏模型输出(违反 Anthropic 服务条款)的请求。当前完整列表及确切行为详见 Claude API 文档中的拒绝与回退文档

在我的使用中,bio 从未触发过。cyber 触发过两次。两次的提示词都与安全相关但无害——一次是关于某个特定日志格式如何结构化的问题,另一次是关于一个早已公开且完全修补的 CVE。两次都没有任何恶意企图。分类器识别了表面模式并拒绝了请求。

误报与保守的安全机制

Anthropic 明确表示分类器经过保守调优——用他们自己的话说,比理想状态更严格。这就是权衡。他们宁愿拒绝一个无害的网络安全问题并路由到 Opus 4.8,也不愿放过真正的滥用案例。回退机制的存在正是因为误报率在设计上不为零。

如果你带着这个假设来构建,意外就会消失。如果你假设拒绝是罕见的紧急情况,第一次遇到就会出问题。

请求被拒绝时 API 返回什么

响应是一个正常的 HTTP 200。大致形状如下:

{
  "role": "assistant",
  "content": [],
  "stop_reason": "refusal",
  "stop_details": {
    "type": "refusal",
    "category": "cyber",
    "explanation": "..."
  },
  "usage": { "input_tokens": 106, "output_tokens": 1 }
}

在任何输出生成之前被拒绝的请求不会计费。如果你在不重置被拒绝轮次的情况下继续同一对话,你会持续收到拒绝——Anthropic 的流式拒绝文档专门涵盖了这一点。在重试之前,请移除或重写该轮次。

category 字段仅供参考。不要基于它来分支面向用户的文案。在某些场景下(包括批量结果)它也可能为 null,因此要通过直接检查 stop_reason 来检测拒绝。

构建者应如何实现回退

三种方式,选一种,不要叠加。

服务端回退参数

在直接使用 Claude API 或 AWS 上的 Claude Platform 时,最简洁的路径是选择加入的 fallbacks 参数。该参数目前处于测试阶段。你在请求中添加一个回退模型列表,如果 Fable 5 拒绝,Anthropic 会在列表中的下一个模型——发布时为 Opus 4.8——上重新运行请求,并将该响应返回给你。从你这边来看只有一次往返。

不支持 Message Batches API,目前也不支持 Amazon Bedrock、Vertex AI 或 Microsoft Foundry。对于这些平台,请使用 SDK 中间件。

客户端 SDK 中间件

Anthropic SDK 内置了拒绝回退中间件。你在客户端构建时一次性配置一个回退模型列表,它会处理重试、回退额度的 beta 请求头以及对话历史的维护。接受请求的模型会被固定用于后续轮次,以保持对话一致性。

我使用了中间件。配置只需在客户端构建时写一个代码块,之后 client.beta.messages.create 的行为与普通客户端完全相同——只是拒绝会自动路由。如果你使用 Bedrock、Vertex 或 Foundry,或者只是希望在所有地方使用相同的代码路径,我会推荐这条路。

记录分类器结果而不暴露敏感内容

发生拒绝时,记录足够调试的信息——模型、时间戳、类别——但如果提示词可能敏感,不要将完整提示词写入应用日志。分类器已经标记了它。将提示词视为需要处理的内容,而不是要在可观测性栈中索引的内容。

我对 stop_details.category 保持计数,并仅在开发环境中对完整载荷进行采样记录。这样你既能获得误报模式,又不会泄露内容。

计费与用户体验

在支持的情况下避免重复的提示词缓存费用

如果你原来的 Fable 5 请求使用了较长的缓存前缀,你不会希望在 Opus 4.8 上重试时再次为缓存读取付费。回退额度解决了这个问题。当拒绝铸造一个额度时,你会在响应中得到一个不透明的 fallback_credit_token,在重试请求时传入它可以避免重复的缓存费用。该机制和 beta 请求头记录于 AWS Bedrock 的回退额度指南,SDK 中间件会自动发送该请求头。token 有效期为五分钟。

如果你使用了服务端 fallbacks 参数或中间件,这一切都已处理好。如果你进行手动重试,则需要自己接入这个机制。

向最终用户解释回退

回退不是失败。但用户确实需要知道响应来自不同的模型,这既是出于透明度的考虑,也因为 Opus 4.8 可能给出不同的答案。我会显示一个小的内联提示——类似”由回退模型作答”——并链接到一个解释其含义的帮助页面。不是道歉,而是标注。

我不做的事是向用户暴露类别。“cyber”或”bio”脱离上下文读起来像是指控,而通常并非如此。

保持安全行为的可观测性

将拒绝率作为普通 SLI 进行追踪。如果它逐周上升,你需要知道——要么你的使用情况正在向被标记的类别转移,要么某个分类器被重新调优了。两者在运营上都值得关注。如果不加以衡量,两者都是不可见的。

常见问题

为什么 Fable 5 会回退到 Opus 4.8?

因为 Fable 5 附带的安全分类器会在特定类别(网络安全、生物、化学、蒸馏)拒绝请求。发生这种情况时,Fable 5 不会作答,请求可以在 Opus 4.8 上重新运行——后者不运行相同的分类器——从而用户仍能得到响应。

API 团队应如何处理拒绝响应?

将其视为正常的 API 结果,而不是异常。检查 stop_reason == "refusal"。使用服务端 fallbacks 参数、SDK 中间件,或实现带有回退额度 token 的手动重试。在继续对话之前重置被拒绝的轮次,否则你会持续收到拒绝。

回退是否意味着请求不安全?

不是。分类器经过保守调优,因此相邻类别中的无害请求有时会触发它们。Anthropic 表示不足 5% 的会话会触发回退。将拒绝视为路由信号,而不是对用户的判定。

什么时候应该将 Opus 4.8 设为默认模型?

当你不需要 Fable 5 的推理上限、且想完全避免路由逻辑时。Opus 4.8 的每 token 费用大约是 Fable 5 的一半,且不运行相同的分类器。对于常规工作,Opus 4.8 通常是更合理的默认选择。对于长周期的智能体运行,配置了回退的 Fable 5 才是正确选择。

结语

Claude Fable 5 的回退是路由事件,而非错误。 分类器以保守方式触发,API 返回干净的 200,Anthropic 提供了服务端参数和 SDK 中间件来处理重试、缓存计费以及对话历史,无需你编写太多代码。

实现工作量很小。思维框架的转变才是更难的部分。一旦你停止将拒绝视为异常,其余的一切就顺理成章了。

我仍在观察网络安全分类器在合法问题上的触发频率。再过一周的数据,应该能告诉我是否需要在我这边进行调整。下周继续更新。

往期文章: