深入了解 Claude Code 的上下文窗口——什么内容会加载、何时加载,以及如何高效管理。
什么是上下文窗口
上下文窗口是 Claude 在一次对话中能"记住"的所有信息。它包含:
- 系统指令
- CLAUDE.md 文件内容
- 自动记忆
- 对话历史(你的消息和 Claude 的回复)
- 文件内容(Claude 读取过的代码)
- 命令输出
- 工具调用的结果
什么会加载到上下文
当 Claude Code 启动时,以下内容会自动加载:
- 系统指令 — Claude 的行为规则和可用工具说明
- CLAUDE.md — 项目根目录和当前目录的指令文件
- 自动记忆 — 前 200 行或 25KB 的经验记录
- 技能描述 — 已安装技能的简介(完整内容按需加载)
随着你工作,更多文件内容、命令输出和工具结果会被添加到上下文中。
上下文满了会发生什么
当上下文窗口接近填满时,Claude Code 会自动管理:
- 先清除旧的工具输出 — 最早的命令结果会被移除
- 然后压缩对话 — 对话历史会被总结为简明的摘要
- 保留关键信息 — 你的请求和重要代码片段会尽量保留
什么会丢失
对话早期的详细指令和上下文可能会在压缩中丢失。这就是为什么重要的规则应该放在 CLAUDE.md 中,而不是在对话中输入。
管理上下文使用
查看上下文使用率
运行 /context 可以查看:
- 当前使用了多少上下文
- 各部分内容的占用比例
- 剩余空间
减少上下文占用的方法
1. 用 CLAUDE.md 替代对话指令
不要每次都告诉 Claude 编码标准——把规则放在 CLAUDE.md 中。
2. 用技能按需加载
不常用的工作流封装成技能,设置 disable-model-invocation: true,这样不会在会话开始时占用上下文。
3. 用子代理处理长任务
子代理有自己独立的上下文窗口,不会影响你的主会话。完成后只返回摘要。
4. 控制工具输出的大小
读取大文件时指定范围,运行命令时限制输出长度。
压缩指令(Compact Instructions)
你可以在 CLAUDE.md 中添加"Compact Instructions"部分,告诉 Claude 在压缩时应该保留什么:
## Compact Instructions
- 保留所有 API 端点的定义
- 保留数据库 schema 变更的讨论
- 保留测试失败的错误信息
- 可以丢弃中间的文件浏览记录
上下文窗口满时的错误处理
如果单个文件或工具输出太大,导致每次压缩后上下文立刻又满,Claude Code 会在几次尝试后停止自动压缩并显示错误。此时你可以:
- 手动清除会话历史:
/clear - 开始新的会话
- 将重要的上下文存入
CLAUDE.md