LLM API 缓存命中率很高,账单为什么没降多少?

区分普通输入、缓存读写与输出费用,用可复算示例核对 LLM API 账单,避免重复计算 token 或把局部节省当成整单降幅。

浅色纸面上的算盘线稿,表示核算缓存与输入费用。

缓存命中率不能直接换成账单降幅。 先拆开普通输入、缓存读取、缓存写入和输出,再按对应模型与路由单价计算。命中率高,但输出多、写入频繁或失败重试多,整项任务的费用仍可能很高。

本文于 2026 年 9 月 17 日核对官方缓存说明,提供可复算方法;下面的价格示例是假设值,不是 Ofox 现价或客户实测账单。

先确认模型采用哪种缓存规则

当前 OpenAI 缓存文档对 GPT-5.6 及之后模型规定:缓存写入按普通输入单价的 1.25 倍,读取按 0.1 倍。写入费替代该部分 token 的普通输入费,不是在普通输入费之外再加 1.25 倍。

较早模型的规则不同,不能把某代模型“无额外写入费”的说明推广到全部模型。Anthropic 缓存文档也区分读写与保留时长,应查实际模型和对应规则,不能直接套 OpenAI 的倍数。

OpenAI 按模型代际区分缓存读写计费的文档

官方截图拍摄于 2026 年 9 月 16 日,保留英文界面。它说明 OpenAI API 的规则,不是 Ofox 路由报价,也不是 Codex 订阅额度表。

把 token 拆成互不重叠的类别

在当前 OpenAI Responses 文档示例中,普通输入的计算为:

普通输入 = input_tokens
         - input_tokens_details.cached_tokens
         - input_tokens_details.cache_write_tokens

不要把这个结构直接套到所有兼容接口。先读其 usage 字段定义;缺失字段表示未知,不能未经核实当作零。计数不能为负,异常时先查字段含义。

将各项统一为每百万 token 单价后:

费用 =(普通输入 × 普通输入价
      + 缓存读取 × 读取价
      + 缓存写入 × 写入价
      + 输出 × 输出价)/ 1,000,000
      + 其他适用费用

币种必须一致。图像 token、每张图片、每秒视频和工具调用费不能直接塞进同一个文本 token 乘法中。

一个只计算前缀的假设例子

假设前缀长 10,000 token,普通输入 $2/百万、写入 $2.50/百万、读取 $0.20/百万。第一次完整写入,之后九次完整命中同一前缀:

项目计算费用
首次写入10,000 × $2.50 / 1,000,000$0.025
九次读取9 × 10,000 × $0.20 / 1,000,000$0.018
合计写入加读取$0.043
不复用的对照10 × 10,000 × $2 / 1,000,000$0.200

前缀费用下降 (0.200 - 0.043) / 0.200 = 78.5%。这个比例不包括输出、新增后缀、工具调用或额外重试,不是整张账单降幅。若发生更多写入或命中不完整,应重新计算。

看加权命中率,更要看完成成本

对同一统计范围,用缓存读取 token 总数除以输入 token 总数;不要把每个请求的百分比简单平均,否则短请求与长请求会被赋予相同权重。仍需核对该接口的输入总数定义。

逐次保留日期、模型、路由、各类用量、重试、扣费与验收结果。比较同一任务所有尝试的总费用,而不是只挑命中率最高的一次。Astra 与 Sol 对比展示为什么供应商与路由也要分开。

核对 Ofox 报价时,需要同时定位 GitHub catalog 实现和当前响应,区分 pricingprovider_price.pricing;仓库接口读取动态数据,不是永久静态价表。服务商核查清单给出记录方法。

API 缓存费用不能反推订阅周额度。账户用量问题请看 Codex 恢复时间,图像计费请看图像价格说明

常见问题

缓存命中就一定省钱吗?
要看复用次数、读写价格和总账单。缓存读取便宜,不代表首次写入免费;输出和工具等费用也可能占主要部分。
可以把所有 input_tokens 都乘普通输入价吗?
不能直接这样算。先确认接口是否把缓存 token 包含在输入总量中,拆成互不重叠的类别,再分别计价。
示例中的 78.5% 是整张账单的节省吗?
不是。它只比较指定前缀的处理费用,排除了输出、新增后缀和工具费;也不是 Ofox 报价或客户账单。