Claude API 费用:按写入、读取和复用次数规划 Prompt Caching
Claude 缓存会改变重复前缀的成本,但创建缓存和读取缓存是不同操作。应分开预算首次与后续请求,保留输出费用,并采用实际调用端点的计费规则。
发布 2026-09-23 · 更新 2026-09-29 · KeepRouter Editorial · 5 分钟阅读

理解 Claude API 费用时,最好把一段对话看成连续的多笔请求。较长的系统指令或参考文档,可能先写入提示词缓存,再由后续请求读取;新问题和新答案仍会增加 token。因此,把一个缓存折扣乘到整段对话的全部费用上,容易低估预算。
本文以“围绕同一份文档连续提问的审阅助手”为例,重点讲工作负载的计算方法。Anthropic 的提示词缓存文档说明其原生缓存机制;KeepRouter 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 片段读取一个已经保存的响应对象,不发起网络请求,也不打印提示词或密钥。
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 缓存文档定义支持的时长和计费行为。如果长暂停让复用失效,缩短提示词可能比扩大缓存更值得测试。可用缓存工作表复算盈亏平衡。
为完整工作流设置预算
API 费用计算器适合按公开的普通输入、缓存输入和输出桶估算。若直接调用 Anthropic 且存在单独的缓存写入价格,应在工作表中另算写入费用,不要把它塞入仅表示读取的缓存字段。还应计入重试、校验后丢弃的回答,以及长时间空闲后首次冷请求。
对交互式文档审阅,可比较三种使用节奏:问题立即连续到达、用户每次间隔较久、每份文档只用一次。适合第一种情况的缓存安排,可能对第三种几乎没有帮助。在任务允许的范围内减少不必要的材料重复、限制回答长度,然后重新检查回答是否仍然正确。
核算时可同时阅读缓存价格核对指南。若工作负载运行在 Claude Code 中,Claude Code 成本比较指南还会把任务完成与工具行为纳入评估。仅有前缀费用下降,不能证明完成一项任务的总成本已经下降。
常见问题
缓存写入和读取价格一样吗?
不一定。Anthropic 原生计费区分两者;网关可能使用不同归一化方式,应核对其客户费率与扣费记录。
提示词缓存会复用上一条答案吗?
不会。它复用的是提示词处理;每次生成的输出仍是该次请求的一部分。
缓存输入要包含创建 token 吗?
工作表中应先分开写入和读取,再根据响应格式与计费服务决定各自如何计费。
短测试能证明生产节省吗?
它只能说明该序列中的观察结果;生产成本还取决于复用次数、间隔、重试和任务完成质量。
参考的一手资料
本文最近复核 2026-09-29