# Claude API 费用：按写入、读取和复用次数规划 Prompt Caching

> Claude 缓存会改变重复前缀的成本，但创建缓存和读取缓存是不同操作。应分开预算首次与后续请求，保留输出费用，并采用实际调用端点的计费规则。

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

![展示 token、缓存、重试、回退与归属的多模型 API 成本账本](https://keeprouter.com/editorial/blog/control-multi-model-api-costs.png)

_缓存写入与后续读取应分别列入成本工作表。_

理解 Claude API 费用时，最好把一段对话看成连续的多笔请求。较长的系统指令或参考文档，可能先写入提示词缓存，再由后续请求读取；新问题和新答案仍会增加 token。因此，把一个缓存折扣乘到整段对话的全部费用上，容易低估预算。

本文以“围绕同一份文档连续提问的审阅助手”为例，重点讲工作负载的计算方法。Anthropic 的[提示词缓存文档](https://platform.claude.com/docs/en/build-with-claude/prompt-caching)说明其原生缓存机制；[KeepRouter Claude Sonnet 4.6 页面](/models/claude-sonnet-4-6)说明本站该路由的当前客户价格与端点。不能因为网关接受 Messages 请求，就推断它保留了每一个原生缓存选项。

## 在预算表里列出四类费用

| 类别 | 产生原因 | 需要记录 |
|---|---|---|
| 普通输入 | 复用前缀以外的新内容 | 输入量及对应费率 |
| 缓存创建 | 为以后复用写入前缀 | 创建量及缓存时长 |
| 缓存读取 | 找到可以复用的前缀 | 读取量及读取费率 |
| 输出 | 生成新的回答 | 输出量及输出费率 |

Anthropic 把缓存创建与读取分别报告。缓存寿命、模型要求、前缀最低长度，以及断点之前的确切内容，都会影响复用。将稳定指令和参考材料放在前面，将每次变化的问题放在后面；不要把随机请求编号插入需要重复利用的前缀开头。

通过网关调用时，应核查其公开契约和实际扣费，不能直接套用 Anthropic 直连价的倍率。KeepRouter 公开输入、缓存输入和输出费率；当前计费归一化会把原生缓存创建 token 并入计费输入，把缓存读取单列。最终应与具体线路的控制台记录核对，不能仅凭上游的写入价格，就断言本站客户会额外支付同样的缓存创建附加费。

## 计算缓存写入何时值得

设 P 为复用前缀长度，N 为请求次数，B 为普通输入费率，W 为写入费率，R 为读取费率，价格单位都是每百万 token。没有复用时，前缀费用为 `N×P×B / 1,000,000`；若只有一次写入、其余 N-1 次都读取，则为 `P×(W+(N-1)×R) / 1,000,000`。

仅为演示算术，假设 B=$2、W=$2.50、R=$0.20、P=10,000、N=3。三次普通输入的前缀费用是 $0.06，一次写入加两次读取是 $0.029。比较总额时，还要在两种场景中分别加上变化的问题和所有生成答案。这些数字是人为假设，不是当前报价或实际节省报告。

盈亏条件为 `W+(N-1)×R < N×B`。如果 B 大于 R，可整理成 `N > (W-R)/(B-R)`。实际发生缓存过期或前缀变化时，会出现额外写入，因此三轮对话未必等于一次写入加两次读取。应先记录实际发生的用量，再使用公式做预算。

## 检查 usage，无需输出文档内容

对原生 Messages 响应，应区分普通输入、缓存创建和缓存读取。下面的 Python 片段读取一个已经保存的响应对象，不发起网络请求，也不打印提示词或密钥。

```python
def claude_usage(response):
    usage = response["usage"]
    required = ("input_tokens", "output_tokens")
    if any(name not in usage for name in required):
        raise ValueError("Missing usage; inspect request record")
    return {
        "ordinary_input": usage["input_tokens"],
        "cache_created": usage.get("cache_creation_input_tokens", 0),
        "cache_read": usage.get("cache_read_input_tokens", 0),
        "output": usage["output_tokens"],
    }
```

不能不加修改地用它解析 OpenAI Chat Completions。后者的缓存量通常已经包含在 prompt 总数里，而原生 Messages 把这些类别分别报告。将两种格式汇总到同一张表时，应统一最终列名，同时为每条线路保留原始对象样本，以免在换端点后重复扣减输入。

## 运行一次小规模复用实验

准备一份足够长的合成文档，满足所选模型当前的缓存条件。按该线路有文档支持的原生缓存设置，保留稳定前缀，依次发送三个不同问题。记录各次创建、读取和输出计数，以及请求开始时间；再等到预期的用户空闲间隔后重复一次。这样才能区分“连续对话时有用”和“用户回来之前就过期”两种情况。

随后测试应用真正的提示词构造器。工具定义变化、系统指令换位置、插入新的元数据，都可能改变可复用前缀。工程上的交付应是一份可重复检查的固定前缀样本，而不是只有一张价格截图。在扣费和任务完成质量一起测量之前，不应声称已经节省某个百分比。

## 根据复用节奏选择缓存时长

按应用真实间隔比较重复请求，不要只做连续调用。创建与读取分别记录，没有被复用的写入也计入费用。[Anthropic 缓存文档](https://platform.claude.com/docs/en/build-with-claude/prompt-caching)定义支持的时长和计费行为。如果长暂停让复用失效，缩短提示词可能比扩大缓存更值得测试。可用[缓存工作表](/zh/blog/llm-cache-pricing-audit)复算盈亏平衡。

## 为完整工作流设置预算

[API 费用计算器](/tools/api-cost-calculator)适合按公开的普通输入、缓存输入和输出桶估算。若直接调用 Anthropic 且存在单独的缓存写入价格，应在工作表中另算写入费用，不要把它塞入仅表示读取的缓存字段。还应计入重试、校验后丢弃的回答，以及长时间空闲后首次冷请求。

对交互式文档审阅，可比较三种使用节奏：问题立即连续到达、用户每次间隔较久、每份文档只用一次。适合第一种情况的缓存安排，可能对第三种几乎没有帮助。在任务允许的范围内减少不必要的材料重复、限制回答长度，然后重新检查回答是否仍然正确。

核算时可同时阅读[缓存价格核对指南](/zh/blog/llm-cache-pricing-audit)。若工作负载运行在 Claude Code 中，[Claude Code 成本比较指南](/zh/blog/cut-claude-code-costs)还会把任务完成与工具行为纳入评估。仅有前缀费用下降，不能证明完成一项任务的总成本已经下降。

## 常见问题

### 缓存写入和读取价格一样吗？

不一定。Anthropic 原生计费区分两者；网关可能使用不同归一化方式，应核对其客户费率与扣费记录。

### 提示词缓存会复用上一条答案吗？

不会。它复用的是提示词处理；每次生成的输出仍是该次请求的一部分。

### 缓存输入要包含创建 token 吗？

工作表中应先分开写入和读取，再根据响应格式与计费服务决定各自如何计费。

### 短测试能证明生产节省吗？

它只能说明该序列中的观察结果；生产成本还取决于复用次数、间隔、重试和任务完成质量。

## 参考的一手资料

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

1. [Anthropic prompt caching](https://platform.claude.com/docs/en/build-with-claude/prompt-caching)
2. [Anthropic Messages reference](https://platform.claude.com/docs/en/api/messages/create)
3. [KeepRouter cache pricing audit](https://keeprouter.com/blog/llm-cache-pricing-audit)

## 继续阅读

- [claude sonnet 4 6](https://keeprouter.com/models/claude-sonnet-4-6.md)
- [api cost calculator](https://keeprouter.com/tools/api-cost-calculator)
- [提示词缓存成本：算清读取、写入与实际节省](https://keeprouter.com/zh/blog/llm-cache-pricing-audit.md)
- [不用静态价格快照，比较 Claude Code 模型成本](https://keeprouter.com/zh/blog/cut-claude-code-costs.md)
- [DeepSeek API 价格：缓存命中后，怎样不重复计算输入费用](https://keeprouter.com/zh/blog/deepseek-api-pricing-cache-estimation.md)
- [KeepRouter API Key 配置：从免费模型走到一次受控付费请求](https://keeprouter.com/zh/blog/keeprouter-api-key-free-to-paid.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)
