3.2 缓存命中计费经济学 本节摘要:平台缓存把"复用"标了价。它有三张不同的价签——常规输入价、缓存读价、缓存写价。命中率决定你最终付的是哪张。本节把这三张价签合成一个有效单价公式,并用一份教学价目把"8K 系统提示词 + 每次 500 token 新输入"的账算到底,顺带指出一个反直觉结论:命中率太低,缓存反而比不缓存更贵。 三种价格,一笔账 上一节看清了四家语义,但语义不落地成钱就只是接口描述。这一节把前缀命中翻译成账单。平台缓存的计费核心只有三个价签,理解了它们,"命中率"这个抽象词才变成可计算的单价。 常规输入价:没有缓存时,每一个输入 token 都按这个价算。它是你熟悉的那个价目表数字,也是整笔账的基准线。 缓存读价:你的前缀命中了平台已有的缓存,那段 token 按读价结算。
本节摘要:平台缓存把"复用"标了价。它有三张不同的价签——常规输入价、缓存读价、缓存写价。命中率决定你最终付的是哪张。本节把这三张价签合成一个有效单价公式,并用一份教学价目把"8K 系统提示词 + 每次 500 token 新输入"的账算到底,顺带指出一个反直觉结论:命中率太低,缓存反而比不缓存更贵。
上一节看清了四家语义,但语义不落地成钱就只是接口描述。这一节把前缀命中翻译成账单。平台缓存的计费核心只有三个价签,理解了它们,"命中率"这个抽象词才变成可计算的单价。
常规输入价:没有缓存时,每一个输入 token 都按这个价算。它是你熟悉的那个价目表数字,也是整笔账的基准线。
缓存读价:你的前缀命中了平台已有的缓存,那段 token 按读价结算。读价普遍是常规价的折扣,量级在十分之一左右——平台愿意用低价鼓励你复用,因为复用省的是它的算力。注意"读"指的是读取已有缓存,不是模型输出。
缓存写价:某次请求的前缀没命中,平台替你现算并写入缓存,这段要收写价。写价通常略高于常规价,因为平台不仅算了这一次,还额外存了一份供以后复用。这是很多人忽略的坑:缓存不是"免费替你存",首次写入是要加价的。
把三张价签摆在一起,立刻能推出一个关键事实——缓存的总账 = 命中部分×读价 + 未命中部分×写价 + 非前缀部分×常规价。写价高于常规价这件事,意味着"命中率太低"会让你在没命中的请求上倒贴溢价,整体反而比不缓存贵。这一点我们待会儿用数字验证。
为什么平台敢收写价、又给读价打折?因为算力是它预付的,缓存是它替你存的。你第一次请求,平台既要算又要存,边际成本高于一次纯计算;之后命中,平台只需读取已有 KV,几乎零算力。所以写价高于常规、读价低于常规,本质是平台把"存储成本"和"复用收益"分别标价。理解这点,就不会觉得写价是坑——它是你为"让下次更便宜"付的定金。凡是把写价当负担的人,多半没算过命中后的读价折扣能摊掉多少。
设一份请求的输入由"可缓存前缀 P 个 token"和"每次新增的 Q 个 token"组成,命中率为 r(0 到 1)。单请求输入成本:
单请求成本 = P × (r × 读价 + (1 - r) × 写价) + Q × 常规价
把它除以总输入 token 数 (P + Q),得到有效单价——也就是你实际为每个输入 token 付的均价,相对常规价的倍率:
有效单价 = [ P × (r × 读价 + (1 - r) × 写价) + Q × 常规价 ] / (P + Q)
当 r = 0 时,前缀全按写价算,若写价高于常规价,有效单价就大于 1,缓存亏钱;当 r 足够高,读价的折扣把均价一路压下去。中间存在一个盈亏平衡点 r*,使有效单价恰好等于常规价 1。代入上面的数字能解出 r* 大约在 0.22 附近——也就是说,前缀命中率只要过两成,缓存就开始回本。这个结论对绝大多数稳定系统提示词业务都成立,因为它们的命中率远不止两成。
下面用一份自设的教学价目把账算到底。再次声明:以下数字纯为教学演示,不是任何平台的真实报价,真实价格请以官方价目为准。
教学假设(单位:元 / 每百万 token):
业务画像:一份固定的 8000 token 系统提示词,每次请求附带 500 token 新增输入。问:在命中率 90% 时,100 万次请求相比完全不缓存,能省多少?
套公式,先把 token 总量摊开。100 万次请求,系统提示词累计 8000 × 100万 = 8000 百万 token;新增输入累计 500 × 100万 = 500 百万 token。
也就是说,在九成命中的前提下,这笔业务每一百万次请求能省下约七成多的钱。但把命中率拉到 0 再看:系统提示词 8000 百万全按写价 1.25 = 10000,加新增 500,合计 10500,比无缓存的 8500 还多花 2000——印证了"低命中率反而更贵"。
下面这段 Python 把上面的推导写成可运行代码,带注释,并打印不同命中率下的对比。你可以直接改 P_REG、P_READ、P_WRITE 换成自己的折算价。
# 教学假设价目(非真实价格,仅为演示折算单位:元 / 每百万 token) P_REG = 1.0 # 常规输入价 P_READ = 0.1 # 缓存读价(折扣,约为常规十分之一) P_WRITE = 1.25 # 缓存写价(溢价) SYS_TOKENS = 8000 # 固定系统提示词长度(token) NEW_TOKENS = 500 # 每次请求新增输入(token) N_REQUESTS = 1_000_000 # 100 万次请求 def cost_no_cache(): # 完全不缓存:所有输入 token 都按常规价 total_tokens = (SYS_TOKENS + NEW_TOKENS) * N_REQUESTS return total_tokens / 1_000_000 * P_REG def cost_with_cache(hit_rate): # 系统提示词:命中部分按读价,未命中部分按写价 sys_hit = SYS_TOKENS * N_REQUESTS * hit_rate sys_miss = SYS_TOKENS * N_REQUESTS * (1 - hit_rate) new = NEW_TOKENS * N_REQUESTS return (sys_hit / 1_000_000 * P_READ + sys_miss / 1_000_000 * P_WRITE + new / 1_000_000 * P_REG) def effective_price(hit_rate): total_tokens = (SYS_TOKENS + NEW_TOKENS) * N_REQUESTS return cost_with_cache(hit_rate) / (total_tokens / 1_000_000) if __name__ == "__main__": base = cost_no_cache() print(f"无缓存基准成本:{base:.2f}") for r in (0.0, 0.5, 0.9, 0.99): c = cost_with_cache(r) eff = effective_price(r) save = base - c print(f"命中率 {r*100:>4.0f}% 缓存成本 {c:7.2f} " f"节省 {save:7.2f} 有效单价 {eff:.4f}")
运行输出:
无缓存基准成本:8500.00 命中率 0% 缓存成本 10500.00 节省 -2000.00 有效单价 1.2353 命中率 50% 缓存成本 5900.00 节省 2600.00 有效单价 0.6941 命中率 90% 缓存成本 2220.00 节省 6280.00 有效单价 0.2612 命中率 99% 缓存成本 1392.94 节省 7107.06 有效单价 0.1638
盈亏平衡点 r* 约 0.22 这个数值,给工程一条清晰红线:如果你的前缀命中率长期低于两成,开缓存是在补贴平台。此时正确动作不是关缓存,而是先去 3.4 节把前缀摆稳——把 r 从 0.1 提到 0.9,有效单价从 1.235 跌到 0.261,降幅近八成,远比纠结"哪个平台单价更低"来得实在。换句话说,在多数业务里,"命中率"是比"平台单价"更主导的成本变量。把优化资源压在命中率上,性价比最高。
把脚本的输出整理成表,趋势非常清楚:缓存读价的折扣是真金白银,但写价的溢价是悬在头顶的刀——只有命中率越过盈亏平衡点,它才肯收刀。
| 命中率 | 有效单价(相对常规) | 较无缓存 |
|---|---|---|
| 0% | 1.235 | 贵 23.5% |
| 50% | 0.694 | 省 30.6% |
| 90% | 0.261 | 省 73.9% |
| 99% | 0.164 | 省 83.6% |
这张表给了一个工程上的判断框架:如果你的业务前缀稳定、请求频繁,命中度天然在九成以上,缓存几乎必开;如果你的请求稀、前缀还常变,开了反而可能亏,不如先在第 3.4 节把提示词摆稳,等命中率上去再享受折扣。
回到复用经济学的主线:有效单价压不下来,根子不在平台定价,而在你自己的前缀有多稳。公式里 P 是固定系统提示词、Q 是每次新增,r 是你的命中率——三者全由"你写提示词时有没有把稳定内容堆在头部"决定。所以 3.2 节的结论要和第 3.4 节连起来读:计费公式告诉你"省多少",而怎么把前缀摆稳、让 r 逼近 99%,是下一章工程改造的事。
下一节(3.3)我们再看缓存条目的寿命——它不会永远在那儿等你,TTL 一到、前缀一变、模型一升级,命中计数清零,有效单价瞬间回到 1.0。理解生命周期,才知道省下来的钱为什么需要"维护"。
关键直觉:缓存写价高于常规价,意味着缓存是一项"先垫付、后回收"的投资。命中率就是回收速度,低于盈亏平衡点就是在亏本运营。