# 提示词缓存成本：算清读取、写入与实际节省

> 避免重复计算缓存输入，把适用的写入和存储费用算进去，用真实使用间隔判断任务成本是否降低。

_发布 2026-09-13 · 更新 2026-09-29 · [KeepRouter Editorial](https://keeprouter.com/editorial-policy#editorial-team) · 4 分钟阅读_

![缓存定价审计示意图：同一基准线上并排的绿色短柱与强调色高柱，右侧是账本网格](https://keeprouter.com/editorial/blog/llm-cache-pricing-audit.png)

_比较有缓存复用与没有复用时的完整请求费用。示意图，不代表实测节省。_

提示词缓存可以降低重复上下文的费用，但命中率本身不能说明一次请求是否更便宜。应分别计算普通输入、缓存读取、可能单独收费的缓存写入或存储，以及输出，再比较完成同一任务的总成本。下面给出可复算的例子，以及用自己的用量记录就能完成的小实验。

## 提示词缓存与整段答案缓存解决不同问题

提示词缓存复用符合条件的输入处理，模型仍会生成新回答；答案缓存则直接返回以前保存的回答。客服助手可以重复使用同一本产品手册，同时回答新的问题，但把昨天的完整回答用于今天的订单状态，可能造成错误。两种缓存要分开统计，不能把“没有调用模型”与“调用时复用了输入”算成同一种命中。

[OpenAI 提示词缓存文档](https://developers.openai.com/api/docs/guides/prompt-caching)说明前缀匹配与型号相关行为；[Anthropic 缓存文档](https://platform.claude.com/docs/en/build-with-claude/prompt-caching)区分缓存创建与读取。设置、最短长度和过期条件并不统一。使用 OpenAI 兼容地址，也不代表网关线路支持原生 API 的全部缓存参数。

## 算一笔账：避免重复计算缓存输入

以下费率均为**演示假设，不是 KeepRouter 或模型厂商报价**。假设返回 10,000 个总输入 token，其中 8,000 个来自缓存，另有 500 个输出 token。普通输入为每百万 $2，缓存读取为每百万 $0.20，输出为每百万 $8；本例没有另计的写入费或存储费。

| 项目 | 数量 | 算式 | 费用 |
| --- | --- | --- | --- |
| 普通输入 | 2,000 token | 2,000 × $2 / 1,000,000 | $0.0040 |
| 缓存读取 | 8,000 token | 8,000 × $0.20 / 1,000,000 | $0.0016 |
| 输出 | 500 token | 500 × $8 / 1,000,000 | $0.0040 |
| 合计 | 一次请求 | 上述三项相加 | $0.0096 |

同样的 token 数量如果完全不读缓存，费用是 $0.0240；差额 $0.0144，占请求总费用的 60%。虽然缓存输入单价比普通输入低 90%，整次请求并没有降低 90%。这两个百分比都只是例子的算术结果，不能写成应用的实测节省。如果 API 已经单独返回“未缓存输入”，直接用该数值，不要再减一次缓存 token。

## 把第一次写入和没有被复用的缓存算进去

再假设一个可复用前缀，按普通输入计费需 $0.02，写入缓存需 $0.025，每次读取需 $0.002。这仍是一组演示价格。使用两次时，一次写入加一次读取为 $0.027，低于不缓存的 $0.04；只使用一次时，$0.025 反而高于 $0.02。这个例子只比较前缀，未计输出、每轮变化的输入和存储。

使用 N 次，应比较 `写入费用 + (N - 1) × 读取费用 + 存储费用` 与 `N × 前缀普通输入费用`。具体费用项以所选型号为准。有的 API 提供显式缓存，有的提供隐式缓存，也有同时提供两者的情况；[Gemini 缓存文档](https://ai.google.dev/gemini-api/docs/caching)说明了它自己的机制。不要把某个型号的写入或存储假设套用到另一个型号。

## 做一个小规模缓存实验

从[实时模型目录](/models)选定一个型号和端点，记录当天显示的用户费率。准备不含敏感信息的参考文档和一个简短固定问题，设置较小输出上限。先确认文档符合该型号的缓存要求；仅为达到长度门槛而填充内容，可能使总费用更高。

发送第一条请求，重复一次，再只修改共享上下文之后的问题。记录端点实际返回的输入、缓存读取、缓存写入与输出数量，并记录耗时和 Usage 中的费用。缺少缓存字段意味着暂时无法确认，不能擅自填零。第二次相同请求也不保证命中，因为资格、过期、路由及前缀变化都可能影响结果。

最后，按照真实用户两次使用之间的间隔再测一次。连续快速重复的实验可能夸大正常流量下的复用程度。实验日志保留请求编号和数字用量即可，不要写入文档正文或 API Key。对共享账户，还应把其他并发请求排除在单次余额差额之外，优先使用对应请求的费用记录。

## 根据结果选择下一步

| 现象 | 优先排查 | 下一步 |
| --- | --- | --- |
| 缓存读取始终为零 | 资格、前缀变化、过期或不支持的配置 | 检查具体型号的缓存说明 |
| 读取增加但总费用不降 | 写入、长提示词、输出或重试占主导 | 统计每个完成任务的全部费用 |
| 估算与记录金额不同 | 单位、用量字段含义或漏掉费用项 | 先复算一条独立请求 |
| 连续重复省钱，正常会话不省 | 实际复用间隔过长 | 缩短上下文或调整缓存方式 |

用 [API 成本计算器](/tools/api-cost-calculator)做场景估算，用[成本控制指南](/zh/blog/control-multi-model-api-costs)做任务预算。需要单独核算 Claude 的写入与读取，可继续看 [Claude 缓存工作表](/zh/blog/claude-api-cost-prompt-caching)。最终选择应依据完整请求费用与回答质量，而不是只看缓存命中标记。

## 常见问题

### 80% 的缓存命中率等于节省 80% 吗？

不等于。输出、普通输入、缓存写入、存储与重试仍可能计费。应按所选型号费率，比较每个完成任务的总成本。

### 缓存 token 应额外加在总输入之上吗？

只有 API 明确把它们定义为互不重叠的数量时才可以。如果总输入已包含缓存，计算普通输入时须先扣除缓存部分。

## 参考的一手资料

_本文最近复核 2026-09-29_

1. [OpenAI prompt caching](https://developers.openai.com/api/docs/guides/prompt-caching)
2. [Anthropic prompt caching](https://platform.claude.com/docs/en/build-with-claude/prompt-caching)
3. [Gemini context caching](https://ai.google.dev/gemini-api/docs/caching)
4. [KeepRouter customer model prices](https://keeprouter.com/models)

## 继续阅读

- [如何降低 LLM API 成本：按任务复算费用与优化收益](https://keeprouter.com/zh/blog/control-multi-model-api-costs.md)
- [LLM 路由与负载均衡：团队最常混淆的四种策略](https://keeprouter.com/zh/blog/llm-routing-vs-load-balancing.md)
- [kimi k2.7 code highspeed](https://keeprouter.com/models/kimi-k2.7-code-highspeed.md)
- [quickstart](https://keeprouter.com/docs/quickstart.md)

## 用你的工作量估算费用

选择型号并填写预计用量，先把估算与一条小规模真实请求对上，再扩大使用。

[估算 API 费用](https://keeprouter.com/tools/api-cost-calculator)

[创建 Key，测试免费模型](https://keeprouter.com/login?returnTo=%2Fconsole%2Fkeys%3Fmodel%3Dfree)

免费测试使用 free 模型；其他付费型号需要足够预付额度。

[全部文章](https://keeprouter.com/zh/blog.md) · [模型与价格](https://keeprouter.com/models.md)
