20 20
21<img src="https://mintcdn.com/claude-code/VbDJw--l6T9a9Wvm/images/prompt-caching-prefix.svg?fit=max&auto=format&n=VbDJw--l6T9a9Wvm&q=85&s=f2e8f0b8298a50305fe428ca3f1d1594" className="dark:hidden" alt="四个回合显示为增长的水平条。每个回合的请求包含前一个回合的所有内容加上最后附加的最新交换。在第二和第三个回合中,未更改的前缀从缓存中读取,只处理新的交换。在第四个回合中,系统提示更改了,所以前缀不再匹配,整个请求被重新处理并写入。" width="720" height="454" data-path="images/prompt-caching-prefix.svg" />21<img src="https://mintcdn.com/claude-code/VbDJw--l6T9a9Wvm/images/prompt-caching-prefix.svg?fit=max&auto=format&n=VbDJw--l6T9a9Wvm&q=85&s=f2e8f0b8298a50305fe428ca3f1d1594" className="dark:hidden" alt="四个回合显示为增长的水平条。每个回合的请求包含前一个回合的所有内容加上最后附加的最新交换。在第二和第三个回合中,未更改的前缀从缓存中读取,只处理新的交换。在第四个回合中,系统提示更改了,所以前缀不再匹配,整个请求被重新处理并写入。" width="720" height="454" data-path="images/prompt-caching-prefix.svg" />
22 22
23<img src="https://mintcdn.com/claude-code/VbDJw--l6T9a9Wvm/images/prompt-caching-prefix-dark.svg?fit=max&auto=format&n=VbDJw--l6T9a9Wvm&q=85&s=7434a04e08187edd26ec6c3dd332f624" className="hidden dark:block" alt="四个回合显示为增长的水平条。每个回合的请求包含前一个回合的所有内容加上最后附加的最新交换。在第二和第三个回合中,未更改的前缀从缓存中读取,只处理新的交换。在第四个回合中,系统提示更改了,所以前缀不再匹配,整个请求被重新处理并写入。" width="720" height="454" data-path="images/prompt-caching-prefix-dark.svg" />23<img src="https://mintcdn.com/claude-code/_xqph1dUOslCOwsj/images/prompt-caching-prefix-dark.svg?fit=max&auto=format&n=_xqph1dUOslCOwsj&q=85&s=297dc1c639f0915cae858d0c4b6f3be5" className="hidden dark:block" alt="四个回合显示为增长的水平条。每个回合的请求包含前一个回合的所有内容加上最后附加的最新交换。在第二和第三个回合中,未更改的前缀从缓存中读取,只处理新的交换。在第四个回合中,系统提示更改了,所以前缀不再匹配,整个请求被重新处理并写入。" width="720" height="454" data-path="images/prompt-caching-prefix-dark.svg" />
24 24
25为了充分利用前缀匹配,Claude Code 组织每个请求,使回合之间很少更改的内容首先出现:25为了充分利用前缀匹配,Claude Code 组织每个请求,使回合之间很少更改的内容首先出现:
26 26
32 32
33对对话层的更改会保留系统提示和项目上下文缓存。对系统提示的更改会使所有内容失效,因为所有后续内容现在位于不同的前缀后面。第三列给出常见触发器而不是详尽列表,下面的部分涵盖完整集合,包括在会话开始时固定的输出样式等内容。33对对话层的更改会保留系统提示和项目上下文缓存。对系统提示的更改会使所有内容失效,因为所有后续内容现在位于不同的前缀后面。第三列给出常见触发器而不是详尽列表,下面的部分涵盖完整集合,包括在会话开始时固定的输出样式等内容。
34 34
35前缀匹配规则解释了本页上的大多数行为。例如,[Plan Mode](/zh-CN/permission-modes#analyze-before-you-edit-with-plan-mode) 和[技能加载](/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
49 49
50缓存发生在服务器端,在为您的模型提供服务的任何基础设施中。它的位置取决于您如何进行身份验证:50缓存发生在服务器端,在为您的模型提供服务的任何基础设施中。它的位置取决于您如何进行身份验证:
51 51
52* **API 密钥、Claude 订阅或 [Claude Platform on AWS](/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**:请求路由到 Anthropic 的基础设施
55* **自定义 `ANTHROPIC_BASE_URL` 或 [LLM gateway](/zh-CN/llm-gateway)**:缓存位于您的请求转发到的任何地方,缓存是否工作取决于网关55* **自定义 `ANTHROPIC_BASE_URL` 或 [LLM gateway](/docs/zh-CN/llm-gateway)**:缓存位于您的请求转发到的任何地方,缓存是否工作取决于网关
56 56
57有关每个提供商存储和处理的内容,请参阅[数据使用](/zh-CN/data-usage)。无论缓存位于何处,条目在不活动期间后过期,[缓存生命周期](#cache-lifetime)下面涵盖 TTL 以及如何延长它。57有关每个提供商存储和处理的内容,请参阅[数据使用](/docs/zh-CN/data-usage)。无论缓存位于何处,条目在不活动期间后过期,[缓存生命周期](#cache-lifetime)下面涵盖 TTL 以及如何延长它。
58 58
59<h2 id="actions-that-invalidate-the-cache">59<h2 id="actions-that-invalidate-the-cache">
60 使缓存失效的操作60 使缓存失效的操作
75 切换模型75 切换模型
76</h3>76</h3>
77 77
78每个模型都有自己的缓存。使用 [`/model`](/zh-CN/model-config#setting-your-model) 切换意味着下一个请求读取整个对话历史记录而没有缓存命中,即使内容相同。78每个模型都有自己的缓存。使用 [`/model`](/docs/zh-CN/model-config#setting-your-model) 切换意味着下一个请求读取整个对话历史记录而没有缓存命中,即使内容相同。
79 79
80[`opusplan` 模型设置](/zh-CN/model-config#opusplan-model-setting)在 Plan Mode 期间解析为 Opus,在执行期间解析为 Sonnet,所以每个 Plan Mode 切换都是模型切换并启动新缓存。80[`opusplan` 模型设置](/docs/zh-CN/model-config#opusplan-model-setting)在 Plan Mode 期间解析为 Opus,在执行期间解析为 Sonnet,所以每个 Plan Mode 切换都是模型切换并启动新缓存。
81 81
82[Fable 5 上的自动模型回退](/zh-CN/model-config#automatic-model-fallback)也是一个模型切换。当安全分类器标记请求时,Claude Code 在默认 Opus 模型上重新运行它,会话继续进行。82[Fable 5 上的自动模型回退](/docs/zh-CN/model-config#automatic-model-fallback)也是一个模型切换。当安全分类器标记请求时,Claude Code 在默认 Opus 模型上重新运行它,会话继续进行。
83 83
84<h3 id="changing-effort-level">84<h3 id="changing-effort-level">
85 更改工作量级别85 更改工作量级别
86</h3>86</h3>
87 87
88缓存由[工作量级别](/zh-CN/model-config#adjust-effort-level)以及模型进行键控,所以使用 `/effort` 切换意味着下一个请求读取整个对话历史记录而没有缓存命中。一旦对话已开始,Claude Code 会在应用会使缓存失效的工作量更改之前显示确认对话框。解析为已生效的相同级别的更改(例如显式设置模型的默认值)会跳过对话框并保持缓存。88缓存由[工作量级别](/docs/zh-CN/model-config#adjust-effort-level)以及模型进行键控,所以使用 `/effort` 切换意味着下一个请求读取整个对话历史记录而没有缓存命中。一旦对话已开始,Claude Code 会在应用会使缓存失效的工作量更改之前显示确认对话框。解析为已生效的相同级别的更改(例如显式设置模型的默认值)会跳过对话框并保持缓存。
89 89
90<h3 id="turning-on-fast-mode">90<h3 id="turning-on-fast-mode">
91 启用快速模式91 启用快速模式
92</h3>92</h3>
93 93
94启用[快速模式](/zh-CN/fast-mode)会添加一个请求头,该请求头是缓存键的一部分,所以下一个请求读取整个对话历史记录而没有缓存命中。这些未缓存的输入令牌按[快速模式费率](/zh-CN/fast-mode#understand-the-cost-tradeoff)计费,这就是为什么在会话开始时启用它的成本低于在长会话深处启用它的成本。从非 Opus 模型启用快速模式也会[切换您的模型](#switching-models),这本身会启动新缓存。94启用[快速模式](/docs/zh-CN/fast-mode)会添加一个请求头,该请求头是缓存键的一部分,所以下一个请求读取整个对话历史记录而没有缓存命中。这些未缓存的输入令牌按[快速模式费率](/docs/zh-CN/fast-mode#understand-the-cost-tradeoff)计费,这就是为什么在会话开始时启用它的成本低于在长会话深处启用它的成本。从非 Opus 模型启用快速模式也会[切换您的模型](#switching-models),这本身会启动新缓存。
95 95
96成本每个对话应用一次。在第一个快速模式回合之后,Claude Code 继续发送请求头,仅改变请求的速度设置,这不是缓存键的一部分。关闭快速模式、[在速率限制后自动回退到标准速度](/zh-CN/fast-mode#handle-rate-limits)以及稍后重新启用它都保持缓存。`/clear` 和 `/compact` 重置这个,因为它们无论如何都在这些点重建缓存。96成本每个对话应用一次。在第一个快速模式回合之后,Claude Code 继续发送请求头,仅改变请求的速度设置,这不是缓存键的一部分。关闭快速模式、[在速率限制后自动回退到标准速度](/docs/zh-CN/fast-mode#handle-rate-limits)以及稍后重新启用它都保持缓存。`/clear` 和 `/compact` 重置这个,因为它们无论如何都在这些点重建缓存。
97 97
98<h3 id="connecting-or-disconnecting-an-mcp-server">98<h3 id="connecting-or-disconnecting-an-mcp-server">
99 连接或断开 MCP 服务器99 连接或断开 MCP 服务器
100</h3>100</h3>
101 101
102工具定义位于系统提示层中,所以当请求之间的工具定义集合更改时,缓存会失效。切换[顾问工具](/zh-CN/advisor)是一个例外:其定义位于缓存断点之后,所以启用或禁用 `/advisor` 会保持缓存的前缀完整。[MCP 服务器](/zh-CN/mcp)更改是否执行此操作取决于其工具是否由[工具搜索](/zh-CN/mcp#scale-with-mcp-tool-search)延迟或加载到前缀中:102工具定义位于系统提示层中,所以当请求之间的工具定义集合更改时,缓存会失效。切换[顾问工具](/docs/zh-CN/advisor)是一个例外:其定义位于缓存断点之后,所以启用或禁用 `/advisor` 会保持缓存的前缀完整。[MCP 服务器](/docs/zh-CN/mcp)更改是否执行此操作取决于其工具是否由[工具搜索](/docs/zh-CN/mcp#scale-with-mcp-tool-search)延迟或加载到前缀中:
103 103
104* **延迟工具**,在支持的模型上是默认设置:服务器连接、断开连接或更改其工具列表仅附加新内容,不会扰乱已缓存的任何内容。104* **延迟工具**,在支持的模型上是默认设置:服务器连接、断开连接或更改其工具列表仅附加新内容,不会扰乱已缓存的任何内容。
105* **加载到前缀中的工具**:对它们的任何更改都会使缓存失效。这发生在[工具搜索不可用或被禁用](/zh-CN/mcp#configure-tool-search)时,例如在 Google Cloud 的 Agent Platform 上或使用自定义 `ANTHROPIC_BASE_URL` 网关时。它也发生在标记为 [`alwaysLoad`](/zh-CN/mcp#exempt-a-server-from-deferral) 的服务器或工具上,以及由[基于阈值的加载](/zh-CN/mcp#configure-tool-search)保持在前面的定义上。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)保持在前面的定义上。
106 106
107当工具加载到前缀中时,失效的最常见原因是服务器在会话中期连接或断开连接,这可能在没有您采取任何操作的情况下发生:stdio 服务器的进程退出、HTTP 会话过期或服务器[在暂时故障后自动重新连接](/zh-CN/mcp#automatic-reconnection)。连接的服务器也可以推送[动态工具更新](/zh-CN/mcp#dynamic-tool-updates)来更改其工具列表。107当工具加载到前缀中时,失效的最常见原因是服务器在会话中期连接或断开连接,这可能在没有您采取任何操作的情况下发生:stdio 服务器的进程退出、HTTP 会话过期或服务器[在暂时故障后自动重新连接](/docs/zh-CN/mcp#automatic-reconnection)。连接的服务器也可以推送[动态工具更新](/docs/zh-CN/mcp#dynamic-tool-updates)来更改其工具列表。
108 108
109编辑您的 MCP 配置本身不会改变缓存。新配置仅在重启后生效,这是服务器连接或断开连接的时间。109编辑您的 MCP 配置本身不会改变缓存。新配置仅在重启后生效,这是服务器连接或断开连接的时间。
110 110
112 启用或禁用插件112 启用或禁用插件
113</h3>113</h3>
114 114
115[插件](/zh-CN/plugins)捆绑了多个组件类型,更改的成本取决于插件提供的组件。Skills、commands、agents、hooks、LSP 服务器、monitors 和 themes 永远不会使缓存失效:它们添加到请求中的任何内容都附加在现有对话之后,所以下一个请求为新内容付费,但仍然从缓存中读取它之前的所有内容。115[插件](/docs/zh-CN/plugins)捆绑了多个组件类型,更改的成本取决于插件提供的组件。Skills、commands、agents、hooks、LSP 服务器、monitors 和 themes 永远不会使缓存失效:它们添加到请求中的任何内容都附加在现有对话之后,所以下一个请求为新内容付费,但仍然从缓存中读取它之前的所有内容。
116 116
117例外是提供 [MCP 服务器](/zh-CN/plugins-reference#mcp-servers)的插件。启用或禁用一个遵循与[连接或断开 MCP 服务器](#connecting-or-disconnecting-an-mcp-server)相同的规则:当服务器的工具被延迟时缓存保存,当它们加载到前缀中时下一个请求重新读取整个对话。117例外是提供 [MCP 服务器](/docs/zh-CN/plugins-reference#mcp-servers)的插件。启用或禁用一个遵循与[连接或断开 MCP 服务器](#connecting-or-disconnecting-an-mcp-server)相同的规则:当服务器的工具被延迟时缓存保存,当它们加载到前缀中时下一个请求重新读取整个对话。
118 118
119插件更改在您运行 [`/reload-plugins`](/zh-CN/discover-plugins#apply-plugin-changes-without-restarting) 或启动新会话时应用。成本(无论是附加的公告还是完整的重新读取)显示在重新加载后的第一个回合,而不是当您运行 `/plugin install`、`/plugin enable` 或 `/plugin disable` 时。{/* min-version: 2.1.163 */}从 v2.1.163 开始,当重新加载会触发完整重新读取时,`/reload-plugins` 会显示警告并不应用重新加载。传递 `--force` 以强制应用。119插件更改在您运行 [`/reload-plugins`](/docs/zh-CN/discover-plugins#apply-plugin-changes-without-restarting) 或启动新会话时应用。成本(无论是附加的公告还是完整的重新读取)显示在重新加载后的第一个回合,而不是当您运行 `/plugin install`、`/plugin enable` 或 `/plugin disable` 时。{/* min-version: 2.1.163 */}从 v2.1.163 开始,当重新加载会触发完整重新读取时,`/reload-plugins` 会显示警告并不应用重新加载。传递 `--force` 以强制应用。
120 120
121禁用您在会话早期启用的插件会恢复之前的请求形状。如果该前缀仍在其[缓存生命周期](#cache-lifetime)内,下一个请求读取较旧的缓存条目而不是重建。121禁用您在会话早期启用的插件会恢复之前的请求形状。如果该前缀仍在其[缓存生命周期](#cache-lifetime)内,下一个请求读取较旧的缓存条目而不是重建。
122 122
124 拒绝整个工具124 拒绝整个工具
125</h3>125</h3>
126 126
127添加像 `Bash` 或 `WebFetch` 这样的裸工具名称作为[拒绝规则](/zh-CN/permissions#manage-permissions)会将该工具从 Claude 的上下文中完全移除。内置工具定义加载到系统提示层中,所以在会话中期添加或移除这些规则之一会使缓存失效。无论您通过 `/permissions` 添加它还是通过[直接编辑设置文件](/zh-CN/settings#when-edits-take-effect),更改都会在下一个回合生效。127添加像 `Bash` 或 `WebFetch` 这样的裸工具名称作为[拒绝规则](/docs/zh-CN/permissions#manage-permissions)会将该工具从 Claude 的上下文中完全移除。内置工具定义加载到系统提示层中,所以在会话中期添加或移除这些规则之一会使缓存失效。无论您通过 `/permissions` 添加它还是通过[直接编辑设置文件](/docs/zh-CN/settings#when-edits-take-effect),更改都会在下一个回合生效。
128 128
129只有与工具名称位置匹配的拒绝规则才有这种效果:裸工具名称、等效的 `Bash(*)` 形式或[工具名称通配符](/zh-CN/permissions#tool-name-wildcards)如 `"*"`。匹配仅 MCP 工具的通配符(如 `"mcp__*"`)以相同方式移除这些工具,但当匹配的工具被[延迟](#connecting-or-disconnecting-an-mcp-server)时保持缓存完整,这是默认设置,因为延迟定义从未在缓存的前缀中。作用域拒绝规则如 `Bash(rm *)`,以及所有允许和询问规则,都不会改变 Claude 看到的工具。Claude Code 在 Claude 尝试调用时检查它们,保持前缀完整。129只有与工具名称位置匹配的拒绝规则才有这种效果:裸工具名称、等效的 `Bash(*)` 形式或[工具名称通配符](/docs/zh-CN/permissions#tool-name-wildcards)如 `"*"`。匹配仅 MCP 工具的通配符(如 `"mcp__*"`)以相同方式移除这些工具,但当匹配的工具被[延迟](#connecting-or-disconnecting-an-mcp-server)时保持缓存完整,这是默认设置,因为延迟定义从未在缓存的前缀中。作用域拒绝规则如 `Bash(rm *)`,以及所有允许和询问规则,都不会改变 Claude 看到的工具。Claude Code 在 Claude 尝试调用时检查它们,保持前缀完整。
130 130
131<h3 id="compacting-the-conversation">131<h3 id="compacting-the-conversation">
132 压缩对话132 压缩对话
133</h3>133</h3>
134 134
135[压缩](/zh-CN/context-window#what-survives-compaction)用摘要替换您的消息历史记录。根据设计,这会使对话层失效,因为下一个请求有一个新的、更短的历史记录,与旧的历史记录不共享前缀。Claude Code 重用系统提示层并从磁盘重新加载项目上下文,只有在 CLAUDE.md 和内存自会话开始以来未更改时才缓存命中。135[压缩](/docs/zh-CN/context-window#what-survives-compaction)用摘要替换您的消息历史记录。根据设计,这会使对话层失效,因为下一个请求有一个新的、更短的历史记录,与旧的历史记录不共享前缀。Claude Code 重用系统提示层并从磁盘重新加载项目上下文,只有在 CLAUDE.md 和内存自会话开始以来未更改时才缓存命中。
136 136
137为了生成摘要,Claude Code 发送一个一次性请求,其系统提示、工具和历史记录与您的对话相同,加上作为最终用户消息附加的摘要指令。因为它共享您的前缀,该请求读取现有缓存而不是重新处理完整历史记录。压缩的大部分时间用于生成摘要,而不是缓存未命中。随后的回合仅为更短的摘要重建对话缓存,所以压缩后的回合不是缓慢的部分。137为了生成摘要,Claude Code 发送一个一次性请求,其系统提示、工具和历史记录与您的对话相同,加上作为最终用户消息附加的摘要指令。因为它共享您的前缀,该请求读取现有缓存而不是重新处理完整历史记录。压缩的大部分时间用于生成摘要,而不是缓存未命中。随后的回合仅为更短的摘要重建对话缓存,所以压缩后的回合不是缓慢的部分。
138 138
144 升级 Claude Code144 升级 Claude Code
145</h3>145</h3>
146 146
147新的 Claude Code 版本通常会更新系统提示或工具定义,所以升级后的第一个请求从顶部重建缓存。[自动更新](/zh-CN/setup#auto-updates)在后台下载新版本,但在下次启动时应用它们,从不在会话中期,所以您会看到这是重启后的一个未缓存的第一个回合,而不是会话期间的惊喜。设置 `DISABLE_AUTOUPDATER=1` 来控制何时应用升级。147新的 Claude Code 版本通常会更新系统提示或工具定义,所以升级后的第一个请求从顶部重建缓存。[自动更新](/docs/zh-CN/setup#auto-updates)在后台下载新版本,但在下次启动时应用它们,从不在会话中期,所以您会看到这是重启后的一个未缓存的第一个回合,而不是会话期间的惊喜。设置 `DISABLE_AUTOUPDATER=1` 来控制何时应用升级。
148 148
149<Note>149<Note>
150 升级后[恢复会话](/zh-CN/sessions#resume-a-session)会重新处理整个对话历史记录而没有缓存命中,因为历史记录现在位于不同的系统提示后面。成本随着恢复的对话有多长而扩展,所以回到长会话的第一个回合可能是您发送的最昂贵的请求。150 升级后[恢复会话](/docs/zh-CN/sessions#resume-a-session)会重新处理整个对话历史记录而没有缓存命中,因为历史记录现在位于不同的系统提示后面。成本随着恢复的对话有多长而扩展,所以回到长会话的第一个回合可能是您发送的最昂贵的请求。
151</Note>151</Note>
152 152
153<h2 id="actions-that-keep-the-cache">153<h2 id="actions-that-keep-the-cache">
177 177
178您的项目根目录和用户级 CLAUDE.md 文件在会话开始时读取一次并保存在内存中。在会话中期编辑它们不会使缓存失效,但编辑也不适用。Claude 继续使用在会话开始时加载的版本。新内容在下一个 `/clear`、`/compact` 或重启时加载。178您的项目根目录和用户级 CLAUDE.md 文件在会话开始时读取一次并保存在内存中。在会话中期编辑它们不会使缓存失效,但编辑也不适用。Claude 继续使用在会话开始时加载的版本。新内容在下一个 `/clear`、`/compact` 或重启时加载。
179 179
180[子目录中的嵌套 CLAUDE.md 文件](/zh-CN/memory)和[带有 `paths:` frontmatter 的规则](/zh-CN/memory#path-specific-rules)稍后加载,当 Claude 首次读取匹配文件时。在加载前编辑一个确实会生效。加载后,内容是对话历史记录的一部分,所以中期编辑不会追溯更改它。180[子目录中的嵌套 CLAUDE.md 文件](/docs/zh-CN/memory)和[带有 `paths:` frontmatter 的规则](/docs/zh-CN/memory#path-specific-rules)稍后加载,当 Claude 首次读取匹配文件时。在加载前编辑一个确实会生效。加载后,内容是对话历史记录的一部分,所以中期编辑不会追溯更改它。
181 181
182<h3 id="changing-output-style">182<h3 id="changing-output-style">
183 更改输出样式183 更改输出样式
184</h3>184</h3>
185 185
186[输出样式](/zh-CN/output-styles)是系统提示的一部分,Claude Code 在会话开始时读取一次。通过 `/config` 或 `outputStyle` 设置在会话中期更改它不会使缓存失效,但更改也不适用。Claude 继续使用在会话开始时加载的样式。新样式在下一个 `/clear` 或重启时加载。186[输出样式](/docs/zh-CN/output-styles)是系统提示的一部分,Claude Code 在会话开始时读取一次。通过 `/config` 或 `outputStyle` 设置在会话中期更改它不会使缓存失效,但更改也不适用。Claude 继续使用在会话开始时加载的样式。新样式在下一个 `/clear` 或重启时加载。
187 187
188<h3 id="changing-permission-mode">188<h3 id="changing-permission-mode">
189 更改权限模式189 更改权限模式
190</h3>190</h3>
191 191
192在[权限模式](/zh-CN/permission-modes)之间切换,例如从默认到接受编辑,不会改变系统提示或工具定义,所以模式更改是缓存安全的。例外是带有 [`opusplan`](/zh-CN/model-config#opusplan-model-setting) 模型设置的 Plan Mode,它在进入或离开 Plan Mode 时在 Opus 和 Sonnet 之间切换模型。这使模式切换成为[模型切换](#switching-models)。192在[权限模式](/docs/zh-CN/permission-modes)之间切换,例如从默认到接受编辑,不会改变系统提示或工具定义,所以模式更改是缓存安全的。例外是带有 [`opusplan`](/docs/zh-CN/model-config#opusplan-model-setting) 模型设置的 Plan Mode,它在进入或离开 Plan Mode 时在 Opus 和 Sonnet 之间切换模型。这使模式切换成为[模型切换](#switching-models)。
193 193
194<h3 id="invoking-skills-and-commands">194<h3 id="invoking-skills-and-commands">
195 调用技能和命令195 调用技能和命令
196</h3>196</h3>
197 197
198[技能](/zh-CN/skills)和[命令](/zh-CN/commands)在调用点将其指令注入为用户消息。对话中较早的任何内容都不会改变。198[技能](/docs/zh-CN/skills)和[命令](/docs/zh-CN/commands)在调用点将其指令注入为用户消息。对话中较早的任何内容都不会改变。
199 199
200<h3 id="running-/recap">200<h3 id="running-/recap">
201 运行 `/recap`201 运行 `/recap`
202</h3>202</h3>
203 203
204[`/recap`](/zh-CN/interactive-mode#session-recap) 生成一个摘要以在您的终端中显示。与 `/compact` 不同,它将摘要附加为命令输出而不是替换您的消息历史记录,所以缓存的前缀保持完整。204[`/recap`](/docs/zh-CN/interactive-mode#session-recap) 生成一个摘要以在您的终端中显示。与 `/compact` 不同,它将摘要附加为命令输出而不是替换您的消息历史记录,所以缓存的前缀保持完整。
205 205
206<h3 id="rewinding-the-conversation">206<h3 id="rewinding-the-conversation">
207 重绕对话207 重绕对话
208</h3>208</h3>
209 209
210[`/rewind`](/zh-CN/checkpointing) 将您的对话截断回较早的回合。剩余的历史记录是缓存在该点构建时的相同内容,系统提示和项目上下文层未更改,所以下一个请求命中较早的缓存条目。自那时以来的每个回合都通过该前缀读取,即使原始回合比 TTL 更久远,也保持条目温暖。210[`/rewind`](/docs/zh-CN/checkpointing) 将您的对话截断回较早的回合。剩余的历史记录是缓存在该点构建时的相同内容,系统提示和项目上下文层未更改,所以下一个请求命中较早的缓存条目。自那时以来的每个回合都通过该前缀读取,即使原始回合比 TTL 更久远,也保持条目温暖。
211 211
212恢复文件检查点与对话一起对缓存没有单独的影响。文件内容仅在 Claude 读取它们时进入上下文,与[编辑存储库中的文件](#editing-files-in-your-repository)相同。212恢复文件检查点与对话一起对缓存没有单独的影响。文件内容仅在 Claude 读取它们时进入上下文,与[编辑存储库中的文件](#editing-files-in-your-repository)相同。
213 213
239 覆盖 TTL239 覆盖 TTL
240</h3>240</h3>
241 241
242设置 `FORCE_PROMPT_CACHING_5M=1` 以强制五分钟 TTL,无论身份验证如何。这在您调试缓存行为、比较两个 TTL 或覆盖在[托管设置](/zh-CN/settings#settings-files)中设置的 `ENABLE_PROMPT_CACHING_1H` 时很有用。242设置 `FORCE_PROMPT_CACHING_5M=1` 以强制五分钟 TTL,无论身份验证如何。这在您调试缓存行为、比较两个 TTL 或覆盖在[托管设置](/docs/zh-CN/settings#settings-files)中设置的 `ENABLE_PROMPT_CACHING_1H` 时很有用。
243 243
244<h2 id="cache-scope">244<h2 id="cache-scope">
245 缓存范围245 缓存范围
249 249
250您在同一目录中并行运行的会话构建匹配的前缀并读取彼此的缓存。顺序会话仅当启动时的 git 状态快照匹配时才共享前缀,因为系统提示也捕获分支和最近的提交。250您在同一目录中并行运行的会话构建匹配的前缀并读取彼此的缓存。顺序会话仅当启动时的 git 状态快照匹配时才共享前缀,因为系统提示也捕获分支和最近的提交。
251 251
252底层 API 缓存更广泛。缓存在组织之间隔离,在某些提供商上,[在组织内的工作区之间隔离](https://platform.claude.com/docs/zh-CN/build-with-claude/prompt-caching#cache-storage-and-sharing)。在这些边界内,任何两个具有相同模型和前缀的请求读取相同的缓存。对于运行自动化流程队列的 Agent SDK 调用者,请参阅[改进跨用户和机器的 prompt caching](/zh-CN/agent-sdk/modifying-system-prompts#improve-prompt-caching-across-users-and-machines)以抑制系统提示的按机器部分并跨机器共享缓存。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)以抑制系统提示的按机器部分并跨机器共享缓存。
253 253
254<h2 id="check-cache-performance">254<h2 id="check-cache-performance">
255 检查缓存性能255 检查缓存性能
256</h2>256</h2>
257 257
258缓存性能显示为 API 在每个响应上报告的两个令牌计数。实时观看它们的最直接方式是读取 `current_usage` 对象的[状态行脚本](/zh-CN/statusline):258缓存性能显示为 API 在每个响应上报告的两个令牌计数。实时观看它们的最直接方式是读取 `current_usage` 对象的[状态行脚本](/docs/zh-CN/statusline):
259 259
260| 字段 | 含义 |260| 字段 | 含义 |
261| ----------------------------- | ------------------------------ |261| ----------------------------- | ------------------------------ |
264 264
265高读取与创建比率意味着缓存工作良好。如果创建在回合之间保持高位,您的前缀中有什么在改变。[使缓存失效的操作](#actions-that-invalidate-the-cache)部分列出了常见原因。265高读取与创建比率意味着缓存工作良好。如果创建在回合之间保持高位,您的前缀中有什么在改变。[使缓存失效的操作](#actions-that-invalidate-the-cache)部分列出了常见原因。
266 266
267为了在整个组织中获得可见性,OpenTelemetry 导出器报告每个用户和会话的缓存读取和创建令牌。有关指标和事件属性参考,请参阅[监控使用](/zh-CN/monitoring-usage)。267为了在整个组织中获得可见性,OpenTelemetry 导出器报告每个用户和会话的缓存读取和创建令牌。有关指标和事件属性参考,请参阅[监控使用](/docs/zh-CN/monitoring-usage)。
268 268
269<h2 id="subagents-and-the-cache">269<h2 id="subagents-and-the-cache">
270 子代理和缓存270 子代理和缓存
271</h2>271</h2>
272 272
273[子代理](/zh-CN/sub-agents)启动自己的对话,具有自己的系统提示和工具集,与父代的分开。它构建自己的缓存,在第一次调用时没有缓存命中,并在自己的回合中预热。子代理使用五分钟 TTL,即使在订阅上,因为自动一小时 TTL 适用于主对话。273[子代理](/docs/zh-CN/sub-agents)启动自己的对话,具有自己的系统提示和工具集,与父代的分开。它构建自己的缓存,在第一次调用时没有缓存命中,并在自己的回合中预热。子代理使用五分钟 TTL,即使在订阅上,因为自动一小时 TTL 适用于主对话。
274 274
275父代的缓存不受影响。从父代的一侧,子代理的调用和结果附加到对话,保留父代的前缀完整。275父代的缓存不受影响。从父代的一侧,子代理的调用和结果附加到对话,保留父代的前缀完整。
276 276
277[分叉](/zh-CN/sub-agents#fork-the-current-conversation)相比之下,完全继承父代的系统提示、工具和对话历史记录,所以其第一个请求读取父代的缓存。[压缩对话](#compacting-the-conversation)中描述的压缩摘要调用使用相同的前缀共享方法。277[分叉](/docs/zh-CN/sub-agents#fork-the-current-conversation)相比之下,完全继承父代的系统提示、工具和对话历史记录,所以其第一个请求读取父代的缓存。[压缩对话](#compacting-the-conversation)中描述的压缩摘要调用使用相同的前缀共享方法。
278 278
279<h2 id="disable-prompt-caching">279<h2 id="disable-prompt-caching">
280 禁用 prompt caching280 禁用 prompt caching
290| `DISABLE_PROMPT_CACHING_OPUS` | 仅对 Opus 禁用 |290| `DISABLE_PROMPT_CACHING_OPUS` | 仅对 Opus 禁用 |
291| `DISABLE_PROMPT_CACHING_FABLE` | 仅对 Fable 禁用 |291| `DISABLE_PROMPT_CACHING_FABLE` | 仅对 Fable 禁用 |
292 292
293要在整个组织中设置缓存策略,请将这些或[TTL 变量](#cache-lifetime)中的任何一个放在[托管设置](/zh-CN/settings#settings-files)的 `env` 块中。对于正常使用,保持缓存启用。293要在整个组织中设置缓存策略,请将这些或[TTL 变量](#cache-lifetime)中的任何一个放在[托管设置](/docs/zh-CN/settings#settings-files)的 `env` 块中。对于正常使用,保持缓存启用。
294 294
295<h2 id="related-resources">295<h2 id="related-resources">
296 相关资源296 相关资源
297</h2>297</h2>
298 298
299* [从构建 Claude Code 中学到的经验:Prompt caching 就是一切](https://claude.com/blog/lessons-from-building-claude-code-prompt-caching-is-everything):Plan Mode、延迟工具加载和压缩的设计原理299* [从构建 Claude Code 中学到的经验:Prompt caching 就是一切](https://claude.com/blog/lessons-from-building-claude-code-prompt-caching-is-everything):Plan Mode、延迟工具加载和压缩的设计原理
300* [探索上下文窗口](/zh-CN/context-window):什么加载到上下文中以及何时加载300* [探索上下文窗口](/docs/zh-CN/context-window):什么加载到上下文中以及何时加载
301* [减少令牌使用](/zh-CN/costs#reduce-token-usage):超越缓存的策略,用于管理上下文大小301* [减少令牌使用](/docs/zh-CN/costs#reduce-token-usage):超越缓存的策略,用于管理上下文大小
302* [跟踪和减少成本](/zh-CN/agent-sdk/cost-tracking):Agent SDK 调用者的缓存令牌跟踪和 TTL 配置302* [跟踪和减少成本](/docs/zh-CN/agent-sdk/cost-tracking):Agent SDK 调用者的缓存令牌跟踪和 TTL 配置
303* [Prompt caching](https://platform.claude.com/docs/en/build-with-claude/prompt-caching):底层 API 机制、断点和定价303* [Prompt caching](https://platform.claude.com/docs/en/build-with-claude/prompt-caching):底层 API 机制、断点和定价