乐于分享
好东西不私藏

你的 AI 编程助手是怎么"记住"一整天对话的?

你的 AI 编程助手是怎么"记住"一整天对话的?

深扒 Claude Code 源码,看顶级 AI 工具如何优雅地处理“记忆溢出”


先说一个你一定遇到过的问题

用 AI 写代码,聊着聊着它突然“失忆”了。

刚才还在帮你调试的那个函数,问它一句“上面那个 bug 解决了吗”,它一脸懵逼。或者更糟——它开始胡说八道,把前面的上下文全混了。

这不是 AI 变笨了,而是它的“短期记忆”装满了。


LLM 的记忆是有上限的

每个大模型都有一个上下文窗口(Context Window)——你可以理解为它的工作台大小。

Claude 的工作台是 200,000 个 token(大约 15 万个汉字)。听起来很大,但你想想:一个下午的编程会话,动辄几十次来回,每次还要附上文件内容、报错信息、工具执行结果……工作台很快就堆满了。

工作台满了怎么办?

  • 普通做法:直接报错,让用户自己开新对话
  • Claude Code 的做法:悄悄收拾桌子,但不打断你的工作

Claude Code 的四层“桌面收拾术”

我最近翻了 Claude Code 的源码(在 src/services/compact/ 目录下),发现它有一套精心设计的四层处理机制,从轻到重依次出手。

第一层:裁剪工具结果(最轻量)

你每次让 Claude 读文件、执行命令,结果都会塞进对话历史里。

一个大文件读下来可能几千行,早期读过的文件内容往往后面用不到了。Claude Code 的做法很直接:把超长工具结果头尾各保留一段,中间省略。

示意:

原内容: [12000 字节的文件内容]

压缩后:
[tool result compacted] (original=12000 chars)
前 6000 字节...
... (snipped) ...
后 2000 字节

不调用 AI,纯规则处理,成本几乎为零。


第二层:微压缩(利用服务端缓存)

这一层更隐蔽。

Claude Code 会记录你上次与 AI 对话时间。如果超过 60 分钟,它会认为服务端 KV 缓存大概率过期,然后主动把历史消息中的工具调用内容清空,只保留最近 5 条工具记录。

逻辑很现实:过了一个小时还没用到的中间结果,后续价值通常不高。清掉它,给新任务腾空间。


第三层:自动压缩(让 AI 给自己写摘要)

这是最有意思的一层。

触发条件:token 用量达到 187,000(200K 窗口减去 13,000 缓冲)时自动触发。

它会让 Claude 自己对历史对话生成结构化摘要——也就是“用 AI 压缩 AI 的记忆”。

摘要包含 9 个维度:

  1. 用户要解决的核心问题
  2. 涉及的技术概念
  3. 修改过哪些文件
  4. 遇到哪些错误
  5. 如何解决
  6. 用户提出的关键要求
  7. 未完成 TODO
  8. 当前正在做什么
  9. 下一步做什么

压缩后从“几十上百条消息”,变成“1 条摘要 + 最近若干原始消息”,对话可无缝继续。

[之前 180 条消息] ──压缩──> [1 条摘要] + [最近 10 条原始消息]

第四层:硬限制(最后防线)

如果前面三层都没能及时回收上下文,token 继续涨到 197,000,Claude Code 会直接拒绝请求,提示手动压缩或开新会话。

这是一道安全阀,防止模型在上下文极度拥挤时开始“胡言乱语”。


一张图看懂完整流程

每次发消息前,Claude Code 内部大致执行:

你发消息
   ↓
① 截断超长工具结果(纯规则,无感)
   ↓
② 检查距上次对话是否超过 60 分钟?
   是 → 清空旧工具记录(微压缩)
   ↓
③ Token 用量 > 187,000?
   是 → 调用 AI 生成摘要(自动压缩)
   ↓
④ Token 用量 > 197,000?
   是 → 报错拒绝请求
   ↓
正常调用 Claude API

这套设计聪明在哪里

1)成本分级

能用规则解决就不调用 LLM。前两层几乎零成本,撑不住再用 AI 摘要。

2)摘要质量高

让 AI 总结自己历史,通常比纯规则提取更能抓住真正重点。

3)保留最近原始消息

不是全量替换,而是“旧消息摘要化 + 新消息原样保留”,保证当前对话连贯。

4)有断路器防雪崩

如果压缩连续失败 3 次(例如摘要接口异常),断路器触发,停止继续压缩尝试,避免 token 被失败重试耗尽。


对我们开发 AI 应用的启示

如果你也在做长对话 AI 应用,这套策略非常值得借鉴:

  • 不要只靠截断(会丢关键上下文)
  • 摘要优于删除(哪怕先上规则摘要)
  • 工具结果通常才是 token 大头(优先压它)
  • 让 AI 摘要自己的历史(在可用场景下效果最佳)

最后

下次当你和 Claude Code 聊了一整天,它还能记得早上你改过哪个文件、解决过什么 bug,背后其实是这套精心设计的“桌面收拾系统”在默默工作。

好的工程,往往藏在你感知不到的地方。


本文基于 Claude Code 开源代码分析,核心逻辑位于 src/services/compact/ 目录。