来源:市场资讯

(来源:51CTO技术栈)

编辑 | 林芯
打开网易新闻 查看精彩图片
编辑 | 林芯

作者 | troyhua

众所周知,上下文窗口有限——LLM难为了无数开发者的致命痛点随着 CloudeCode完整代码在被迫开源之后,被给出解决方案了!

许多技术大神进行了超详细的解析,发现一个不超过 200 行的 MEMORY.md 文件竟是解决记忆问题的关键!

X上一位卡内基梅隆博士大佬@troyhua对Claude Code进行了一场深度分析,与之前网络上流传的全代码拆解不同,troyhua则选择了解读Claude Code最精彩、也最复杂的、也是外界最难复刻的:7层记忆架构!

它像人类大脑一样,分层管理记忆:从毫秒级的轻量清理,到“做梦机制”巩固长期记忆,层层递进。

这套系统工程之精妙,堪称当前Agentic AI的教科书级设计。

来,一起拆解这套“AI永生记忆系统”!

打开网易新闻 查看精彩图片

01 核心问题:上下文窗口是LLM的“金鱼记忆”

LLM有一个基本约束:固定的上下文窗口,Claude Code默认200K token窗口(加[1m]后缀可到1M)。但一次真实coding:读几个大文件 + grep全仓库 + 几轮编辑 = 轻松超标。

它的解决方案?不是简单扩窗,而是7层渐进式记忆管理:每层成本递增、能力递增,层层防护,避免下一层触发。

Token 计数的底层基础是tokenCountWithEstimation()函数:优先使用上次 API 返回的精确 input_tokens,再对新增消息做粗估(普通文本约 4 bytes/tokens,JSON 更省,图片/文档固定 2000 tokens)。还预留了约 20K tokens 作为输出缓冲,绝不把窗口用满,避免压缩时自己都塞不下。

上下文窗口解析优先级也很讲究:模型后缀 [1m] → 模型能力查询 → Beta Header → 环境变量 → 默认 200K。

02 7层记忆架构详解:从便宜到昂贵

这套架构像一座防御金字塔,越往上越强大但也越贵。系统设计的核心是“预防为主”,尽可能防止N+1层触发。

打开网易新闻 查看精彩图片

第1层:工具结果存储——“日常清洁工”

单次 grep 可能返回 100KB+ 文本,大文件 cat 也可能 50KB。这些内容如果直接塞进上下文,不仅浪费 Token,还很快就会过时。

而Claude code 的解决方案是:每个工具的结果在进入上下文前都会经过预算系统,超过其阈值时:

  • 完整结果写到磁盘(tool-results//.txt)

  • 上下文里只放前 ~2KB 预览,用<持久输出>标签包裹

  • 模型如果需要,可以后续用 Read 工具读取完整版

打开网易新闻 查看精彩图片

而且,一个关键之处:内容替换状态:一旦决定用预览,就把这个决定“冻结”。后续所有 API 调用都用同样的预览,确保 Prompt 前缀字节完全一致,最大化缓存命中率。这个状态甚至会持久化到会话记录里,支持 resume。

同时,每个工具的阈值可以通过 tengu_satin_quoll 功能标志远程调节——使 Anthropic 能够在无需代码部署的情况下调整特定工具的持久性阈值。

打开网易新闻 查看精彩图片

第2层:微压缩——每轮对话前的“日常保洁”

这是最轻量级的上下文清理,几乎不花 API 成本,每轮 API 调用前都会执行。

微压实不会总结任何内容——只是清除那些不太可能用到的旧工具结果。

拥有三种不同的机制:

a) 基于时间

如果距离上次助手消息超过阈值(默认 60 分钟),因为服务器端 Prompt Cache TTL 约 1 小时,缓存已过期,可以放心清理旧工具结果,替换为 “[Old tool result content cleared]”,但保留最近 N 条。

配置(通过GrowthBook tengu_slate_heron):

打开网易新闻 查看精彩图片

b) 缓存微型压缩

这是技术上最有趣的机制。用 cache_edits 在服务器端删除旧工具结果,而本地消息不变,避免破坏缓存前缀。工具结果会注册到全局 CachedMCState,超过阈值就选最旧的删。

关键点:只运行主线。如果分支的子代理(session_memory、agent_summary等)修改了全局状态,就会破坏主线程的缓存编辑。

c) API级上下文管理

一种较新的服务器端方法,使用 context_management API 参数:直接让 API 处理部分清理。

打开网易新闻 查看精彩图片

第3层:会话记忆——最聪明的一层!

最不是等上下文满了再慌张总结,而是实时维护结构化笔记。

每个会话都会获得一个标记文件,

地址为:

~/.claude/projects//.claude/session-memory/.md

带有结构化模板:

打开网易新闻 查看精彩图片

触发条件:Token 增长达到阈值 +(工具调用次数达标 或 上轮无工具调用)。

