上下文管理是高效使用 Claude Code 的核心技能。
官方文档明确指出: 上下文窗口是 Claude Code 最重要的资源 ,随着上下文填满,模型性能会逐渐下降(称为上下文衰退,context rot)——这是使用 Claude Code 时需要主动对抗的核心问题。
本章深入讲解如何通过 CLAUDE.md 指令文件、自动记忆系统、上下文窗口优化命令等手段,让 Claude 在长会话和跨会话中保持高效状态。
上下文窗口基础
1、上下文窗口包含什么
Claude Code 的上下文窗口大小为 1,000,000 tokens(100 万 token) 。它容纳了 Claude 在当前会话中"看到"的一切内容:
2、上下文衰退(Context rot)
官方明确指出:随着上下文填满, LLM 性能会下降 ,因为注意力被分散到更多 token 上,旧的、不相关的内容开始干扰当前任务。具体症状包括:
出现以上症状说明上下文已经"污染",此时应主动使用 /compact 或 /clear 处理,而不是继续在同一会话中纠正。
使用 /context 命令可以随时查看当前上下文的详细用量分析:
/context
它会按分类(系统提示、CLAUDE.md、记忆文件、会话历史等)列出 token 占用,并给出优化建议。建议在开始重要任务前先检查一次。
CLAUDE.md 指令文件
CLAUDE.md 是 Claude Code 中记录静态指令和项目规范的核心文件。每次会话启动时,Claude 会自动将其加载到上下文窗口中。
1、存放位置与作用范围
CLAUDE.md 支持多个位置, 更具体的位置优先级更高 :
CLAUDE.local.md 是个人私有配置的官方推荐方式:沙箱 URL、本地测试账号、个人调试习惯等不应共享的内容,应放在这里而不是 CLAUDE.md 中。运行 /init 时选择"个人"选项,它会自动将该文件加入 .gitignore 。
2、创建 CLAUDE.md
执行以下命令,Claude 会自动分析项目并生成初始 CLAUDE.md:
/init
如果已有 CLAUDE.md, /init 会建议改进而不是直接覆盖。生成后,手动补充 Claude 无法自动发现的内容(如禁止修改的文件、特殊约束等)。
也可以在会话中用 # 快捷键快速向 CLAUDE.md 追加一条记忆:
# 所有 API 错误响应必须使用 { code, message } 格式
按下 # 后输入内容回车,Claude 会将其写入对应层级的 CLAUDE.md,作为持久指令保存。
3、CLAUDE.md 内容要求
官方要求每个 CLAUDE.md 文件 控制在 200 行以内 。文件越大,消耗的启动 token 越多,Claude 的遵守率反而越低。以下是内容建议:
应该写入:
不应该写入:
实例
4、按路径限定规则(.claude/rules/)
对于较大的项目,可以用 .claude/rules/ 目录将指令拆分为按文件路径生效的细粒度规则,避免所有规则都堆在根 CLAUDE.md 中消耗启动 token:
.claude/ └── rules/ ├── api.md # 只对 src/api/**/*.ts 文件生效 ├── frontend.md # 只对 src/components/**/*.tsx 文件生效 └── testing.md # 只对 *.test.ts 文件生效
路径限定规则只在 Claude 读取对应目录下的文件时才会加载,不在启动时全量占用上下文。
自动记忆(Auto memory)
自动记忆是 Claude Code v2.1.59 及以上版本内置的跨会话记忆系统, 默认开启 ,无需任何配置。它让 Claude 在工作过程中自主记录发现的构建命令、调试经验、代码风格偏好等信息。
1、工作机制
2、查看与编辑记忆(/memory)
使用 /memory 命令查看和编辑所有记忆内容,包括各级 CLAUDE.md 和自动记忆:
/memory
在编辑器中可以删除不准确的条目,或使用 Auto memory 开关禁用自动记忆功能。也可以通过环境变量临时禁用:
CLAUDE_CODE_DISABLE_AUTO_MEMORY=1 claude
3、主动让 Claude 记住内容
对话中可以直接让 Claude 写入记忆:
记住:我们的 API 测试需要本地运行一个 Redis 实例
以后请记住:处理错误时,统一返回 { code, message } 结构
如果想升级为强制规范而非只是偏好记忆,可以说:"把这条规则写进 CLAUDE.md",Claude 会将其写入对应的 CLAUDE.md 文件。
上下文窗口优化命令
1、自动压缩(Auto-compaction)
Claude Code 在 上下文接近限制时会自动触发压缩 (约在 75% 用量左右),将对话历史总结为摘要后继续工作。但官方建议不要等待自动压缩,应 主动在 60~70% 时手动触发 ,避免在关键任务中间被打断,且主动压缩可以通过指令控制保留哪些内容。
2、压缩上下文(/compact)
手动压缩对话历史,将长会话总结为精简摘要继续工作:
/compact
/compact 支持传入自定义指令,控制压缩时重点保留哪些内容:
/compact Focus on the API changes
/compact 保留认证流程的架构决策,丢弃调试过程中的无效尝试
3、清除上下文(/clear)
切换到全新任务时清除所有对话历史:
/clear
清除后 CLAUDE.md 和自动记忆不受影响,仍会在新会话中加载。官方建议: 如果在同一会话里对同一问题纠正了两次以上,不如直接 /clear,带着学到的约束重新开始一个更精准的提示词 ——干净的会话加上更好的提示,几乎总是好过在污染的上下文中继续纠正。
4、回退到检查点(/rewind)
Claude Code 在每次修改文件前会自动创建检查点。双击 Esc 或执行 /rewind 可打开回退菜单,选择要恢复的检查点:
/rewind
(或双击 Esc 键)
在回退菜单中,你可以选择以下操作:
检查点跨会话持久保存——关闭终端后仍然可以回退到之前的检查点。这不是 git 的替代品,但在探索性实验中比手动 git stash 更方便。
5、快速提问不污染上下文(/btw)
如果需要快速查询一个小细节,但不想让这次问答进入对话历史(消耗上下文),使用 /btw :
/btw 这个项目的 TypeScript 版本是多少?
答案会以浮层方式展示,问题和答案都不会进入对话历史,适合查阅配置、版本号等不需要保留的一次性信息。
会话管理命令
常见问题与解决方案
问题一:Claude 没有遵守 CLAUDE.md 中的规则
问题二:Claude 开始前后矛盾,"忘记"之前的决策
问题三:/compact 后关键信息丢失
问题四:关闭终端后如何继续上次工作
问题五:某个大任务会产生大量工具输出,怎么避免上下文爆满