14 缓存的组织方式14 缓存的组织方式
15</h2>15</h2>
16 16
17每次您在 Claude Code 中发送消息时,它都会发出新的 API 请求。模型在请求之间不记得任何东西,所以 Claude Code 重新发送完整的上下文:系统提示、您的项目上下文、每条先前的消息和工具结果,以及您的新消息。新内容附加在末尾,这意味着每个请求的大部分与前一个请求相同。Prompt caching 是 API 避免重新处理未更改部分的方式。17每次在 Claude Code 中发送消息时,它都会发出一个新的 API 请求。模型在请求之间不会记住任何内容,因此 Claude Code 会重新发送完整的上下文:系统提示、你的项目上下文、所有之前的消息和工具结果,以及你的新消息。新内容被附加在末尾,这意味着每个请求的大部分内容与前一个请求相同。Prompt caching 是 API 避免重新处理未更改部分的方式。
18 18
19API 通过将每个请求的开始部分(称为前缀)与最近处理过的内容进行匹配来缓存。在正常回合中,前缀是整个先前请求,只有最新的交换是新的。匹配是精确的,所以前缀中任何地方的更改都会重新计算其后的所有内容。没有按文件或按段的缓存。有关底层机制,请参阅 API 参考中的[prompt caching 如何工作](https://platform.claude.com/docs/en/build-with-claude/prompt-caching#how-prompt-caching-works)。19API 通过将每个请求的开始部分(称为前缀)与最近处理的内容进行匹配来进行缓存。在正常的回合中,前缀是整个前一个请求,只有最新的交互是新的。匹配是精确的,因此前缀中任何地方的更改都会重新计算其后的所有内容。没有按文件或按段的缓存。有关底层机制,请参阅 API 参考中的 [how prompt caching works](https://platform.claude.com/docs/en/build-with-claude/prompt-caching#how-prompt-caching-works)。
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="Four turns shown as growing horizontal bars. Each turn's request contains everything from the previous turn plus the latest exchange appended at the end. On turns two and three, the unchanged prefix is read from cache and only the new exchange is processed. On turn four, the system prompt changed, so the prefix no longer matches and the entire request is reprocessed and written." width="720" height="454" data-path="images/prompt-caching-prefix.svg" />
22 22
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" />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="Four turns shown as growing horizontal bars. Each turn's request contains everything from the previous turn plus the latest exchange appended at the end. On turns two and three, the unchanged prefix is read from cache and only the new exchange is processed. On turn four, the system prompt changed, so the prefix no longer matches and the entire request is reprocessed and written." width="720" height="454" data-path="images/prompt-caching-prefix-dark.svg" />
24 24
25为了充分利用前缀匹配,Claude Code 组织每个请求,使回合之间很少更改的内容首先出现:25为了充分利用前缀匹配,Claude Code 对每个请求进行排序,使得在回合之间很少更改的内容首先出现:
26 26
27| 层 | 内容 | 更改时间 |27| Layer | Content | Changes when |
28| ----- | -------------------- | -------------------------------- |28| --------------- | ----------------------------------------------- | ----------------------------------------------- |
29| 系统提示 | 核心指令、工具定义 | 加载的工具定义集合更改,或 Claude Code 升级 |29| System prompt | Core instructions, tool definitions | The set of loaded tool definitions changes |
30| 项目上下文 | CLAUDE.md、自动内存、无范围规则 | 会话开始,或在 `/clear` 或 `/compact` 之后 |30| Project context | CLAUDE.md, auto memory, unscoped rules | Session starts, or after `/clear` or `/compact` |
31| 对话 | 您的消息、Claude 的响应、工具结果 | 每个回合 |31| Conversation | Your messages, Claude's responses, tool results | Every turn |
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) 和 [skill loading](/docs/zh-CN/skills) 将其指令作为对话消息附加,因此缓存的前缀保持完整。
36 36
37两个设置不出现在层表中,但仍然影响缓存的内容:37两个设置不在层表中出现,但仍然影响缓存的内容:
38 38
39* **Model**:每个模型都有自己的缓存。切换模型会重新计算整个请求,即使内容相同。请参阅下面的[切换模型](#switching-models)。39* **Model**:每个模型都有自己的缓存。切换模型会重新计算整个请求,即使内容相同。请参阅下面的 [Switching models](#switching-models)。
40* **Effort level**:在大多数模型上,每个工作量级别都有自己的缓存,所以在会话中期更改工作量会重新计算整个请求。在带有 API 密钥或 Claude 订阅的 Fable 5.1 上,缓存默认保持完整。请参阅下面的[更改工作量级别](#changing-effort-level)。40* **Effort level**:在大多数模型上,每个努力级别都有自己的缓存,因此在会话中途更改努力级别会重新计算整个请求。在具有 API 密钥或 Claude 订阅的 Fable 5.1 上,缓存默认保持完整。请参阅下面的 [Changing effort level](#changing-effort-level)。
41 41
42<Tip>42<Tip>
43 在会话顶部选择您的模型和工作量级别,然后在任务之间的自然中断处保存 `/compact`。您在任务中期进行的更改越少,缓存命中率就越高。43 在会话顶部选择你的模型和努力级别,然后在任务之间的自然中断处保存 `/compact`。你在任务中途进行的更改越少,缓存命中率就越高。
44</Tip>44</Tip>
45 45
46<h3 id="where-the-cache-lives">46<h3 id="where-the-cache-lives">
47 缓存位置47 缓存的位置
48</h3>48</h3>
49 49
50缓存发生在服务器端,在为您的模型提供服务的任何基础设施中。它的位置取决于您如何进行身份验证:50缓存发生在服务器端,在为你的模型提供服务的任何基础设施中。位置取决于你的身份验证方式:
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 key、Claude subscription 或 [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**:取决于部署的[托管选项](https://platform.claude.com/docs/en/build-with-claude/claude-in-microsoft-foundry#hosting-options)。在 Azure 上托管的部署在 Azure 基础设施上提供;在 Anthropic 上托管的部署在 Anthropic 的基础设施上提供54* **Microsoft Foundry**:取决于部署的 [hosting option](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* **Custom `ANTHROPIC_BASE_URL` 或 [LLM gateway](/docs/zh-CN/llm-gateway)**:缓存位于你的请求被转发的地方,缓存是否有效取决于网关
56 56
57Claude Code 还在对话中期附加系统上下文,例如文件更改通知,并在每个提供商和连接上标记该块以进行缓存。57Claude Code 还在对话中途附加系统上下文,例如文件更改通知,并在所有提供商和连接上标记该块以进行缓存,除非你设置了 [`CLAUDE_CODE_DISABLE_EXPERIMENTAL_BETAS`](/docs/zh-CN/llm-gateway-protocol#disable-pre-release-capabilities),在这种情况下该块被发送为未缓存。
58 58
59在提供商自己的端点、Amazon Bedrock 及其 [Mantle 端点](/docs/zh-CN/amazon-bedrock#use-the-mantle-endpoint)、Google Cloud 的 Agent Platform 和 Microsoft Foundry 上,缓存该块的方式与 Claude API 相同。59在提供商自己的端点、Amazon Bedrock 及其 [Mantle endpoint](/docs/zh-CN/amazon-bedrock#use-the-mantle-endpoint)、Google Cloud 的 Agent Platform 和 Microsoft Foundry 上,缓存该块的方式与 Claude API 相同。
60 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):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` markers](https://platform.claude.com/docs/en/build-with-claude/prompt-caching#explicit-cache-breakpoints):
62 62
63* **原样转发它们**:该块和您的对话缓存方式与在提供商自己的端点上相同。63* **原样转发它们**:该块和你的对话缓存方式与在提供商自己的端点上相同。
64* **拒绝标记的请求,返回命名 `cache_control` 的 `400` 错误**:Claude Code 重新发送请求,将标记从块移到您的最后一条对话消息上,并在对话的其余部分保持在那里。该块作为未缓存的输入计费;您的对话保持缓存。64* **使用命名 `cache_control` 的 `400` 错误拒绝标记的请求**:Claude Code 重新发送请求,将标记从块移到你的最后一条对话消息上,并在对话的其余部分保持在那里。该块作为未缓存的输入计费;你的对话保持缓存。
65* **在返回成功时删除标记**:您的整个对话历史在每个回合上都作为未缓存的输入计费。将块形式系统内容转换为纯字符串的网关以相同的方式删除标记。65* **在返回成功时删除标记**:你的整个对话历史在每个回合上都作为未缓存的输入计费。将块形式的系统内容转换为纯字符串的网关以相同的方式删除标记。
66 66
67有关每个提供商存储和处理的内容,请参阅[数据使用](/docs/zh-CN/data-usage)。无论缓存位于何处,条目在不活动期间后过期,[缓存生命周期](#cache-lifetime)下面涵盖 TTL 以及如何延长它。67有关每个提供商存储和处理的内容,请参阅 [data usage](/docs/zh-CN/data-usage)。无论缓存位于何处,条目在不活动期间后过期,下面的 [Cache lifetime](#cache-lifetime) 涵盖了 TTL 以及如何延长它。
68 68
69<h2 id="actions-that-invalidate-the-cache">69<h2 id="actions-that-invalidate-the-cache">
70 使缓存失效的操作70 使缓存失效的操作
71</h2>71</h2>
72 72
73这些操作会导致下一个请求错过部分或全部缓存。您会看到一个一次性的较慢、更昂贵的回合,之后新的前缀被缓存。一旦您知道它们有成本,大多数都可以在任务中期避免。模型切换可能感觉是免费的,直到您注意到随后的较慢回合。73这些操作会导致下一个请求缓存未命中的部分或全部。您会看到一次速度较慢、成本更高的回合,之后新的前缀会被缓存。一旦您了解它们的成本,大多数操作都可以在任务中途避免。模型切换可能看起来没有成本,直到您注意到随后的速度较慢的回合。
74 74
75* [切换模型](#switching-models)75* [切换模型](#switching-models)
76* [更改工作量级别](#changing-effort-level)76* [更改工作量级别](#changing-effort-level)
78* [连接或断开 MCP 服务器](#connecting-or-disconnecting-an-mcp-server)78* [连接或断开 MCP 服务器](#connecting-or-disconnecting-an-mcp-server)
79* [启用或禁用插件](#enabling-or-disabling-a-plugin)79* [启用或禁用插件](#enabling-or-disabling-a-plugin)
80* [拒绝整个工具](#denying-an-entire-tool)80* [拒绝整个工具](#denying-an-entire-tool)
81* [更改输出样式](#changing-output-style)
82* [压缩对话](#compacting-the-conversation)81* [压缩对话](#compacting-the-conversation)
83* [积累许多图像](#accumulating-many-images)82* [积累许多图像](#accumulating-many-images)
84* [升级 Claude Code](#upgrading-claude-code)83* [升级 Claude Code](#upgrading-claude-code)
87 切换模型86 切换模型
88</h3>87</h3>
89 88
90每个模型都有自己的缓存。使用 [`/model`](/docs/zh-CN/model-config#setting-your-model) 切换意味着下一个请求读取整个对话历史记录而没有缓存命中,即使内容相同。89每个模型都有自己的缓存。使用 [`/model`](/docs/zh-CN/model-config#setting-your-model) 切换意味着下一个请求会读取整个对话历史记录而没有缓存命中,即使内容相同。
91 90
92当您在终端运行 `/model` 时,Claude Code 仅在缓存仍然温暖时要求您确认切换。缓存在 Claude Code 在此对话中最后发送请求或 Claude 最后响应后的一个[缓存 TTL](#cache-lifetime) 内保持温暖。一旦该时间过去,缓存已过期,所以 Claude Code 无需询问即可切换。91当您在终端运行 `/model` 时,Claude Code 仅在缓存仍然温暖时要求您确认切换。缓存在 Claude Code 在此对话中最后一次发送请求或 Claude 最后一次响应后的一个[缓存 TTL](#cache-lifetime) 内保持温暖。一旦该时间过去,缓存就会过期,因此 Claude Code 会在不询问的情况下进行切换。
93 92
94在 v2.1.238 之前,Claude Code 没有检查缓存 TTL,即使在缓存过期后也会询问。93在 v2.1.238 之前,Claude Code 没有检查缓存 TTL,即使在缓存过期后也会询问。
95 94
96您也可以使用 [PreModelSwitch hook](/docs/zh-CN/hooks#premodelswitch-decision-control) 要求此确认或跳过它。95您也可以使用 [PreModelSwitch hook](/docs/zh-CN/hooks#premodelswitch-decision-control) 要求此确认或跳过它。
97 96
98[`opusplan` 模型设置](/docs/zh-CN/model-config#opusplan-model-setting)在 Plan Mode 期间解析为 Opus,在执行期间解析为 Sonnet,所以每个 Plan Mode 切换都是模型切换并启动新缓存。97[`opusplan` 模型设置](/docs/zh-CN/model-config#opusplan-model-setting)在计划模式下解析为 Opus,在执行期间解析为 Sonnet,因此每个计划模式切换都是一个模型切换并启动新的缓存。
99 98
100[Fable 模型和 Opus 5 上的自动模型回退](/docs/zh-CN/model-config#automatic-model-fallback)也是一个模型切换。当安全分类器标记具有回退模型的类别中的请求时,Claude Code 在该模型上重新运行请求,会话继续进行。99[自动模型回退](/docs/zh-CN/model-config#automatic-model-fallback)在 Fable 模型和 Opus 5 上也是一个模型切换。当安全分类器在具有回退模型的类别中标记请求时,Claude Code 会在该模型上重新运行请求,会话会在那里继续。
101 100
102当 skill 或 command 的 frontmatter 命名一个[`model`](/docs/zh-CN/skills#frontmatter-reference)不同于会话当前模型的模型时,该回合也是一个模型切换:下一个请求读取整个对话历史记录而没有缓存命中。会话模型在您的下一个提示上恢复。`context: fork` skill 设置[分叉子代理的模型](/docs/zh-CN/skills#run-skills-in-a-subagent)。101当技能或命令的 frontmatter 命名一个[`model`](/docs/zh-CN/skills#frontmatter-reference)不同于会话当前模型的模型时,该回合也是一个模型切换:下一个请求会读取整个对话历史记录而没有缓存命中。会话模型在您的下一个提示时恢复。`context: fork` 技能会设置[分叉子代理的模型](/docs/zh-CN/skills#run-skills-in-a-subagent)。
103 102
104<h3 id="changing-effort-level">103<h3 id="changing-effort-level">
105 更改工作量级别104 更改工作量级别
106</h3>105</h3>
107 106
108在大多数模型上,在会话中期更改[工作量级别](/docs/zh-CN/model-config#adjust-effort-level)意味着下一个请求读取整个对话历史记录而没有缓存命中。当缓存仍然温暖时,Claude Code 会要求您首先确认更改。107在大多数模型上,在会话中途更改[工作量级别](/docs/zh-CN/model-config#adjust-effort-level)意味着下一个请求会读取整个对话历史记录而没有缓存命中。当缓存仍然温暖时,Claude Code 会要求您先确认更改。
109 108
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 配置时。109在具有 API 密钥或 Claude 订阅的 Fable 5.1 上,更改工作量会保持缓存,Claude Code 会在不询问的情况下应用新级别。这不适用于 Amazon Bedrock、Google Cloud 的 Agent Platform 或 [Claude 应用网关](/docs/zh-CN/claude-apps-gateway),或当您设置 [`CLAUDE_CODE_DISABLE_EXPERIMENTAL_BETAS`](/docs/zh-CN/llm-gateway-protocol#disable-pre-release-capabilities) 或您的组织具有 HIPAA 配置时。
111 110
112在 v2.1.260 之前,在具有 API 密钥或 Claude 订阅的 Fable 5.1 上更改工作量也会使缓存失效。111在 v2.1.260 之前,在具有 API 密钥或 Claude 订阅的 Fable 5.1 上更改工作量也会使缓存失效。
113 112
115 启用快速模式114 启用快速模式
116</h3>115</h3>
117 116
118启用[快速模式](/docs/zh-CN/fast-mode)会添加一个请求头,该请求头是缓存键的一部分,所以 Claude Code 发送的第一个启用快速模式的请求读取整个对话历史记录而没有缓存命中。Claude Code 在回合开始时设置该头一次,并为整个回合保持它,所以当您在 Claude 工作时启用快速模式时,头的缓存未命中发生在您下一个回合的第一个请求上。这些未缓存的输入令牌按[快速模式费率](/docs/zh-CN/fast-mode#understand-the-cost-tradeoff)计费,这就是为什么在会话开始时启用它的成本低于在长会话深处启用它的成本。如果您当前的模型不支持快速模式,启用快速模式也会[切换您的模型](#switching-models),该切换本身会从运行回合中的下一个请求启动新缓存。117启用[快速模式](/docs/zh-CN/fast-mode)会添加一个请求标头,该标头是缓存键的一部分,因此 Claude Code 发送的启用快速模式的第一个请求会读取整个对话历史记录而没有缓存命中。Claude Code 在回合开始时设置该标头一次,并为整个回合保持它,因此当您在 Claude 工作时启用快速模式时,标头的缓存未命中会在您下一个回合的第一个请求时发生。这些未缓存的输入令牌按[快速模式费率](/docs/zh-CN/fast-mode#understand-the-cost-tradeoff)计费,这就是为什么在会话开始时启用它的成本比在长会话深处启用它的成本要低。如果您当前的模型不支持快速模式,启用快速模式也会[切换您的模型](#switching-models),该切换从运行回合中的下一个请求开始启动新的缓存。
119 118
120成本每个对话应用一次。在第一个快速模式回合之后,Claude Code 继续发送头,仅改变请求的速度设置,这不是缓存键的一部分。关闭快速模式、[在速率限制后自动回退到标准速度](/docs/zh-CN/fast-mode#handle-rate-limits)以及稍后重新启用它都保持缓存。如果您在会话中期[用完使用额度](/docs/zh-CN/fast-mode#handle-rate-limits),Claude Code 以相同方式在标准速度重试每个被拒绝的快速模式请求,所以此回退也保持缓存。`/clear` 和 `/compact` 重置这个,因为它们无论如何都在这些点重建缓存。119成本每个对话应用一次。在第一个快速模式回合之后,Claude Code 继续发送标头,仅改变请求的速度设置,这不是缓存键的一部分。关闭快速模式、[在速率限制后自动回退到标准速度](/docs/zh-CN/fast-mode#handle-rate-limits)以及稍后重新启用它都会保持缓存。如果您在会话中途[用完使用额度](/docs/zh-CN/fast-mode#handle-rate-limits),Claude Code 会以相同的方式在标准速度下重试每个被拒绝的快速模式请求,因此此回退也会保持缓存。`/clear` 和 `/compact` 会重置此设置,因为它们无论如何都会在这些点重建缓存。
121 120
122<h3 id="connecting-or-disconnecting-an-mcp-server">121<h3 id="connecting-or-disconnecting-an-mcp-server">
123 连接或断开 MCP 服务器122 连接或断开 MCP 服务器
124</h3>123</h3>
125 124
126工具定义位于系统提示层中,所以当请求之间的工具定义集合更改时,缓存会失效。切换[顾问工具](/docs/zh-CN/advisor)是一个例外:其定义位于缓存断点之后,所以启用或禁用 `/advisor` 会保持缓存的前缀完整。[MCP 服务器](/docs/zh-CN/mcp)更改是否执行此操作取决于其工具是否由[工具搜索](/docs/zh-CN/mcp#scale-with-mcp-tool-search)延迟或加载到前缀中:125工具定义位于系统提示层,因此当请求中的工具定义集在回合之间发生变化时,缓存会失效。切换[顾问工具](/docs/zh-CN/advisor)是一个例外:其定义位于缓存断点之后,因此启用或禁用 `/advisor` 会保持缓存的前缀完整。[MCP 服务器](/docs/zh-CN/mcp)更改是否执行此操作取决于其工具是否由[工具搜索](/docs/zh-CN/mcp#scale-with-mcp-tool-search)延迟或加载到前缀中:
127 126
128* **延迟工具**,在支持的模型上是默认设置:服务器连接、断开连接或更改其工具列表仅附加新内容,不会扰乱已缓存的任何内容。127* **延迟工具**,在支持的模型上是默认值:服务器连接、断开连接或更改其工具列表只会追加新内容,不会扰乱已缓存的任何内容。
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)保持在前面的定义上。128* **加载到前缀中的工具**:对它们的任何更改都会使缓存失效。这发生在[工具搜索不可用或被禁用](/docs/zh-CN/mcp#configure-tool-search)时,例如在早于 Claude 4.5 代的 Google Cloud Agent Platform 模型上、使用自定义 `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)保持在前面的定义上。
130 129
131当工具加载到前缀中时,失效的最常见原因是服务器在会话中期连接或断开连接,这可能在没有您采取任何操作的情况下发生:stdio 服务器的进程退出、HTTP 会话过期或服务器[在暂时故障后自动重新连接](/docs/zh-CN/mcp#automatic-reconnection)。连接的服务器也可以推送[动态工具更新](/docs/zh-CN/mcp#dynamic-tool-updates)来更改其工具列表。130当工具加载到前缀中时,失效的最常见原因是服务器在会话中途连接或断开连接,这可能在没有您采取任何操作的情况下发生:stdio 服务器的进程退出、HTTP 会话过期或服务器[在暂时故障后自动重新连接](/docs/zh-CN/mcp#automatic-reconnection)。连接的服务器也可以推送[动态工具更新](/docs/zh-CN/mcp#dynamic-tool-updates)来更改其工具列表。
132 131
133编辑您的 MCP 配置本身不会改变缓存。新配置仅在重启后生效,这是服务器连接或断开连接的时间。132编辑您的 MCP 配置本身不会改变缓存。新配置仅在重启后生效,这是服务器连接或断开连接的时候。
134 133
135<h3 id="enabling-or-disabling-a-plugin">134<h3 id="enabling-or-disabling-a-plugin">
136 启用或禁用插件135 启用或禁用插件
137</h3>136</h3>
138 137
139当您启用或禁用[插件](/docs/zh-CN/plugins)时,更改的成本取决于插件提供的组件类型。下面的情况涵盖每个组件类型、Claude Code 何时应用更改以及您在同一会话中再次禁用插件时会发生什么。138当您启用或禁用[插件](/docs/zh-CN/plugins)时,更改的成本取决于插件提供的组件类型。下面的情况涵盖每个组件类型、Claude Code 何时应用更改以及在同一会话中再次禁用插件时会发生什么。
140 139
141<h4 id="plugin-components-that-keep-the-cache">140<h4 id="plugin-components-that-keep-the-cache">
142 保持缓存的插件组件141 保持缓存的插件组件
143</h4>142</h4>
144 143
145Claude Code 永远不会为插件的 skills、commands、agents、hooks、monitors 或 themes 使缓存失效。它将其内容附加在现有对话之后,所以下一个请求为该内容付费,但仍然从缓存中读取它之前的所有内容。144Claude Code 永远不会为插件的技能、命令、代理、hooks、监视器或主题使缓存失效。它在现有对话之后追加其内容,因此下一个请求为该内容付费,并仍然从缓存中读取其之前的所有内容。
146 145
147<h4 id="plugins-that-provide-mcp-servers">146<h4 id="plugins-that-provide-mcp-servers">
148 提供 MCP 服务器的插件147 提供 MCP 服务器的插件
149</h4>148</h4>
150 149
151当您启用或禁用提供 [MCP 服务器](/docs/zh-CN/plugins-reference#mcp-servers)的插件时,Claude Code 遵循与[连接或断开 MCP 服务器](#connecting-or-disconnecting-an-mcp-server)相同的规则:150当您启用或禁用提供 [MCP 服务器](/docs/zh-CN/plugins-reference#mcp-servers) 的插件时,Claude Code 遵循与[连接或断开 MCP 服务器](#connecting-or-disconnecting-an-mcp-server)相同的规则:
152 151
153* 如果 Claude Code 延迟服务器的工具,它会保持缓存。152* 如果 Claude Code 延迟服务器的工具,它会保持缓存。
154* 如果 Claude Code 将它们加载到前缀中,下一个请求重新读取整个对话。153* 如果 Claude Code 将它们加载到前缀中,下一个请求会重新读取整个对话。
155 154
156<h4 id="code-intelligence-plugins">155<h4 id="code-intelligence-plugins">
157 代码智能插件156 代码智能插件
158</h4>157</h4>
159 158
160当您启用[代码智能插件](/docs/zh-CN/discover-plugins#code-intelligence)时,Claude 获得 [LSP 工具](/docs/zh-CN/tools-reference#lsp-tool-behavior)。159当您启用[代码智能插件](/docs/zh-CN/discover-plugins#code-intelligence)时,Claude 会获得 [LSP 工具](/docs/zh-CN/tools-reference#lsp-tool-behavior)。
161 160
162<h4 id="when-plugin-changes-apply">161<h4 id="when-plugin-changes-apply">
163 插件更改何时应用162 插件更改何时应用
164</h4>163</h4>
165 164
166插件更改在您运行 [`/reload-plugins`](/docs/zh-CN/discover-plugins#apply-plugin-changes-without-restarting) 或启动新会话时应用,而不是当您运行 `/plugin enable` 或 `/plugin disable` 时。您支付成本(无论是附加的公告还是完整的重新读取)在更改应用后的第一个回合。Claude Code 也可以自己应用更改:165您在 `/plugin` 菜单中所做的更改会通过 [`/reload-plugins`](/docs/zh-CN/discover-plugins#apply-plugin-changes-without-restarting) 进行,Claude Code 在您关闭菜单时为您运行。您需要支付成本,无论是追加公告还是完整重新读取,都在更改应用后的第一个回合。Claude Code 也可以自行应用更改:
167 166
168* 对于具有 `command` 源的插件,Claude Code [可以自己重新加载插件](/docs/zh-CN/plugin-marketplaces#when-claude-code-re-runs-the-command)。167* 对于具有 `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`。168* 当您[从 `/plugin` 界面安装插件](/docs/zh-CN/discover-plugins#install-plugins)时,Claude Code 可以在安装期间激活它。安装摘要会告诉您它是否这样做了。
170* 当您在 v2.1.246 或更高版本上使用 `/cd` [移动会话](/docs/zh-CN/permissions#move-the-session-to-another-directory)时,Claude Code 将新目录的设置启用的插件应用为移动的一部分,而不需要保持 `/reload-plugins` 的完整重新读取警告。169* 当您在 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 或更高版本。170* 在交互式会话中,当您在使用 `--plugin-dir` 传递的[插件文件夹](/docs/zh-CN/plugins#test-your-plugins-locally)中添加或删除插件时,更改会立即应用。如果应用它会触发完整重新读取,Claude Code 会保持更改并显示运行 `/reload-plugins` 的通知。需要 Claude Code v2.1.265 或更高版本。
172 171
173当您运行 `/reload-plugins` 且重新加载会触发完整重新读取时,Claude Code 会显示警告并不应用重新加载。使用 `--force` 重新运行以强制应用重新加载。172当 `/reload-plugins` 运行且重新加载会触发完整重新读取时,Claude Code 会显示警告并不应用重新加载。运行 `/reload-plugins --force` 以无论如何应用它。
174 173
175`/reload-plugins` 也在没有交互式终端的会话中运行,例如桌面应用、Agent SDK 和[非交互式模式](/docs/zh-CN/headless)与 `-p`,当您直接将其输入到会话中时。需要 Claude Code v2.1.260 或更高版本。174`/reload-plugins` 也在没有交互式终端的会话中运行,例如桌面应用、Agent SDK 和[非交互式模式](/docs/zh-CN/headless)与 `-p`,当您直接将其输入到会话中时。需要 Claude Code v2.1.260 或更高版本。
176 175
177在这些会话中,重新加载应用除了插件 MCP 服务器更改之外的所有内容,这些[在您的下一个会话中生效](/docs/zh-CN/discover-plugins#apply-plugin-changes-without-restarting),因此永远不会在会话中期造成完整重新读取的成本。176在这些会话中,重新加载应用除了插件 MCP 服务器更改之外的所有内容,这些[在您的下一个会话中生效](/docs/zh-CN/discover-plugins#apply-plugin-changes-without-restarting),因此在会话中途永远不会成本完整重新读取。
178 177
179<h4 id="plugins-you-enable-and-then-disable-in-one-session">178<h4 id="plugins-you-enable-and-then-disable-in-one-session">
180 您在一个会话中启用然后禁用的插件179 您在一个会话中启用然后禁用的插件
181</h4>180</h4>
182 181
183当您禁用您在会话早期启用的插件时,Claude Code 恢复之前的请求形状。如果该前缀仍在其[缓存生命周期](#cache-lifetime)内,下一个请求读取较旧的缓存条目而不是重建。182当您禁用您在会话中较早启用的插件时,Claude Code 会恢复之前的请求形状。如果该前缀仍在其[缓存生命周期](#cache-lifetime)内,下一个请求会读取较旧的缓存条目,而不是重建。
184 183
185<h3 id="denying-an-entire-tool">184<h3 id="denying-an-entire-tool">
186 拒绝整个工具185 拒绝整个工具
187</h3>186</h3>
188 187
189添加像 `Bash` 或 `WebFetch` 这样的裸工具名称作为[拒绝规则](/docs/zh-CN/permissions#manage-permissions)会将该工具从 Claude 的上下文中完全移除。Claude Code 将内置工具定义加载到系统提示层中,所以在会话中期添加或移除这些规则之一会使缓存失效。Claude Code 在下一个请求上应用更改,无论您通过 `/permissions` 添加它还是通过[直接编辑设置文件](/docs/zh-CN/settings#when-edits-take-effect)。这包括您在回合中期通过 `/permissions` 添加的规则。188添加像 `Bash` 或 `WebFetch` 这样的裸工具名称作为[拒绝规则](/docs/zh-CN/permissions#manage-permissions)会将该工具从 Claude 的上下文中完全删除。Claude Code 将内置工具定义加载到系统提示层,因此在会话中途添加或删除这些规则之一会使缓存失效。Claude Code 在下一个请求时应用更改,无论您通过 `/permissions` 添加规则还是通过[直接编辑设置文件](/docs/zh-CN/settings#when-edits-take-effect)。这包括您在回合中途通过 `/permissions` 添加的规则。
190
191只有与工具名称位置匹配的拒绝规则才有这种效果:裸工具名称、等效的 `Bash(*)` 形式或[工具名称通配符](/docs/zh-CN/permissions#tool-name-wildcards)如 `"*"`。匹配仅 MCP 工具的通配符(如 `"mcp__*"`)以相同方式移除这些工具,但当匹配的工具被[延迟](#connecting-or-disconnecting-an-mcp-server)时保持缓存完整,这是默认设置,因为延迟定义从未在缓存的前缀中。作用域拒绝规则如 `Bash(rm *)`,以及所有允许和询问规则,都不会改变 Claude 看到的工具。Claude Code 在 Claude 尝试调用时检查它们,保持前缀完整。
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 189
201在 v2.1.251 之前,会话中期的样式切换保持缓存,但在您运行 `/clear` 或启动新会话之前不应用。190只有在工具名称位置匹配的拒绝规则才有此效果:裸工具名称、等效的 `Bash(*)` 形式或[工具名称 glob](/docs/zh-CN/permissions#tool-name-wildcards) 如 `"*"`。仅匹配 MCP 工具的 glob,例如 `"mcp__*"`,会以相同的方式删除这些工具,但当匹配的工具是[延迟](#connecting-or-disconnecting-an-mcp-server)时保持缓存完整,这是默认值,因为延迟定义从未在缓存的前缀中。作用域拒绝规则如 `Bash(rm *)`,以及所有允许和询问规则,不会改变 Claude 看到的工具。Claude Code 在 Claude 尝试调用时检查它们,保持前缀完整。
202 191
203<h3 id="compacting-the-conversation">192<h3 id="compacting-the-conversation">
204 压缩对话193 压缩对话
205</h3>194</h3>
206 195
207[压缩](/docs/zh-CN/context-window#what-survives-compaction)用摘要替换您的消息历史记录。根据设计,这会使对话层失效,因为下一个请求有一个新的、更短的历史记录,与旧的历史记录不共享前缀。Claude Code 重用系统提示层并从磁盘重新加载项目上下文,只有在 CLAUDE.md 和内存自会话开始以来未更改时才缓存命中。196[压缩](/docs/zh-CN/context-window#what-survives-compaction)用摘要替换您的消息历史记录。根据设计,这会使对话层失效,因为下一个请求具有新的、更短的历史记录,不与旧历史记录共享前缀。Claude Code 重用系统提示层,除非对话是[在保持会话的同时恢复的,该会话会以其他方式改变](#resuming-a-session);在这种情况下,第一次压缩会切换到当前提示,该层会重建一次。它从磁盘重新加载项目上下文,仅当 CLAUDE.md 和内存自会话开始以来未更改时才缓存命中。
208 197
209为了生成摘要,Claude Code 发送一个一次性请求,其系统提示、工具和历史记录与您的对话相同,加上作为最终用户消息附加的摘要指令。当缓存温暖时,该请求从缓存中读取您的前缀,所以会话中期的 `/compact` 成本是上下文大小建议的一小部分,并花费大部分时间生成摘要。198为了生成摘要,Claude Code 会发送一个单独的请求,其系统提示、工具和历史记录与您的对话相同,加上作为最终用户消息追加的摘要指令。当缓存温暖时,该请求从缓存中读取您的前缀,因此中会话 `/compact` 的成本是上下文大小建议的一小部分,并花费大部分时间生成摘要。
210 199
211在超过[缓存生命周期](#cache-lifetime)的中断后,没有缓存可读,所以摘要请求重新处理完整历史记录作为未缓存的输入。这就是为什么当您[恢复旧会话](/docs/zh-CN/sessions#resume-from-a-summary)时 `/compact` 成本最高。在温暖和冷的情况下,压缩后的回合仅为更短的摘要重建对话缓存,所以该回合不是缓慢的部分。200在长于[缓存生命周期](#cache-lifetime)的中断后,没有缓存可读,因此摘要请求会重新处理完整历史记录作为未缓存输入。这就是为什么当您[恢复旧会话](/docs/zh-CN/sessions#resume-from-a-summary)时 `/compact` 成本最高。在温暖和冷的情况下,压缩后的回合仅为更短的摘要重建对话缓存,因此该回合不是缓慢的部分。
212 201
213<Tip>202<Tip>
214 当您丢弃的上下文是您不再需要的内容时,压缩对您有利。要选择其开销何时发生,请在工作中的自然中断处(例如任务之间)运行 `/compact`,而不是等待自动压缩在任务中期触发。如果您走上了想要完全放弃的路径,请改为[`/rewind`](#rewinding-the-conversation)到较早的回合。重绕会截断回到已经缓存的前缀,而不是像压缩那样构建新的前缀。203 当您丢弃的上下文是您不再需要的内容时,压缩对您有利。要选择其开销何时发生,请在工作中的自然中断处(例如任务之间)运行 `/compact`,而不是等待自动压缩在任务中途触发。如果您走上了一条想要完全放弃的路径,请改为[`/rewind`](#rewinding-the-conversation)到较早的回合。重新绕过会截断回到已缓存的前缀,而不是像压缩那样构建新的前缀。
215</Tip>204</Tip>
216 205
217<h3 id="accumulating-many-images">206<h3 id="accumulating-many-images">
218 积累许多图像207 积累许多图像
219</h3>208</h3>
220 209
221API 限制每个请求可以携带多少图像和 PDF。有关当前数字,请参阅 API 文档中的[请求限制](https://platform.claude.com/docs/en/build-with-claude/vision#request-limits)。Claude Code 也限制请求中图像和 PDF 的总大小,所以大型屏幕截图以比小型屏幕截图更少的图像达到限制。210API 限制每个请求可以携带多少图像和 PDF。有关当前数字,请参阅 API 文档中的[请求限制](https://platform.claude.com/docs/en/build-with-claude/vision#request-limits)。Claude Code 也限制了请求中图像和 PDF 的总大小,因此大型屏幕截图比小型屏幕截图更快达到限制。
222 211
223当下一个请求会超过任一限制时,Claude Code 从它发送的内容中移除一批最旧的图像和 PDF,这为更多内容腾出空间,然后才需要再次移除任何内容。Claude 不再能看到移除的图像。如果 Claude 再次需要其中一个,请再次共享它。212当下一个请求会超过任一限制时,Claude Code 会从它发送的内容中删除一批最旧的图像和 PDF,这为更多内容腾出空间,然后才需要再次删除任何内容。Claude 不再能看到删除的图像。如果 Claude 再次需要其中一个,请再次共享它。
224 213
225移除图像会改变保存它们的消息,所以下一个请求从这些消息中最早的消息开始重新处理对话。因为 Claude Code 一次移除一批,您会看到每批一个较慢的回合,而不是每个新屏幕截图一个。214删除图像会改变保存它们的消息,因此下一个请求会从这些消息中最早的消息开始重新处理对话。因为 Claude Code 一次删除一批,您会看到每批一个较慢的回合,而不是每个新屏幕截图一个。
226 215
227<h3 id="upgrading-claude-code">216<h3 id="upgrading-claude-code">
228 升级 Claude Code217 升级 Claude Code
229</h3>218</h3>
230 219
231新的 Claude Code 版本通常会更新系统提示或工具定义,所以升级后的第一个请求从顶部重建缓存。[自动更新](/docs/zh-CN/setup#auto-updates)在后台下载新版本,但在下次启动时应用它们,从不在会话中期,所以您会看到这是重启后的一个未缓存的第一个回合,而不是会话期间的惊喜。设置 `DISABLE_AUTOUPDATER=1` 来控制何时应用升级。220新的 Claude Code 版本通常会更新系统提示或工具定义,因此升级后启动的第一个对话会从顶部构建其缓存。[自动更新](/docs/zh-CN/setup#auto-updates)在后台下载新版本,但在下一次启动时应用它们,从不在会话中途,因此您会看到这是重启后的未缓存第一个回合,而不是会话期间的惊喜。设置 `DISABLE_AUTOUPDATER=1` 来控制何时应用升级。
232 221
233<Note>222<Note>
234 升级后[恢复会话](/docs/zh-CN/sessions#resume-a-session)会重新处理整个对话历史记录而没有缓存命中,因为历史记录现在位于不同的系统提示后面。成本随着恢复的对话有多长而扩展,所以回到长会话的第一个回合可能是您发送的最昂贵的请求。223 有关恢复您在升级前启动的对话的成本,请参阅[恢复会话](#resuming-a-session)。
235</Note>224</Note>
236 225
237<h2 id="actions-that-keep-the-cache">226<h2 id="actions-that-keep-the-cache">
238 保持缓存的操作227 保持缓存的操作
239</h2>228</h2>
240 229
241这些操作要么附加到对话的末尾,要么根本不接触请求。其中一些,例如编辑 CLAUDE.md,保持缓存的原因与更改在执行会话中不生效直到 `/clear`、`/compact` 或重启的原因相同。230这些操作要么追加到对话的末尾,要么根本不触及请求。其中一些操作(例如编辑 CLAUDE.md)保持缓存的原因与该更改在运行会话中不会生效直到 `/clear`、`/compact` 或重启的原因相同。
242 231
243* [编辑存储库中的文件](#editing-files-in-your-repository)232* [编辑存储库中的文件](#editing-files-in-your-repository)
244* [在会话中期编辑 CLAUDE.md](#editing-claude-md-mid-session)233* [在会话中编辑 CLAUDE.md](#editing-claude-md-mid-session)
245* [更改权限模式](#changing-permission-mode)234* [更改权限模式](#changing-permission-mode)
246* [调用技能和命令](#invoking-skills-and-commands)235* [更改输出样式](#changing-output-style)
236* [调用 skills 和命令](#invoking-skills-and-commands)
247* [运行 `/recap`](#running-%2Frecap)237* [运行 `/recap`](#running-%2Frecap)
248* [重绕对话](#rewinding-the-conversation)238* [回溯对话](#rewinding-the-conversation)
249* [生成子代理](#subagents-and-the-cache)239* [生成子代理](#subagents-and-the-cache)
250 240
251<h3 id="editing-files-in-your-repository">241<h3 id="editing-files-in-your-repository">
252 编辑存储库中的文件242 编辑存储库中的文件
253</h3>243</h3>
254 244
255文件内容仅在 Claude 读取它们时进入上下文,读取附加到对话。编辑 Claude 之前读过的文件不会追溯更改历史记录中的较早读取。相反,Claude Code 附加一个 `<system-reminder>` 注意文件已更改,如果需要,Claude 会重新读取它。245文件内容仅在 Claude 读取文件时进入上下文,而读取操作会追加到对话中。编辑 Claude 之前读过的文件不会追溯性地改变历史记录中的早期读取。相反,Claude Code 会追加一条 `<system-reminder>` 注明文件已更改,Claude 会在需要时重新读取该文件。
256 246
257<h3 id="editing-claude-md-mid-session">247<h3 id="editing-claude-md-mid-session">
258 在会话中期编辑 CLAUDE.md248 在会话中编辑 CLAUDE.md
259</h3>249</h3>
260 250
261您的项目根目录和用户级 CLAUDE.md 文件在会话开始时读取一次并保存在内存中。在会话中期编辑它们不会使缓存失效,但编辑也不适用。Claude 继续使用在会话开始时加载的版本。新内容在下一个 `/clear`、`/compact` 或重启时加载。251您的项目根目录和用户级 CLAUDE.md 文件在会话开始时读取一次并保存在内存中。在会话中编辑它们不会使缓存失效,但编辑也不会应用。Claude 继续使用在会话开始时加载的版本。新内容在下一次 `/clear`、`/compact` 或重启时加载。
262 252
263[子目录中的嵌套 CLAUDE.md 文件](/docs/zh-CN/memory)和[带有 `paths:` frontmatter 的规则](/docs/zh-CN/memory#path-specific-rules)稍后加载,当 Claude 首次读取匹配文件时。在加载前编辑一个确实会生效。加载后,内容是对话历史记录的一部分,所以中期编辑不会追溯更改它。253[子目录中的嵌套 CLAUDE.md 文件](/docs/zh-CN/memory)和[带有 `paths:` frontmatter 的规则](/docs/zh-CN/memory#path-specific-rules)稍后加载,当 Claude 首次读取匹配的文件时。在加载前编辑它确实会生效。加载后,内容成为对话历史的一部分,所以中途编辑不会追溯性地改变它。
264 254
265<h3 id="changing-permission-mode">255<h3 id="changing-permission-mode">
266 更改权限模式256 更改权限模式
267</h3>257</h3>
268 258
269在[权限模式](/docs/zh-CN/permission-modes)之间切换,例如从手动到接受编辑,不会改变系统提示或工具定义,所以模式更改是缓存安全的。例外是带有 [`opusplan`](/docs/zh-CN/model-config#opusplan-model-setting) 模型设置的 Plan Mode,它在进入或离开 Plan Mode 时在 Opus 和 Sonnet 之间切换模型。这使模式切换成为[模型切换](#switching-models)。259在[权限模式](/docs/zh-CN/permission-modes)之间切换,例如从手动模式切换到接受编辑,不会改变系统提示或工具定义,所以模式更改是缓存安全的。例外是使用 [`opusplan`](/docs/zh-CN/model-config#opusplan-model-setting) 模型设置的计划模式,它在您进入或离开计划模式时在 Opus 和 Sonnet 之间切换模型。这使得模式切换成为[模型切换](#switching-models)。
260
261<h3 id="changing-output-style">
262 更改输出样式
263</h3>
264
265当您在会话中使用 `/config` 或 `outputStyle` 设置切换[输出样式](/docs/zh-CN/output-styles)时,Claude 从您的下一条消息开始使用新样式。Claude Code 将新样式的指令作为对话中的消息传递,所以该请求仍然从缓存中读取系统提示和早期对话。
266
267在 v2.1.251 之前,中途样式切换保持缓存但直到您运行 `/clear` 或启动新会话时才应用。
270 268
271<h3 id="invoking-skills-and-commands">269<h3 id="invoking-skills-and-commands">
272 调用技能和命令270 调用 skills 和命令
273</h3>271</h3>
274 272
275[技能](/docs/zh-CN/skills)和[命令](/docs/zh-CN/commands)在调用点将其指令注入为用户消息。对话中较早的任何内容都不会改变。其 frontmatter 命名 `model` 的技能或命令可以是该回合的[模型切换](#switching-models)。273[Skills](/docs/zh-CN/skills) 和[命令](/docs/zh-CN/commands)在调用点将其指令作为用户消息注入。对话中早期的任何内容都不会改变。frontmatter 中命名 `model` 的 skill 或命令可以是该轮的[模型切换](#switching-models)。
276 274
277<h3 id="running-/recap">275<h3 id="running-/recap">
278 运行 `/recap`276 运行 `/recap`
279</h3>277</h3>
280 278
281[`/recap`](/docs/zh-CN/interactive-mode#session-recap) 生成一个摘要以在您的终端中显示。与 `/compact` 不同,它将摘要附加为命令输出而不是替换您的消息历史记录,所以缓存的前缀保持完整。279[`/recap`](/docs/zh-CN/interactive-mode#session-recap) 生成一个摘要以在您的终端中显示。与 `/compact` 不同,它将摘要作为命令输出追加而不是替换您的消息历史,所以缓存的前缀保持完整。
282 280
283<h3 id="rewinding-the-conversation">281<h3 id="rewinding-the-conversation">
284 重绕对话282 回溯对话
285</h3>283</h3>
286 284
287[`/rewind`](/docs/zh-CN/checkpointing) 将您的对话截断回较早的回合。剩余的历史记录是缓存在该点构建时的相同内容,系统提示和项目上下文层未更改,所以下一个请求命中较早的缓存条目。自那时以来的每个回合都通过该前缀读取,即使原始回合比 TTL 更久远,也保持条目温暖。285[`/rewind`](/docs/zh-CN/checkpointing) 将您的对话截断回到较早的轮次。剩余的历史是缓存在该点构建时的相同内容,系统提示和项目上下文层保持不变,所以下一个请求会命中较早的缓存条目。从那时起的每一轮都读过该前缀,即使原始轮次比 TTL 更久远,也保持了该条目的活跃。
286
287恢复文件检查点与对话一起对缓存没有单独的影响。文件内容仅在 Claude 读取文件时进入上下文,与[编辑存储库中的文件](#editing-files-in-your-repository)相同。
288
289<h2 id="resuming-a-session">
290 恢复会话
291</h2>
292
293当你[恢复会话](/docs/zh-CN/sessions#resume-a-session)时,Claude Code 会重新发送整个对话,请求会从缓存中读取其前缀中未更改且仍在[缓存生命周期](#cache-lifetime)内的任何部分。本页顶部的层表说明了每一层的变化。
288 294
289恢复文件检查点与对话一起对缓存没有单独的影响。文件内容仅在 Claude 读取它们时进入上下文,与[编辑存储库中的文件](#editing-files-in-your-repository)相同。295系统提示词会在[Claude Code 升级](#upgrading-claude-code)后或在恢复时使用不同的[`--append-system-prompt`](/docs/zh-CN/cli-reference#system-prompt-flags)文本时发生变化。默认情况下,恢复的对话会保持其启动时的系统提示词,因此其历史记录仍然位于相同的提示词后面,更改会在对话被压缩或在新对话中生效。[恢复的对话中的系统提示词标志](/docs/zh-CN/cli-reference#system-prompt-flags-in-resumed-conversations)涵盖了`--system-prompt-snapshot off`和裸模式,其中这不适用。
290 296
291<h2 id="cache-lifetime">297<h2 id="cache-lifetime">
292 缓存生命周期298 缓存生命周期
346 缓存范围352 缓存范围
347</h2>353</h2>
348 354
349在 Claude Code 中,缓存有效地限定在一台机器和目录。系统提示嵌入工作目录、平台、shell、OS 版本和自动内存路径,所以两个不同目录中的会话构建不同的前缀并错过彼此的缓存。这包括同一存储库的 worktrees,因为每个 worktree 都有自己的工作目录。355在 Claude Code 中,缓存有效地限定在一台机器和目录。每个对话都携带工作目录、平台、shell 和 OS 版本,系统提示命名您的自动内存路径,所以两个不同目录中的会话构建不同的前缀并错过彼此的缓存。这包括同一存储库的 worktrees,因为每个 worktree 都有自己的工作目录。
350 356
351您在同一目录中并行运行的会话构建匹配的前缀并读取彼此的缓存。顺序会话仅当启动时的 git 状态快照匹配时才共享前缀,因为系统提示也捕获分支和最近的提交。357您在同一目录中并行运行的会话构建匹配的前缀并读取彼此的缓存。顺序会话仅当启动时的 git 状态快照匹配时才共享前缀,因为每个对话也携带该快照中的分支和最近的提交。
352 358
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)以抑制系统提示的按机器部分并跨机器共享缓存。359底层 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)以抑制系统提示的按机器部分并跨机器共享缓存。
354 360