本文为 AI 生成文章。 本文由 Gemini 3.5 Flash 根据一组真实的 Claude-Opus API 调用数据总结撰写,由 Claude Code(本人所用工具)整理排版后发布。内容涉及计费反推与节省比例的估算,仅供参考。
在开发基于 LLM(大语言模型)的应用时,尤其是涉及长文本分析、连续对话、或者辅助编程等场景,API 的费用往往会随着对话轮数的增加呈现指数级增长。
原因很简单:大模型是无状态的。为了让它记住上下文,每次你发送新消息时,客户端都必须把”历史所有对话 + 新问题”打包成一个巨大的 Prompt 重新发送一遍。这种 $O(N^2)$ 的 Token 增长方式,很快就会让 API 账单变得非常难看。
为了解决这个问题,主流服务商(如 Anthropic、OpenAI 等)推出了 Prompt Caching(提示词缓存) 机制。本文将结合一组真实的 Claude-Opus API 调用数据,用最朴实的程序员视角,拆解这个机制是如何帮我们省钱的。
简单来说,当你的 Prompt 达到一定长度(通常是 1024 或 2048 Token 以上)时,API 服务商会把这部分 Prompt 的 KV Cache(键值缓存)暂时保存在他们的服务器内存中。
当下一次请求发送过来时,如果你的 Prompt 开头部分(Prefix)与缓存的内容完全一致,大模型就不会重新去计算这部分 Token,而是直接从内存中读取。
这带来了两个直接好处:
下面是一段连续运行了 22 分钟的真实 API 调用日志。在这个会话中,程序在不断向 Claude-Opus 请求产出长文本,单次输出在 2500 到 4900 Token 之间。
为了方便阅读,我们将数据按照时间正序(从前到后)整理如下(价格保留到小数点后 4 位):
| 序号 | 触发时间 | 输入 Token | 输出 Token | 缓存读取 Token | 缓存写入 Token | 实际花费 (USD) |
|---|---|---|---|---|---|---|
| 1 | 17:56:35 | 2 | 2,550 | 0 | 14,673 | $0.1555 |
| 2 | 17:59:06 | 2 | 2,938 | 14,673 | 2,597 | $0.0970 |
| 3 | 18:02:19 | 2 | 3,397 | 17,270 | 3,073 | $0.1128 |
| 4 | 18:04:50 | 2 | 3,687 | 20,343 | 3,586 | $0.1248 |
| 5 | 18:07:53 | 2 | 4,275 | 23,929 | 3,617 | $0.1415 |
| 6 | 18:09:58 | 2 | 2,550 | 27,546 | 4,362 | $0.1048 |
| 7 | 18:13:15 | 2 | 4,498 | 31,908 | 2,594 | $0.1446 |
| 8 | 18:16:43 | 2 | 4,901 | 34,502 | 4,527 | $0.1681 |
| 9 | 18:18:07 | 2 | 4,717 | 39,029 | 4,935 | $0.1683 |
缓存读取。第 2 轮读取了第 1 轮写入的 14,673;第 3 轮读取了 17,270(即 $14,673 + 2,597$)。整个会话的上下文像滚雪球一样越来越大,到了最后一轮,缓存中已经驻留了 39,029 个 Token。我们来做一道简单的对比计算题。
假定该通道的计费规则如下(通过数据反推):
在没有缓存的情况下,每次请求都需要把所有历史上下文作为标准输入发送。
将这 9 轮的无缓存预估费用相加,总计为:$2.4312。
根据日志中的 配额消耗 直接求和:
$1.2173。
通过使用缓存,这波调用的账单直接被腰斩(省了一半)。
特别需要注意的是最后一轮(第 9 轮):此时上下文已经累积到了 4.4 万 Token。如果没有缓存,仅这单次对话就要花费 $0.3955;而开启缓存后,实际仅花费 $0.1683,单次降幅达到 **57%**。
如果你也想在自己的项目里落地这个优化,以下是几个非常务实的开发建议:
Prompt Caching 不是什么玄乎的高阶算法,而是一个非常纯粹的、符合后端开发直觉的工程优化手段。只要稍微调整一下 Prompt 的拼接顺序和接口调用节奏,就能在长文本和多轮对话场景下换来几乎翻倍的性价比。