Claude Fable 5.1缓存成本降75%后,API调用怎么配最省钱
引言
9月1日深夜,Anthropic 没有发布会、没有预热,直接把 Claude 旗舰模型 Fable 5.1 推上线。输入输出价格一分没动,缓存读取价格却从每百万 Token 1 美元直降到 0.25 美元,砍了 75%。
这个动作很容易被误读成"大降价"。实际上,官方通稿里那句"最高降价 45%"背后有个文字游戏:普通输入输出的单价完全没变,真正降的只有缓存读取这一项。换句话说,这次降价只奖励一种人——懂得把上下文塞进缓存、让系统提示词和固定前缀稳定复用的人。
对做 AI 应用、跑批量任务、维护 Agent 的开发者来说,这反而是一个明确的信号:与其换模型,不如先改调用方式。本文不聊基准分数,只聊一件事——在 Fable 5.1 的定价结构下,API 调用怎么配,才能把单次推理成本真正压到最低。
先算清这笔账:缓存命中到底省多少
要理解省钱逻辑,得先拆开大模型 API 的三类计费项:
| 计费项 | 含义 | Fable 5.1 定价(每百万 Token) |
|---|---|---|
| 缓存写入 | 首次把内容写入缓存 | 略高于普通输入 |
| 缓存读取 | 后续命中缓存时的读取 | 0.25 美元(原 1 美元) |
| 普通输入 | 未启用缓存的标准输入 | 与上一代持平 |
关键点在于:缓存读取降价 75%,只对"命中缓存"的部分生效。如果你的每次请求都是全新的 prompt、没有任何可复用的前缀,那这 75% 跟你一点关系都没有。
一个典型的 Agent 场景最能说明问题。假设你有一个客服 Agent,系统提示词(角色设定、工具说明、业务规则)固定不变,每次调用只换用户输入。这部分固定前缀如果每次都按普通输入计费,成本是实打实的;一旦放进缓存,读取成本直接砍到原来的四分之一。
所以省钱的第一性原则不是"换更便宜的模型",而是提高缓存命中率。命中率越高,这 75% 的折扣覆盖的 Token 越多。
怎么配:让固定前缀稳定进缓存
缓存机制的核心是"前缀匹配"。Anthropic 的缓存是按 token 前缀自动识别的——只要请求的开头部分与之前缓存过的内容一致,这部分就按缓存读取计费。这意味着你的系统提示词、工具定义、少样本示例,都要尽量保持字节级稳定。
下面是一个 Python 调用示例,演示如何显式声明缓存断点:
import anthropic
client = anthropic.Anthropic()
SYSTEM_PROMPT = """你是企业客服助手。
规则:
1. 只回答产品相关问题
2. 不承诺任何退款政策
3. 语气专业简洁
"""
response = client.messages.create(
model="claude-fable-5-1",
max_tokens=1024,
system=[
{
"type": "text",
"text": SYSTEM_PROMPT,
"cache_control": {"type": "ephemeral"} # 显式标记缓存断点
}
],
messages=[
{"role": "user", "content": "我的订单什么时候发货?"}
],
)
print(response.content[0].text)
这里的关键是 cache_control: {"type": "ephemeral"}。它告诉 API:从 system 部分开始建立缓存断点。下一次请求只要 system 内容一模一样,这部分就按 0.25 美元/百万 Token 计费,而不是普通输入价。
除了显式声明,还有几条提升命中率的实操建议:
第一,固定前缀放在最前面。缓存匹配是从请求开头逐 token 对齐的,任何动态内容(时间戳、随机 ID、用户输入)如果插在固定内容之前,会直接打断前缀匹配,导致后面所有内容都无法命中缓存。
第二,工具定义保持稳定。如果你用 function calling,工具 schema 的字段顺序、描述文字都不要随手改。哪怕只是换了个描述词,整个前缀就变了,缓存全部失效。
第三,少样本示例按热度排序。把最常用的 few-shot 示例放在前面,冷门示例放后面。这样高频请求能命中更长的缓存前缀。
避坑:哪些场景省不到钱
缓存降价不是万能药,有三种场景基本享受不到红利:
场景一:每次 prompt 都高度动态。 比如你做一个"根据用户输入生成不同风格文案"的应用,系统提示词很短,用户输入占了大头,缓存能覆盖的部分微乎其微。这种情况下,Fable 5.1 对你来说输入输出价格和上一代完全一样。 场景二:多轮对话但每轮都重发全部历史。 很多开发者图省事,每轮都把完整对话历史拼进 messages 里重发。如果历史部分能稳定命中缓存,这其实是好事;但如果在历史前面插了动态字段(比如当前时间戳),缓存就废了。 场景三:用第三方中转或套壳 API。 部分中转服务会改写请求、注入自己的标记,或者干脆不支持 cache_control 透传。你的缓存断点声明可能在中间层就被丢弃了,自然享受不到降价。验证方法很简单,看响应里的 usage 对象:
print(response.usage)
# 关注这几个字段:
# cache_creation_input_tokens -> 本次写入缓存的 token 数
# cache_read_input_tokens -> 本次命中缓存的 token 数
# input_tokens -> 普通输入 token 数
如果 cache_read_input_tokens 持续为 0,回到上面检查:前缀是否稳定、cache_control 是否被中间层丢弃、固定内容是否被动态字段打断。
总结
Fable 5.1 的缓存降价是一场"定向补贴"——它不奖励换模型的人,只奖励把调用架构设计好的人。核心就三条:固定前缀放最前、显式声明 cache_control、保持工具定义和系统提示词字节级稳定。
这套逻辑不只适用于 Fable 5.1,任何支持前缀缓存的模型都遵循同样的规律。真正拉开成本差距的,从来不是模型单价,而是调用方式。
这也是为什么在 Agent 场景里,光靠换模型省不下多少钱——你需要的是一个能自动管理上下文、稳定复用固定前缀、并在缓存失效时自主重试的智能决策引擎。ClawBrain 就是为 OpenClaw 打造的这样一层决策层,它具备任务闭环、自主规划和错误自愈能力,让龙虾真正能独立做事,而不是每次调用都从头拼 prompt。成本优化这件事,最终还是要落到"把重复的事交给会省钱的系统"上。