Claude Fable 5.1 发布:8 项基准屠榜、缓存降价 75%,但升级前先改这三处代码

Anthropic 今天凌晨扔出了 Claude Fable 5.1。8 项公开基准全部第一,缓存读取直降 75%,Claude Code 会话中的安全干预砍掉六成——这些数字都很好看。但我读完官方迁移文档和 API 变更说明后,第一反应不是”快升级”,而是”先别急”。

这篇不是跑分速递,而是开发者升级指南:到底改了什么、能省多少、哪三处代码会在升级当天 break 你。

一、Fable 5.1 到底升级了什么

先说结论:Fable 5.1 不是新模型线,它是 Fable 5 的迭代版本。同一个基础模型,三个月后训练到更好。和它一起发布的还有 Mythos 5.1——两个模型架构完全相同,区别只在安全防护等级。Fable 5.1 面向所有人,Mythos 5.1 只给通过审核的网络安全和生命科学机构。

跑分:科学推理是最大跃升

基准 Fable 5 Fable 5.1 变化
Terminal-Bench-Science 0.1 24.7% 52.6% +113%
Terminal-Bench 4.0 42.0% 55.8% +33%
CursorBench 3.2.0 70.5% 73.4% +4%
GDPval-AA v2 1723 1853 +7.5%
Humanity’s Last Exam (无工具) 57.8% 60.9% +5.4%

Terminal-Bench-Science 翻了一倍多,这是 Anthropic 重点宣传的数字。但说实话,日常编程场景里更该看 Terminal-Bench 4.0(55.8%)和 CursorBench(73.4%)——这俩才是你写代码时能感受到的差异。Terminal-Bench-Science 测的是”让模型做科学研究”,跟大多数开发者的使用场景有距离。

Anthropic 官方也说得很坦白:标准误差在 3.5-4.5 个百分点之间,所以”排名”可信但”差距”别太当真。Fable 5.1 vs GPT-5.6 Sol 在 Terminal-Bench-Science 上是 52.6% vs 22.4%,这个差距足够大;但 73.4% vs 70.5% 的 CursorBench 提升就在误差边缘了。

一个有意思的细节:Mythos 5.1 在 Terminal-Bench 4.0 上得分 60.9%,而 Fable 5.1 是 55.8%。同一个模型,去掉一些安全防护后多了 5 个百分点。Anthropic 主动公布了这个差距,等于公开承认安全干预有成本——这种诚实度值得肯定。

定价:基础没变,缓存读取砍 75%

项目 Fable 5 Fable 5.1
输入(/M tokens) $10 $10
输出(/M tokens) $50 $50
缓存读取(/M tokens) $1.00 $0.25
缓存写入(/M tokens) $12.50 $12.50
批处理输入(/M tokens) $5 $5
批处理输出(/M tokens) $25 $25

输入输出价格一分没动。降价全部在缓存读取——从 $1.00/M 降到 $0.25/M,降幅 75%。

这个降法对什么人有效?答案是:你的工作负载得真的在用缓存

Anthropic 给的数据是”典型工作负载成本降低约 25%,高度智能体化工作负载最多降 45%”。但如果你每次请求都是全新上下文、不复用 system prompt、不做多轮对话的 prompt caching,那你一分钱都省不了——Fable 5.1 和 Fable 5 花的一样多。

我在 OpenRouter API 上验证了 Fable 5.1 的元数据:

# 通过 OpenRouter API 验证 Fable 5.1 模型元数据
import requests

resp = requests.get("https://openrouter.ai/api/v1/models")
models = resp.json()["data"]
fable = [m for m in models if "fable" in m["id"].lower()][0]

print(f"Model ID: {fable['id']}")
print(f"Context: {fable['context_length']:,} tokens")
print(f"Max output: {fable['top_provider']['max_completion_tokens']:,} tokens")
print(f"Input: ${fable['pricing']['prompt'] * 1e6:.2f}/M")
print(f"Output: ${fable['pricing']['completion'] * 1e6:.2f}/M")
print(f"Cache read: ${fable['pricing']['cache_read'] * 1e6:.2f}/M")
print(f"Reasoning: {fable.get('reasoning', {})}")

运行环境:macOS / Python 3.13。输出结果:

