Skip to content

探索上下文窗口

Claude Code 的上下文窗口包含 Claude 在会话中知道的一切:你的指令、读取的文件、自身响应,以及从不出现在终端的内容。了解各类机制何时加载、占用多少 token,以及 /compact 压缩后哪些内容会重新注入,有助于管理上下文使用效率。用 /context 查看实时分类用量,用 /memory 检查 CLAUDE.md 和自动记忆文件的加载情况。

Claude Code 的上下文窗口包含 Claude 在会话中知道的一切:你的指令、读取的文件、它自己的响应,以及从不出现在终端的内容。理解各类机制何时加载,有助于管理上下文使用效率和成本。

会话时序:什么时候加载什么

输入第一条消息之前

以下内容在你开始对话前就已进入上下文:

  • 系统提示词:Claude Code 的内置指令(包含所选的输出风格
  • CLAUDE.md:项目根目录和父目录中的 CLAUDE.md 文件
  • Auto memory~/.claude/CLAUDE.md 等用户级记忆文件
  • MCP 工具名称:已连接 MCP 服务器的工具列表
  • Skill 描述:已配置 skill 的描述信息

通过 --append-system-prompt 传入的文本也在此时进入系统提示词。

Claude 工作过程中

  • 每次文件读取都会增加上下文
  • paths: frontmatter 的路径范围规则在匹配文件读取时自动加载
  • 子目录中的 CLAUDE.md 在对应目录内的文件被读取时加载
  • PostToolUse hooks 在每次编辑后触发

子代理研究

使用子代理时,大量文件读取在独立的上下文窗口中进行,只有摘要和元数据返回给主会话,大幅节省主上下文空间。


压缩(/compact)后的存活情况

长会话使用 /compact 时,Claude Code 将对话历史压缩为结构化摘要。各机制的处理方式:

机制压缩后行为
系统提示词和输出风格不变,不属于消息历史
项目根目录 CLAUDE.md 和无范围规则从磁盘重新注入
Auto memory从磁盘重新注入
paths: frontmatter 的规则丢失,直到匹配文件再次被读取
子目录 CLAUDE.md丢失,直到对应子目录内的文件再次被读取
已调用的 skill 内容重新注入,每个 skill 上限 5,000 token,总上限 25,000 token;最旧的被优先丢弃
Hooks不适用,hooks 作为代码运行,不占上下文

关键说明

  • 路径范围规则和子目录 CLAUDE.md 在消息历史中加载,因此压缩时与其他内容一起被摘要化,下次读取匹配文件时重新加载
  • 如果规则必须在压缩后持续生效,去掉 paths: frontmatter,或将其移到项目根目录的 CLAUDE.md 中
  • Skill 内容在压缩后重新注入,但大型 skill 会按每 skill 上限截断(保留文件开头),最重要的指令应写在 SKILL.md 顶部

检查你的实际会话

可视化演示使用的是示意性数据。要查看你的实际上下文用量:

/context

返回按类别细分的实时用量,并附带优化建议。

/memory

检查启动时加载了哪些 CLAUDE.md 和 auto memory 文件。


相关文档

常见问题

Q: 为什么有些 CLAUDE.md 内容在长会话后消失了?

子目录 CLAUDE.md 和带 paths: frontmatter 的规则是在消息历史中加载的,压缩(/compact)时会随其他历史内容一起被摘要化。如果需要跨压缩持续生效,去掉 paths: frontmatter 或将内容迁移到项目根目录的 CLAUDE.md 中。

Q: 如何知道当前会话消耗了多少上下文?

运行 /context 查看按类别细分的实时 token 用量和优化建议。状态栏也可以配置显示上下文使用百分比,见Status Line 文档

Q: 子代理会占用我的主会话上下文吗?

不会。子代理在独立的上下文窗口中运行,文件读取等操作不会占用主会话空间,只有子代理的摘要和元数据返回给主会话。