AI 智能体的提示缓存成本:Anthropic, OpenAI, Gemini
关于 Claude、OpenAI 和 Gemini API 上提示缓存的定价方式、缓存前缀中应包含的内容,以及一个经过计算的 12 步智能体运行示例,展示节省的成本及详细计算过程。
文章文本包含审核日期。下方的费率表在每次部署时从实时目录重新构建。
最快获胜
缓存输入读取的成本约为 Anthropic 和 OpenAI 列表输入率的 10%(Gemini 约为 25%)。由于智能体在每个步骤中重新发送整个上下文,这一折扣将 12 步 Claude Sonnet 5 运行的输入费用从 $0.35 降至约 $0.09。将系统提示和工具定义放在前面,保持其字节稳定,并在优化其他任何内容之前检查 `cache_read_input_tokens` 是否非零。
提示缓存在智能体循环中节省了什么
在 Claude Sonnet 5 上运行 12 步智能体,无缓存时成本约 $0.39,有缓存时约 $0.14。在 GPT-5.4 上相同运行无缓存约 $0.50,有缓存约 $0.17。原因很简单:智能体在每个步骤中重新发送整个上下文,而缓存输入读取按 Anthropic 和 OpenAI 列表输入率的大约 10% 计费,Gemini 大约 25%。缓存对输出令牌没有影响。
这些数字使用一个实际迹线:一个 4,000 令牌的前缀(系统提示加工具定义),一个 500 令牌的任务,以及十二个步骤,每个步骤返回一个 300 令牌的工具调用并收到一个 1,500 令牌的工具结果。完整计算如下。
为什么智能体是完美的缓存工作负载
工具调用循环中的每一步都会发送目前为止的整个对话:系统提示、每个工具模式、任务、每个之前的工具调用和每个之前的工具结果。步骤 1 发送 4,500 个令牌。步骤 12 发送 4,500 + 11 × 1,800 = 24,300 个令牌。将十二个步骤相加,模型已读取 172,800 个输入令牌,仅产生 4,800 个输出令牌。
这 172,800 个令牌中几乎全部是重复文本。前缀在每次调用中相同,对话仅在末尾增长。这正是前缀缓存的设计目标,因此使智能体变得昂贵的每步重新发送也正是缓存如此有效的原因。智能体账单的总体情况在 [how much an AI agent costs to run](/guides/how-much-does-an-ai-agent-cost-to-run) 中介绍;本文仅讨论缓存。
每个供应商的缓存如何工作
| 供应商 | 如何开启 | 读取价格(大致) | 写入价格 | 生命周期 |
|---|---|---|---|---|
| Anthropic (Claude) | 在系统、工具或消息块上显式设置 cache_control: {\"type\": \"ephemeral\"} 断点;每个请求最多4个 | 约为标价输入的10% | 首次写入约为标价输入的125% | 默认5分钟,每次命中刷新;1小时选项需更高的写入溢价 |
| OpenAI | 对超过最小尺寸的提示进行自动前缀匹配;可选 prompt_cache_key 引导路由 | 约为标价输入的10% | 无溢价 | 几分钟不活动后失效,非高峰时段更长(供应商未承诺具体数值) |
| Google Gemini | 通过 client.caches.create 和 TTL 创建显式缓存对象;部分模型也会隐式缓存 | 约为标价输入的25% | 无写入溢价,但缓存 token 按小时计费存储 | 设置任意 TTL;存储持续计费直至过期 |
Anthropic 按顺序处理请求:工具、系统提示、消息,缓存采用严格前缀匹配。断点会缓存其之前的所有内容,因此在最后一个工具定义和一个系统提示上设置断点即可覆盖稳定部分。再在最新用户消息上添加第三个断点,每一步也能从缓存中读取之前的对话。Anthropic 可缓存的最小前缀长度取决于模型(约1000 token或更多),因此短提示不会缓存。详见各供应商的具体说明:[Claude agent API cost](/guides/claude-agent-api-cost)、[OpenAI Agents API cost](/guides/openai-agents-api-cost) 和 [Gemini agent API cost](/guides/gemini-agent-api-cost)。
缓存前缀应包含什么
将运行期间永不变化的内容放在前面,按固定顺序排列:
- 系统提示(不含日期、用户名和运行ID)
- 工具定义(按确定性排序,运行中不添加)
- 代理每一步都参考的检索文档、样式指南或模式
- 少样本示例
将所有变化的内容放在最后一个断点之后:任务、用户问题、每次请求的元数据。在 Anthropic 上,如果希望上下文中包含时间戳或运行ID,请将其放在第一条用户消息中,而不是系统提示里,这样它位于缓存前缀之后,而不是内部。
实际示例:带缓存和不带缓存的12步
未缓存时,运行读取172,800个输入token,写入4,800个输出token。缓存时,我们将输入分为三个桶。新token只写入缓存一次:步骤1写入4,500,之后十一步每步写入1,800,总计24,300。其余148,500个token为缓存读取。
| 模型 | 未缓存输入 | 未缓存输出 | 未缓存总计 | 缓存总计 | 节省 |
|---|---|---|---|---|---|
| Claude Sonnet 5 ($2 / $10) | 172,800 × $2 = $0.346 | 4,800 × $10 = $0.048 | $0.394 | 24,300 × $2.50 + 148,500 × $0.20 + $0.048 = $0.138 | 65% |
| GPT-5.4 ($2.50 / $15) | 172,800 × $2.50 = $0.432 | 4,800 × $15 = $0.072 | $0.504 | 24,300 × $2.50 + 148,500 × $0.25 + $0.072 = $0.170 | 66% |
| Gemini 3.8 Flash ($0.75 / $3.75) | 172,800 × $0.75 = $0.130 | 4,800 × $3.75 = $0.018 | $0.148 | 24,300 × $0.75 + 148,500 × $0.19 + $0.018 = $0.064 加缓存存储 | ~57% |
所有费率均为每百万token;缓存费率基于标价应用\"大致10%/25%\"规则,Anthropic写入溢价约为125%。写入溢价很小,因为每个token只写入一次,最多读取十一次。对于40步运行,节省比例超过80%,因为每一步重复的输入比例都在增加。在[计算器](/calculator)中尝试您自己的追踪。
片段:Anthropic和OpenAI
Anthropic,在最后一个工具和系统提示上设置显式中断点,并在最新消息上设置一个,以便从缓存中读取对话:
from anthropic import Anthropic
client = Anthropic()
tools[-1]["cache_control"] = {"type": "ephemeral"} # 也会缓存它之前的所有工具
messages[-1]["content"][-1]["cache_control"] = {"type": "ephemeral"}
resp = client.messages.create(
model="claude-sonnet-5", max_tokens=2048,
system=[{"type": "text", "text": SYSTEM_PROMPT,
"cache_control": {"type": "ephemeral"}}],
tools=tools, messages=messages,
)
u = resp.usage
# Sonnet 5 每 1M:输入 $2,写入 ~$2.50,读取 ~$0.20,输出 $10
cost = (u.input_tokens * 2 + u.cache_creation_input_tokens * 2.5
+ u.cache_read_input_tokens * 0.2 + u.output_tokens * 10) / 1_000_000OpenAI,缓存是自动的,你只需验证它:
from openai import OpenAI
client = OpenAI()
resp = client.responses.create(
model="gpt-5.4", instructions=SYSTEM_PROMPT, tools=tools,
input=conversation, prompt_cache_key="research-agent-v3",
)
u = resp.usage
cached = u.input_tokens_details.cached_tokens
# GPT-5.4 每 1M:输入 $2.50,缓存读取 ~$0.25,输出 $15
cost = ((u.input_tokens - cached) * 2.5 + cached * 0.25
+ u.output_tokens * 15) / 1_000_000记录每一步的 cost。如果第二步的缓存数字为零,停止并在运行更长的内容之前找到失效原因。
会悄悄破坏缓存的错误
- 系统提示中的时间戳、日期或“今天是”行。每次调用都会变化,因此前缀永远不会匹配。
- 在步骤之间更改工具顺序或工具集。工具首先渲染,因此重新排序的工具会使系统提示及其后的整个对话失效。
- 从键顺序不稳定的字典中序列化工具模式。发送前请对键进行排序。
- 系统提示中的请求或追踪 ID。将其放在元数据或第一条用户消息中。
- 在 Anthropic 上,编辑较早的消息(例如截断旧的工具结果)而不是追加。缓存会在第一个更改的字节处结束。
- 在运行中途切换模型。缓存是按模型划分的;Haiku 5.5 工作节点无法读取 Sonnet 5 缓存。
- 在 Gemini 上,忘记删除显式缓存。无论是否调用,存储都会按小时计费。
仍能完成此任务的最便宜模型,以及何时为旗舰模型付费
缓存不会改变你应该使用哪个模型;它只会改变昂贵模型的成本。对于定义良好的工具循环,Gemini 3.8 Flash 价格为 $0.75 / $3.75,DeepSeek V4.1 Flash 价格为 $0.30 / $1.20,在考虑任何缓存之前,12 步运行分别花费 $0.15 和约 $0.06。DeepSeek V4.1 Flash(API 名称 deepseek-flash)取代了 DeepSeek 已退役的 V4 Flash。DeepSeek 行使用峰值费率;非峰值时段价格减半。DeepSeek 定价于 2026-10-27 在 api-docs.deepseek.com 检查。可靠性权衡详见[面向 AI 智能体的最便宜 LLM](/guides/cheapest-llm-for-ai-agents)。
当循环涉及规划、模糊指令或需要首次编译通过的代码时,请为 Claude Opus 5($5 / $25)或 GPT-5.5($5 / $30)付费,因为在便宜模型上重试会重新发送整个上下文,成本可能超过一次性正确完成的费用。使用缓存后,未缓存的 12 步 Opus 运行成本从 $0.98 降至约 $0.35,低于未缓存的 Sonnet 5。
如何限制缓存循环的支出
缓存降低的是斜率,而非天花板。对每个 agent 保持四种控制:
- 每次调用的
max_tokens,以最长合法工具调用的大小为准,而非模型的最大值 - 每次运行的硬步骤限制;12 到 25 步覆盖大多数任务
- 模型可以触达的停止条件,例如
finish工具,这样它就不会在“让我再检查一件事”上循环 - 每次运行的美元预算,根据上面代码片段中的用量字段计算,当累计总额超过时中止
[Token 预算护栏](/guides/ai-agent-token-budget-guardrails) 文章提供了一个 30 行的运行器来实现最后一项。如果你的 agent 连接了多个 MCP 服务器,接下来请阅读 [MCP 服务器 token 成本](/guides/mcp-server-token-cost),因为大型工具列表作为前缀,最能在缓存中受益,而没有缓存时伤害最大。
关键要点
- →在 Anthropic 和 OpenAI 上,缓存读取约为列表输入的 10%,在 Gemini 上约为 25%;Anthropic 对写入收取约为列表价格的 125%。
- →一次 12 步的 Sonnet 5 agent 运行,未缓存时成本约为 $0.39,缓存后约为 $0.14;在 GPT-5.4 上约为 $0.50 和 $0.17。
- →顺序是工具、然后是系统、最后是消息;断点之前的任何更改都会使其之后的所有内容失效。
- →时间戳、请求 ID、重新排序的工具和未排序的 JSON 是常见的静默缓存杀手。
- →Anthropic 的默认缓存存活 5 分钟,每次命中都会刷新;调用频率高于此的 agent 循环可免费保持热状态。
- →每次调用时通过用量字段验证:cache_read_input_tokens (Anthropic) 或 input_tokens_details.cached_tokens (OpenAI)。
编辑背景
这适合谁?
在Claude、OpenAI或Gemini API上运行工具调用代理的开发者,他们在每一步都重新发送大量前缀。
何时不使用此
单次分类或短提示对话;前缀大约低于1,000个token时,任何供应商都不会缓存。
定价见解
在Anthropic和OpenAI上,缓存读取价格大约为列表价的10%,在Gemini上大约为25%。在12步运行中,输入费用降低约四分之三。
考虑替代方案
批量API适用于非交互式运行,大约半价;更短的工具结果和更少的连接工具都能降低相同的输入费用。
最终结论
在切换模型之前先开启缓存。这是代理循环中最大的单一节省项,当前缀稳定时,不产生任何成本。
常见问题
提示缓存在 AI agent 上能节省多少成本?
在一次 12 步的 agent 运行中,前缀 4,000 token,工具结果 1,500 token,缓存将 Claude Sonnet 5 的成本从约 $0.39 降至约 $0.14,GPT-5.4 从约 $0.50 降至约 $0.17。节省约为运行成本的 65%,几乎全部来自输入 token。更长的运行节省比例更高,因为每次步骤重新发送的上下文会增长。
Anthropic 对缓存写入收取多少费用?
Anthropic 对写入缓存的 token 按正常输入费率的大约 125% 收费,因此在 Claude Sonnet 5 上约为每百万 $2.50,而列表价格为 $2。读取时约为列表价格的 10%,约每百万 $0.20。写入溢价在首次缓存命中时收回,因此仅当前缀仅使用一次时才会产生成本。
OpenAI 提示缓存需要修改代码吗?
不需要。OpenAI API 会在提示足够长度符合条件时自动缓存匹配的前缀,折扣会显示在响应的 input_tokens_details.cached_tokens 中。你可以传递 prompt_cache_key 以帮助将重复请求路由到同一缓存,但主要任务是确保调用之间前缀的字节完全一致。
Gemini 上下文缓存如何计费?
Gemini 提供您创建的显式缓存,带有 TTL,缓存 token 的读取费率约为列表输入价格的 25%。与 Anthropic 和 OpenAI 不同,Google 还会对缓存 token 的每小时存活时间收取存储费用,因此创建后忘记的缓存会持续产生成本。在依赖之前,请查看供应商页面以了解当前的存储费率。
为什么我的 cache_read_input_tokens 始终为零?
前后缀中的某些内容在多次调用之间发生变化。常见原因是系统提示中的时间戳或日期、请求ID、步骤间添加或重新排序的工具定义,以及键顺序不稳定的JSON序列化。逐字节比较两个连续请求;第一个差异点就是缓存结束的地方。
我应该使用Anthropic的1小时缓存吗?
仅当调用间隔超过五分钟时才使用。默认的5分钟TTL每次命中都会刷新,因此繁忙的代理循环无需额外成本即可保持缓存热度。1小时选项的写入费用更高,如果下一步在三十秒后到达,这种费用就浪费了。
Related
免费课程 · 无需注册
还在犹豫?先学习基础知识,再回来查看价格。