Model ID: anthropic/claude-fable-5.1
Context: 1,000,000 tokens
Max output: 128,000 tokens
Input: $10.00/M
Output: $50.00/M
Cache read: $0.25/M
Reasoning: {'mandatory': True, 'default_effort': 'high', 
            'effort_levels': ['max', 'xhigh', 'high', 'medium', 'low']}

几个要点:
reasoning 是 mandatory(强制开启)的。你不能关掉思考。只能调档位:max / xhigh / high / medium / low,默认 high。
– 1M 上下文窗口,128K 最大输出——Fable 5 也是这个规格,没变。
– 支持 tool use 和 structured output。

二、三处 API Breaking Changes——升级前必须改代码

这是整篇文章最重要的部分。如果你已经在用 Fable 5 的 API,直接把 model ID 换成 Fable 5.1 会在三个地方出事。

Breaking Change 1:tool_choice=any 或 tool 直接返回 400

# ❌ Fable 5 能跑,Fable 5.1 直接 400
response = client.messages.create(
    model="claude-fable-5-1",
    messages=[{"role": "user", "content": "查北京天气"}],
    tools=[{"name": "get_weather", "description": "...", "input_schema": {...}}],
    tool_choice={"type": "any"}  # ← 这里 400
)

原因:Fable 5.1 的 thinking 是强制开启的。tool_choice=any 会跳过 thinking 阶段直接调工具,与强制思考冲突。

修复方法:改用 tool_choice={"type": "auto"} 配合 strict tool usestructured outputs

# ✅ 正确写法
response = client.messages.create(
    model="claude-fable-5-1",
    messages=[{"role": "user", "content": "查北京天气"}],
    tools=[{"name": "get_weather", "description": "...", "input_schema": {...}}],
    tool_choice={"type": "auto"}  # ← 让模型自己决定是否调工具
)

如果你之前用 tool_choice={"type": "tool", "name": "xxx"} 强制调某个工具,也得改成 auto + structured output。

Breaking Change 2:thinking blocks 的跨模型方向性

Fable 5.1 可以读取更早模型(比如 Opus 5、Fable 5)产生的 thinking blocks,但反过来不行——更早的模型读不了 Fable 5.1 的 thinking。

如果你用了 router 或 fallback 机制(比如先调 Fable 5.1,失败后 fallback 到 Opus 5),切换模型时 Fable 5.1 的 thinking blocks 会被静默丢弃。模型看不到之前的推理过程,可能重复推理或给出不一致的结果。

修复方法:在 fallback 时清除 thinking blocks,或改用 server-side context editing。

Breaking Change 3:编辑早期轮次会使 thinking blocks 失效

在对话中途修改 system prompt 或 tools 数组,会使之前的所有 thinking blocks 失效,后续请求会报错。

这个限制对 8月31日及之后创建的 API 账户强制执行。老账户暂时不受影响,但别指望宽限期——迟早会全量生效。

# ❌ 中途改 tools 数组 → thinking blocks 失效
messages = [
    {"role": "user", "content": "帮我分析数据"},
    # ... 多轮对话 ...
]
# 第 5 轮突然改 tools 定义
tools = updated_tools  # ← thinking blocks 全部失效

修复方法:用 turn-scoped system messages(每轮单独发 system message)或 server-side context editing,不要中途修改已有的 system prompt 或 tools 数组。

完整的迁移检查脚本

"""
Fable 5 → Fable 5.1 迁移检查脚本
运行环境:Python 3.10+
依赖:openai>=1.0(OpenRouter 兼容 OpenAI SDK)
"""

import os
import openai

# 通过 OpenRouter 调用,设置 base_url
client = openai.OpenAI(
    api_key=os.environ.get("OPENROUTER_API_KEY", ""),
    base_url="https://openrouter.ai/api/v1"
)

# 测试 1:基础调用 + reasoning
print("=== 测试 1:基础调用 ===")
resp = client.chat.completions.create(
    model="anthropic/claude-fable-5.1",
    messages=[{"role": "user", "content": "用一句话解释什么是 prompt caching"}],
    max_tokens=200,
)
print(resp.choices[0].message.content)

