上下文爆炸了?别怕!快用智能压缩指令/compact吧

0 阅读14分钟

“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 模型对整个对话进行一次全面的总结压缩

原理:Tier 3 会生成一个结构化的 9 部分摘要

  1. 意图(Intent)  :用户原本想要解决什么问题?
  2. 技术概念(Technical Concepts)  :对话中涉及了哪些技术栈、框架、API?
  3. 触碰的文件(Files Touched)  :哪些文件被读取、修改、创建过?
  4. 错误与修复(Errors and Fixes)  :出现了哪些错误,以及是如何修复的?
  5. 所有用户消息(All User Messages)  :用户的所有提问(经过提炼)。
  6. 待办任务(Pending Tasks)  :还有哪些工作没完成。
  7. 当前工作(Current Work)  :当前正在处理的具体任务。
  8. 已完成的成果(Completed Work)  :已经完成了哪些里程碑。
  9. 关键决策(Key Decisions)  :对话中达成的重要技术决策。

这个摘要会替代原始的冗长对话,成为新的上下文起点。Claude Code 还会重新从磁盘加载最新的 CLAUDE.md 文件并注入

类比:这就像你整理房间时,不再只是扔掉垃圾(Tier 1)和拆解有用零件(Tier 2),而是拿一张白纸,用 100 个字总结整个房间的布局、重要物品的位置,然后扔掉所有杂物。

💻 第三回:手把手教学 — /compact 的正确打开姿势与最佳实践

理论知识学完了,现在我们回到实战。小明在接下来的两周里,根据老王的建议,总结出了一套“黄金法则”。

1️⃣ 黄金法则一:主动出击,别等 AI 发疯(/compact vs /clear vs Auto-Compact)

很多人分不清 /compact 和 /clear 的区别,更不知道什么时候该主动触发而不是等自动压缩。

对比维度/compact(智能压缩)/clear(硬核清空)Auto-Compact(自动压缩)
做什么总结对话历史,清除旧的工具输出,保留核心摘要完全清空所有对话,从零开始上下文窗口达到 ~95% 时自动触发,无差别总结
记忆保留保留已完成工作总结、修改的文件列表、当前计划什么都不保留,CLAUDE.md 会重新加载随机丢失文件路径、错误信息、调试假设
使用时机任务进行中、逻辑断点处切换到完全不同的任务系统自动触发,不受控制
Token 恢复部分恢复,摘要本身仍占一定 Token完全恢复,全窗口可用部分恢复,但可能丢失关键细节
风险有损压缩,可能遗漏细节任务进行中使用会导致进度完全丢失状态丢失严重,AI 会“失忆”
命令历史保留重置不适用

来源:综合自 Morph 和阿里云开发者社区的分析

✅ 正确的做法:在会话时长超过 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 文件中的内容永远不会丢失

怎么做

  • 运行 /init 初始化你的项目,让 Claude 自动生成 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:

场景建议操作原因
会话超过 30 分钟✅ 执行 /compact对话积累了大量历史记录,压缩可释放 60%-70% 的 Token
出现“上下文过大”警告✅ 立即执行 /compact已接近阈值,AI 性能开始下降
完成一个独立功能模块后✅ 执行 /compact保留已完成工作的总结,为下一个模块腾出空间
Claude 开始遗忘先前决策✅ 执行 /compact说明上下文已经过载,需要压缩
连续报错、陷入死胡同✅ 执行 /compact + 重新审视说明上下文可能已被“污染”,需要清理噪音
收到 Token 限制警告✅ 立即执行 /compact接近上限,性能会急剧下降
切换完全不同的任务❌ 用 /clear 而不是 /compact旧任务与新任务完全无关,保留旧上下文反而会造成干扰

📊 压缩效果数据:在实践中,/compact 通常可以将 Token 使用量降低 60%–70% ,同时保留关键决策和文件修改记录。

🔄 第四回:全流程解构 — /compact 执行的时序图

为了让你更直观地理解整个调用过程,我用 Mermaid 时序图完整呈现 /compact 的执行流程:

compact.png

时序图的核心要点解读

  1. 三级递进:Tier 1 → Tier 2 → Tier 3,逐级递进。只有前一级处理完后 Token 依然超限,才会触发下一级。
  2. 缓存保护:Tier 2 的 cache_edits 技术是关键,它确保了缓存不会因为清理而完全失效
  3. 定制指令生效:用户提供的定制指令(比如“保留文件路径”)会在 Tier 3 的总结过程中被传递和使用
  4. 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 又失忆了,小明都会微微一笑,敲下那行救命的命令。