上下文管理策略
理解 Claude Code 的上下文窗口
上下文窗口(Context Window)是 Claude 能够”记住”的信息总量。你可以把它想象成 Claude 的”工作台”——工作台的大小是有限的,放在上面的所有东西(对话历史、文件内容、CLAUDE.md、工具调用结果)都会占用空间。
上下文由什么组成
Claude Code 的上下文包含以下内容:
- 系统提示:Claude Code 内部的指令和配置
- CLAUDE.md 内容:项目记忆文件
- 对话历史:你和 Claude 的所有对话
- 文件内容:Claude 读取的源代码文件
- 工具调用结果:命令执行输出、搜索结果等
- 当前任务上下文:Claude 正在处理的信息
为什么上下文管理很重要
上下文空间是有限的。当上下文接近满载时:
- Claude 可能”忘记”早期对话中的重要信息
- 响应速度会变慢(需要处理更多 token)
- 自动压缩可能会丢失关键细节
- Claude 的推理质量可能下降
因此,主动管理上下文是高效使用 Claude Code 的重要技能。
上下文自动压缩
当对话内容超过上下文窗口的容量时,Claude Code 会自动执行上下文压缩(Auto-compaction)。
自动压缩的工作原理
- 触发条件:当上下文使用量接近窗口上限时自动触发
- 压缩过程:Claude 会对之前的对话生成一份摘要,替换掉完整的对话历史
- 保留策略:最近的对话轮次会完整保留,较早的对话被压缩为摘要
- 不可逆:压缩后无法恢复原始的完整对话
自动压缩的影响
自动压缩后,你可能会注意到:
- Claude 对早期讨论的细节记忆变模糊
- 之前确认过的方案可能需要重新说明
- 某些约定好的命名或格式可能被遗忘
这并不是 Bug,而是上下文管理的必然结果。你可以通过后面介绍的策略来减轻这个影响。
使用 /clear 重置上下文
/clear 命令会完全清除当前的对话历史,回到初始状态(CLAUDE.md 和系统提示仍会保留)。
何时使用 /clear
> /clear适合使用 /clear 的场景:
- 切换任务:从修 Bug A 转到开发功能 B,两者没有关联
- 上下文污染:之前的对话引入了错误的假设,影响了后续输出
- 重新开始:之前的讨论方向不对,想从头来过
- 长时间对话后:对话累积了大量不再需要的信息
/clear 的效果
清除前的上下文:- 30 轮对话历史- 15 个文件的内容- 多次工具调用结果- CLAUDE.md 内容
执行 /clear 后:- 对话历史清空- 文件内容清空- 工具调用结果清空- CLAUDE.md 内容保留 ✓注意事项
使用 /clear 后,Claude 会忘记之前讨论的所有内容。如果后续任务需要引用之前的上下文,你需要重新提供。建议在 /clear 前把重要的结论记录下来,或者写入 CLAUDE.md。
使用 /compact 压缩上下文
/compact 命令执行手动的上下文压缩,将当前对话总结为一份简洁的摘要,释放上下文空间。
基本用法
> /compactClaude 会生成当前对话的摘要,替换掉完整的对话历史。与自动压缩不同,手动压缩让你可以在合适的时机主动执行。
带指令的压缩
你可以在 /compact 后附加指令,告诉 Claude 在压缩时重点保留哪些信息:
> /compact 重点保留关于数据库迁移方案的讨论,以及已确认的表结构设计这样 Claude 在生成摘要时会优先保留你指定的内容。
/compact vs /clear 的区别
| 特性 | /compact | /clear |
|---|---|---|
| 对话历史 | 压缩为摘要保留 | 完全清除 |
| 任务连续性 | 保持 | 中断 |
| 上下文释放量 | 中等 | 最大 |
| 适用场景 | 同一任务继续工作 | 切换到全新任务 |
使用 /compact 的最佳时机
- 一个小任务完成后,准备开始同一项目的下一个小任务
- 上下文消耗较多但还不需要完全重置
- 想释放空间但又需要保留之前讨论的关键结论
大型代码库的上下文策略
在大型项目中,上下文管理尤为重要。以下策略能帮助你高效利用有限的上下文空间。
策略一:聚焦特定文件
不要让 Claude 一次性处理太多文件。给出明确的范围:
<!-- 不推荐 -->> 帮我优化项目的性能
<!-- 推荐 -->> 帮我优化 src/components/DataTable.tsx 的渲染性能, 这个组件在数据量超过 1000 行时明显卡顿策略二:善用 CLAUDE.md 作为持久记忆
对话中确认的重要决策,写入 CLAUDE.md 让它成为”持久记忆”:
> 我们刚刚讨论确认了 API 的分页方案使用 cursor-based pagination。 请把这个决策添加到 CLAUDE.md 的注意事项中。这样即使上下文被压缩或清除,Claude 下次启动时仍然知道这个决策。
策略三:分而治之
大任务拆成多个小任务,每个小任务独立完成:
# 第一轮对话:设计数据模型> 帮我设计评论功能的数据库表结构
# 完成后 /compact 或 /clear
# 第二轮对话:实现 API> 基于 src/models/comment.ts 中已定义的模型,实现评论的 CRUD API
# 完成后 /compact 或 /clear
# 第三轮对话:实现前端> 基于 src/api/comments.ts 中的 API 接口,实现评论组件策略四:提供精确的文件引用
直接告诉 Claude 需要看哪些文件,减少不必要的文件探索:
> 请修改 src/services/order-service.ts 中的 createOrder 方法, 添加库存检查逻辑。库存服务在 src/services/inventory-service.ts 中。这比”帮我在下单时检查库存”更高效,因为 Claude 不需要花费上下文去搜索相关文件。
使用 /cost 查看上下文使用情况
/cost 命令可以查看当前会话的上下文使用量和费用信息。
基本用法
> /cost输出示例:
当前会话统计:- 输入 tokens: 45,230- 输出 tokens: 12,890- 总费用: $0.58利用 /cost 做决策
定期检查 /cost 可以帮助你决定:
- 上下文快满了 -> 考虑 /compact 或 /clear
- 消耗异常高 -> 可能是 Claude 读取了不必要的大文件
- 费用监控 -> 了解每个任务的成本
减少不必要的上下文消耗
以下技巧可以有效减少上下文浪费:
避免让 Claude 读取大文件的全部内容
<!-- 浪费上下文 -->> 读取 src/generated/api-types.ts 然后告诉我 User 类型的定义
<!-- 节约上下文 -->> 在 src/generated/api-types.ts 中搜索 User 接口的定义,只给我相关的部分避免重复提问
如果 Claude 已经给出了答案,直接引用而不是重新让它分析:
<!-- 浪费上下文 -->> 再帮我看一下 UserService 的结构(之前已经看过了)
<!-- 节约上下文 -->> 基于你之前对 UserService 的分析,请在 getUserById 方法中添加缓存逻辑简洁的提示
<!-- 啰嗦 -->> 你好,我想问一下,能不能帮我看看 src/utils/format.ts 这个文件里面的 formatDate 函数,我觉得它的实现方式可能不太对, 因为在某些时区下好像返回的日期不对,你能帮我检查一下吗?
<!-- 简洁 -->> src/utils/format.ts 的 formatDate 函数在非 UTC 时区下返回错误的日期, 请分析并修复。不需要的输出用 /dev/null
如果你只关心命令的执行结果而不关心输出,可以告诉 Claude:
> 运行 npm install,不需要显示完整的安装日志多轮对话的最佳实践
明确每轮对话的目标
每一轮交互都应该有清晰的目标:
# 第一轮:明确需求> 我想实现文件上传功能,支持拖拽上传、多文件上传、进度显示。 技术方案上有什么建议?
# 第二轮:确认方案后执行> 方案确认,请开始实现。先从后端 API 开始。
# 第三轮:继续实现> 后端完成了。现在实现前端的上传组件。定期总结状态
在长对话中,主动让 Claude 总结当前状态:
> 我们目前完成了哪些步骤?还有什么没做?这既能帮你了解进度,也能帮 Claude 整理上下文中的关键信息。
使用 todo 列表跟踪进度
对于多步骤任务,让 Claude 维护一个 todo 列表:
> 帮我列一个任务清单,跟踪我们这个功能的开发进度Claude 会创建一个结构化的任务列表,每完成一步就更新状态。
及时纠正方向
如果发现 Claude 走偏了,立即纠正,不要等它做完再推翻:
> 等一下,这个方向不对。我要的不是客户端渲染,而是服务端渲染。 请重新实现这个组件。越早纠正,浪费的上下文越少。
上下文管理的完整工作流
一个典型的高效 Claude Code 工作流如下:
1. 启动 Claude Code(自动加载 CLAUDE.md)2. 明确当前任务目标3. 提供精确的文件引用和上下文4. 执行任务5. 验证结果6. 如需继续同类任务 -> /compact7. 如需切换到完全不同的任务 -> /clear8. 定期检查 /cost 监控使用量9. 重要决策写入 CLAUDE.md小结
上下文管理是 Claude Code 进阶使用的核心技能。核心要点:
- 理解上下文窗口:知道它是有限的,所有内容都在消耗空间
- 自动压缩:了解它的触发条件和影响
- /clear 和 /compact:根据场景选择合适的清理方式
- 聚焦策略:在大型代码库中,始终给 Claude 明确的工作范围
- 利用 CLAUDE.md:将重要决策写入持久记忆
- 减少浪费:避免读取不必要的文件、重复提问和冗余的提示
- 定期检查:用 /cost 监控上下文使用量