# 测试 2:tool_choice=auto(应正常)
print("\n=== 测试 2:tool_choice=auto ===")
resp = client.chat.completions.create(
    model="anthropic/claude-fable-5.1",
    messages=[{"role": "user", "content": "北京今天天气怎么样?"}],
    tools=[{
        "type": "function",
        "function": {
            "name": "get_weather",
            "description": "获取指定城市的天气",
            "parameters": {
                "type": "object",
                "properties": {"city": {"type": "string"}},
                "required": ["city"]
            }
        }
    }],
    tool_choice="auto",
    max_tokens=200,
)
print(f"Tool calls: {resp.choices[0].message.tool_calls}")

# 测试 3:tool_choice=any(应返回 400)
print("\n=== 测试 3:tool_choice=any(预期 400)===")
try:
    resp = client.chat.completions.create(
        model="anthropic/claude-fable-5.1",
        messages=[{"role": "user", "content": "查北京天气"}],
        tools=[{
            "type": "function",
            "function": {"name": "get_weather", "parameters": {"type": "object"}}
        }],
        tool_choice="any",
    )
    print("⚠️ 没有报错——可能 OpenRouter 做了兼容层")
except Exception as e:
    print(f"✅ 预期报错:{e}")

三、成本测算:缓存读取降价到底省多少

来算一笔账。假设你的工作负载是这样的:

项目 数值
每天请求数 1000 次
每次请求 system prompt 5000 tokens
每次请求用户输入 500 tokens
每次请求输出 2000 tokens
缓存命中率 80%(多轮对话+复用 system prompt)

Fable 5(旧)
– 缓存读取:1000 × 80% × 5000 = 4M tokens × $1.00/M = $4.00/天
– 非缓存输入:1000 × 20% × 5000 + 1000 × 500 = 1.5M × $10/M = $15.00/天
– 输出:1000 × 2000 = 2M × $50/M = $100.00/天
– 合计:$119.00/天

Fable 5.1(新)
– 缓存读取:4M × $0.25/M = $1.00/天
– 非缓存输入:1.5M × $10/M = $15.00/天
– 输出:2M × $50/M = $100.00/天
– 合计:$116.00/天

每天省 $3,月省 $90。看起来不多?那是因为缓存只占 4M/7.5M ≈ 53% 的输入 token。

如果你的工作负载是重度智能体(多轮调用、大量代码上下文、长 system prompt),缓存占比会推到 90%+,那时省的钱就多了。Anthropic 说的”最多省 45%”对应的就是这个极端情况。

什么时候不该升级

如果你几乎不做缓存——比如每次请求都是全新用户、全新上下文、不传 cache_control 参数——Fable 5.1 和 Fable 5 花的钱一模一样。这种情况下升级的唯一理由是跑分提升和安全干预减少,跟成本无关。

另外,Fable 5.1 的 tool_choice 限制对你影响大吗?如果你有大量”强制调工具”的代码,升级意味着逐个改。评估一下改造成本。

四、Claude Code 体验:安全干预减少 60% 是什么概念

Fable 5 有一个被用户吐槽的问题:太谨慎了。你让它做点涉及安全的东西(哪怕是正当的),它动不动弹安全提示、拒绝执行、或者让你”请咨询专业人士”。在 Claude Code 里尤其烦——你让它重构一个有 SQL 查询的文件,它能因为”SQL 注入风险”把你拦下来。

Fable 5.1 改善了这个:
网络安全防护:Claude Code 会话中的安全干预减少约 60%。允许识别代码中的漏洞(比如 SQL 注入、XSS),但渗透测试、漏洞利用开发、二进制扫描仍然被禁止。
生物学防护:良性请求的干预减少 85%。问个医学基础问题不会再被”请就医”挡回来。

还有一个改进:Fable 5.1 的写作风格变了。Anthropic 研究员 Flix Rieseberg 提到,模型减少使用粗体、更少用标题和列表、对风格提示词遵循得更好。如果你之前被 Claude 的”重要提示:“和 Markdown 格式轰炸过,这个变化会让你舒服很多。

五、文本水印和内容来源:你需要知道的事

Fable 5.1 开始,所有模型输出都带有一个统计式文本水印——不可见的数字标记,信号某段文本是否由 Claude 生成。Anthropic 说这个水印不影响输出质量,也不包含用户/组织/对话信息。

同时,文件输出会附带 C2PA 凭证(Content Provenance and Authentication)。

