上下文窗口
上下文窗口在一次会话里怎么被填满:启动时自动加载什么、压缩后什么会保留、快满时能做什么,以及怎么查看自己会话的用量。
官方这一页是一个交互式模拟,演示 Claude Code 的上下文窗口在会话中如何被逐步填满。这里整理它想说明的要点(模拟里的 token 数是示意性的,不是你会话里的真实数字)。
时间线里发生了什么
模拟走了一遍典型的流程:
- 你输入任何内容之前:CLAUDE.md、自动记忆、MCP 工具名和 Skill 描述就已经加载进上下文了。AGENTS.md 文件也可能加载,单独或与 CLAUDE.md 一起。你自己的设置可能在这里再增加东西,比如输出风格
- Claude 工作时:每次读文件都会增加上下文;按路径限定的规则会随匹配的文件自动加载;每次编辑后
PostToolUseHook 会触发 - 后续提示:子智能体在自己独立的上下文窗口里完成调研,所以大量的文件读取不进你的上下文,只有摘要和一小段元数据回来
- 最后:你运行
/compact,它用一份结构化摘要替换对话;大部分启动内容会自动重新加载
压缩后什么会保留
长会话压缩时,Claude Code 会总结对话历史以适应上下文窗口。从 v2.1.198 起,摘要请求继承你会话的扩展思考配置。各机制在压缩后的表现:
| 机制 | 压缩后 |
|---|---|
| 系统提示和输出风格 | 两者仍然适用 |
| 项目根 CLAUDE.md 和不限定路径的规则 | 从磁盘重新注入 |
| 自动记忆 | 从磁盘重新注入 |
| git 状态快照 | Claude Code 从你的仓库读取一份新的 |
| Claude 在计划模式里写的计划 | 从磁盘重新注入 |
带 paths: 前置信息的规则 | Claude 读到它们匹配的文件时重新加载 |
| 子目录里嵌套的 CLAUDE.md | Claude 读到那个子目录里的文件时重新加载 |
| Claude 读过或编辑过的文件 | Claude Code 重新读取最多五个,最近修改的优先 |
| 已调用的 Skill 正文 | 重新注入,每个 Skill 上限 5,000 token、总计 25,000 token,最旧的先丢弃 |
| 后台命令和后台子智能体 | 继续运行,Claude Code 会提醒 Claude 哪些仍在运行,避免重复启动 |
| Hook 之前添加的上下文 | 与对话的其余部分一起被总结 |
匹配 compact 来源的 SessionStart Hook | Claude Code 运行它们并把输出加入压缩后的上下文 |
压缩之后,Claude Code 立即重新读取 Claude 在会话里读过或编辑过的至多五个文件(选最近修改的);超过 5,000 token 的文件回来时只是一个路径引用,不含内容。按路径限定的规则和嵌套 CLAUDE.md 在触发文件被读取时加载进消息历史,所以压缩会把它们和其他一切一起总结掉;如果某条规则必须在压缩后保留,去掉 paths: 前置信息,或把它移到项目根 CLAUDE.md。Skill 正文在压缩后重新注入,但大 Skill 会被截断以适应单个上限,总预算超出后最旧调用的 Skill 先被丢弃;截断保留文件开头,所以把最重要的指令放在 SKILL.md 靠前的位置。
上下文快满时
Claude Code 在接近限制时自动压缩,所以上下文窗口满了不会结束你的会话。你也可以在自动压缩运行之前行动:
- 带聚焦地压缩:开始一个长的新任务之前运行
/compact并带上指令,如/compact focus on the auth bug fix,摘要就保留你选的内容,而不是自动压缩猜测重要的内容 - 压缩部分对话:运行
/rewind,选一条消息,选择 Summarize from here 或 Summarize up to here - 更早压缩:运行
/autocompact并带 token 数(如/autocompact 500k),设置上下文窗口填到多满时自动压缩运行 - 任务之间清空:切换到无关工作时运行
/clear。旧对话会挤占你接下来需要的文件,并在每条消息上花 token - 把大量读取委派出去:把调研交给子智能体,文件内容留在它的上下文窗口里,而不是你的
如果你需要的是更大的窗口,而不是更小的对话:Fable 模型、Sonnet 5 及更新版本、Opus 4.6 及更新版本和 Sonnet 4.6 支持 100 万 token 的上下文窗口。
查看你自己的会话
可视化用的是有代表性的数字。想随时查看你实际的上下文使用,运行 /context,得到按类别划分的实时明细,附带优化建议,包括加载了哪些 CLAUDE.md 和自动记忆文件;运行 /memory 打开并编辑这些文件。