当自动压缩触发时,它首先尝试trySessionMemoryCompaction():

检查会话内存是否有实际内容(而不仅仅是空模板、使用会话内存标记作为压缩摘要——无需调用 API、计算哪些最近消息要保留(从最后一个SummarizedMessageId向后扩展以达到最低要求、返回一个压缩结果,会话内存为摘要+保留的近期消息

打开网易新闻 查看精彩图片

当需要压缩时,直接注入这个现成总结——零额外API调用,成本极低!

第4层:全压缩——上下文快满时的“紧急刹车”

当 tokenCountWithEstimation() 超过自动压缩阈值(有效窗口 - 13K)且 Session Memory 不可用时触发。

压缩流程超级严谨:

  • 预处理:执行用户 PreCompact hook,去除图片、技能附件等

  • 生成摘要:系统通过详细提示向摘要代理分支,要求提供9个部分的摘要:先写<分析>草稿思考,再输出<摘要>正文(草稿会被剥离,不占最终 Token)

    打开网易新闻 查看精彩图片

  • 压缩后修复:重新注入最近读的文件、技能内容、计划附件等关键上下文

  • 插入 SystemCompactBoundaryMessage 标记压缩点

打开网易新闻 查看精彩图片

还有 只压缩部分消息和提示本身过长恢复机制(分组丢弃最旧消息,重试 3 次)!

第5层:自动记忆提取——构建跨会话的长期知识库

每任务结束时,提取跨会话的持久知识,存到~/.claude/projects/.../memory/目录。

拥有四种记忆类型,每种都有特定条件和格式:

打开网易新闻 查看精彩图片
打开网易新闻 查看精彩图片

同时,还有 MEMORY.md 索引文件,它是一个索引文件,最多 200 行或 25KB,超出自动截断,每个条目应为一行低于~150字符。

第6层:做梦机制——进行跨会话记忆巩固

这可能是整篇文章里最让人惊艳的部分。它会在积累足够会话后触发,像人脑睡眠时巩固记忆一样:回顾过去会话日志,组织、整合、清理长期记忆。

并且门控序列设计非常聪明:从最便宜的检查开始,大部分情况会早早退出。

打开网易新闻 查看精彩图片

用锁文件(.consolidate-lock)实现互斥:包含 PID 和时间戳,支持崩溃恢复和 stale 检测。

四个阶段:

  • 第一阶段标定位置:扫描 memory 目录,读 MEMORY.md,避免重复

  • 第二阶段收集:只 grep 怀疑重要的片段,检查矛盾记忆

  • 第三阶段合并:合并新信号到现有文件,删除矛盾事实,把相对日期转为绝对日期

  • 第四阶段整理与索引:更新 MEMORY.md,删除过时条目,解决文件间矛盾

Dream Agent 工具受严格限制:Bash 只读,Edit/Write 只限 memory 目录。

在 UI 上会显示为后台任务,用户可以从后台任务对话框中终止,锁会回滚方便下次重试。

第7层:跨代理沟通——多 Agent 协作的基础

几乎所有后台操作(Session Memory、Dreaming 等)都基于分支代理模式 模式。

打开网易新闻 查看精彩图片

分支代理时状态隔离(克隆 LRU 缓存、abortController 等),但通过 CacheSafeParams 和相同前缀共享 Prompt Cache,实现高效;Agent Tool 支持多种模式,SendMessage Tool 实现 Agent 间实时通信(支持广播、跨会话等;还有 Agent Summary:每 30 秒用最便宜的 Haiku 模型生成 3-5 词进度快照,用于协调。

代理工具支持多种生成模式:

打开网易新闻 查看精彩图片

代理可以在三个范围内的调用间维持持久内存:

打开网易新闻 查看精彩图片

03 代码细节:层层推进,超级完善

这套 7 层架构之所以牛,不只是分层,还有非常多细节:

分层防御,先用最便宜

每个上下文管理层都设计为防止下一层更昂贵的层触发

提示缓存保存

几乎每一个设计决策都考虑了即时缓存的影响。

隔离但共享

分叉的代理获得克隆可变状态(防止交叉污染),但共享提示缓存前缀(防止成本爆炸)

到处都是阻断

3 次失败自动阻断、锁文件 PID 检测、互斥检查......防止小问题变成大灾难。

GrowthBook 远程特征开关

几乎所有系统都被GrowthBook的功能标志所限制,关键功能随时可以回滚,工程成熟度极高。

在这篇分析中,你可以清晰的看到 CloudeCode 的细节控,似乎不再是一个简单的代码补全工具,而更像一个会思考、会记忆、会“睡觉巩固知识”的真正编程伙伴。

你最近在使用 Claude Code、Cursor 或其他 AI 编码助手时,遇到过最严重的问题是什么?

欢迎在评论区分享补充!