你有没有遇到过这种情况:跟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装上"安全刹车"。


文章写到这儿,希望对你理解压缩机制有所帮助。觉得有收获的话,欢迎点赞转发。关注梦兽编程,咱们下篇见。