6 6
7> Claude Code 自动管理 prompt caching。了解为什么模型切换会触发缓慢的未缓存回合、`/compact` 的成本、为什么 CLAUDE.md 编辑在会话中期不适用,以及如何检查缓存命中率。7> Claude Code 自动管理 prompt caching。了解为什么模型切换会触发缓慢的未缓存回合、`/compact` 的成本、为什么 CLAUDE.md 编辑在会话中期不适用,以及如何检查缓存命中率。
8 8
9Prompt caching 使 Claude Code 更快、更经济高效。没有缓存,API 会在每个回合重新处理您的完整历史记录。有了缓存,它会重用已经处理过的内容,只对更改的部分进行新工作。9Prompt caching 使 Claude Code 更快、更经济高效。没有缓存,API 会在每个回合重新处理您的完整历史记录。有了缓存,它会重用已经处理过的内容,按照[缓存令牌费率](https://platform.claude.com/docs/en/about-claude/pricing)对重新读取进行计费,并仅完全处理已更改的内容。
10 10
11Claude Code 为您处理 prompt caching,除非您[禁用它](#disable-prompt-caching)。了解 prompt caching 的工作原理仍然很有用,因为某些操作会使缓存失效,使下一个响应更慢、更昂贵,同时它重建缓存。本页涵盖哪些操作会这样做、为什么某些设置等待重启才能应用,以及当使用量看起来很高时如何检查缓存性能。11Claude Code 为您处理 prompt caching,除非您[禁用它](#disable-prompt-caching)。了解 prompt caching 的工作原理仍然很有用,因为某些操作会使缓存失效,使下一个响应更慢、更昂贵,同时它重建缓存。本页涵盖哪些操作会这样做、为什么某些设置等待重启才能应用,以及当使用量看起来很高时如何检查缓存性能。
12 12
26 26
27| 层 | 内容 | 更改时间 |27| 层 | 内容 | 更改时间 |
28| ----- | -------------------- | -------------------------------- |28| ----- | -------------------- | -------------------------------- |
29| 系统提示 | 核心指令、工具定义、输出样式 | 加载的工具定义集合更改,或 Claude Code 升级 |29| 系统提示 | 核心指令、工具定义 | 加载的工具定义集合更改,或 Claude Code 升级 |
30| 项目上下文 | CLAUDE.md、自动内存、无范围规则 | 会话开始,或在 `/clear` 或 `/compact` 之后 |30| 项目上下文 | CLAUDE.md、自动内存、无范围规则 | 会话开始,或在 `/clear` 或 `/compact` 之后 |
31| 对话 | 您的消息、Claude 的响应、工具结果 | 每个回合 |31| 对话 | 您的消息、Claude 的响应、工具结果 | 每个回合 |
32 32
33对对话层的更改会保留系统提示和项目上下文缓存。对系统提示的更改会使所有内容失效,因为所有后续内容现在位于不同的前缀后面。第三列给出常见触发器而不是详尽列表,下面的部分涵盖完整集合,包括在会话开始时固定的输出样式等内容。33对对话层的更改会保留系统提示和项目上下文缓存。对系统提示的更改会使所有内容失效,因为所有后续内容现在位于不同的前缀后面。第三列给出常见触发器而不是详尽列表,下面的部分涵盖完整集合。
34 34
35前缀匹配规则解释了本页上的大多数行为。例如,[Plan Mode](/docs/zh-CN/permission-modes#analyze-before-you-edit-with-plan-mode) 和[技能加载](/docs/zh-CN/skills)将其指令附加为对话消息,所以缓存的前缀保持完整。35前缀匹配规则解释了本页上的大多数行为。例如,[Plan mode](/docs/zh-CN/permission-modes#analyze-before-you-edit-with-plan-mode) 和[技能加载](/docs/zh-CN/skills)将其指令附加为对话消息,所以缓存的前缀保持完整。
36 36
37两个设置根本不是提示文本的一部分,所以它们不出现在层表中,但两者都是缓存密钥的一部分:37两个设置不出现在层表中,但仍然影响缓存的内容:
38 38
39* **Model**:每个模型都有自己的缓存。切换模型会重新计算整个请求,即使内容相同。请参阅下面的[切换模型](#switching-models)。39* **Model**:每个模型都有自己的缓存。切换模型会重新计算整个请求,即使内容相同。请参阅下面的[切换模型](#switching-models)。
40* **Effort level**:同一模型的每个工作量级别都有自己的缓存。在会话中期更改它会重新计算整个请求,Claude Code 会要求您在应用更改之前确认。请参阅下面的[更改工作量级别](#changing-effort-level)。40* **Effort level**:在大多数模型上,每个工作量级别都有自己的缓存,所以在会话中期更改工作量会重新计算整个请求。在带有 API 密钥或 Claude 订阅的 Fable 5.1 上,缓存默认保持完整。请参阅下面的[更改工作量级别](#changing-effort-level)。
41 41
42<Tip>42<Tip>
43 在会话顶部选择您的模型和工作量级别,然后在任务之间的自然中断处保存 `/compact`。您在任务中期进行的更改越少,缓存命中率就越高。43 在会话顶部选择您的模型和工作量级别,然后在任务之间的自然中断处保存 `/compact`。您在任务中期进行的更改越少,缓存命中率就越高。
51 51
52* **API 密钥、Claude 订阅或 [Claude Platform on AWS](/docs/zh-CN/claude-platform-on-aws)**:缓存位于 Anthropic 的基础设施中,通过 [Claude API](https://platform.claude.com/docs) 访问52* **API 密钥、Claude 订阅或 [Claude Platform on AWS](/docs/zh-CN/claude-platform-on-aws)**:缓存位于 Anthropic 的基础设施中,通过 [Claude API](https://platform.claude.com/docs) 访问
53* **Amazon Bedrock 或 Google Cloud 的 Agent Platform**:缓存位于您的云提供商的服务基础设施中53* **Amazon Bedrock 或 Google Cloud 的 Agent Platform**:缓存位于您的云提供商的服务基础设施中
54* **Microsoft Foundry**:请求路由到 Anthropic 的基础设施54* **Microsoft Foundry**:取决于部署的[托管选项](https://platform.claude.com/docs/en/build-with-claude/claude-in-microsoft-foundry#hosting-options)。在 Azure 上托管的部署在 Azure 基础设施上提供;在 Anthropic 上托管的部署在 Anthropic 的基础设施上提供
55* **自定义 `ANTHROPIC_BASE_URL` 或 [LLM gateway](/docs/zh-CN/llm-gateway)**:缓存位于您的请求转发到的任何地方,缓存是否工作取决于网关55* **自定义 `ANTHROPIC_BASE_URL` 或 [LLM gateway](/docs/zh-CN/llm-gateway)**:缓存位于您的请求转发到的任何地方,缓存是否工作取决于网关
56 56
57Claude Code 还在对话中期附加系统上下文,例如文件更改通知,并在每个提供商和连接上标记该块以进行缓存。
58
59在提供商自己的端点、Amazon Bedrock 及其 [Mantle 端点](/docs/zh-CN/amazon-bedrock#use-the-mantle-endpoint)、Google Cloud 的 Agent Platform 和 Microsoft Foundry 上,缓存该块的方式与 Claude API 相同。
60
61当您的请求通过 [LLM gateway](/docs/zh-CN/llm-gateway)、自定义 `ANTHROPIC_BASE_URL` 或云提供商基础 URL 覆盖(例如 [`ANTHROPIC_BEDROCK_BASE_URL`](/docs/zh-CN/env-vars))时,缓存的内容取决于网关如何处理 Claude Code 发送的 [`cache_control` 标记](https://platform.claude.com/docs/en/build-with-claude/prompt-caching#explicit-cache-breakpoints):
62
63* **原样转发它们**:该块和您的对话缓存方式与在提供商自己的端点上相同。
64* **拒绝标记的请求,返回命名 `cache_control` 的 `400` 错误**:Claude Code 重新发送请求,将标记从块移到您的最后一条对话消息上,并在对话的其余部分保持在那里。该块作为未缓存的输入计费;您的对话保持缓存。
65* **在返回成功时删除标记**:您的整个对话历史在每个回合上都作为未缓存的输入计费。将块形式系统内容转换为纯字符串的网关以相同的方式删除标记。
66
57有关每个提供商存储和处理的内容,请参阅[数据使用](/docs/zh-CN/data-usage)。无论缓存位于何处,条目在不活动期间后过期,[缓存生命周期](#cache-lifetime)下面涵盖 TTL 以及如何延长它。67有关每个提供商存储和处理的内容,请参阅[数据使用](/docs/zh-CN/data-usage)。无论缓存位于何处,条目在不活动期间后过期,[缓存生命周期](#cache-lifetime)下面涵盖 TTL 以及如何延长它。
58 68
59<h2 id="actions-that-invalidate-the-cache">69<h2 id="actions-that-invalidate-the-cache">
68* [连接或断开 MCP 服务器](#connecting-or-disconnecting-an-mcp-server)78* [连接或断开 MCP 服务器](#connecting-or-disconnecting-an-mcp-server)
69* [启用或禁用插件](#enabling-or-disabling-a-plugin)79* [启用或禁用插件](#enabling-or-disabling-a-plugin)
70* [拒绝整个工具](#denying-an-entire-tool)80* [拒绝整个工具](#denying-an-entire-tool)
81* [更改输出样式](#changing-output-style)
71* [压缩对话](#compacting-the-conversation)82* [压缩对话](#compacting-the-conversation)
83* [积累许多图像](#accumulating-many-images)
72* [升级 Claude Code](#upgrading-claude-code)84* [升级 Claude Code](#upgrading-claude-code)
73 85
74<h3 id="switching-models">86<h3 id="switching-models">
77 89
78每个模型都有自己的缓存。使用 [`/model`](/docs/zh-CN/model-config#setting-your-model) 切换意味着下一个请求读取整个对话历史记录而没有缓存命中,即使内容相同。90每个模型都有自己的缓存。使用 [`/model`](/docs/zh-CN/model-config#setting-your-model) 切换意味着下一个请求读取整个对话历史记录而没有缓存命中,即使内容相同。
79 91
92当您在终端运行 `/model` 时,Claude Code 仅在缓存仍然温暖时要求您确认切换。缓存在 Claude Code 在此对话中最后发送请求或 Claude 最后响应后的一个[缓存 TTL](#cache-lifetime) 内保持温暖。一旦该时间过去,缓存已过期,所以 Claude Code 无需询问即可切换。
93
94在 v2.1.238 之前,Claude Code 没有检查缓存 TTL,即使在缓存过期后也会询问。
95
96您也可以使用 [PreModelSwitch hook](/docs/zh-CN/hooks#premodelswitch-decision-control) 要求此确认或跳过它。
97
80[`opusplan` 模型设置](/docs/zh-CN/model-config#opusplan-model-setting)在 Plan Mode 期间解析为 Opus,在执行期间解析为 Sonnet,所以每个 Plan Mode 切换都是模型切换并启动新缓存。98[`opusplan` 模型设置](/docs/zh-CN/model-config#opusplan-model-setting)在 Plan Mode 期间解析为 Opus,在执行期间解析为 Sonnet,所以每个 Plan Mode 切换都是模型切换并启动新缓存。
81 99
82[Fable 5 上的自动模型回退](/docs/zh-CN/model-config#automatic-model-fallback)也是一个模型切换。当安全分类器标记请求时,Claude Code 在默认 Opus 模型上重新运行它,会话继续进行。100[Fable 模型和 Opus 5 上的自动模型回退](/docs/zh-CN/model-config#automatic-model-fallback)也是一个模型切换。当安全分类器标记具有回退模型的类别中的请求时,Claude Code 在该模型上重新运行请求,会话继续进行。
101
102当 skill 或 command 的 frontmatter 命名一个[`model`](/docs/zh-CN/skills#frontmatter-reference)不同于会话当前模型的模型时,该回合也是一个模型切换:下一个请求读取整个对话历史记录而没有缓存命中。会话模型在您的下一个提示上恢复。`context: fork` skill 设置[分叉子代理的模型](/docs/zh-CN/skills#run-skills-in-a-subagent)。
83 103
84<h3 id="changing-effort-level">104<h3 id="changing-effort-level">
85 更改工作量级别105 更改工作量级别
86</h3>106</h3>
87 107
88缓存由[工作量级别](/docs/zh-CN/model-config#adjust-effort-level)以及模型进行键控,所以使用 `/effort` 切换意味着下一个请求读取整个对话历史记录而没有缓存命中。一旦对话已开始,Claude Code 会在应用会使缓存失效的工作量更改之前显示确认对话框。解析为已生效的相同级别的更改(例如显式设置模型的默认值)会跳过对话框并保持缓存。108在大多数模型上,在会话中期更改[工作量级别](/docs/zh-CN/model-config#adjust-effort-level)意味着下一个请求读取整个对话历史记录而没有缓存命中。当缓存仍然温暖时,Claude Code 会要求您首先确认更改。
109
110在具有 API 密钥或 Claude 订阅的 Fable 5.1 上,更改工作量会保持缓存,Claude Code 无需询问即可应用新级别。这不适用于 Amazon Bedrock、Google Cloud 的 Agent Platform 或 [Claude apps gateway](/docs/zh-CN/claude-apps-gateway),或当您设置 [`CLAUDE_CODE_DISABLE_EXPERIMENTAL_BETAS`](/docs/zh-CN/llm-gateway-protocol#disable-pre-release-capabilities) 或您的组织具有 HIPAA 配置时。
111
112在 v2.1.260 之前,在具有 API 密钥或 Claude 订阅的 Fable 5.1 上更改工作量也会使缓存失效。
89 113
90<h3 id="turning-on-fast-mode">114<h3 id="turning-on-fast-mode">
91 启用快速模式115 启用快速模式
92</h3>116</h3>
93 117
94启用[快速模式](/docs/zh-CN/fast-mode)会添加一个请求头,该请求头是缓存键的一部分,所以下一个请求读取整个对话历史记录而没有缓存命中。这些未缓存的输入令牌按[快速模式费率](/docs/zh-CN/fast-mode#understand-the-cost-tradeoff)计费,这就是为什么在会话开始时启用它的成本低于在长会话深处启用它的成本。从非 Opus 模型启用快速模式也会[切换您的模型](#switching-models),这本身会启动新缓存。118启用[快速模式](/docs/zh-CN/fast-mode)会添加一个请求头,该请求头是缓存键的一部分,所以 Claude Code 发送的第一个启用快速模式的请求读取整个对话历史记录而没有缓存命中。Claude Code 在回合开始时设置该头一次,并为整个回合保持它,所以当您在 Claude 工作时启用快速模式时,头的缓存未命中发生在您下一个回合的第一个请求上。这些未缓存的输入令牌按[快速模式费率](/docs/zh-CN/fast-mode#understand-the-cost-tradeoff)计费,这就是为什么在会话开始时启用它的成本低于在长会话深处启用它的成本。如果您当前的模型不支持快速模式,启用快速模式也会[切换您的模型](#switching-models),该切换本身会从运行回合中的下一个请求启动新缓存。
95 119
96成本每个对话应用一次。在第一个快速模式回合之后,Claude Code 继续发送请求头,仅改变请求的速度设置,这不是缓存键的一部分。关闭快速模式、[在速率限制后自动回退到标准速度](/docs/zh-CN/fast-mode#handle-rate-limits)以及稍后重新启用它都保持缓存。`/clear` 和 `/compact` 重置这个,因为它们无论如何都在这些点重建缓存。120成本每个对话应用一次。在第一个快速模式回合之后,Claude Code 继续发送头,仅改变请求的速度设置,这不是缓存键的一部分。关闭快速模式、[在速率限制后自动回退到标准速度](/docs/zh-CN/fast-mode#handle-rate-limits)以及稍后重新启用它都保持缓存。如果您在会话中期[用完使用额度](/docs/zh-CN/fast-mode#handle-rate-limits),Claude Code 以相同方式在标准速度重试每个被拒绝的快速模式请求,所以此回退也保持缓存。`/clear` 和 `/compact` 重置这个,因为它们无论如何都在这些点重建缓存。
97 121
98<h3 id="connecting-or-disconnecting-an-mcp-server">122<h3 id="connecting-or-disconnecting-an-mcp-server">
99 连接或断开 MCP 服务器123 连接或断开 MCP 服务器
102工具定义位于系统提示层中,所以当请求之间的工具定义集合更改时,缓存会失效。切换[顾问工具](/docs/zh-CN/advisor)是一个例外:其定义位于缓存断点之后,所以启用或禁用 `/advisor` 会保持缓存的前缀完整。[MCP 服务器](/docs/zh-CN/mcp)更改是否执行此操作取决于其工具是否由[工具搜索](/docs/zh-CN/mcp#scale-with-mcp-tool-search)延迟或加载到前缀中:126工具定义位于系统提示层中,所以当请求之间的工具定义集合更改时,缓存会失效。切换[顾问工具](/docs/zh-CN/advisor)是一个例外:其定义位于缓存断点之后,所以启用或禁用 `/advisor` 会保持缓存的前缀完整。[MCP 服务器](/docs/zh-CN/mcp)更改是否执行此操作取决于其工具是否由[工具搜索](/docs/zh-CN/mcp#scale-with-mcp-tool-search)延迟或加载到前缀中:
103 127
104* **延迟工具**,在支持的模型上是默认设置:服务器连接、断开连接或更改其工具列表仅附加新内容,不会扰乱已缓存的任何内容。128* **延迟工具**,在支持的模型上是默认设置:服务器连接、断开连接或更改其工具列表仅附加新内容,不会扰乱已缓存的任何内容。
105* **加载到前缀中的工具**:对它们的任何更改都会使缓存失效。这发生在[工具搜索不可用或被禁用](/docs/zh-CN/mcp#configure-tool-search)时,例如在 Google Cloud 的 Agent Platform 上或使用自定义 `ANTHROPIC_BASE_URL` 网关时。它也发生在标记为 [`alwaysLoad`](/docs/zh-CN/mcp#exempt-a-server-from-deferral) 的服务器或工具上,以及由[基于阈值的加载](/docs/zh-CN/mcp#configure-tool-search)保持在前面的定义上。129* **加载到前缀中的工具**:对它们的任何更改都会使缓存失效。这发生在[工具搜索不可用或被禁用](/docs/zh-CN/mcp#configure-tool-search)时,例如在 Google Cloud 的 Agent Platform 上早于 Claude 4.5 代的模型、使用自定义 `ANTHROPIC_BASE_URL` 网关或在 Microsoft Foundry [部署在 Azure 上](https://platform.claude.com/docs/en/build-with-claude/claude-in-microsoft-foundry#hosting-options)一旦 Claude Code 检测到部署拒绝工具搜索时。它也发生在标记为 [`alwaysLoad`](/docs/zh-CN/mcp#exempt-a-server-from-deferral) 的服务器或工具上,以及由[基于阈值的加载](/docs/zh-CN/mcp#configure-tool-search)保持在前面的定义上。
106 130
107当工具加载到前缀中时,失效的最常见原因是服务器在会话中期连接或断开连接,这可能在没有您采取任何操作的情况下发生:stdio 服务器的进程退出、HTTP 会话过期或服务器[在暂时故障后自动重新连接](/docs/zh-CN/mcp#automatic-reconnection)。连接的服务器也可以推送[动态工具更新](/docs/zh-CN/mcp#dynamic-tool-updates)来更改其工具列表。131当工具加载到前缀中时,失效的最常见原因是服务器在会话中期连接或断开连接,这可能在没有您采取任何操作的情况下发生:stdio 服务器的进程退出、HTTP 会话过期或服务器[在暂时故障后自动重新连接](/docs/zh-CN/mcp#automatic-reconnection)。连接的服务器也可以推送[动态工具更新](/docs/zh-CN/mcp#dynamic-tool-updates)来更改其工具列表。
108 132
112 启用或禁用插件136 启用或禁用插件
113</h3>137</h3>
114 138
115[插件](/docs/zh-CN/plugins)捆绑了多个组件类型,更改的成本取决于插件提供的组件。Skills、commands、agents、hooks、LSP 服务器、monitors 和 themes 永远不会使缓存失效:它们添加到请求中的任何内容都附加在现有对话之后,所以下一个请求为新内容付费,但仍然从缓存中读取它之前的所有内容。139当您启用或禁用[插件](/docs/zh-CN/plugins)时,更改的成本取决于插件提供的组件类型。下面的情况涵盖每个组件类型、Claude Code 何时应用更改以及您在同一会话中再次禁用插件时会发生什么。
140
141<h4 id="plugin-components-that-keep-the-cache">
142 保持缓存的插件组件
143</h4>
144
145Claude Code 永远不会为插件的 skills、commands、agents、hooks、monitors 或 themes 使缓存失效。它将其内容附加在现有对话之后,所以下一个请求为该内容付费,但仍然从缓存中读取它之前的所有内容。
146
147<h4 id="plugins-that-provide-mcp-servers">
148 提供 MCP 服务器的插件
149</h4>
116 150
117例外是提供 [MCP 服务器](/docs/zh-CN/plugins-reference#mcp-servers)的插件。启用或禁用一个遵循与[连接或断开 MCP 服务器](#connecting-or-disconnecting-an-mcp-server)相同的规则:当服务器的工具被延迟时缓存保存,当它们加载到前缀中时下一个请求重新读取整个对话。151当您启用或禁用提供 [MCP 服务器](/docs/zh-CN/plugins-reference#mcp-servers)的插件时,Claude Code 遵循与[连接或断开 MCP 服务器](#connecting-or-disconnecting-an-mcp-server)相同的规则:
118 152
119插件更改在您运行 [`/reload-plugins`](/docs/zh-CN/discover-plugins#apply-plugin-changes-without-restarting) 或启动新会话时应用。成本(无论是附加的公告还是完整的重新读取)显示在重新加载后的第一个回合,而不是当您运行 `/plugin install`、`/plugin enable` 或 `/plugin disable` 时。从 v2.1.163 开始,当重新加载会触发完整重新读取时,`/reload-plugins` 会显示警告并不应用重新加载。传递 `--force` 以强制应用。153* 如果 Claude Code 延迟服务器的工具,它会保持缓存。
154* 如果 Claude Code 将它们加载到前缀中,下一个请求重新读取整个对话。
120 155
121禁用您在会话早期启用的插件会恢复之前的请求形状。如果该前缀仍在其[缓存生命周期](#cache-lifetime)内,下一个请求读取较旧的缓存条目而不是重建。156<h4 id="code-intelligence-plugins">
157 代码智能插件
158</h4>
159
160当您启用[代码智能插件](/docs/zh-CN/discover-plugins#code-intelligence)时,Claude 获得 [LSP 工具](/docs/zh-CN/tools-reference#lsp-tool-behavior)。
161
162<h4 id="when-plugin-changes-apply">
163 插件更改何时应用
164</h4>
165
166插件更改在您运行 [`/reload-plugins`](/docs/zh-CN/discover-plugins#apply-plugin-changes-without-restarting) 或启动新会话时应用,而不是当您运行 `/plugin enable` 或 `/plugin disable` 时。您支付成本(无论是附加的公告还是完整的重新读取)在更改应用后的第一个回合。Claude Code 也可以自己应用更改:
167
168* 对于具有 `command` 源的插件,Claude Code [可以自己重新加载插件](/docs/zh-CN/plugin-marketplaces#when-claude-code-re-runs-the-command)。
169* 当您[从 `/plugin` 界面安装插件](/docs/zh-CN/discover-plugins#install-plugins)时,Claude Code 可以在安装期间激活它。Claude Code 在安装摘要中告诉您它是否这样做或是否运行 `/reload-plugins`。
170* 当您在 v2.1.246 或更高版本上使用 `/cd` [移动会话](/docs/zh-CN/permissions#move-the-session-to-another-directory)时,Claude Code 将新目录的设置启用的插件应用为移动的一部分,而不需要保持 `/reload-plugins` 的完整重新读取警告。
171* 在交互式会话中,当您在使用 `--plugin-dir` 传递的[插件文件夹](/docs/zh-CN/plugins#test-your-plugins-locally)中添加或移除插件时,更改会立即应用。如果应用它会触发完整重新读取,Claude Code 会保持更改并显示运行 `/reload-plugins` 的通知。需要 Claude Code v2.1.265 或更高版本。
172
173当您运行 `/reload-plugins` 且重新加载会触发完整重新读取时,Claude Code 会显示警告并不应用重新加载。使用 `--force` 重新运行以强制应用重新加载。
174
175`/reload-plugins` 也在没有交互式终端的会话中运行,例如桌面应用、Agent SDK 和[非交互式模式](/docs/zh-CN/headless)与 `-p`,当您直接将其输入到会话中时。需要 Claude Code v2.1.260 或更高版本。
176
177在这些会话中,重新加载应用除了插件 MCP 服务器更改之外的所有内容,这些[在您的下一个会话中生效](/docs/zh-CN/discover-plugins#apply-plugin-changes-without-restarting),因此永远不会在会话中期造成完整重新读取的成本。
178
179<h4 id="plugins-you-enable-and-then-disable-in-one-session">
180 您在一个会话中启用然后禁用的插件
181</h4>
182
183当您禁用您在会话早期启用的插件时,Claude Code 恢复之前的请求形状。如果该前缀仍在其[缓存生命周期](#cache-lifetime)内,下一个请求读取较旧的缓存条目而不是重建。
122 184
123<h3 id="denying-an-entire-tool">185<h3 id="denying-an-entire-tool">
124 拒绝整个工具186 拒绝整个工具
125</h3>187</h3>
126 188
127添加像 `Bash` 或 `WebFetch` 这样的裸工具名称作为[拒绝规则](/docs/zh-CN/permissions#manage-permissions)会将该工具从 Claude 的上下文中完全移除。内置工具定义加载到系统提示层中,所以在会话中期添加或移除这些规则之一会使缓存失效。无论您通过 `/permissions` 添加它还是通过[直接编辑设置文件](/docs/zh-CN/settings#when-edits-take-effect),更改都会在下一个回合生效。189添加像 `Bash` 或 `WebFetch` 这样的裸工具名称作为[拒绝规则](/docs/zh-CN/permissions#manage-permissions)会将该工具从 Claude 的上下文中完全移除。Claude Code 将内置工具定义加载到系统提示层中,所以在会话中期添加或移除这些规则之一会使缓存失效。Claude Code 在下一个请求上应用更改,无论您通过 `/permissions` 添加它还是通过[直接编辑设置文件](/docs/zh-CN/settings#when-edits-take-effect)。这包括您在回合中期通过 `/permissions` 添加的规则。
128 190
129只有与工具名称位置匹配的拒绝规则才有这种效果:裸工具名称、等效的 `Bash(*)` 形式或[工具名称通配符](/docs/zh-CN/permissions#tool-name-wildcards)如 `"*"`。匹配仅 MCP 工具的通配符(如 `"mcp__*"`)以相同方式移除这些工具,但当匹配的工具被[延迟](#connecting-or-disconnecting-an-mcp-server)时保持缓存完整,这是默认设置,因为延迟定义从未在缓存的前缀中。作用域拒绝规则如 `Bash(rm *)`,以及所有允许和询问规则,都不会改变 Claude 看到的工具。Claude Code 在 Claude 尝试调用时检查它们,保持前缀完整。191只有与工具名称位置匹配的拒绝规则才有这种效果:裸工具名称、等效的 `Bash(*)` 形式或[工具名称通配符](/docs/zh-CN/permissions#tool-name-wildcards)如 `"*"`。匹配仅 MCP 工具的通配符(如 `"mcp__*"`)以相同方式移除这些工具,但当匹配的工具被[延迟](#connecting-or-disconnecting-an-mcp-server)时保持缓存完整,这是默认设置,因为延迟定义从未在缓存的前缀中。作用域拒绝规则如 `Bash(rm *)`,以及所有允许和询问规则,都不会改变 Claude 看到的工具。Claude Code 在 Claude 尝试调用时检查它们,保持前缀完整。
130 192
193<h3 id="changing-output-style">
194 更改输出样式
195</h3>
196
197当您在会话中期使用 `/config` 或 `outputStyle` 设置切换[输出样式](/docs/zh-CN/output-styles)时,Claude 从您的下一条消息开始使用新样式。在[保持记录的系统提示](/docs/zh-CN/cli-reference#system-prompt-flags-in-resumed-conversations)的对话中,如使用 claude.ai 或 Console 账户登录的会话默认情况下所做的那样,Claude Code 将新样式的指令作为对话中的消息传递。该请求仍然从缓存中读取系统提示和较早的对话。
198
199在不[获取功能标志](/docs/zh-CN/env-vars#features-that-need-feature-flag-fetching)的会话中,例如在 Amazon Bedrock、Google Cloud 的 Agent Platform 或 Microsoft Foundry 上,样式的指令是系统提示的一部分,所以切换后的请求读取整个对话历史记录而没有缓存命中。在那里,在会话中的第一条消息之前或在 `/clear` 或 `/compact` 之后立即切换样式,当对话历史记录很少或没有时。
200
201在 v2.1.251 之前,会话中期的样式切换保持缓存,但在您运行 `/clear` 或启动新会话之前不应用。
202
131<h3 id="compacting-the-conversation">203<h3 id="compacting-the-conversation">
132 压缩对话204 压缩对话
133</h3>205</h3>
134 206
135[压缩](/docs/zh-CN/context-window#what-survives-compaction)用摘要替换您的消息历史记录。根据设计,这会使对话层失效,因为下一个请求有一个新的、更短的历史记录,与旧的历史记录不共享前缀。Claude Code 重用系统提示层并从磁盘重新加载项目上下文,只有在 CLAUDE.md 和内存自会话开始以来未更改时才缓存命中。207[压缩](/docs/zh-CN/context-window#what-survives-compaction)用摘要替换您的消息历史记录。根据设计,这会使对话层失效,因为下一个请求有一个新的、更短的历史记录,与旧的历史记录不共享前缀。Claude Code 重用系统提示层并从磁盘重新加载项目上下文,只有在 CLAUDE.md 和内存自会话开始以来未更改时才缓存命中。
136 208
137为了生成摘要,Claude Code 发送一个一次性请求,其系统提示、工具和历史记录与您的对话相同,加上作为最终用户消息附加的摘要指令。因为它共享您的前缀,该请求读取现有缓存而不是重新处理完整历史记录。压缩的大部分时间用于生成摘要,而不是缓存未命中。随后的回合仅为更短的摘要重建对话缓存,所以压缩后的回合不是缓慢的部分。209为了生成摘要,Claude Code 发送一个一次性请求,其系统提示、工具和历史记录与您的对话相同,加上作为最终用户消息附加的摘要指令。当缓存温暖时,该请求从缓存中读取您的前缀,所以会话中期的 `/compact` 成本是上下文大小建议的一小部分,并花费大部分时间生成摘要。
210
211在超过[缓存生命周期](#cache-lifetime)的中断后,没有缓存可读,所以摘要请求重新处理完整历史记录作为未缓存的输入。这就是为什么当您[恢复旧会话](/docs/zh-CN/sessions#resume-from-a-summary)时 `/compact` 成本最高。在温暖和冷的情况下,压缩后的回合仅为更短的摘要重建对话缓存,所以该回合不是缓慢的部分。
138 212
139<Tip>213<Tip>
140 当您丢弃的上下文是您不再需要的内容时,压缩对您有利。要选择其开销何时发生,请在工作中的自然中断处(例如任务之间)运行 `/compact`,而不是等待自动压缩在任务中期触发。如果您走上了想要完全放弃的路径,请改为[`/rewind`](#rewinding-the-conversation)到较早的回合。重绕会截断回到已经缓存的前缀,而不是像压缩那样构建新的前缀。214 当您丢弃的上下文是您不再需要的内容时,压缩对您有利。要选择其开销何时发生,请在工作中的自然中断处(例如任务之间)运行 `/compact`,而不是等待自动压缩在任务中期触发。如果您走上了想要完全放弃的路径,请改为[`/rewind`](#rewinding-the-conversation)到较早的回合。重绕会截断回到已经缓存的前缀,而不是像压缩那样构建新的前缀。
141</Tip>215</Tip>
142 216
217<h3 id="accumulating-many-images">
218 积累许多图像
219</h3>
220
221API 限制每个请求可以携带多少图像和 PDF。有关当前数字,请参阅 API 文档中的[请求限制](https://platform.claude.com/docs/en/build-with-claude/vision#request-limits)。Claude Code 也限制请求中图像和 PDF 的总大小,所以大型屏幕截图以比小型屏幕截图更少的图像达到限制。
222
223当下一个请求会超过任一限制时,Claude Code 从它发送的内容中移除一批最旧的图像和 PDF,这为更多内容腾出空间,然后才需要再次移除任何内容。Claude 不再能看到移除的图像。如果 Claude 再次需要其中一个,请再次共享它。
224
225移除图像会改变保存它们的消息,所以下一个请求从这些消息中最早的消息开始重新处理对话。因为 Claude Code 一次移除一批,您会看到每批一个较慢的回合,而不是每个新屏幕截图一个。
226
143<h3 id="upgrading-claude-code">227<h3 id="upgrading-claude-code">
144 升级 Claude Code228 升级 Claude Code
145</h3>229</h3>
154 保持缓存的操作238 保持缓存的操作
155</h2>239</h2>
156 240
157这些操作要么附加到对话的末尾,要么根本不接触请求。其中一些,例如编辑 CLAUDE.md 或更改输出样式,也是为什么设置更改等待重启才能应用的原因。241这些操作要么附加到对话的末尾,要么根本不接触请求。其中一些,例如编辑 CLAUDE.md,保持缓存的原因与更改在执行会话中不生效直到 `/clear`、`/compact` 或重启的原因相同。
158 242
159* [编辑存储库中的文件](#editing-files-in-your-repository)243* [编辑存储库中的文件](#editing-files-in-your-repository)
160* [在会话中期编辑 CLAUDE.md](#editing-claude-md-mid-session)244* [在会话中期编辑 CLAUDE.md](#editing-claude-md-mid-session)
161* [更改输出样式](#changing-output-style)
162* [更改权限模式](#changing-permission-mode)245* [更改权限模式](#changing-permission-mode)
163* [调用技能和命令](#invoking-skills-and-commands)246* [调用技能和命令](#invoking-skills-and-commands)
164* [运行 `/recap`](#running-%2Frecap)247* [运行 `/recap`](#running-%2Frecap)
179 262
180[子目录中的嵌套 CLAUDE.md 文件](/docs/zh-CN/memory)和[带有 `paths:` frontmatter 的规则](/docs/zh-CN/memory#path-specific-rules)稍后加载,当 Claude 首次读取匹配文件时。在加载前编辑一个确实会生效。加载后,内容是对话历史记录的一部分,所以中期编辑不会追溯更改它。263[子目录中的嵌套 CLAUDE.md 文件](/docs/zh-CN/memory)和[带有 `paths:` frontmatter 的规则](/docs/zh-CN/memory#path-specific-rules)稍后加载,当 Claude 首次读取匹配文件时。在加载前编辑一个确实会生效。加载后,内容是对话历史记录的一部分,所以中期编辑不会追溯更改它。
181 264
182<h3 id="changing-output-style">
183 更改输出样式
184</h3>
185
186[输出样式](/docs/zh-CN/output-styles)是系统提示的一部分,Claude Code 在会话开始时读取一次。通过 `/config` 或 `outputStyle` 设置在会话中期更改它不会使缓存失效,但更改也不适用。Claude 继续使用在会话开始时加载的样式。新样式在下一个 `/clear` 或重启时加载。
187
188<h3 id="changing-permission-mode">265<h3 id="changing-permission-mode">
189 更改权限模式266 更改权限模式
190</h3>267</h3>
191 268
192在[权限模式](/docs/zh-CN/permission-modes)之间切换,例如从默认到接受编辑,不会改变系统提示或工具定义,所以模式更改是缓存安全的。例外是带有 [`opusplan`](/docs/zh-CN/model-config#opusplan-model-setting) 模型设置的 Plan Mode,它在进入或离开 Plan Mode 时在 Opus 和 Sonnet 之间切换模型。这使模式切换成为[模型切换](#switching-models)。269在[权限模式](/docs/zh-CN/permission-modes)之间切换,例如从手动到接受编辑,不会改变系统提示或工具定义,所以模式更改是缓存安全的。例外是带有 [`opusplan`](/docs/zh-CN/model-config#opusplan-model-setting) 模型设置的 Plan Mode,它在进入或离开 Plan Mode 时在 Opus 和 Sonnet 之间切换模型。这使模式切换成为[模型切换](#switching-models)。
193 270
194<h3 id="invoking-skills-and-commands">271<h3 id="invoking-skills-and-commands">
195 调用技能和命令272 调用技能和命令
196</h3>273</h3>
197 274
198[技能](/docs/zh-CN/skills)和[命令](/docs/zh-CN/commands)在调用点将其指令注入为用户消息。对话中较早的任何内容都不会改变。275[技能](/docs/zh-CN/skills)和[命令](/docs/zh-CN/commands)在调用点将其指令注入为用户消息。对话中较早的任何内容都不会改变。其 frontmatter 命名 `model` 的技能或命令可以是该回合的[模型切换](#switching-models)。
199 276
200<h3 id="running-/recap">277<h3 id="running-/recap">
201 运行 `/recap`278 运行 `/recap`
217 294
218缓存的前缀在不活动期间后过期。每个命中缓存的请求都会重置计时器,所以只要您继续工作,缓存就保持温暖。在足够长的间隙之后,下一个请求重新计算完整输入并重新建立缓存,这就是为什么步开后的第一个回合可能明显更慢。295缓存的前缀在不活动期间后过期。每个命中缓存的请求都会重置计时器,所以只要您继续工作,缓存就保持温暖。在足够长的间隙之后,下一个请求重新计算完整输入并重新建立缓存,这就是为什么步开后的第一个回合可能明显更慢。
219 296
220生存时间 (TTL) 控制缓存存活的间隙有多长。API 提供两个:五分钟 TTL 和[一小时 TTL](https://platform.claude.com/docs/en/build-with-claude/prompt-caching#1-hour-cache-duration),它通过更长的中断保持缓存温暖,但[以更高的速率计费缓存写入](https://platform.claude.com/docs/en/build-with-claude/prompt-caching#pricing)。Claude Code 根据您如何进行身份验证为您选择 TTL,您可以使用环境变量覆盖它。297在 Pro 或 Max 计划上,当您在长时间休息后恢复大型会话时,Claude Code [提供从摘要恢复](/docs/zh-CN/sessions#resume-from-a-summary),以便后续请求不会携带完整历史记录。
221 298
222<h3 id="on-a-claude-subscription">299生存时间 (TTL) 控制缓存存活的间隙有多长。API 提供两个:五分钟 TTL 和[一小时 TTL](https://platform.claude.com/docs/en/build-with-claude/prompt-caching#1-hour-cache-duration),它通过更长的中断保持缓存温暖,但[以更高的速率计费缓存写入](https://platform.claude.com/docs/en/build-with-claude/prompt-caching#pricing)。较长的 TTL 在您让会话空闲并返回到它时很有帮助,因为您跳过了过期前缀成本的重新处理。对于从不空闲超过五分钟的短工作突发,它成本更高,其中更高的写入速率适用,较长的缓存生命周期未被使用。
223 在 Claude 订阅上300
301<h3 id="which-ttl-each-request-gets">
302 每个请求获得哪个 TTL
224</h3>303</h3>
225 304
226在 Claude 订阅上,Claude Code 自动请求一小时 TTL。使用包含在您的计划中,而不是按令牌计费,所以更长的 TTL 不会额外花费您任何费用,只会影响缓存保持温暖的时间。305Claude Code 按请求决定 TTL,每个请求都属于以下两个固定桶之一:
227 306
228如果您已超过计划的使用限制,Claude Code 正在使用[使用额度](https://support.claude.com/en/articles/12429409-extra-usage-for-paid-claude-plans),您需要为该使用付费,所以 Claude Code 自动将 TTL 降低到五分钟。307* **主对话**:您的交互式回合、非交互式 `-p` 运行和 Agent SDK 回合,加上 Claude Code 与它们内联运行的助手
308* **其他所有内容**:Claude Code 在该对话之外进行的请求,例如[子代理](/docs/zh-CN/sub-agents)、[工作流](/docs/zh-CN/workflows)、进程内[队友](/docs/zh-CN/agent-teams)、分支、压缩和会话标题
229 309
230<h3 id="on-an-api-key-or-third-party-provider">310除非您自己选择 TTL,否则 Claude Code 仅在您计划包含的使用范围内的 Claude 订阅上请求一小时 TTL。在那里,它为主对话请求一小时,加上 Anthropic 在服务器端控制的一小组助手请求。此表给出了两种计费方式下每个桶的默认 TTL。
231 在 API 密钥或第三方提供商上
232</h3>
233 311
234在 API 密钥、Amazon Bedrock、Google Cloud 的 Agent Platform、Microsoft Foundry 或 Claude Platform on AWS 上,您支付按令牌费率,所以 TTL 默认保持在更便宜的五分钟。要选择加入[一小时 TTL](https://platform.claude.com/docs/zh-CN/build-with-claude/prompt-caching#1-hour-cache-duration),设置 `ENABLE_PROMPT_CACHING_1H=1`。312| 请求桶 | Claude 订阅,在计划使用范围内 | 使用额度、API 密钥或云提供商 |
313| ------ | --------------------- | ---------------- |
314| 主对话 | 一小时 | 五分钟 |
315| 其他所有内容 | 五分钟,除了服务器控制的助手请求获得一小时 | 五分钟 |
235 316
236在 Amazon Bedrock 上,prompt caching 支持、最小可缓存前缀长度和一小时 TTL 可用性都因模型而异。如果缓存令牌计数保持为零,请检查 Amazon Bedrock 文档中的[支持的模型、区域和限制](https://docs.aws.amazon.com/bedrock/latest/userguide/prompt-caching.html#prompt-caching-models)。317一旦您超过计划的使用限制,Claude Code 使用[使用额度](https://support.claude.com/en/articles/12429409-extra-usage-for-paid-claude-plans),您需要为该使用付费,所以 Claude Code 将主对话降低到更便宜的五分钟 TTL。要在那里保持一小时 TTL,[自己选择 TTL](#choose-the-ttl-yourself)。
237 318
238<h3 id="override-the-ttl">319<h3 id="choose-the-ttl-yourself">
239 覆盖 TTL320 自己选择 TTL
240</h3>321</h3>
241 322
242设置 `FORCE_PROMPT_CACHING_5M=1` 以强制五分钟 TTL,无论身份验证如何。这在您调试缓存行为、比较两个 TTL 或覆盖在[托管设置](/docs/zh-CN/settings#settings-files)中设置的 `ENABLE_PROMPT_CACHING_1H` 时很有用。323您可以为任一桶设置 TTL。每个控制采用 `5m` 或 `1h`,Claude Code 忽略任何其他值。
324
325* **主对话**:[`promptCacheTtl`](/docs/zh-CN/settings-reference#promptcachettl) 设置,或 `CLAUDE_CODE_PROMPT_CACHE_TTL` [环境变量](/docs/zh-CN/env-vars)
326* **其他所有内容**:[`subagentPromptCacheTtl`](/docs/zh-CN/settings-reference#subagentpromptcachettl) 设置,或 `CLAUDE_CODE_SUBAGENT_PROMPT_CACHE_TTL` 环境变量
327
328两个设置和两个环境变量都需要 Claude Code v2.1.242 或更高版本。如果您使用 API 密钥登录或使用云提供商,将 `promptCacheTtl` 设置为 `1h` 以为主对话提供一小时缓存。其外的请求保持五分钟默认值,直到您也为该桶选择 TTL。
329
330当多个控制适用时,Claude Code 按此顺序采用第一个匹配:
331
3321. `FORCE_PROMPT_CACHING_5M=1`,为两个桶强制五分钟
3332. 桶的环境变量
3343. 桶的设置
3354. 对于子代理的请求,子代理的 [`experimental` frontmatter 字段](/docs/zh-CN/sub-agents#supported-frontmatter-fields)中的 `cacheTtl` 值,需要 Claude Code v2.1.248 或更高版本。当您的 Claude 订阅使用使用额度时,Claude Code 忽略那里的 `1h`
3365. `ENABLE_PROMPT_CACHING_1H=1`,为两个桶请求一小时
3376. [请求桶的默认值](#which-ttl-each-request-gets)
338
339当您调试缓存行为、比较两个 TTL 或覆盖在[托管设置](/docs/zh-CN/managed-settings)中设置的较长 TTL 时,设置 `FORCE_PROMPT_CACHING_5M=1`。
340
341要确认您的主对话的缓存写入使用了哪个 TTL,运行 `claude -p "hello" --output-format json` 并读取结果中的 `usage.cache_creation`。Claude Code 在 `ephemeral_1h_input_tokens` 下报告一小时缓存写入,在 `ephemeral_5m_input_tokens` 下报告五分钟缓存写入。
342
343通过您使用 `ANTHROPIC_BASE_URL` 设置的 LLM 网关,部分一小时请求在 `anthropic-beta` 标头中传输,所以配置网关以[原样转发该标头](/docs/zh-CN/llm-gateway-protocol#request-headers)。一小时 TTL 在[Claude 应用网关](/docs/zh-CN/claude-apps-gateway#availability-and-limitations)上不可用。在 Amazon Bedrock 上,prompt caching 支持、最小可缓存前缀长度和一小时 TTL 可用性都因模型而异。如果缓存令牌计数保持为零,请检查 Amazon Bedrock 文档中的[支持的模型、区域和限制](https://docs.aws.amazon.com/bedrock/latest/userguide/prompt-caching.html#prompt-caching-models)。
243 344
244<h2 id="cache-scope">345<h2 id="cache-scope">
245 缓存范围346 缓存范围
249 350
250您在同一目录中并行运行的会话构建匹配的前缀并读取彼此的缓存。顺序会话仅当启动时的 git 状态快照匹配时才共享前缀,因为系统提示也捕获分支和最近的提交。351您在同一目录中并行运行的会话构建匹配的前缀并读取彼此的缓存。顺序会话仅当启动时的 git 状态快照匹配时才共享前缀,因为系统提示也捕获分支和最近的提交。
251 352
252底层 API 缓存更广泛。缓存在组织之间隔离,在某些提供商上,[在组织内的工作区之间隔离](https://platform.claude.com/docs/zh-CN/build-with-claude/prompt-caching#cache-storage-and-sharing)。在这些边界内,任何两个具有相同模型和前缀的请求读取相同的缓存。对于运行自动化流程队列的 Agent SDK 调用者,请参阅[改进跨用户和机器的 prompt caching](/docs/zh-CN/agent-sdk/modifying-system-prompts#improve-prompt-caching-across-users-and-machines)以抑制系统提示的按机器部分并跨机器共享缓存。353底层 API 缓存更广泛。缓存在组织之间隔离,在某些提供商上,[在组织内的工作区之间隔离](https://platform.claude.com/docs/en/build-with-claude/prompt-caching#cache-storage-and-sharing)。在这些边界内,任何两个具有相同模型和前缀的请求读取相同的缓存。对于运行自动化流程队列的 Agent SDK 调用者,请参阅[改进跨用户和机器的 prompt caching](/docs/zh-CN/agent-sdk/modifying-system-prompts#improve-prompt-caching-across-users-and-machines)以抑制系统提示的按机器部分并跨机器共享缓存。
253 354
254<h2 id="check-cache-performance">355<h2 id="check-cache-performance">
255 检查缓存性能356 检查缓存性能
264 365
265高读取与创建比率意味着缓存工作良好。如果创建在回合之间保持高位,您的前缀中有什么在改变。[使缓存失效的操作](#actions-that-invalidate-the-cache)部分列出了常见原因。366高读取与创建比率意味着缓存工作良好。如果创建在回合之间保持高位,您的前缀中有什么在改变。[使缓存失效的操作](#actions-that-invalidate-the-cache)部分列出了常见原因。
266 367
368为了获得每个会话的摘要,运行 `/usage`。在主对话的第一个响应之后,Claude Code 会在会话块中添加一个[`Prompt cache (main)` 行](/docs/zh-CN/costs#prompt-cache-statistics),显示会话的命中率、未命中计数以及缓存现在是否处于热状态。状态行脚本可以从[`prompt_cache` 对象](/docs/zh-CN/statusline#prompt-cache-fields)读取相同的数字。两者都需要 Claude Code v2.1.251 或更高版本。
369
370当 Claude Code 能够识别时,`Prompt cache (main)` 行还会命名最后一次未命中的可能原因,例如 `likely cause: tool definitions changed`。可能原因文本需要 Claude Code v2.1.260 或更高版本。
371
267为了在整个组织中获得可见性,OpenTelemetry 导出器报告每个用户和会话的缓存读取和创建令牌。有关指标和事件属性参考,请参阅[监控使用](/docs/zh-CN/monitoring-usage)。372为了在整个组织中获得可见性,OpenTelemetry 导出器报告每个用户和会话的缓存读取和创建令牌。有关指标和事件属性参考,请参阅[监控使用](/docs/zh-CN/monitoring-usage)。
268 373
269<h2 id="subagents-and-the-cache">374<h2 id="subagents-and-the-cache">
270 子代理和缓存375 子代理和缓存
271</h2>376</h2>
272 377
273[子代理](/docs/zh-CN/sub-agents)启动自己的对话,具有自己的系统提示和工具集,与父代的分开。它构建自己的缓存,在第一次调用时没有缓存命中,并在自己的回合中预热。子代理使用五分钟 TTL,即使在订阅上,因为自动一小时 TTL 适用于主对话。378[子代理](/docs/zh-CN/sub-agents)启动自己的对话,具有自己的系统提示和工具集,与父代的分开。它的第一个请求不读取父代的缓存,因为两个前缀不同,并在自己的回合中预热自己的缓存。子代理不在主对话[TTL 桶](#which-ttl-each-request-gets)之外,所以即使在订阅上也能获得五分钟,直到你[选择更长的时间](#choose-the-ttl-yourself)。
274 379
275父代的缓存不受影响。从父代的一侧,子代理的调用和结果附加到对话,保留父代的前缀完整。380父代的缓存不受影响。从父代的一侧,子代理的调用和结果附加到对话,保留父代的前缀完整。
276 381
277[分叉](/docs/zh-CN/sub-agents#fork-the-current-conversation)相比之下,完全继承父代的系统提示、工具和对话历史记录,所以其第一个请求读取父代的缓存。[压缩对话](#compacting-the-conversation)中描述的压缩摘要调用使用相同的前缀共享方法。382[分叉](/docs/zh-CN/sub-agents#fork-the-current-conversation)相比之下,完全继承父代的系统提示、工具和对话历史记录,所以其第一个请求读取父代的缓存。
383
384其他请求也可以读取较早请求缓存的前缀:
385
386* **会话副本**:你[使用 `/fork` 复制的会话](/docs/zh-CN/agent-view#copy-the-session-with-%2Ffork)在复制的对话末尾作为消息接收其隔离指令,所以原始对话构建的缓存保持完整。
387* **压缩**:[压缩对话](#compacting-the-conversation)中描述的摘要调用使用相同的前缀共享方法。
388* **恢复的子代理**:当 Claude [恢复子代理](/docs/zh-CN/sub-agents#resume-subagents)时,恢复运行的第一个请求可以读取原始运行预热的缓存。
389* **工作流扇出**:在[工作流扇出](/docs/zh-CN/workflows#prompt-caching-in-a-fan-out)中,相同前缀的代理,Claude Code 默认将除第一个外的所有代理保留最多 5 秒,所以它们的第一个请求可以读取第一个代理缓存的前缀。
278 390
279<h2 id="disable-prompt-caching">391<h2 id="disable-prompt-caching">
280 禁用 prompt caching392 禁用 prompt caching
290| `DISABLE_PROMPT_CACHING_OPUS` | 仅对 Opus 禁用 |402| `DISABLE_PROMPT_CACHING_OPUS` | 仅对 Opus 禁用 |
291| `DISABLE_PROMPT_CACHING_FABLE` | 仅对 Fable 禁用 |403| `DISABLE_PROMPT_CACHING_FABLE` | 仅对 Fable 禁用 |
292 404
293要在整个组织中设置缓存策略,请将这些或[TTL 变量](#cache-lifetime)中的任何一个放在[托管设置](/docs/zh-CN/settings#settings-files)的 `env` 块中。对于正常使用,保持缓存启用。405要在整个组织中设置缓存策略,请将这些或[TTL 变量](#cache-lifetime)中的任何一个放在[托管设置](/docs/zh-CN/managed-settings)的 `env` 块中。对于正常使用,保持缓存启用。
294 406
295<h2 id="related-resources">407<h2 id="related-resources">
296 相关资源408 相关资源