本文为 AI 生成文章。 本文由 Gemini 3.5 Flash 根据一组真实的 Claude-Opus API 调用数据总结撰写,由 Claude Code(本人所用工具)整理排版后发布。内容涉及计费反推与节省比例的估算,仅供参考。
重要前置说明:本文基于 Anthropic Claude 系列(实测数据来自
claude-opus-4-8)的 Prompt Caching 机制。各厂商的缓存实现并不通用、规则也各不相同——TTL、计费倍率、最小可缓存长度、命中条件都有差异。比如 OpenAI 的缓存是自动开启、通常 5~10 分钟过期、按缓存命中给予约 50% 折扣(而非 Claude 的 1 折读取);Google Gemini 的 Context Caching 则需要显式创建缓存对象、按存储时长额外计费。下文所有单价、倍率、TTL 数字都仅适用于 Claude,套用到其他厂商前请务必查阅其官方文档。
在开发基于 LLM(大语言模型)的应用时,尤其是涉及长文本分析、连续对话、或者辅助编程等场景,API 的费用往往会随着对话轮数的增加呈现指数级增长。
原因很简单:大模型是无状态的。为了让它记住上下文,每次你发送新消息时,客户端都必须把”历史所有对话 + 新问题”打包成一个巨大的 Prompt 重新发送一遍。这种 O(N²) 的 Token 增长方式,很快就会让 API 账单变得非常难看。
为了解决这个问题,主流服务商(如 Anthropic、OpenAI 等)推出了 Prompt Caching(提示词缓存) 机制。本文的实测与计费分析均以 Anthropic Claude 为准——它把缓存做成了前缀匹配 + 两档 TTL 的开关,读取约 1 折、写入有溢价,规则清晰。本文将结合一组真实的 Claude-Opus API 调用数据,用最朴实的程序员视角,拆解这个机制是如何帮我们省钱的。
简单来说,当你的 Prompt 达到一定长度(通常是 1024 或 2048 Token 以上)时,API 服务商会把这部分 Prompt 的 KV Cache(键值缓存)暂时保存在他们的服务器内存中。
当下一次请求发送过来时,如果你的 Prompt 开头部分(Prefix)与缓存的内容完全一致,大模型就不会重新去计算这部分 Token,而是直接从内存中读取。
这带来了两个直接好处:
而缓存的生命周期(TTL)是这套机制里最关键、也最容易被忽略的变量。Claude 提供两种档位:5 分钟缓存(5m,默认) 和 1 小时缓存(1h,需显式开启)。前者写入便宜但过期快,后者写入更贵但留得久——这个差异,会直接决定你的账单是”省一半”还是”省了个寂寞”。后文的实测会专门对比两者。
注:5m / 1h 两档 TTL 是 Claude 特有的设计。其他厂商不一定有”可选手动开启长 TTL”这种机制——OpenAI 的缓存 TTL 不可配置,Gemini 的缓存则要按小时单独付存储费。下文的 5m vs 1h 对比只对 Claude 成立。
下面是一段连续运行了 22 分钟的真实 API 调用日志。在这个会话中,程序在不断向 Claude-Opus 请求产出长文本,单次输出在 2500 到 4900 Token 之间。
为了方便阅读,我们将数据按照时间正序(从前到后)整理如下(价格保留到小数点后 4 位):
| 序号 | 触发时间 | 输入 Token | 输出 Token | 缓存读取 Token | 缓存写入 Token | 实际花费 (USD) |
|---|---|---|---|---|---|---|
| 1 | 17:56:35 | 2 | 2,550 | 0 | 14,673 | $0.1555 |
| 2 | 17:59:06 | 2 | 2,938 | 14,673 | 2,597 | $0.0970 |
| 3 | 18:02:19 | 2 | 3,397 | 17,270 | 3,073 | $0.1128 |
| 4 | 18:04:50 | 2 | 3,687 | 20,343 | 3,586 | $0.1248 |
| 5 | 18:07:53 | 2 | 4,275 | 23,929 | 3,617 | $0.1415 |
| 6 | 18:09:58 | 2 | 2,550 | 27,546 | 4,362 | $0.1048 |
| 7 | 18:13:15 | 2 | 4,498 | 31,908 | 2,594 | $0.1446 |
| 8 | 18:16:43 | 2 | 4,901 | 34,502 | 4,527 | $0.1681 |
| 9 | 18:18:07 | 2 | 4,717 | 39,029 | 4,935 | $0.1683 |
程序员视角下的技术细节:
缓存读取。第 2 轮读取了第 1 轮写入的 14,673;第 3 轮读取了 17,270(即 14,673 + 2,597)。整个会话的上下文像滚雪球一样越来越大,到了最后一轮,缓存中已经驻留了 39,029 个 Token。上面这 9 条之所以省心,是因为程序调用间隔只有 2~3 分钟,5m TTL 几乎永远不会被打破。但真实的人类使用完全不同——看文献、思考、打字、喝口水,任何一步都可能把间隔拖过 5 分钟。
为了搞清楚 5m 和 1h 到底哪个更实用,我又拉取了一段跨越约 12.5 小时(2026-06-19 11:36 至 2026-06-20 00:07)、共 43 条 的更完整调用日志来复盘。上面那 9 条(17:56~18:18)正是其中第 13~21 条。
为便于阅读,价格保留到小数点后 4 位,时间统一取 HH:MM:SS:
| 序号 | 时间 | 模型 | 输入 | 输出 | 缓存读取 | 缓存写入 | 花费 (USD) |
|---|---|---|---|---|---|---|---|
| 1 | 11:36:29 | claude-opus-4-8 | 14,377 | 3,082 | 0 | 0 | $0.1489 |
| 2 | 11:39:18 | claude-opus-4-8 | 17,543 | 3,471 | 0 | 0 | $0.1745 |
| 3 | 11:43:21 | claude-opus-4-8 | 21,123 | 4,131 | 0 | 0 | $0.2089 |
| 4 | 11:45:13 | claude-opus-4-8 | 25,299 | 4,904 | 0 | 0 | $0.2491 |
| 5 | 11:52:40 | claude-opus-4-8 | 30,267 | 14,627 | 0 | 0 | $0.5170 |
| 6 | 11:55:13 | claude-opus-4-8 | 14,679 | 2,877 | 0 | 0 | $0.1453 |
| 7 | 11:58:43 | claude-opus-4-8 | 17,680 | 2,783 | 0 | 0 | $0.1580 |
| 8 | 16:03:21 | claude-opus-4-8 | 75 | 1,073 | 0 | 0 | $0.0272 |
| 9 | 16:07:20 | claude-opus-4-8 | 1,389 | 1,376 | 0 | 0 | $0.0413 |
| 10 | 16:08:40 | claude-opus-4-8 | 2,810 | 1,068 | 0 | 0 | $0.0408 |
| 11 | 16:09:47 | claude-opus-4-8 | 3,922 | 1,014 | 0 | 0 | $0.0450 |
| 12 | 16:12:15 | claude-opus-4-8 | 4,956 | 864 | 0 | 0 | $0.0464 |
| 13 | 17:56:35 | claude-opus-4-8 | 2 | 2,550 | 0 | 14,673 | $0.1555 |
| 14 | 17:59:06 | claude-opus-4-8 | 2 | 2,938 | 14,673 | 2,597 | $0.0970 |
| 15 | 18:02:19 | claude-opus-4-8 | 2 | 3,397 | 17,270 | 3,073 | $0.1128 |
| 16 | 18:04:50 | claude-opus-4-8 | 2 | 3,687 | 20,343 | 3,586 | $0.1248 |
| 17 | 18:07:53 | claude-opus-4-8 | 2 | 4,275 | 23,929 | 3,617 | $0.1415 |
| 18 | 18:09:58 | claude-opus-4-8 | 2 | 2,550 | 27,546 | 4,362 | $0.1048 |
| 19 | 18:13:15 | claude-opus-4-8 | 2 | 4,498 | 31,908 | 2,594 | $0.1446 |
| 20 | 18:16:43 | claude-opus-4-8 | 2 | 4,901 | 34,502 | 4,527 | $0.1681 |
| 21 | 18:18:07 | claude-opus-4-8 | 2 | 4,717 | 39,029 | 4,935 | $0.1683 |
| 22 | 18:26:36 | gemini-3.5-flash | 9,641 | 2,156 | 0 | 0 | $0.0339 |
| 23 | 18:27:31 | gemini-3.5-flash | 10,637 | 1,644 | 0 | 0 | $0.0308 |
| 24 | 20:52:14 | claude-opus-4-8 | 2 | 4,619 | 0 | 29,571 | $0.3003 |
| 25 | 20:57:49 | claude-opus-4-8 | 2 | 5,628 | 0 | 34,329 | $0.3553 |
| 26 | 21:01:34 | claude-opus-4-8 | 2 | 4,512 | 34,329 | 5,752 | $0.1659 |
| 27 | 21:04:55 | claude-opus-4-8 | 2 | 9,323 | 40,081 | 4,570 | $0.2817 |
| 28 | 22:25:57 | claude-opus-4-8 | 103 | 1,290 | 0 | 0 | $0.0328 |
| 29 | 22:35:44 | claude-opus-4-8 | 1,728 | 2,083 | 0 | 0 | $0.0607 |
| 30 | 22:37:26 | claude-opus-4-8 | 3,855 | 1,304 | 0 | 0 | $0.0519 |
| 31 | 22:49:13 | claude-opus-4-8 | 2 | 2,102 | 0 | 5,376 | $0.1063 |
| 32 | 23:12:32 | claude-opus-4-8 | 2 | 4,697 | 0 | 36,269 | $0.4801 |
| 33 | 23:19:36 | claude-opus-4-8 | 2 | 3,314 | 36,269 | 4,760 | $0.1486 |
| 34 | 23:21:32 | claude-opus-4-8 | 2 | 5,245 | 41,029 | 3,388 | $0.1855 |
| 35 | 23:33:14 | claude-opus-4-8 | 2 | 1,341 | 5,376 | 2,120 | $0.0574 |
| 36 | 23:36:00 | gpt-5.4 | 1,706 | 4,809 | 0 | 0 | $0.0764 |
| 37 | 23:41:28 | claude-opus-4-8 | 2 | 3,616 | 0 | 40,215 | $0.3418 |
| 38 | 23:43:03 | claude-opus-4-8 | 2 | 2,170 | 40,215 | 3,641 | $0.0971 |
| 39 | 23:46:20 | claude-opus-4-8 | 2 | 3,316 | 43,856 | 2,119 | $0.1181 |
| 40 | 23:50:04 | claude-opus-4-8 | 2 | 5,273 | 45,975 | 3,374 | $0.1759 |
| 41 | 23:52:11 | claude-opus-4-8 | 2 | 3,446 | 40,169 | 5,313 | $0.1395 |
| 42 | 23:53:36 | claude-opus-4-8 | 2 | 2,550 | 45,482 | 3,244 | $0.1068 |
| 43 | 00:07:30 | gemini-3.5-flash | 30,102 | 5,737 | 0 | 0 | $0.0968 |
数据特征速览:模型以 claude-opus-4-8 为主(39 次),夹杂少量 gemini-3.5-flash(3 次)和 gpt-5.4(1 次);使用节奏呈现明显的”集中爆发后长久停顿”的 Session 模式。其中前 12 条(11:36~16:12)是典型的零缓存段(缓存读/写全为 0),第 13~21 条是上面那份高频 5m 缓存段,24 条之后则混入了 1h 缓存的痕迹。
把相邻两次请求的时间差(共 42 个间隔)分成三档,就能直观看出两种 TTL 的覆盖率差异:
| 间隔区间 | 频次 | 占比 | 典型示例 | 缓存表现 |
|---|---|---|---|---|
| < 5 分钟 | 28 | 66.7% | 17:56 ~ 18:18 连续 8 次,间隔 2~3 分钟 | 5m、1h 均有效 |
| 5 分钟 ~ 1 小时 | 10 | 23.8% | 22:25→22:35(9m47s)、23:12→23:19(7m04s) | 仅 1h 有效,5m 失效 |
| > 1 小时 | 4 | 9.5% | 11:58→16:03(4h04m)、16:12→17:56(1h44m) | 两者均失效(冷启动) |
也就是说,对人类节奏的会话而言,1h 缓存比 5m 缓存多覆盖近四分之一的场景。
光看分布不够直观,日志里有两段几乎教科书级别的现场。
现场一:抢 5m 缓存”功亏一篑”(20:52 ~ 21:04)
这就是典型的”只差一点点,5m 没抢过来”。
现场二:1h 缓存”续命成功”(23:12 ~ 23:33)
这组铁证说明:后期已切换到 1h 缓存,原本会被 5m TTL 清掉的几万 Token,被长 TTL 成功捞了回来。
先做一道简单的对比计算题。假定该通道的计费规则如下(早期粗略反推):
在没有缓存的情况下,每次请求都需要把所有历史上下文作为标准输入发送(以上面 9 条为例):
将这 9 轮的无缓存预估费用相加,总计为:$2.4312。而开启缓存后,日志里的 配额消耗 直接求和只有 $1.2173。
通过使用缓存,这波调用的账单直接被腰斩(省了一半)。特别注意的是最后一轮(第 9 轮):上下文已累积到 4.4 万 Token,无缓存要 $0.3955,开缓存仅 $0.1683,单次降幅 **57%**。
上面用的是粗略单价。现在手握 43 条完整数据,可以把三档价格钉得更准。用日志里”纯零缓存”段(如 11:36、16:03)反推,得到基础价:
再拿 5m 段和 1h 段的”写入”请求做减法,就能把缓存读写单价也钉死。
5m 缓存写入单价(以 17:56:35 为例:输出 2,550、写入 14,673、花费 $$0.155466$):
1h 缓存写入单价(以 23:12:32 为例:输出 4,697、写入 36,269、花费 $$0.480124$):
读取单价在两种模式下都不变,稳定在 $$0.50$ / 百万 Token(基础输入的 1 折)。三种模式的完整价格表如下(均为 Claude 的计费倍率——5m 写入 1.25×、1h 写入 2×、读取 0.1× 是 Anthropic 的官方定价规则;OpenAI 读取折扣约 0.5×、Gemini 需另付缓存存储费,倍率完全不同,不可混用):
| 模式 | 基础输入 | 缓存写入(Write) | 缓存读取(Read) | 特征 |
|---|---|---|---|---|
| 零缓存 | $5.00/M | 无(每次全额输入) | 无 | 无额外开销,但无法复用 |
| 5m 缓存 | $5.00/M | $6.25/M(1.25 倍) | $0.50/M(0.1 倍) | 写入较便宜,过期快 |
| 1h 缓存 | $5.00/M | $10.00/M(2.0 倍) | $0.50/M(0.1 倍) | 写入贵 60%,过期慢 |
注:第 1 小节里 $6.40 与 $0.64 是早期粗估;这里用完整 43 条数据反推后得到更精确的 $6.25、$0.50(5m)与 $10.00、$0.50(1h)。结论方向不变——缓存读取只要 1 折,这是省钱的核心。
1h 缓存写入单价贵了 60%(从
相比 5m 失效后的重新写入($$0.1875$),这次命中直接省下:
结论:虽然 1h 首次写入多花 $$0.1125$,但只要在 1 小时内因”超时没抢过 5m”而少发生 1 次冷启动(省 $$0.1725$),多出来的写入成本就被完全覆盖并开始盈利。日志里 22:49~23:21 那段多次 7~11 分钟停顿,正是用更高的写入单价换来了多次 3.6万~4.1万 Token 的高额读取命中,整体依然合算。
假设一段对话平均历史上下文 30,000 Token、每轮新增输入 3,000 Token、共 5 轮:
场景 A:手速极快,每轮都控制在 5 分钟内(完美命中)
省约 64%。
省约 46%。
高频连续对话里,5m 缓存最省钱;1h 因写入太贵反而吃亏;零缓存最贵。
场景 B:正常对话,第 3、4 轮之间停了 7 分钟(去喝了口水)
一旦出现 1~2 次轻微停顿,5m 省下的钱就会被”重新写入”迅速蚕食,最终几乎与 1h 持平,长对话里甚至可能反超。
如果你也想在自己的项目里落地这个优化,以下是几个非常务实的开发建议:
cache_control 标记也静默不缓存(不报错,只是 cache_creation_input_tokens 始终为 0)。如果你的 Prompt 只有一两百个 Token,不需要花精力去设计缓存。其他厂商阈值规则各异,需另行确认。Prompt Caching 不是什么玄乎的高阶算法,而是一个非常纯粹的、符合后端开发直觉的工程优化手段。只要稍微调整一下 Prompt 的拼接顺序和接口调用节奏,就能在长文本和多轮对话场景下换来几乎翻倍的性价比。
更进一步,在 5m 与 1h 两种 TTL 之间做选择,本质上是在写入单价和容错窗口之间做权衡:机器节奏选 5m 最省,人类节奏选 1h 最稳。搞清楚自己调用链的”心跳节奏”,才能把缓存这把刀用到最锋利的那一面。
最后再强调一次全文的适用边界:以上原理、计费倍率(5m 写入 1.25×、1h 写入 2×、读取 0.1×)、两档 TTL、最小缓存阈值,都是 Anthropic Claude 系列 的实测结论。换到 OpenAI、Gemini 等其他厂商时,缓存机制的设计和价格模型并不互通——省钱思路相通,但具体数字必须以各家官方文档为准。