当AI的"脑子"不够用时——压缩与微压缩

你有没有遇到过这种情况:跟Claude Code聊了很久,让它回忆之前讨论的内容,它却说"我不太确定"或者"你能再提醒一下我吗?"
这不是AI变笨了,而是它的"脑子"不够用了——上下文窗口满了,旧内容被压缩了。
今天咱们就聊聊Claude Code怎么在"记忆不够"时取舍,以及压缩后还剩下什么。
图:上下文压缩像搬家收纳,装箱保留标签
两种压缩:自动压缩 vs 微压缩
Claude Code有两种压缩机制,应对不同场景:
自动压缩(Compaction):大块的、自动触发的压缩。当上下文接近上限时,系统自动识别可压缩内容并执行。
微压缩(Microcompact):精细的、按需的压缩。针对单个过大的内容(如大文件、大量工具结果)进行修剪。
打个比方:
- 自动压缩像把整屋家具装箱——动作大、范围广
- 微压缩像把抽屉里的东西整理一下——动作小、目标明确
自动压缩:什么时候触发
自动压缩有明确的触发条件:
Token阈值:当上下文超过某个百分比(如80%)时,触发压缩评估。
消息数量:当历史消息超过一定数量时,考虑压缩早期消息。
工具结果累积:当累积的工具结果较大时,触发摘要。
用户显式请求:用户可以通过命令触发压缩。
压缩的流程:
检测触发条件 → 识别可压缩内容 → 生成摘要 → 替换原文 → 保留引用
图:自动压缩的完整流程
什么东西会被自动压缩?
旧的工具结果:早期对话中工具返回的结果,如果后续没再引用。
历史消息中的代码块:已经处理完的代码,只保留关键部分。
冗余对话:重复确认、闲聊内容。
过时的状态:已经被后续操作覆盖的信息。
微压缩:精准修剪
微压缩针对的是单个内容项,当它过大时进行精准修剪。
常见场景:
大文件读取:FileReadTool读取了一个10MB的日志文件,但模型只需要其中几行相关的。
大量搜索结果:Grep返回了2000个匹配,但模型只关注前100个。
长输出截断:BashTool执行命令产生了大量输出,超出maxResultSizeChars。
微压缩的策略:
保留头部和尾部:文件的开头和结尾通常最重要。
抽样保留:中间部分抽样保留,保持一定代表性。
相关性过滤:只保留与当前任务相关的内容。
生成摘要:用更短的文本概括内容。
压缩后状态保留:还记得什么
关键问题:内容被压缩后,模型还"记得"什么?
Claude Code采用"有损压缩"——保留关键信息,丢弃细节。
保留的信息:
- 存在性:“这个文件我读过”、“这个工具我用过”
- 元数据:文件路径、操作时间、内容类型
- 关键结论:处理的结果、发现的问题、做出的决策
- 相关性:哪些内容与当前任务相关
- 引用链接:如果需要详细内容,从哪里恢复
丢弃的信息:
- 完整内容:文件的具体文本、工具的完整输出
- 中间过程:详细的思考过程、尝试过的方法
- 过时信息:已经被覆盖的内容
- 冗余数据:重复的信息
这就像你的记忆:你可能记得"昨天看了一篇关于Rust的文章,讲的是所有权",但不一定记得每句话——如果需要,你可以回去再读。
状态恢复:需要时重新加载
压缩不是删除,而是"归档"。当模型需要被压缩的内容时,可以重新加载。
重新加载的方式:
文件重读:如果压缩的是文件内容,用FileReadTool重新读取。
工具重新执行:如果压缩的是工具结果,重新执行工具(但要考虑成本)。
摘要引用:有时摘要足够,不需要完整内容。
用户提醒:如果AI似乎忘了什么,用户可以主动提醒。
这种设计让AI既能处理海量信息,又不会在长对话中"失忆"。
上下文折叠:最后的防线
当即使压缩后上下文还是装不下时,Claude Code会启动最后一招:上下文折叠(Context Collapse)。
这就像搬家时实在装不下了——只能扔掉一些箱子,只留最重要的。
折叠策略:
保留核心:
- 系统提示词(AI的"身份")
- 最近的N轮对话
- 关键决策点
- 用户明确的要求
可能丢弃的:
- 最早的几轮对话
- 已经被处理完的子任务
- 详细的过程记录
生成摘要:
- 对丢弃的内容生成高层摘要
- 保留关键结论
- 丢弃过程细节
折叠后,模型可能"忘记"早期的细节,但还保留着"我们之前讨论过X"的印象。
实战:如何应对"失忆"
理解压缩机制,能帮你应对AI的"失忆":
主动提醒:如果AI似乎忘了之前的内容,主动提醒它:“我们之前说过要用React,记得吗?”
关键信息放CLAUDE.md:项目级的关键信息放在CLAUDE.md,它会被优先保留。
分段处理:如果任务很复杂,分成多个子任务,避免上下文爆炸。
利用引用:如果AI提到"我之前看过一个文件",但记不清内容,让它重新读取。
理解不是bug:长对话中的"遗忘"是正常机制,不是AI出问题。
压缩的质量控制
Claude Code在压缩时会尽量保留"重要"内容,但什么是"重要"的?
用户明确强调的:“这个很重要,记住”
决策点:用户做出的选择、确认的方案
错误和教训:失败的经历、学到的经验
关键数据:配置值、参数、重要的代码片段
当前任务相关的:与当前目标直接相关的内容
这种"重要性评估"由模型自己参与——它决定什么该留、什么该扔。
这对构建AI Agent的启示
如果你想构建自己的AI Agent,上下文压缩是关键:
设计压缩策略:明确什么可以压缩、什么必须保留。
保留元数据:即使压缩内容,也要保留"存在性"和"引用"。
支持状态恢复:提供重新加载压缩内容的能力。
让用户参与:对于重要内容,询问用户"这个要保留吗?"
监控压缩效果:提供压缩前后的对比,让用户理解发生了什么。
总结
当AI的"脑子"不够用时,Claude Code通过自动压缩、微压缩和上下文折叠来优雅地取舍。
关键机制:
- 自动压缩:大块内容的自动摘要
- 微压缩:单个内容的精准修剪
- 状态保留:保留关键信息,丢弃细节
- 上下文折叠:最后的防线,只留最重要的
理解这一点,能让你:
- 理解AI的"遗忘"行为
- 更有效地管理长对话
- 在自己的AI Agent中实现类似的机制
下一篇,咱们聊聊权限系统——给AI装上"安全刹车"。
文章写到这儿,希望对你理解压缩机制有所帮助。觉得有收获的话,欢迎点赞转发。关注梦兽编程,咱们下篇见。