水印检测 API 目前在 private preview,只对部分机构(监管机构、执法部门、事实核查组织、研究人员、教育机构)和需要遵守 EU AI Act 的企业开放。

对普通开发者的实际影响:
– 你用 Claude 生成的代码/文档,理论上可以通过水印被检测出来。
– 但你没法自己检测——检测 API 不对你开放。
– 如果你的合规部门需要验证某段文本是否由 AI 生成,需要通过 Anthropic 的受信渠道申请。

六、如果你想试

Fable 5.1 可以通过以下渠道使用:

  1. Claude API(Anthropic 官方):model ID claude-fable-5-1
  2. OpenRouter:model slug anthropic/claude-fable-5.1,定价 $10/$50/$0.25 per M tokens
  3. Amazon Bedrock / Google Cloud / Microsoft Foundry:已同步上线
  4. Claude Code / Claude.ai:已默认切换到 Fable 5.1

如果你的套餐是 Max / Team Premium / Enterprise Premium,Fable 5.1 的用量限额是 Fable 5 的 50%。Pro 用户可以通过 usage credits 使用。

如果你刚接触 Claude 生态,可以看看我之前写的 Claude Google Workspace 连接器实测,了解 Claude 除了 API 之外还能替你干什么。

如果你在用 OpenAI 的 Codex 或 DeepSeek 的 Harness 做 AI 编程,Fable 5.1 作为模型层值得一试——Codex Harness 上手指南DeepSeek Harness 上手指南 都支持自定义模型 endpoint。

关于 prompt caching 的原理和成本优化策略,之前在 GPT-5.6 Luna + 思考按钮那篇文章 里讨论了不同模型的 thinking 机制对比,可以参考。

七、我的看法

Fable 5.1 是一个”对的人”会升、但”不对的人”可能不需要升的版本。

该升的人:重度 Claude Code 用户、有多轮对话+长 system prompt 的 API 用户、被 Fable 5 安全干预困扰的开发者、需要 Terminal-Bench-Science 级别科研推理的研究人员。

可以等等的人:只用 Claude 做简单单轮问答的、不使用 prompt caching 的、大量使用 tool_choice=any 强制工具调用的。

不该升的人:Fable 5 刚集成好、不想动 breaking changes 的。等你的代码改完再升也不迟——Fable 5 目前仍在 legacy 列表上,还没下线。

一个值得观察的点:Fable 5.1 并行工具调用”更不稳定”——Anthropic 自己承认 agent 循环可能从 Fable 5 的”一次调多个工具”退化到”一轮调一个”。如果你写了很多并行 tool calling 的逻辑,留意这个退化。

如果你想在本地跑开源模型做对比测试,参考这篇 本地部署大模型完全指南(Ollama 与 LM Studio 实战对比),用开源模型做 baseline 再跟 Fable 5.1 对比,能更清楚感知差距。

推荐阅读

  • Claude Fable 5.1 发布:8 项基准屠榜、缓存降价 75%,但升级前先改这三处代码

    Claude Fable 5.1 发布:8 项基准屠榜,缓存读取直降 75%,但升级前必须改三处代码——tool_choice 返回 400、thinking blocks 跨模型失效、编辑 syst…

  • 腾讯混元 Hy4 preview 开源上手:770B/49B MoE、1M 上下文,5 行代码跑通 API 调用与编程实测

    腾讯混元 Hy4 preview 开源:770B/49B MoE,1M 上下文,Apache 2.0。教你用 5 行 Python 通过 OpenRouter 调用 API,用 reasoning_e…

  • vLLM v0.28.0 上手指南:从 pip install 到 60% 提速,一篇说清 Kimi-K3、DeepSeek V4 与 7 项 Breaking Changes

    vLLM v0.28.0(8 月 26 日发布):584 commit、Kimi-K3 TTFT 升 60%、每 GPU 省 17 GiB、DeepSeek V4 sparse MLA 端到端。本文实…

  • 「牛来」身份揭晓:智谱 GLM-5.3-Flash 开源上手——从 API 调用到 Claude Code 替换实战

    智谱正式认领匿名模型 Ox Alpha,GLM-5.3-Flash 以 MIT 协议开源。320B/18B MoE 原生多模态模型,AA 智能指数 57 分追平 Claude Opus 4.8,价格仅…