“AI 不是记不住,是你不会清理它的‘桌面’!”
如果你刚接触 Claude Code,对话进行到第 30 轮的时候,你很可能会遇到一个尴尬的局面——AI 开始“健忘”了:刚刚确认过的文件路径,它转头就忘了;明明几分钟前才修好的 Bug,它又提出来了;回复速度越来越慢,像在爬坡的拖拉机。
别慌,这不是 AI 变笨了,而是它的“记忆抽屉”——也就是上下文窗口——被塞爆了。
这时候,你需要 /compact 这个命令。今天,我就用一个有趣的故事 + 源码级别的原理 + 干货满满的最佳实践,带你一次性彻底吃透它!
📚 故事开篇:程序员小明的“AI 记忆大作战”
第一幕:崩溃的 AI 助手
小明是一位忙碌的前端开发,这天他正在调试一个棘手的 React 数据流 Bug。他开启了 Claude Code,开始了漫长的“结对编程”。
- 第 1-10 轮:他让 Claude 读取了 5 个组件文件、3 个 Hook 文件,分析了 800 行的终端报错日志,Claude 回复神速,甚至精准指出了哪里的 State 更新有问题。
- 第 11-20 轮:继续调试,Claude 读取了更多的文件、执行了好几次
grep搜索,以及无数次修改代码。 - 第 30 轮:小明刚让 Claude 改完最后一个文件,准备运行测试。但就在这时,他发现 Claude 开始“失忆”了——它忘记了之前修改过哪些文件,重复读取相同的代码,最后甚至给出了完全矛盾的修改建议。
小明的内心 OS:“昨天不是刚夸完你聪明吗?今天就给我在这装傻?我只是改了几行代码,你的大脑就被格式化了吗?”
其实,不是 Claude 变笨了,而是它的 200K token 的上下文窗口已经爆满了。Claude Code 的自动压缩(auto-compact)机制被触发了,但这个“自动挡”操作比较粗糙,容易丢失关键细节。
第二幕:无情的“自动压缩”破坏王
让我们看看“自动压缩”到底做了什么。
当上下文窗口使用率接近 95% (约 190K tokens)时,Claude Code 会启动 Auto-Compact。它会将小明刚才长达 30 轮的复杂对话(包含具体的错误堆栈、修改记录、文件路径),压缩成了一行模糊的摘要:“用户正在调试 React 项目,完成了一些文件修改。”
然后,Claude 就像换了个脑子一样,瞬间忘记了刚才改过哪些文件,忘记了你正在调试哪个 Bug,它会重新读取代码,重新建立认知。而这个过程不仅浪费大量 Token,还会拖慢整个开发节奏。这就是为什么小明的 AI 助手突然“疯掉”了。
这就像你在整理房间,把东西随便堆在一个角落里,然后死活找不到钥匙——不如一开始就分类收纳。
第三幕:盖世英雄 /compact 闪亮登场
这时,大神同事老王路过,看了一眼屏幕,轻描淡写地说了句:“你是不是还没用过 /compact?”
在老王指点下,小明输入了这条救命指令:
/compact 当前重点保留:src/store/ 下的所有文件修改、UserContext 的数据流分析、修复登录超时 Bug 的具体方案。
奇迹发生了!Claude 没有傻乎乎地从头开始,而是回顾了之前的对话,提取了文件修改列表、未完成的 Bug、当前的调试假设,并将这些精华浓缩成了一段精准的摘要。然后,它清除了那些巨占内存的旧工具输出(比如那 800 行的终端日志),但是保留了你刚才强调的“修改过的文件路径”和“调试假设”。
新的一轮对话开始了,Claude 像睡醒了午觉一样,精神抖擞,精准地继续了刚才的代码修改!
小明惊叹:“原来 /compact 就是 AI 的‘一键整理桌面’啊!它不是清空垃圾桶(/clear),而是把桌面上杂乱的纸张归档,留下最重要的便利贴!”
老王笑着点了点头,说道:“没错,但你只用了它 10% 的能力。想不想知道它背后的魔法是怎么运作的?”
🧠 第二回:硬核拆解!源码级揭秘 /compact 底层三把斧
既然是小明要学技术,那我们就要深入底层,看看这个命令背后到底做了什么。
根据泄露的源码分析,Claude Code 的压缩系统其实是一个 “三阶段递进式策略” 。你可以把它想象成清理电脑垃圾的三个步骤:先清空回收站,再整理磁盘碎片,最后才对硬盘进行深度格式化。
🔧 第一把斧:Tier 1 — 轻量级自动清理(调用 API 前执行)
这是最快、最省资源的一步,发生在每一次调用 Claude API 之前。
原理:Claude Code 会扫描当前的对话上下文,找到那些旧的工具执行结果(比如你 10 轮前读取的文件内容、3 轮前执行的 grep 搜索结果)。它会只保留最近 5 次的工具结果,将更早的结果直接替换成 [Old tool result content cleared] 这样的占位符。
类比:这就像你有一个装了 100 件旧衣服的衣柜。Tier 1 的操作是把那些明显破洞、过时的衣服直接扔掉,只保留最近常穿的几件。这个操作不需要动用 AI 的“大脑”,速度极快,成本几乎为零。
为什么这很重要? 因为这些旧工具输出往往占据了会话总 Token 的 60%–80% 。仅仅这一步清理,就能释放大量空间。
🔧 第二把斧:Tier 2 — 服务端智能修剪
如果 Tier 1 清理之后,Token 占用仍然超过阈值(默认 80%),Claude Code 会启动 Tier 2。
原理:这一步是在 API 层面操作的。它会采用一种叫做 cache_edits 的缓存编辑技术,精准地删除某些 Tool Result 块,同时尽量保持 Prompt Cache 的有效性。
关键细节:为什么这很重要?因为如果粗暴地删除整段对话,会导致 Prompt Cache 失效。而一旦 Cache 失效,API 调用将失去高达 90% 的缓存折扣,成本会飙升。cache_edits 技术能够在不破坏已有缓存前缀的前提下,进行“外科手术式”的精准删除,从而保住缓存效益。
类比:这就像你的衣柜里有一些衣服虽然款式旧了,但面料很好(缓存价值高)。你不会把它们扔掉,而是拆下它们的纽扣、拉链(关键信息)再利用,丢弃没用的布料。
🔧 第三把斧:Tier 3 — 最终杀招:AI 全量总结
如果前两把斧头都没能有效降低 Token 数量(依然超过 80% 阈值),Claude Code 会祭出最后的终极大招——用 AI 模型对整个对话进行一次全面的总结压缩。
- 意图(Intent) :用户原本想要解决什么问题?
- 技术概念(Technical Concepts) :对话中涉及了哪些技术栈、框架、API?
- 触碰的文件(Files Touched) :哪些文件被读取、修改、创建过?
- 错误与修复(Errors and Fixes) :出现了哪些错误,以及是如何修复的?
- 所有用户消息(All User Messages) :用户的所有提问(经过提炼)。
- 待办任务(Pending Tasks) :还有哪些工作没完成。
- 当前工作(Current Work) :当前正在处理的具体任务。
- 已完成的成果(Completed Work) :已经完成了哪些里程碑。
- 关键决策(Key Decisions) :对话中达成的重要技术决策。
这个摘要会替代原始的冗长对话,成为新的上下文起点。Claude Code 还会重新从磁盘加载最新的 CLAUDE.md 文件并注入。
类比:这就像你整理房间时,不再只是扔掉垃圾(Tier 1)和拆解有用零件(Tier 2),而是拿一张白纸,用 100 个字总结整个房间的布局、重要物品的位置,然后扔掉所有杂物。
💻 第三回:手把手教学 — /compact 的正确打开姿势与最佳实践
理论知识学完了,现在我们回到实战。小明在接下来的两周里,根据老王的建议,总结出了一套“黄金法则”。
1️⃣ 黄金法则一:主动出击,别等 AI 发疯(/compact vs /clear vs Auto-Compact)
很多人分不清 /compact 和 /clear 的区别,更不知道什么时候该主动触发而不是等自动压缩。
✅ 正确的做法:在会话时长超过 30 分钟、上下文占用达到 70%–80% 时,主动执行 /compact。永远不要等到上下文满了让自动压缩触发——那时候已经太晚了,AI 的“失忆”会让你抓狂。
2️⃣ 黄金法则二:给摘要“划重点”——定制化压缩指令
这是 /compact 最强大但最被忽视的功能!你完全可以告诉 Claude “压缩的时候帮我记住这些东西”。
❌ 错误用法(只压缩,不保留重点):
/compact
这样 Claude 会自己决定哪些内容重要——而它往往会丢掉你真正关心的东西。
✅ 正确用法 1:保留具体的文件路径和调试状态
/compact 重点保留:src/hooks/useAuth.ts 的修改、登录流程的堆栈错误信息、当前调试的 JWT token 过期问题
✅ 正确用法 2:聚焦特定模块的改动
/compact 聚焦于 src/api/ 下的接口重构和数据库迁移计划,忽略 UI 层的改动
✅ 正确用法 3:保留测试和构建信息
/compact 保留所有通过的单元测试用例、失败的集成测试报错、以及当前的构建配置
这样压缩出来的摘要,会精准地包含你关心的技术细节,而不是一句模糊的“用户在调试项目”。
3️⃣ 黄金法则三:用好 CLAUDE.md — 永不丢失的“外置硬盘”
这是最容易被忽略但最重要的一点。你告诉 Claude 的很多规则,在 /compact 之后可能会丢失。但是——CLAUDE.md 文件中的内容永远不会丢失。
怎么做:
-
把你希望 Claude 每次都必须记住的内容写进 CLAUDE.md:
- 项目的技术栈和代码规范(比如“使用 TypeScript strict 模式,禁用 any”)
- 常用的命令(比如“用 pnpm 而不是 npm,测试用 Vitest”)
- 项目的架构约定(比如“API 调用统一放在 services/ 目录”)
这样,无论你执行多少次 /compact,这些“硬约束”都像刻在石头上的法律一样,永远生效。
4️⃣ 黄金法则四:先用 /context 查用量,再决定是否压缩
不要凭感觉猜测什么时候该压缩。Claude Code 提供了 /context 命令,可以直接显示当前的上下文占用情况。
推荐的完整工作流:
# 1. 检查当前上下文用量
/context
# 如果看到使用率 >70%,准备压缩
# 2. 执行带定制指令的压缩
/compact 重点保留当前正在调试的 Bug 详情、修改的文件列表、测试结果
# 3. 压缩完成后,确认关键信息是否还在
# 简单问一句,确认 Claude 还记得关键内容
“刚才我们在调试什么 Bug?修改了哪些文件?”
5️⃣ 黄金法则五:压缩的最佳时机(附场景速查表)
🎯 什么时候应该 /compact:
📊 压缩效果数据:在实践中,/compact 通常可以将 Token 使用量降低 60%–70% ,同时保留关键决策和文件修改记录。
🔄 第四回:全流程解构 — /compact 执行的时序图
为了让你更直观地理解整个调用过程,我用 Mermaid 时序图完整呈现 /compact 的执行流程:
时序图的核心要点解读:
- 三级递进:Tier 1 → Tier 2 → Tier 3,逐级递进。只有前一级处理完后 Token 依然超限,才会触发下一级。
- 缓存保护:Tier 2 的
cache_edits技术是关键,它确保了缓存不会因为清理而完全失效。 - 定制指令生效:用户提供的定制指令(比如“保留文件路径”)会在 Tier 3 的总结过程中被传递和使用。
- CLAUDE.md 永不丢失:无论经过几级压缩,CLAUDE.md 都会在最后重新注入。
🎁 结尾彩蛋:关于 /compact 的三个冷知识
冷知识 1:压缩速度已经从 3-5 秒降到了“即时”
根据 2026 年 2 月的发行说明,Anthropic 对 /compact 的执行速度进行了大幅优化,从原来的需要 3-5 秒,降到了现在的“即时完成”。这意味着你几乎感觉不到压缩的存在,体验非常流畅。
冷知识 2:压缩后可以节省 60%–70% 的 Token
在典型的长时间会话中,执行 /compact 可以将 Token 消耗量降低 60%–70%。对于一个经常使用 Claude Code 的重度用户来说,这意味着每月可以节省相当可观的 API 费用。
冷知识 3:9 部分结构化摘要的玄机
你可能注意到了 Tier 3 生成的 9 部分摘要结构非常规整。这种设计是有意为之的——结构化的摘要比自由文本摘要更容易被 AI 重新理解和利用。这就像给你一盒乱糟糟的乐高积木(自由文本)和一盒已经分类好的乐高(结构化摘要),肯定是后者更容易拼装。
📝 总结:一句话记住 /compact
/compact 就是给 AI 的“智能整理桌面” :扔掉旧工具输出(Tier 1)、保住缓存效益(Tier 2)、提取精华摘要(Tier 3),只把最重要的便利贴留在桌面上。
小明经过这一系列的学习和实践,从一个被 AI “折磨”的新手,变成了团队里的 Claude Code 高手。现在,每当同事抱怨 AI 又失忆了,小明都会微微一笑,敲下那行救命的命令。