如果你团队的 AI 账单里有 Claude 或 GPT,你大概率已经听过一句话:"开 Prompt Caching 啊,能省九成。"于是你在请求里塞了 cache_control,看着 dashboard 上"cached tokens"那一栏往上涨,觉得自己是个精打细算的架构师。
但这里有个让无数团队踩坑的真相:缓存的"读"确实打一折,可"写"不仅不打折,还要加价 25% 到 100%。更要命的是,你以为"半价 Batch + 九折缓存"可以叠加成骨折价——在 Anthropic 上,这俩根本不能同时用。
今天这篇,我把官方定价表里的隐藏账本拆给你看。读完你会知道:为什么有人开了缓存反而更贵、Batch 和缓存到底该选哪个、以及那层 90% 团队都漏掉的"语义缓存"该怎么补。
先看 Anthropic 官方定价表里最容易忽略的一栏。我直接从他们文档抄的真实数字(每百万 token 价格):
| 模型 | 基础输入 | 5分钟缓存写入 | 1小时缓存写入 | 缓存读取 | 输出 |
|---|---|---|---|---|---|
| Claude Opus 4.8 | $5 | $6.25 | $10 | $0.50 | $25 |
| Claude Sonnet 4.6 | $3 | $3.75 | $6 | $0.30 | $15 |
| Claude Haiku 4.5 | $1 | $1.25 | $2 | $0.10 | $5 |
看出门道了吗?三个被多数人忽略的非对称:
这意味着缓存不是"开了就赚",而是"被反复读才赚"。我们来算个盈亏平衡点:
信息差就在这里:很多人在低频后台任务上开了 1 小时缓存,写入翻倍,却根本没人复用,账单不降反升。
还有一个被严重低估的事实:输出 token 永远不能缓存。看 Opus 4.8——输入 $5,输出 $25,输出是输入的 5 倍。你把输入缓存到极致只省了一半的钱,真正的大头输出原封不动。所以省钱的第二个杠杆根本不是缓存,而是 max_tokens 上限、结构化输出(强制 JSON 而不是让模型唠叨)、和 stop sequence。这点国内几乎没有文章讲。
这是最大的认知误区。Batch API(批量接口)确实诱人——官方白纸黑字:"reducing costs by 50%",绝大多数任务 1 小时内跑完,最慢 24 小时,单个 batch 最多塞 10 万条请求或 256MB。很多团队的第一反应是:"那我 Batch 半价 + 缓存九折,岂不是打 0.5×0.1 = 0.05 折?"
不能。 Anthropic 文档里有一句被埋得很深的话:
Each batched request must have max_tokens of at least 1. () is not supported inside a batch, since an ephemeral cache entry written during batch processing would likely expire before the follow-up request runs.
翻译成人话:ephemeral 缓存(就是上面那个 cache_control)在 Batch 里根本不生效,因为批量任务是异步并发跑的,你写入的缓存在下一条请求轮到之前早就过期了。所以在 Anthropic 上,Batch 和 Prompt Caching 是二选一,不是叠加。
那该选谁?给你一个清晰的决策矩阵:
| 场景特征 | 选什么 | 理由 |
|---|---|---|
| 实时聊天、需要秒回 | Prompt Caching | 延迟低,静态前缀复用率越高越赚 |
| 大量静态前缀(system + 知识库 + 工具定义)被反复读 | Prompt Caching | 读取打一折,5 分钟内回本 |
| 离线批处理( overnight 分类、打标签、数据清洗) | Batch API | 整体直接半价,不用纠结缓存 |
| 每次请求都是全新内容、几乎无复用 | 都别开 | 缓存写入加价、Batch 也救不了没复用的场景 |
这里还有个跨厂商的认知差值得记下:OpenAI 的 Prompt Caching 是"免费午餐",Anthropic 的不是。 OpenAI 文档明说缓存"automatic""no code changes""no additional fees"——也就是写入不加价,自动缓存,前缀 1024 token 以上就生效,还能用 prompt_cache_key 主动提高命中率。所以同样的省钱动作,在 OpenAI 上是无脑开,在 Anthropic 上要先想清楚复用率够不够撑过那个 1.25 倍写入溢价。
另外 OpenAI 还有招国内少有人提的:Extended Prompt Caching,设 prompt_cache_retention: "24h" 可以把缓存从默认 5–10 分钟拉到最长 24 小时,把 KV 张量卸到 GPU 本地存储。对那种"白天高峰、晚上低峰但隔天还有人问"的场景,这个 24 小时保留能把命中率顶上去。Anthropic 对应的是 1 小时 TTL(要付 2 倍写入价),保留时长明显短一截。
前面两种缓存——无论 Anthropic 还是 OpenAI——都有一个共同硬伤:只认精确的前缀匹配。OpenAI 原话是"Cache hits are only possible for exact prefix matches within a prompt"。换一个字、多一个空格、用户把"怎么退款"说成"如何申请退款",缓存就 miss,你的钱又流给了 LLM。
而真实业务里,客服场景有大量"问法不同、意思一样"的重复问题。这部分 exact-match 缓存根本吃不到,得靠第三层:语义缓存(Semantic Cache)。
代表工具是开源的 GPTCache(Zilliz 出品),README 第一行就写着"Slash Your LLM API Costs by 10x, Boost Speed by 100x"。它的原理不复杂:
它已经和 LangChain 集成,提供 Docker 镜像,任何语言都能接。关键它是"近似匹配"——前缀缓存漏掉的"换了说法的同一问题",它能接住。
但语义缓存也不是万能,有它的坑要躲: - 阈值设太松(比如相似度 0.75 就返回),会把"怎么退款"和"怎么换货"判成一类,返回错误答案。客服、医疗、法律这类容错低的场景,阈值要卡到 0.92 以上,宁可少命中也别答错。 - 时效性问题会过期——"今天的股价""现在几点"这类答案不能缓存,要在 query 进来前先做意图识别过滤掉。 - 冷启动期命中率为零,得积累够历史数据才显效。
把上面三层理清楚后,一条请求进来该走哪条路,看这张图:
flowchart TD
A[一条请求进来] --> B{需要秒级实时响应?}
B -->|否, 可等几分钟到几小时| D[走 Batch API<br/>整体直接半价]
B -->|是, 必须快| C{prompt 里有大量<br/>静态前缀且会被反复读?}
C -->|是| E[开 Prompt Caching<br/>缓存读取打一折]
C -->|否, 每次全新内容| F[别开缓存<br/>写入加价反而亏]
E --> G{用户问题大量<br/>重复或换说法重复?}
G -->|是| H[叠加语义缓存 GPTCache<br/>命中直接返回, 不调 API]
G -->|否| I[只保留 Prompt Caching]
D --> J[注意: Anthropic Batch<br/>不支持 ephemeral 缓存<br/>和缓存是二选一]
一句话总结:实时流量的钱靠"缓存读取一折"省,离线批量的钱靠"Batch 半价"省,重复语义的钱靠"GPTCache 直接不调用"省——三条路各管一段,别想着用一个开关通吃。
把数字落到一个真实场景。假设你用 Claude Sonnet 4.6($3/M 输入,$0.30/M 缓存读,$15/M 输出)跑客服,月 100 万次对话,每次静态前缀(system prompt + 知识库 + 工具定义)8000 token,动态用户输入 500 token,平均输出 800 token。
什么都没做(裸奔): - 输入:100 万 × 8500 × $3/M = $25,500 - 输出:100 万 × 800 × $15/M = $12,000 - 合计:$37,500/月
只开 Prompt Caching(缓存 8000 静态前缀,假设 5 分钟内都能复用): - 缓存读取:100 万 × 8000 × $0.30/M = $2,400(替代了原本的 $24,000 静态输入) - 动态输入:100 万 × 500 × $3/M = $1,500 - 输出(缓存动不了它):$12,000 - 合计:$15,900/月 → 省了 $21,600,降幅约 58%
再叠语义缓存(假设 25% 的用户问题是换说法的重复问题,GPTCache 直接返回): - 25 万次完全不调 LLM → 在 $15,900 基础上再砍约 25% - 合计:约 $11,900/月 → 省了 $25,600,降幅约 68%
对比一下离线路线:如果这 100 万次是 overnight 批处理、不要求实时,直接走 Batch 半价 = $37,500 × 0.5 = $18,750。注意——这个数比"实时 + 缓存"的 $15,900 还贵,因为 Batch 吃不到缓存那九折读取。所以"静态前缀复用率极高"的场景,缓存比半价更划算;"复用率低但能异步"的场景,Batch 才是正解。
| 维度 | 大多数人以为 | 真相(信息差) |
|---|---|---|
| 缓存写入价格 | 跟读取一样便宜 | 写入加价 25%(5分钟)到 100%(1小时),只有反复读才回本 |
| Batch + 缓存 | 能叠加成骨折价 | Anthropic 上二选一,ephemeral 缓存在 Batch 不生效 |
| 输出 token | 缓存也能省 | 输出永远不能缓存,Opus 输出是输入的 5 倍,才是真大头 |
| OpenAI vs Anthropic 缓存 | 两家一样 | OpenAI 自动免费无写入溢价,Anthropic 要算复用率 |
| 重复问题 | 前缀缓存能接住 | 只认精确前缀,换说法就 miss,要靠语义缓存补 |
max_tokens、强制结构化输出、加 stop sequence——这比折腾缓存见效更快。记住核心心法:省钱的本质不是"找一个开关打开",而是"分清楚这笔调用该让哪一层去接"——读取一折管静态、Batch 半价管批量、语义缓存管近似、收紧输出管真大头。四层各司其职,账单才有真正的大幅下降。
本文由「51学通信」技术团队出品。51学通信由通信行业18年老兵爱卫生(微信ID: gprshome201101)维护。 聚焦5G/6G核心网、3GPP标准、AI工具实战。知识星球「51学通信」提供深度技术答疑和行业洞察。
[!tip] 51学通信知识星球 星主:爱卫生(微信:gprshome201101)——公众号「51学通信」创办者,19 年通信行业运维与讲师经验,著有《GPRS网络信令实例详解》《EPC原理与实践》《5G核心网原理与实践》三本纸质书(各大电商平台有售)。 星球定位:深耕 5G 核心网、IMS、NFV/AI、云原生等 ICT 领域,主打运维岗位与信令分析。 当前规模:5200 篇主题 / 990 个回答,198 元/年。 加入福利:加入星球后请加爱卫生微信,拉您进知识星球年度陪伴与答疑群——不限量回复您的各种问题,另有群内分享。 AI 加持:51学通信知识星球已作为 skill 接入 WorkBuddy,使用 deepseek-4-flash 在海量星球帖子中精准找贴、找视频、找 FAQ 和案例,做总结、找文档和 PPT 等场景全覆盖。
