跳到正文

devlog/token-math/how-prompt-caching-cuts-the-bill-on-long-coding-sessions-313.md

终端里连续改二十轮代码,提示缓存能省多少账单

连续改二十轮代码,重复付费的是哪一段

我在终端里修一个跨模块问题时,真正新写的需求通常只有几行:补一个边界测试,解释一次失败,再调整两个函数。可每次发给模型的内容,往往还包括仓库规范、工具定义、接口说明和之前读过的代码。人只推进了一小步,请求却又带上了一大包旧材料。

提示缓存省的就是这部分重复输入的处理费用。它不是把上一次答案直接拿回来,也不意味着模型少看了上下文。命中缓存后,服务端可以复用已经处理过的输入前缀,相关令牌按缓存读取价格计费;新输入和新输出仍然分别计费。

这对长期挂着 Claude Code、Codex 或 Gemini CLI 的开发者很重要。单轮便宜几分钱不显眼,连续调试几十轮,重复上下文才可能是账单的大头。但前提是:缓存真的命中了,而不是我们觉得两次请求“差不多”。

同样二十次请求,不缓存与缓存并排算账

先做一个可以自己复算的实验。假设每次请求都有四万令牌的相同前缀,另有两千令牌的独立新增输入,并生成一千令牌输出。连续请求二十次,且后十九次都在有效期内命中同一个前缀。这里为了隔离缓存效果,不模拟不断增长的对话历史。

下面的单价完全是假设,不代表 Fluxo 或任何具体模型的报价:普通输入每百万令牌十元,缓存写入十二点五元,缓存读取一元,输出二十元。实际使用 Claude Sonnet 5.5 或 GPT-6.1 Sol 时,需要分别核对其缓存规则、适用入口和当前价格,不能把这组数字直接套过去。

不缓存这一侧:四万二千令牌乘以二十次,总输入八十四万令牌,费用八点四元;输出共两万令牌,费用零点四元。整个实验合计八点八元。每轮传回去的四万令牌旧材料,都按普通输入重新付费。

命中缓存这一侧:首次写入四万令牌,费用零点五元;随后读取十九次,共七十六万令牌,费用零点七六元。二十轮新增输入共四万令牌,费用零点四元;输出费用仍是零点四元。合计二点零六元,比不缓存减少约百分之七十七。

两边完成的工作量相同,输出预算也没有变。差额主要来自重复前缀从普通输入变成了缓存读取。这个结果很漂亮,但它建立在高命中率上;如果每一轮都重写前缀,缓存写入甚至可能比普通输入更贵。

把仓库规则放前面,把时间戳移到后面

我会先检查请求的排列顺序,而不是先找一个“开启缓存”的开关。系统指令、固定工具定义、仓库约定和稳定文档适合放在前面;本轮任务、最新报错和刚生成的差异放在后面。很多缓存机制依赖连续前缀匹配,前面一处变化,就可能让后面大量内容失去复用机会。

一个常见坑是把当前时间、随机请求编号或实时工作区状态塞进最前面的提示。即使后面九成代码没变,也不能据此推断缓存会命中。我会把这些动态字段后移,并保持工具列表的顺序与序列化方式稳定;但不会为了命中缓存而保留错误的代码版本。

另一个坑是把“同一会话”当成缓存保证。不同供应商对最小长度、有效期、显式标记和自动缓存的处理不同。切换模型、修改工具定义、压缩历史或隔很久再回来,都可能改变命中结果。缓存也不是持久记忆,更不能代替把关键决策写回仓库。

不要只看请求总令牌数。我的调试顺序是先找响应里的缓存相关用量字段,再对照账单,区分普通输入、缓存写入、缓存读取与输出。各家字段结构不完全一样,没有单独的写入字段也不能自行推算成零费用;最终要按对应模型的计费口径核对。

在 Fluxo 接入后,用真实会话验证节省比例

Fluxo 用一个密钥和一个基础地址 https://api.fluxorelay.com 接入 Claude、GPT、Gemini、DeepSeek、Kimi、GLM、Qwen、Grok 等系列,能配合 Claude Code、Codex、Gemini CLI 和使用 OpenAI SDK 的项目。对我来说,这让对比实验少了来回改接入配置的步骤,但统一入口并不代表不同模型拥有相同的缓存行为。

Fluxo 按实际令牌计费,缓存读取和写入也会计入账单,没有月费。因此我会把一次完整任务的费用作为比较单位,而不是只盯着普通输入单价。需要显式缓存参数时,也要确认客户端确实发送了它们,不能因为工具能正常回答,就认定缓存配置已经生效。

实际验证时,先固定一个模型和一份仓库快照,记录前缀长度、请求间隔、缓存用量、输出长度与总费用。再跑一组任务相近的对照。不要同时更换模型、缩短提示和开启缓存,否则即使账单下降,也很难判断是哪一步起了作用。

如果想拿自己的仓库跑一次这样的对照,可以创建一个 Fluxo 账户,从一段小规模编码会话开始。遇到接入或计费问题,可以登录后在联系页面留言。平台也提供邀请分成:受邀用户付费后,邀请人可获得分成,不过这项收入不应混入缓存节省比例的计算。

明确判断:长前缀反复复用时,缓存值得优先检查

并排看完,结论很直接:长时间编码、稳定上下文、多轮连续请求,是提示缓存最值得投入的场景。先整理前缀,再检查命中数据,最后比较整段任务的实际账单。不要为了缓存额外塞文档,也不要把缓存折扣误算到输出上。

如果只是偶尔问一个短问题,或者每轮都换一批文件,节省空间可能很小;此时缩短无关上下文更实际。缓存不是免费令牌,而是让确实需要反复读取的内容,不必每次都按原价处理。对整晚都在编辑器和终端之间来回切换的人,这才是它真正划算的地方。

缓冲区里的下一篇

一分钟注册,赠送额度足够把文中提到的模型都试一遍。 注册 →