提示词缓存通过允许从提示词中的特定前缀恢复来优化您的 API 使用。这显著减少了重复任务或具有一致元素的提示词的处理时间和成本。
This feature qualifies for Zero Data Retention (ZDR) with limited technical retention. See the Data retention section for details on what is retained and why.
启用提示词缓存有两种方式:
cache_control 字段。系统自动将缓存断点应用于最后一个可缓存块,并随着对话增长向前移动。最适合需要自动缓存不断增长的消息历史的多轮对话。cache_control 直接放置在各个内容块上,以精细控制缓存的具体内容。最简单的入门方式是使用自动缓存:
curl https://api.anthropic.com/v1/messages \
-H "content-type: application/json" \
-H "x-api-key: $ANTHROPIC_API_KEY" \
-H "anthropic-version: 2023-06-01" \
-d '{
"model": "claude-opus-4-6",
"max_tokens": 1024,
"cache_control": {"type": "ephemeral"},
"system": "You are an AI assistant tasked with analyzing literary works. Your goal is to provide insightful commentary on themes, characters, and writing style.",
"messages": [
{
"role": "user",
"content": "Analyze the major themes in Pride and Prejudice."
}
]
}'使用自动缓存时,系统会缓存直到最后一个可缓存块(含)的所有内容。在后续具有相同前缀的请求中,缓存内容会被自动复用。
当您发送启用了提示词缓存的请求时:
这对以下情况特别有用:
默认情况下,缓存的生命周期为 5 分钟。每次使用缓存内容时,缓存都会免费刷新。
提示词缓存会缓存完整前缀
提示词缓存引用整个提示词——tools、system 和 messages(按此顺序),直到并包含标有 cache_control 的块。
提示词缓存引入了新的定价结构。下表显示了每个支持模型每百万 token 的价格:
| Model | Base Input Tokens | 5m Cache Writes | 1h Cache Writes | Cache Hits & Refreshes | Output Tokens |
|---|---|---|---|---|---|
| Claude Opus 4.6 | $5 / MTok | $6.25 / MTok | $10 / MTok | $0.50 / MTok | $25 / MTok |
| Claude Opus 4.5 | $5 / MTok | $6.25 / MTok | $10 / MTok | $0.50 / MTok | $25 / MTok |
| Claude Opus 4.1 | $15 / MTok | $18.75 / MTok | $30 / MTok | $1.50 / MTok | $75 / MTok |
| Claude Opus 4 | $15 / MTok | $18.75 / MTok | $30 / MTok | $1.50 / MTok | $75 / MTok |
| Claude Sonnet 4.6 | $3 / MTok | $3.75 / MTok | $6 / MTok | $0.30 / MTok | $15 / MTok |
| Claude Sonnet 4.5 | $3 / MTok | $3.75 / MTok | $6 / MTok | $0.30 / MTok | $15 / MTok |
| Claude Sonnet 4 | $3 / MTok | $3.75 / MTok | $6 / MTok | $0.30 / MTok | $15 / MTok |
| Claude Sonnet 3.7 (deprecated) | $3 / MTok | $3.75 / MTok | $6 / MTok | $0.30 / MTok | $15 / MTok |
| Claude Haiku 4.5 | $1 / MTok | $1.25 / MTok | $2 / MTok | $0.10 / MTok | $5 / MTok |
| Claude Haiku 3.5 | $0.80 / MTok | $1 / MTok | $1.6 / MTok | $0.08 / MTok | $4 / MTok |
| Claude Opus 3 (deprecated) | $15 / MTok | $18.75 / MTok | $30 / MTok | $1.50 / MTok | $75 / MTok |
| Claude Haiku 3 | $0.25 / MTok | $0.30 / MTok | $0.50 / MTok | $0.03 / MTok | $1.25 / MTok |
上表反映了提示词缓存的以下定价倍数:
这些倍数与其他定价修饰符叠加,例如批量 API 折扣、长上下文定价和数据驻留。完整详情请参阅定价。
提示词缓存(自动和显式)目前支持以下模型:
自动缓存是启用提示词缓存的最简单方式。无需在各个内容块上放置 cache_control,只需在请求体的顶层添加一个 cache_control 字段。系统会自动将缓存断点应用于最后一个可缓存块。
curl https://api.anthropic.com/v1/messages \
-H "content-type: application/json" \
-H "x-api-key: $ANTHROPIC_API_KEY" \
-H "anthropic-version: 2023-06-01" \
-d '{
"model": "claude-opus-4-6",
"max_tokens": 1024,
"cache_control": {"type": "ephemeral"},
"system": "You are a helpful assistant that remembers our conversation.",
"messages": [
{"role": "user", "content": "My name is Alex. I work on machine learning."},
{"role": "assistant", "content": "Nice to meet you, Alex! How can I help with your ML work today?"},
{"role": "user", "content": "What did I say I work on?"}
]
}'使用自动缓存时,缓存点会随着对话增长自动向前移动。每个新请求都会缓存直到最后一个可缓存块的所有内容,之前的内容则从缓存中读取。
| 请求 | 内容 | 缓存行为 |
|---|---|---|
| 请求 1 | System + User(1) + Asst(1) + User(2) ◀ 缓存 | 所有内容写入缓存 |
| 请求 2 | System + User(1) + Asst(1) + User(2) + Asst(2) + User(3) ◀ 缓存 | System 到 User(2) 从缓存读取; Asst(2) + User(3) 写入缓存 |
| 请求 3 | System + User(1) + Asst(1) + User(2) + Asst(2) + User(3) + Asst(3) + User(4) ◀ 缓存 | System 到 User(3) 从缓存读取; Asst(3) + User(4) 写入缓存 |
缓存断点会自动移动到每个请求中最后一个可缓存块,因此您无需随着对话增长更新任何 cache_control 标记。
默认情况下,自动缓存使用 5 分钟的 TTL。您可以以基础输入 token 价格的 2 倍指定 1 小时的 TTL:
"cache_control": {"type": "ephemeral", "ttl": "1h"}自动缓存与显式缓存断点兼容。当两者一起使用时,自动缓存断点会占用 4 个可用断点槽中的一个。
这允许您结合两种方式。例如,使用显式断点独立缓存系统提示词和工具,同时自动缓存处理对话:
{
"model": "claude-opus-4-6",
"max_tokens": 1024,
"cache_control": {"type": "ephemeral"},
"system": [
{
"type": "text",
"text": "You are a helpful assistant.",
"cache_control": {"type": "ephemeral"}
}
],
"messages": [...]
}自动缓存使用相同的底层缓存基础设施。定价、最小 token 阈值、上下文排序要求以及 20 块回溯窗口的应用方式与显式断点相同。
cache_control,则自动缓存为空操作。cache_control,API 将返回 400 错误。自动缓存在 Claude API 和 Azure AI Foundry(预览版)上可用。对 Amazon Bedrock 和 Google Vertex AI 的支持将在稍后推出。
为了更精细地控制缓存,您可以将 cache_control 直接放置在各个内容块上。当您需要以不同频率缓存不同部分,或需要精细控制缓存的具体内容时,这非常有用。
将静态内容(工具定义、系统指令、上下文、示例)放在提示词的开头。使用 cache_control 参数标记可重用内容的结尾以进行缓存。
缓存前缀按以下顺序创建:tools、system,然后是 messages。此顺序形成一个层次结构,每个级别都建立在前一个级别之上。
您可以在静态内容末尾只使用一个缓存断点,系统将自动找到最长的匹配缓存块序列。了解其工作原理有助于优化您的缓存策略。
三个核心原则:
缓存键是累积的:当您使用 cache_control 显式缓存一个块时,缓存哈希键是通过按顺序哈希对话中所有前面的块生成的。这意味着每个块的缓存取决于其之前的所有内容。
向后顺序检查:系统通过从您的显式断点向后工作来检查缓存命中,按逆序检查每个前面的块。这确保您获得尽可能长的缓存命中。
20 块回溯窗口:系统只检查每个显式 cache_control 断点之前最多 20 个块。在检查 20 个块未找到匹配后,它停止检查并移动到下一个显式断点(如果有)。
示例:理解回溯窗口
考虑一个有 30 个内容块的对话,您只在第 30 块设置 cache_control:
如果您发送第 31 块且之前的块没有变化:系统检查第 30 块(匹配!)。您在第 30 块获得缓存命中,只有第 31 块需要处理。
如果您修改第 25 块并发送第 31 块:系统从第 30 块向后检查 → 29 → 28... → 25(不匹配)→ 24(匹配!)。由于第 24 块没有变化,您在第 24 块获得缓存命中,只有第 25-30 块需要重新处理。
如果您修改第 5 块并发送第 31 块:系统从第 30 块向后检查 → 29 → 28... → 11(第 20 次检查)。在 20 次检查未找到匹配后,停止查找。由于第 5 块超出了 20 块窗口,没有缓存命中,所有块都需要重新处理。但是,如果您在第 5 块设置了显式 cache_control 断点,系统将从该断点继续检查:第 5 块(不匹配)→ 第 4 块(匹配!)。这允许在第 4 块获得缓存命中,说明了为什么应该在可编辑内容之前放置断点。
关键要点:始终在对话末尾设置显式缓存断点,以最大化缓存命中的机会。此外,在可能被编辑的内容块之前设置断点,以确保这些部分可以独立缓存。
如果您想要以下功能,可以定义最多 4 个缓存断点:
重要限制:如果您的提示词在缓存断点之前有超过 20 个内容块,并且您修改了这 20 个块之前的内容,除非您在更靠近该内容的位置添加额外的显式断点,否则您将无法获得缓存命中。
缓存断点本身不增加任何成本。 您只需为以下内容付费:
添加更多 cache_control 断点不会增加您的成本——您仍然根据实际缓存和读取的内容支付相同金额。断点只是让您控制哪些部分可以独立缓存。
最小可缓存提示词长度为:
较短的提示词无法被缓存,即使标有 cache_control。任何缓存少于此数量 token 的请求都将在不缓存的情况下处理。要查看提示词是否被缓存,请参阅响应使用字段。
对于并发请求,请注意缓存条目只有在第一个响应开始后才可用。如果您需要并行请求的缓存命中,请在发送后续请求之前等待第一个响应。
目前,"ephemeral" 是唯一支持的缓存类型,默认生命周期为 5 分钟。
请求中的大多数块都可以被缓存。这包括:
tools 数组中的工具定义system 数组中的内容块messages.content 数组中的内容块,适用于用户和助手轮次messages.content 数组中的内容块,在用户轮次中messages.content 数组中的内容块,在用户和助手轮次中这些元素中的每一个都可以被缓存,无论是自动缓存还是通过标记 cache_control。
虽然大多数请求块都可以被缓存,但也有一些例外:
思考块不能直接用 cache_control 缓存。但是,当思考块出现在之前的助手轮次中时,它们可以与其他内容一起被缓存。以这种方式缓存时,从缓存读取时它们确实计为输入 token。
子内容块(如引用)本身不能直接缓存。应缓存顶层块。
对于引用,作为引用来源材料的顶层文档内容块可以被缓存。这允许您通过缓存引用将引用的文档与提示词缓存有效结合使用。
空文本块不能被缓存。
对缓存内容的修改可能会使部分或全部缓存失效。
如构建提示词结构中所述,缓存遵循以下层次结构:tools → system → messages。每个级别的更改会使该级别及所有后续级别失效。
下表显示了不同类型的更改会使缓存的哪些部分失效。✘ 表示缓存失效,✓ 表示缓存保持有效。
| 更改内容 | 工具缓存 | 系统缓存 | 消息缓存 | 影响 |
|---|---|---|---|---|
| 工具定义 | ✘ | ✘ | ✘ | 修改工具定义(名称、描述、参数)会使整个缓存失效 |
| 网络搜索开关 | ✓ | ✘ | ✘ | 启用/禁用网络搜索会修改系统提示词 |
| 引用开关 | ✓ | ✘ | ✘ | 启用/禁用引用会修改系统提示词 |
| 速度设置 | ✓ | ✘ | ✘ | 在 speed: "fast" 和标准速度之间切换会使系统和消息缓存失效 |
| 工具选择 | ✓ | ✓ | ✘ | tool_choice 参数的更改只影响消息块 |
| 图像 | ✓ | ✓ | ✘ | 在提示词任何位置添加/删除图像会影响消息块 |
| 思考参数 | ✓ | ✓ | ✘ | 扩展思考设置的更改(启用/禁用、预算)会影响消息块 |
| 传递给扩展思考请求的非工具结果 | ✓ | ✓ | ✘ | 当在启用扩展思考的请求中传入非工具结果时,上下文中所有之前缓存的思考块都会被剥离,上下文中跟随这些思考块的任何消息都会从缓存中删除。更多详情,请参阅使用思考块进行缓存。 |
使用响应中 usage 内的以下 API 响应字段监控缓存性能(如果流式传输,则在 message_start 事件中):
cache_creation_input_tokens:创建新条目时写入缓存的 token 数量。cache_read_input_tokens:此请求从缓存中检索的 token 数量。input_tokens:未从缓存读取或用于创建缓存的输入 token 数量(即最后一个缓存断点之后的 token)。理解 token 分解
input_tokens 字段仅表示请求中最后一个缓存断点之后的 token——而不是您发送的所有输入 token。
计算总输入 token:
total_input_tokens = cache_read_input_tokens + cache_creation_input_tokens + input_tokens空间说明:
cache_read_input_tokens = 断点之前已缓存的 token(读取)cache_creation_input_tokens = 断点之前正在缓存的 token(写入)input_tokens = 最后一个断点之后的 token(不符合缓存条件)示例: 如果您有一个包含 100,000 个缓存内容 token(从缓存读取)、0 个正在缓存的新内容 token 以及用户消息中 50 个 token(在缓存断点之后)的请求:
cache_read_input_tokens:100,000cache_creation_input_tokens:0input_tokens:50这对于理解成本和速率限制都很重要,因为在有效使用缓存时,input_tokens 通常会比您的总输入小得多。
当将扩展思考与提示词缓存一起使用时,思考块具有特殊行为:
与其他内容一起自动缓存:虽然思考块不能显式标记 cache_control,但当您使用工具结果进行后续 API 调用时,它们会作为请求内容的一部分被缓存。这通常发生在工具使用期间,当您传回思考块以继续对话时。
输入 token 计数:当思考块从缓存读取时,它们在您的使用指标中计为输入 token。这对于成本计算和 token 预算很重要。
缓存失效模式:
cache_control 标记,也会发生此缓存行为有关缓存失效的更多详情,请参阅使缓存失效的内容。
工具使用示例:
Request 1: User: "What's the weather in Paris?"
Response: [thinking_block_1] + [tool_use block 1]
Request 2:
User: ["What's the weather in Paris?"],
Assistant: [thinking_block_1] + [tool_use block 1],
User: [tool_result_1, cache=True]
Response: [thinking_block_2] + [text block 2]
# Request 2 caches its request content (not the response)
# The cache includes: user message, thinking_block_1, tool_use block 1, and tool_result_1
Request 3:
User: ["What's the weather in Paris?"],
Assistant: [thinking_block_1] + [tool_use block 1],
User: [tool_result_1, cache=True],
Assistant: [thinking_block_2] + [text block 2],
User: [Text response, cache=True]
# Non-tool-result user block causes all thinking blocks to be ignored
# This request is processed as if thinking blocks were never present当包含非工具结果用户块时,它指定了一个新的助手循环,所有之前的思考块都从上下文中删除。
有关更详细的信息,请参阅扩展思考文档。
从 2026 年 2 月 5 日起,提示词缓存将使用工作区级别隔离而不是组织级别隔离。缓存将按工作区隔离,确保同一组织内工作区之间的数据分离。此更改适用于 Claude API 和 Azure AI Foundry(预览版);Amazon Bedrock 和 Google Vertex AI 将保持组织级别的缓存隔离。如果您使用多个工作区,请审查您的缓存策略以适应此更改。
组织隔离:缓存在组织之间是隔离的。不同的组织永远不会共享缓存,即使它们使用相同的提示词。
精确匹配:缓存命中需要 100% 相同的提示词段,包括直到并包含标有缓存控制的块的所有文本和图像。
输出 token 生成:提示词缓存对输出 token 生成没有影响。您收到的响应与不使用提示词缓存时完全相同。
为优化提示词缓存性能:
根据您的场景定制提示词缓存策略:
如果遇到意外行为:
cache_control 标记位于相同位置tool_choice 和图像使用在各次调用之间保持一致cache_control 参数,以确保所有内容都可以被缓存tool_use 内容块中的键具有稳定的排序,因为某些语言(例如 Swift、Go)在 JSON 转换期间会随机化键顺序,从而破坏缓存对 tool_choice 的更改或提示词中任何位置图像的存在/缺失都会使缓存失效,需要创建新的缓存条目。有关缓存失效的更多详情,请参阅使缓存失效的内容。
如果您发现 5 分钟太短,Anthropic 还提供 1 小时的缓存时长,需额外付费。
要使用扩展缓存,请在 cache_control 定义中包含 ttl,如下所示:
"cache_control": {
"type": "ephemeral",
"ttl": "1h"
}响应将包含如下详细的缓存信息:
{
"usage": {
"input_tokens": 2048,
"cache_read_input_tokens": 1800,
"cache_creation_input_tokens": 248,
"output_tokens": 503,
"cache_creation": {
"ephemeral_5m_input_tokens": 456,
"ephemeral_1h_input_tokens": 100
}
}
}请注意,当前的 cache_creation_input_tokens 字段等于 cache_creation 对象中值的总和。
如果您的提示词以固定频率使用(即系统提示词使用频率超过每 5 分钟一次),请继续使用 5 分钟缓存,因为这将继续免费刷新。
1 小时缓存最适合以下场景:
5 分钟和 1 小时缓存在延迟方面表现相同。对于长文档,您通常会看到改善的首 token 时间。
您可以在同一请求中同时使用 1 小时和 5 分钟缓存控制,但有一个重要约束:具有较长 TTL 的缓存条目必须出现在较短 TTL 之前(即 1 小时缓存条目必须出现在任何 5 分钟缓存条目之前)。
混合 TTL 时,我们在提示词中确定三个计费位置:
A:最高缓存命中处的 token 计数(如果没有命中则为 0)。B:A 之后最高 1 小时 cache_control 块处的 token 计数(如果不存在则等于 A)。C:最后一个 cache_control 块处的 token 计数。如果 B 和/或 C 大于 A,它们必然是缓存未命中,因为 A 是最高的缓存命中。
您将为以下内容付费:
A 的缓存读取 token。(B - A) 的 1 小时缓存写入 token。(C - B) 的 5 分钟缓存写入 token。以下是 3 个示例。这描述了 3 个请求的输入 token,每个请求具有不同的缓存命中和缓存未命中。由于结果不同,每个请求的计算定价也不同,如彩色框所示。
为了帮助您开始使用提示缓存,我们准备了一个提示缓存使用手册,其中包含详细示例和最佳实践。
以下是几个展示各种提示缓存模式的代码片段。这些示例演示了如何在不同场景中实现缓存,帮助您了解此功能的实际应用:
提示缓存存储 KV(键值)缓存表示和缓存内容的加密哈希值,但不存储提示或响应的原始文本。缓存条目的最短生命周期为 5 分钟(标准)或 60 分钟(扩展)。缓存条目在组织之间相互隔离。由于 Anthropic 不存储原始提示或响应文本,此功能可能适合需要 ZDR 类型数据保留承诺的客户。
有关所有功能的 ZDR 资格,请参阅 API 和数据保留。
Was this page helpful?