管理 Claude 的有限记忆
Claude 的上下文窗口就像一块白板——空间有限,写满了旧内容就没地方放新信息。
今天你将学习如何用 /compact 主动"擦白板"、理解自动压缩的触发机制、
掌握 /clear 的重置策略,以及在长时间工作中用 --continue 和 --resume
维持最佳工作状态。
思维导图
上下文窗口 — 理解"有限记忆"
Claude 不会真正"记住"你们之前聊了什么——它只是把所有对话内容放进一个固定大小的窗口里, 每次回答时从头到尾读一遍。窗口满了,旧内容就必须被压缩或丢弃。 理解这个机制是高效使用 Claude Code 的前提。
上下文窗口里装了什么
Token 是什么
| 内容 | 大约 Token 数 | 说明 |
|---|---|---|
| 1 个英文单词 | ~1 token | "hello" = 1 token |
| 1 个中文字 | ~1.5 token | "你好" ≈ 3 tokens |
| 1 行代码 | ~10-15 tokens | 取决于变量名长度和复杂度 |
| 一次 Read 工具结果 | ~500-5000 tokens | 读大文件会迅速填满上下文 |
| 典型 CLAUDE.md | ~300-800 tokens | 每次对话都会消耗的固定开销 |
"越靠后越清晰"
Claude 对最近的消息注意力最强——如果对话很长,前面讨论过的细节可能被"遗忘"或混淆。这不是 Bug,而是 Transformer 架构的固有特性。对策:在长对话中重复关键信息,或用 /compact 把旧内容压缩为摘要。
工具结果是隐形的大户
每次 Read 文件、grep 搜索、运行 Bash 命令,返回的结果都会被完整存入上下文。一次 Read 一个 500 行文件可能消耗 5000+ tokens。连续读几个文件后,你的对话空间可能已经用掉一半了——即使你只说了两句话。
/compact — 主动压缩上下文
/compact 是你管理上下文的核心武器。
它让 Claude 把当前对话中的旧消息压缩成一段精简摘要,
然后用这段摘要替换原始内容——腾出大量空间给后续对话。
/compact 的用法
# 基础用法: 压缩当前对话 > /compact # Claude 会把之前的对话历史压缩为一段摘要 # 你会看到: "Conversation compacted. Summary: ..." # 带焦点的压缩: 告诉 Claude 重点保留什么 > /compact 保留关于数据库迁移的讨论细节 # 摘要会侧重数据库迁移的上下文 > /compact focus on the API endpoints we designed # 摘要会侧重 API 设计细节
何时使用 /compact
| 场景 | 信号 | 操作 |
|---|---|---|
| 上下文快满了 | 底部进度条超过 70% | /compact — 立刻释放空间 |
| 任务阶段切换 | 调试完毕,准备写测试 | /compact 保留修复方案的结论 |
| 大量文件读取后 | 连续 Read 了多个文件 | /compact — 文件内容已理解,不需要原文 |
| Claude 开始"忘事" | 重复问你已经回答的问题 | /compact 重点保留关键决策 |
| 主动预防 | 预感接下来的操作会很长 | 先 /compact,再开始大任务 |
自动压缩
即使你不手动调用 /compact,Claude Code 也会在上下文接近极限时 自动触发压缩。
主动优于被动
自动压缩是安全网,但不是最优方案。它在紧急时刻触发,没有焦点参数——Claude 只能猜测哪些信息重要。手动 /compact 让你控制保留哪些细节,压缩质量更高。养成在任务阶段切换时主动 compact 的习惯。
压缩后发生了什么
压缩后,Claude 看到的不是原始对话,而是一段压缩摘要 + 未被压缩的最近消息。摘要保留了关键事实和决策,但具体的代码片段和工具输出会丢失。如果压缩后需要某个文件的内容,你需要让 Claude 重新读取。
/clear — 清空与重置
/clear 是最彻底的上下文管理手段——
它完全清空当前对话历史,回到"刚打开 Claude"的状态。
但注意:CLAUDE.md 和 Memory 仍然生效,
因为它们不是对话的一部分。
/clear 的用法
# 清空当前对话 > /clear # 对话历史完全清空 # CLAUDE.md 和 Memory 仍然加载 # 就像刚打开一个新的 claude 会话
/compact vs /clear — 何时选哪个
| 维度 | /compact | /clear |
|---|---|---|
| 效果 | 压缩旧消息为摘要 | 完全删除所有对话历史 |
| 上下文保留 | 保留摘要 + 最近消息 | 零——全部清空 |
| 适用场景 | 同一任务需要继续 | 切换到完全不同的任务 |
| CLAUDE.md | 仍然生效 | 仍然生效 |
| Memory | 仍然生效 | 仍然生效 |
| 类比 | 把笔记整理成提纲 | 翻到全新的一页 |
适合 /clear 的场景
换任务:从写代码切换到写文档。陷入循环:Claude 在同一个 Bug 上打转,给的方案越来越差。污染的上下文:之前的讨论引入了错误假设,想重新开始。敏感信息:刚讨论了包含密码/密钥的内容,想清理。
/clear 不等于退出
/clear 在当前会话中原地重置,你不需要退出终端再重新启动 claude 命令。这比 Ctrl+C 退出再重开更快——而且保持了工作目录和环境不变。
对话策略 — 会话的生命周期管理
/compact 和 /clear 是"会话内"的工具。但真正的效率来自于会话间的策略—— 什么时候该开新对话、什么时候该延续旧对话、什么时候该从历史中恢复。
--continue 和 --resume
# 继续上一次对话 (最常用) $ claude --continue # 或简写 $ claude -c # 恢复上次退出时的完整上下文 # 带消息继续 $ claude -c "继续修那个 Bug,我发现还有一个边界情况" # 从历史对话中选择 (交互式) $ claude --resume # 显示最近的对话列表,你选择要恢复哪个 # 直接恢复指定会话 ID $ claude --resume SESSION_ID
"一任务一对话"原则
高效使用 Claude Code 的核心策略是:每个独立任务用一个独立对话。 对话是廉价的资源,上下文是昂贵的资源。
| 场景 | 推荐做法 | 原因 |
|---|---|---|
| 修复 Bug A | 新对话 | 干净的上下文 = 精准的理解 |
| Bug A 修完,写测试 | --continue | 测试需要了解修复细节 |
| 测试完,做另一个功能 B | 新对话 | Bug A 的上下文对功能 B 是噪音 |
| 昨天的功能 B 发现问题 | --resume 昨天的会话 | 恢复功能 B 的完整上下文 |
| 大规模重构(多文件) | 新对话 + 勤用 /compact | 重构读的文件多,上下文消耗快 |
识别上下文劣化的信号
重复提问
Claude 开始问你已经回答过的问题——说明早期对话在它的注意力中已经淡化。此时应该 /compact(如果还在同一任务)或开新对话(如果已经是不同任务)。
方案漂移
Claude 给出的方案跟之前讨论的不一致,或者忘记了你们达成的约定(比如用 A 方案不用 B 方案)。这是上下文过载的典型症状——旧的决策信息在长对话中被淹没了。
回答变短变泛
原本给出详细方案的 Claude 开始回答变得笼统和简短——可能是因为输出空间被对话历史挤占了。/compact 可以释放输出空间,让 Claude 恢复详细的回答风格。
编辑错误增多
Claude 的 Edit 操作开始失败——old_string 匹配不上,因为它记忆中的文件内容是早期版本。这说明上下文中的文件内容已经过时。/compact + 重新 Read 文件是最有效的修复。
上下文管理决策流程
四个命令、一棵决策树——以后遇到"该怎么管理这个对话"时,按此流程判断。
四大命令速查表
| 命令 | 作用 | 保留的内容 | 典型场景 |
|---|---|---|---|
| /compact | 压缩旧消息为摘要 | 摘要 + 最近消息 + CLAUDE.md + Memory | 对话变长,同一任务还在继续 |
| /clear | 清空全部对话历史 | CLAUDE.md + Memory | 切换任务 / 陷入循环 / 重新开始 |
| --continue | 恢复上次退出的对话 | 完整的上次对话上下文 | 午饭回来继续工作 |
| --resume | 从历史中选择对话恢复 | 选中会话的完整上下文 | 回到昨天某个任务的讨论现场 |
动手练习
今天的练习重点是感受上下文管理—— 不只是知道命令怎么用,而是体会"什么时候该用"。
Lab 1 — 观察上下文增长
刻意制造一个长对话,观察上下文使用量的变化。
# 开始一个新对话 $ claude # 让 Claude 读几个文件 (消耗上下文) > 读一下 package.json > 读一下 src/index.ts > 读一下 README.md # 观察: 底部的上下文进度条变化了多少? # 每次 Read 后注意进度条的跳跃幅度 # 继续对话几轮 > 分析一下项目结构 > 帮我列出所有的 API 端点 # 再看看进度条——对话内容也在消耗空间
Lab 2 — 体验 /compact
在上一个 Lab 的基础上尝试 /compact,感受压缩前后的差异。
# 在上面那个已经有一些历史的对话中: > /compact # 观察: 进度条应该明显缩短了 # 验证摘要质量 > 总结一下我们之前讨论了什么 # Claude 应该能从摘要中回忆出要点 # 验证细节丢失 > package.json 里 React 的版本号是多少? # Claude 可能答不上来——具体版本号在压缩中丢失了 # 这就是压缩的代价: 细节换空间
Lab 3 — 带焦点的 /compact
体验自定义焦点参数如何影响压缩质量。
# 先和 Claude 讨论两个话题 > 帮我分析 src/auth/ 目录的认证逻辑 # ... 讨论一番 ... > 再看看 src/api/ 目录的路由设计 # ... 又讨论一番 ... # 用带焦点的 compact > /compact 保留认证逻辑的讨论,路由设计可以简略 # 验证 > 认证那块我们讨论出了什么结论? # 应该能详细回忆 > 路由设计那块呢? # 可能只有简略的摘要
Lab 4 — --continue 和 --resume
体验对话的跨会话延续。
# 对话 1: 正常工作 $ claude > 帮我写一个 utility 函数: 把驼峰转蛇形 # Claude 写好了函数 # 按 Ctrl+C 退出 # 对话 2: 用 --continue 接上 $ claude -c "给刚才那个函数加上单元测试" # Claude 知道你说的是驼峰转蛇形的函数 # 因为 -c 恢复了上次的完整上下文 # 对话 3: 用 --resume 选择历史 $ claude --resume # 看到最近的对话列表,选择想恢复的
常见疑问
Q1 /compact 会丢失重要信息吗?如何确保关键决策不被压缩掉? +
会丢失细节,但不会丢失关键决策——前提是你用了焦点参数。无参数的 /compact 让 Claude 自行判断什么重要,通常做得不错但不完美。带焦点的 /compact 保留关于 XX 的细节 让你明确控制保留什么。最关键的信息保护策略是:把它写进 CLAUDE.md 或让 Claude 保存到 Memory——这两者不受 /compact 影响。
Q2 自动压缩和手动 /compact 有什么区别? +
本质上做的事一样——把旧消息替换为摘要。区别在于:(1) 时机:手动 /compact 你选择最佳时机(比如任务阶段切换时),自动压缩在不得不压的时候触发;(2) 焦点:手动 /compact 可以指定保留什么,自动压缩没有焦点参数;(3) 可预期性:手动 /compact 你知道什么时候发生,自动压缩可能在你不注意时悄悄发生。所以手动优于被动。
Q3 --continue 和 --resume 恢复的对话还能再 /compact 吗? +
可以。--continue 和 --resume 只是恢复上下文,恢复后的对话和正常对话没有任何区别——你可以继续聊天、/compact、/clear,完全自由操作。一个常见的好习惯是:--continue 恢复对话后,先 /compact 一下再继续工作,因为恢复时上下文可能已经比较满了。
Q4 VS Code 扩展和 Desktop App 中的上下文管理有什么不同? +
核心机制相同——都是 200K 上下文窗口,都支持 /compact 和 /clear。差异主要在 UI 表现:VS Code 扩展和 Desktop App 提供可视化的上下文进度条,CLI 需要你自己留意。--continue 和 --resume 是 CLI 特有的命令行参数——在 VS Code 中,你可以通过面板重新打开之前的对话来实现类似效果。
Q5 有没有办法查看当前上下文还剩多少空间? +
CLI 界面底部有一个上下文使用量指示器,显示当前已使用的百分比。VS Code 扩展和 Desktop App 同样有可视化进度条。没有精确到 token 数的显示,但百分比足够你判断是否需要 /compact。一般来说,超过 70% 就应该考虑压缩了,超过 90% 自动压缩随时可能触发。
复盘问题
- 上下文窗口里包含哪三大类内容?为什么"越靠后越清晰"?
/compact的焦点参数有什么作用?给出一个适合带焦点的场景。- 自动压缩和手动 /compact 的核心区别是什么?为什么推荐主动压缩?
/compact和/clear各自适合什么场景?说出判断标准。--continue和--resume的区别是什么?描述一个适合用 --resume 而不是 --continue 的场景。
今日检查清单
- 理解上下文窗口的组成(系统提示词 + 对话历史 + 输出空间)
- 体验过
/compact并观察了上下文进度条的变化 - 尝试过带焦点参数的
/compact,理解焦点的作用 - 知道自动压缩的触发条件和与手动 /compact 的区别
- 理解
/clear的效果,知道它不影响 CLAUDE.md 和 Memory - 使用过
--continue或-c恢复上次对话 - 能识别上下文劣化的四个信号(重复提问、方案漂移、回答变短、编辑错误)
推荐阅读
Claude Code: Context Management
Anthropic 官方文档中关于上下文管理的完整章节——包含 /compact 的工作原理、自动压缩的触发机制、以及长会话的最佳实践建议。
Transformer 注意力机制
想理解"为什么越靠后越清晰"?这篇关于 Transformer 架构的科普文章解释了注意力窗口的工作方式——理解原理后,你会更好地预判 Claude 的行为。
Claude Code: CLI Reference
--continue、--resume 以及其他 CLI 参数的完整列表——今天学的只是最常用的几个,完整参考列表值得通读一遍。
Day 05 预告
Git 工作流 — commit · PR · 分支管理 · Code Review
掌握了基础工具和配置后,是时候让 Claude Code 接管你最常做的开发任务了。明天你将学习如何用自然语言让 Claude 生成智能 commit message、创建 Pull Request、管理分支——以及最实用的:让 Claude 帮你做 Code Review,从此你有了一个 24/7 在线的审查搭档。