用法
Claude Code 上下文窗口详解:上下文满了怎么办、compact 会保留什么
上下文窗口装着 Claude 在这次会话里知道的一切:你的指令、读过的文件、它自己的回复,还有从来不会显示在终端里的内容。这一页按 Anthropic 的 Explore the context window 文档,中文整理启动时加载什么、怎么查看用量、上下文满了会怎样、/compact 之后哪些内容还在,以及 /compact、/clear、/rewind 各自怎么用。文档于 2026 年 10 月 30 日核对。
- 上下文窗口里不只有你的对话:CLAUDE.md、auto memory、MCP 工具名和 skill 描述在你输入任何内容之前就已经加载。
- 运行
/context可以看到按类别划分的实时用量,以及优化建议。 - 接近上限时 Claude Code 会自动压缩,所以上下文满了不会结束会话。
- 压缩后,项目根目录的 CLAUDE.md 和 auto memory 会从磁盘重新注入;带
paths:的规则、子目录里的 CLAUDE.md 则要等再次触发才会重新加载。 - 想让摘要保留你关心的内容,运行
/compact并写上重点,例如/compact focus on the auth bug fix;切换到不相关的工作时用/clear。
上下文窗口里装了什么
文档用一个带时间线的模拟,演示一次会话从启动到压缩的全过程,里面用的是有代表性的 token 数字,不是你的真实用量。按文档的描述,顺序大致是这样:
- 你输入任何内容之前:CLAUDE.md、auto memory、MCP 工具名和 skill 描述都会加载进上下文。AGENTS.md 可以代替 CLAUDE.md 加载。你自己的配置还可能在这里加入更多内容,比如 output style,或者
--append-system-prompt传入的文本。 - Claude 工作时:每读一个文件,上下文就增加一块;带路径范围的规则会在匹配的文件出现时自动加载;每次编辑之后,PostToolUse hook 会触发。
- 后续的提问:subagent 在它自己独立的上下文窗口里做调研,所以大量的文件读取不会进到你的上下文里,只有摘要和一小段元数据会返回。
- 时间线的结尾:你运行
/compact,对话被替换成一份结构化的摘要。大部分启动时的内容会自动重新加载,具体每一项怎么处理见下表。
subagent 的写法见 Claude Code subagents 使用教程,skill 的写法见 Claude Code skills 使用教程,CLAUDE.md 的写法见 CLAUDE.md 怎么写。
怎么查看上下文用量
文档说,要看自己会话的真实用量,随时运行 /context:它按类别给出实时明细和优化建议,包括加载了哪些 CLAUDE.md 和 auto memory 文件。运行 /memory 可以打开并编辑这些文件。
命令文档里对这两个命令的描述如下:
| 命令 | 文档的说明 |
|---|---|
/context [all] | 把当前上下文用量显示成彩色网格,并针对占用上下文较多的工具、memory 膨胀和容量告警给出优化建议。对话超出上下文窗口时,输出里会带一条警告,显示超出了多少、用哪个命令可以腾出空间。在全屏模式下,/context 会把逐项明细折叠起来,让网格保持可见,加上 all 可以展开。 |
/memory | 编辑 CLAUDE.md 文件,开启或关闭 auto memory,并查看 auto memory 条目。 |
成本文档还提到,用 /usage 可以查看当前的 token 用量,也可以配置状态栏来持续显示。/usage 显示的是会话费用、套餐用量限额和活动统计。
上下文满了会怎样
接近上限时,Claude Code 会自动压缩,所以上下文窗口满了并不会结束你的会话。自动压缩的做法和时间线里的 /compact 一步相同。
压缩触发的位置取决于你的模型和配置。文档把各模型的默认阈值,以及 Claude Code 对你的模型 ID 假设了错误窗口时怎么修正,放在 model-config 页面,这一页没有给出具体数字。
如果需要的是更大的窗口,而不是更短的对话:文档说 Fable 模型、Sonnet 5 及之后、Haiku 5.5、Opus 4.6 及之后、Sonnet 4.6 支持 1 million token 的上下文窗口,各套餐是否可用、怎么选 [1m] 模型变体,见文档的 Extended context 一节。文档同时说明,窗口更大时压缩的方式不变。
压缩后什么保留、什么不保留
长会话压缩时,Claude Code 会对对话历史做摘要,让它装进上下文窗口。从 v2.1.198 起,摘要请求会沿用你会话的 extended thinking 配置:会话开着 thinking,摘要时就带着 thinking 推理,否则就关着。thinking 只影响摘要的生成,压缩之后你的会话设置不变。每一类内容怎么处理,取决于它是怎么加载进来的:
| 机制 | 压缩之后 |
|---|---|
| 系统提示和 output style | 两者仍然生效 |
| 项目根目录的 CLAUDE.md 和无范围限定的规则 | 从磁盘重新注入 |
| Auto memory | 从磁盘重新注入 |
| Skill 描述 | 按你当前的 skills 重新构建并注入。需要 Claude Code v2.1.304 或更高版本 |
| Git status 快照 | 如果会话启动时带了一份,Claude Code 会从你的仓库重新读取一份新的 |
| Claude 在 plan mode 里写的计划 | 从磁盘重新注入 |
带 paths: frontmatter 的规则 | Claude Code 按需重新加载 |
| 子目录里的嵌套 CLAUDE.md | Claude Code 按需重新加载 |
| Claude 读过或编辑过的文件 | Claude Code 重新读取最多五个,按最近修改的优先 |
| 已调用的 skill 正文 | 重新注入,每个 skill 上限 5,000 token,合计上限 25,000 token;最早的先被丢弃 |
| 后台命令和后台 subagent | 继续运行。Claude Code 会提醒 Claude 哪些还在运行,避免它重复启动 |
| 之前由 hook 加进来的上下文 | 和对话的其余部分一起被摘要 |
匹配 compact 来源的 SessionStart hook | Claude Code 会运行它们,并把输出加进压缩后的上下文 |
有三点文档特别说明:
- 文件重读有大小限制。压缩之后,Claude Code 会重新读取 Claude 读过或编辑过的最多五个文件,选最近修改的。超过 5,000 token 的文件只会以路径引用的形式回来,不带内容,显示为
Referenced file而不是Read。 - 带路径的规则和嵌套 CLAUDE.md 会被摘要掉。它们是在 Claude 读取、写入或编辑触发文件时才加载进消息历史的,所以压缩时和其他内容一起被摘要。如果一条规则必须在压缩后保留,就去掉
paths:frontmatter,或者把它移到项目根目录的 CLAUDE.md。 - skill 正文可能被截断。skill 正文会重新注入,但大的 skill 会被截断到每个 skill 的上限,总预算超出后最早调用的 skill 被丢弃。截断保留文件的开头,所以把最重要的说明放在
SKILL.md靠前的位置。
压缩之前你能做什么
在自动压缩触发之前,你可以自己动手。文档列了五种做法:
| 做法 | 怎么做 |
|---|---|
| 带重点地压缩 | 开始一个长的新任务之前,运行带说明的 /compact,例如 /compact focus on the auth bug fix。摘要会保留你选的内容,而不是自动压缩猜测的重点。 |
| 压缩对话的一部分 | 运行 /rewind,选一条消息,选择 Summarize from here 或 Summarize up to here。 |
| 提前压缩 | 运行 /autocompact 并带上 token 数,例如 /autocompact 500k,设置上下文窗口填到多满才触发自动压缩。 |
| 任务之间清空 | 切换到不相关的工作时运行 /clear。旧对话会挤掉你接下来需要的文件,并且每条消息都要为它付 token。 |
| 把大量读取交给 subagent | 把调研交给 subagent,文件内容留在它的上下文窗口里,而不是你的。 |
命令文档对相关命令的说明:
| 命令 | 文档的说明 |
|---|---|
/compact [instructions] | 通过摘要当前的对话来腾出上下文。可以选择性地传入摘要的重点说明。 |
/clear [name] | 开始一个上下文为空的新对话。传入名字,可以在 /resume 选择器里给上一个对话加标签。想在继续同一个对话的同时腾出上下文,改用 /compact。用 /resume 可以恢复上一个对话。别名:/reset、/new。 |
/rewind | 把对话和(或)代码回退到之前的某个时间点,或者从选中的消息开始做摘要。别名:/checkpoint、/undo。 |
/autocompact [auto|<tokens>] | 设置自动压缩窗口:上下文窗口填到多满之前 Claude Code 才自动压缩。可以传入 500k 这样的大小,或用 auto 回到针对你模型调好的窗口。Claude Code 把这个值保存到用户设置,并应用于当前会话。需要 Claude Code v2.1.221 或更高版本。 |
让上下文保持精简
成本文档里和上下文有关的建议,摘录如下:
- 任务之间
/clear。陈旧的上下文会让之后每一条消息都浪费 token。清空之前先用/rename,以后就能找到这个会话,再用/resume回去。 - 写自定义压缩说明。
/compact Focus on code samples and API usage告诉 Claude 摘要时要保留什么。也可以在项目根目录的 CLAUDE.md 里写:# Compact instructions When you are using compact, please focus on test output and code changes - 留意 MCP。MCP 工具定义默认是延迟加载的,所以在 Claude 用到某个具体工具之前,只有工具名和服务器说明会进入上下文。运行
/context看什么在占空间。 - 优先用 CLI 工具。
gh、aws、gcloud、sentry-cli这类工具比 MCP 服务器更省上下文,因为它们没有逐个工具的列表。 - 精简 CLAUDE.md。CLAUDE.md 在会话开始时加载进上下文。如果里面有针对特定流程的详细说明,即使你在做不相关的事,这些 token 也在。skill 只在被调用时才加载,所以把专门的说明挪进 skill 能让基础上下文更小。文档建议把 CLAUDE.md 控制在 200 行以内,只放必要的内容。
- 把冗长的输出交给 subagent。跑测试、取文档、处理日志文件都可能占用大量上下文,交给 subagent,冗长的输出留在它的上下文里,只有摘要回到主对话。
- 用 hook 预处理数据。文档的例子:与其让 Claude 读一个 10,000 行的日志文件去找错误,不如用 hook 对
ERROR做 grep,只返回匹配的行,上下文就从几万 token 降到几百。
这些做法在费用上的效果,我们的 Claude Code 省钱指南里有按成本角度的讲解,缓存的行为见缓存说明;这一页只讲上下文本身怎么运作。
常见问题
上下文窗口满了,会话会中断吗?
不会。文档说 Claude Code 会在接近上限时自动压缩,所以窗口满了并不会结束你的会话。你也可以在它触发之前自己运行 /compact,用重点说明决定摘要保留什么。具体在什么位置触发,取决于你的模型和配置。
压缩之后,CLAUDE.md 里的规则还在吗?
项目根目录的 CLAUDE.md 和无范围限定的规则会从磁盘重新注入。带 paths: frontmatter 的规则和子目录里的 CLAUDE.md 不同:它们是按需重新加载的,在压缩时会被摘要掉。如果一条规则必须跨压缩保留,文档的建议是去掉 paths: frontmatter,或者把它移到项目根目录的 CLAUDE.md。
/compact 和 /clear 有什么区别?
/compact 摘要当前对话来腾出上下文,对话继续;/clear 开始一个上下文为空的新对话,上一个对话可以用 /resume 恢复。命令文档说得很直接:想在继续同一个对话的同时腾出上下文,用 /compact。切换到不相关的工作时,文档建议用 /clear。
来源
- Claude Code:Explore the context window(启动时加载的内容、压缩后保留什么、上下文满了怎么办、
/context) - Claude Code:Commands(
/context、/compact、/clear、/rewind、/autocompact、/memory、/usage) - Claude Code:Manage costs effectively(控制上下文的做法、自定义压缩说明)