Appearance
为什么第一次调用更贵
上一篇的价格表里有一个反直觉的数字:缓存写入是 1.25×(1 小时 TTL 更是 2×)。也就是说,开启缓存后的第一次调用,不但没省钱,反而比完全不用缓存更贵 25%。这一篇解释这笔"入场费"从哪来、什么时候回本、什么情况下会白花。
普通调用:算完就扔
先看没有缓存时服务端在做什么。模型处理输入的过程,本质是为每个 token 计算注意力所需的内部状态(K/V 张量)。普通调用里,这些状态用完即弃:
- 你付的 1× 输入价,买的是"算一遍"的 GPU 算力;
- 请求结束,几十 GB 显存被释放给下一个用户;
- 下一轮同样的前缀进来,从零再算一遍,再付一遍 1×。
缓存写入:算一遍,还要存下来
标了 cache_control 之后,服务端做的事变成了计算 + 持久化两件:
多出来的 0.25×,买的是"存下来"这件事的真实成本:
- KV 状态非常大。每个 token 的 K/V 张量在几十到上百 KB 量级(取决于模型结构),比 token 文本本身大几个数量级——30K token 的前缀,缓存下来是 GB 级的数据;
- 要占用昂贵的存储。这些数据必须放在能被推理集群快速加载的地方,离 GPU 越近越贵;
- 要维护生命周期。TTL 计时、每次命中刷新、过期回收、按账号和模型隔离,都是持续开销。
这也解释了为什么 1 小时 TTL 的写入价是 2×:计算部分没变,变的只是"存多久"——存 12 倍的时长,存储费自然更高。
一次请求进来,服务端的完整决策路径是:
注意"未命中"的三种来源:首次调用只是其中之一。前缀变了一个字节、或 TTL 过期,都会让你再付一次 1.25×——这是下一篇的主题。
什么时候回本:第二轮就回本
把写入费理解为一笔投资:多付 0.25×,换后续每轮 0.9× 的折扣。算一下回本点:
| 场景 | 两轮总费用(以 1× 为单位) |
|---|---|
| 不用缓存,跑 2 轮 | 1 + 1 = 2.0 |
| 用缓存,跑 2 轮 | 1.25 + 0.1 = 1.35 |
只要同一前缀被复用一次,就已经回本。轮数越多差距越大——沿用上一篇的例子(30K token 前缀),累计费用曲线是这样的:
上面那条陡峭的线是无缓存(每轮全价 3 万 token),下面平缓的线是有缓存(第一轮 3.75 万,之后每轮只加 0.3 万)。第一轮有缓存反而更高——这正是"第一次调用更贵"的直观图像;从第二轮起两条线交叉,之后差距一路拉大,50 轮时约为 12% 对 100%。
什么情况下写入费是白花的
这笔投资也有亏本的场景,都值得提前识别:
- 一次性请求:前缀只用一次、不会有第二轮(比如批量离线处理里每条数据的前缀都不同),标
cache_control纯属多付 25%; - 前缀不稳定:前缀里混进了时间戳等每轮变化的内容,结果是每一轮都在付 1.25× 的写入费,却从来不命中——比不开缓存还贵 25%,这是最糟的状态。验证方法:看
usage里cache_read_input_tokens是否长期为 0 而cache_creation_input_tokens每轮都很大; - 前缀太短:低于最小长度门槛(多数模型 1024 token)不会真的写入,不亏钱,但也没意义。
顺带一提:OpenAI 为什么"不收"写入费
OpenAI 的 automatic prompt caching 不显式加收写入费,但命中折扣也只有五折(部分模型更低),且缓存去留由服务端决定。两家本质相同:存储成本总要有人付——Anthropic 选择显式计价、给你显式控制;OpenAI 选择摊进整体价格、全自动。对 Claude Code / Codex 用户来说结论一致:第一轮贵是正常的,别让它反复发生就好。