Anthropic 发布了新一代旗舰模型 Claude Fable 5。对于有技术背景的读者来说,Fable 5 不只是"又一次能力刷分",它在上下文规模、思考机制、分词器、安全策略乃至 API 契约上都做了一系列会直接影响工程接入的改动。本文不堆砌没有公开的跑分数字,只基于已确认的事实,把 Fable 5 到底"变了什么、怎么用、要注意什么"讲清楚。

定位:当前最强的广泛发布模型

Fable 5 是 Anthropic 目前最新、也是最强的广泛发布模型,对应的 model id 是 claude-fable-5。除此之外还有一个仅在 Project Glasswing 内部可用的孪生版本 Claude Mythos 5,二者在能力与定价上完全一致,区别只在可获得性。对绝大多数开发者而言,能接触到的就是 claude-fable-5 这一个名字。

它的能力定位高于此前的 Opus 档。如果你之前用 claude-opus-4-8 作为主力,Fable 5 是顺位而上的更强选择,但"更强"也意味着更高的单位成本和一些不能直接照搬的接入假设,下面逐一展开。

1M 上下文与 128K 输出

Fable 5 提供 1M token 的上下文窗口,并且这里有个值得强调的细节:1M 既是最大值,也是默认值。换句话说,你不需要为了开启长上下文做额外配置,模型默认就在百万级窗口下工作。

单次输出最多 128K token。这意味着它适合"长输入 + 长输出"的场景——例如一次性吃下整个代码仓库或大批文档再产出长篇结构化结果,而不必把任务硬拆成很多轮。当然,能放进去不等于应该放满,超大窗口对延迟和成本都有实际影响,需要结合下面的分词器变化一起算账。

新分词器:token 数比 Opus 档约多 30%

这是接入时最容易踩坑的一点。Fable 5 换了新的分词器,同样的文本内容,token 数比 Opus 档大约多出 30%。

它带来的连锁影响是双重的:

  • 成本:定价按 token 计费,token 多了,等量内容的实际花费会被同步抬高。
  • 上下文预算:你过去基于 Opus 档估算的"这段内容大概占多少 token"全部失真,1M 窗口在按字符感受上会比数字显得"小一些"。

正确做法是不要凭经验外推,而是用 count_tokens 接口对真实负载重新测一遍,再据此规划批量大小和上下文裁剪策略。

定价:输入 $10 / 输出 $50(每百万 token)

Fable 5 的价格为输入 $10 / 百万 token,输出 $50 / 百万 token,明确高于 Opus 档。把它和上一节的分词器变化叠加看,单次调用的真实成本相对此前是"价格更高 × token 更多"的双重上浮。

这并不意味着 Fable 5 不划算——对于难任务,一个更强的模型一次做对,往往比便宜模型反复试错更省。但它确实把"模型选型"从拍脑袋变成了需要按场景算 ROI 的工程决策:高价值、高难度、长程任务交给 Fable 5;简单高频任务保留更便宜的档位。

始终开启的思考与 effort 控制

Fable 5 的扩展思考(extended thinking)是始终开启、不可关闭的。你无法把它退化成一个"纯直答"模型,思考是它工作方式的固有部分。

你能控制的是思考的深度和开销,通过 output_config.effort 设置,可选 low / medium / high / xhigh / max 五档。effort 越高,模型投入的思考越深、消耗的 token 越多。一个简洁的请求示例:

1
2
3
4
5
6
response = client.messages.create(
model="claude-fable-5",
max_tokens=4096,
output_config={"effort": "high"},
messages=[{"role": "user", "content": "..."}],
)

需要特别注意的是,Fable 5 上 effort 的影响比以往更显著——它不是一个微调旋钮,而是会实质改变行为与成本的关键参数,值得针对任务类型专门调试。

受保护思维链:只能拿到摘要

出于安全考虑,Fable 5 的原始思维链永不返回。API 只会给你思考过程的摘要,对应 display: "summarized"。你拿不到逐字的内部推理。

由此引出一个多轮对话的硬性约定:在与同一模型进行多轮交互时,必须把上一轮返回的 thinking block 原样回传。不要丢弃、不要改写它,否则会破坏模型对自身推理上下文的延续。这是接入 Fable 5 多轮 agent 时最容易忽略、又最容易导致行为异常的细节之一。

安全分类器与 refusal:先判 stop_reason

Fable 5 带有安全分类器,可能直接拒答。关键在于它的拒答形式:返回的是 HTTP 200,而不是错误码,但响应里的 stop_reason 会是 "refusal"。这类拒答主要针对生物、网络安全等高风险领域。

工程上必须改变读响应的顺序——先判断 stop_reason,再去读 content,否则在 refusal 情况下你可能拿到空内容或非预期结果而不自知。一个稳健的处理是检测到 refusal 后回退到 claude-opus-4-8

1
2
3
4
5
6
7
8
resp = client.messages.create(model="claude-fable-5", ...)

if resp.stop_reason == "refusal":
# 高风险领域被安全分类器拦截,回退到上一代模型
resp = client.messages.create(model="claude-opus-4-8", ...)

# 确认非 refusal 后再消费 content
text = resp.content

其它接入约束

还有两条容易被老代码绊倒的限制:

  • 不支持 assistant prefill。如果你过去靠预填 assistant 开头来"诱导"输出格式,这套写法在 Fable 5 上不可用,需要改用别的方式约束输出。
  • 需要 30 天数据保留。零数据保留(ZDR)的组织调用会直接收到 400。如果你所在组织是 ZDR 配置,需要先解决数据保留策略才能使用。

行为特点:长程自治与并行子 agent

从行为层面看,Fable 5 在难任务上单轮推理可以跑数分钟——这是"始终思考 + 高 effort"的直接体现,调用方要做好相应的超时与等待设计。它在长程自治 agent 场景表现强,并行子 agent 也表现可靠,适合用来搭建需要长时间自主推进、多个子任务并行协作的复杂系统。

总结

Claude Fable 5 是一次"能力更强、但接入契约也变了"的升级:百万上下文、始终思考、受保护思维链、新分词器、可能 refusal 的安全策略,每一项都要求你重新审视成本估算与调用代码,而不是把旧逻辑直接指向新 model id。