首页
看点啥
插画图片
首页 看点啥 拆解 Claude Code Memory:AI Agent 如何真正“记住”项目

拆解 Claude Code Memory:AI Agent 如何真正“记住”项目

2026-07-12 0

为什么 Agent 需要记忆?

人类之所以能在多次对话中保持连贯,靠的是记忆。同样,一个真正可用的 Agent 也不能每次开口都从零开始——它必须记得用户是谁、项目在做什么、过程中又做过哪些关键决策。Agent Memory(智能体记忆),就是为了回答这些问题而生。

关于 Memory,我们到底要解决什么?

要设计一套 Memory 系统,第一步不是动手写代码,而是想清楚:让 Agent 拥有记忆,难点究竟在哪里?

下面这些思考,是我以 Claude Code 为主要参考,结合官方文档和源码梳理出来的几个核心挑战。需要说明的是,不同 Agent 在记忆机制上的实现差异巨大,例如 OpenClaw 与 Claude Code 走的就是两条完全不同的路线。

边界挑战:哪些数据值得被记住?

Claude Code 提供了两套记忆机制:

Auto Memory 并不会在每次会话中都触发保存,而是依据"这条信息在未来对话中是否仍然有用"来决定记什么、不记什么。其核心理念只有一句话:只保存不可推导(Non-Derivable)的信息

代码模式、架构关系、文件路径、Git 历史这类可以通过 grepgit log 实时获取的信息,一律不进入记忆。在这个原则下,Claude Code 把所有值得保留的内容严格收敛为以下四类。

User(用户画像)

记录用户的角色、目标、职责和知识水平,逐步建立起对用户的理解,让 Agent 能针对不同专业背景的用户调整协作方式——和资深工程师对话,与刚入门的新人对话,本就不该是一种语气。

Feedback(反馈指导)

记录用户对 Agent 行为的指导,纠正与确认都要记。如果只保存纠正,Agent 会逐渐变得过于谨慎,反而偏离了那些已经被验证可行的做法。这类记忆,是 Agent 在未来对话中保持行为一致性的基础。

Project(项目状态)

记录项目的非代码状态——决策、截止日期、正在推进的工作。它帮助 Agent 理解用户当前工作背后的更大背景与动机,而不仅仅是"在改某个文件"。

Reference(外部引用)

存储指向外部系统中关键信息的指针。这些信息不在代码仓库里,但对理解项目上下文不可或缺,例如 Sentry 监控、日志系统、内部文档站。

为什么必须收敛到这四类?

如果 Claude Code 不做收敛,允许任意自定义类型,看似更灵活,实际上会带来几个致命缺陷。

存储挑战:记忆数据放在哪里?

Claude Code Auto Memory 所记住的,本质上是项目工程事实:构建命令、架构决策、API 约定、编码规范、用户偏好等。这类内容有几个非常关键的特征:

例如:

项目使用 pnpm
禁止使用 var,要用 const
日志去 dumate.n.baidu-int.com 查看
支付模块不能依赖 React Context

这些信息会更新,但不会像聊天记录一样无止境地累加。

因此,Claude Code 设计了一套基于本地文件系统的存储机制:每个项目在 ~/.claude/projects//memory/ 下拥有独立的记忆目录, 是项目路径的一种抽象表示,例如:

-Users-chenxuejin-Documents-myprojects-baidu-ai-copilot-engine-cloud-front
-Users-chenxuejin-Documents-myprojects-react-rsbuild-project
-Users-chenxuejin-Documents-project-baidu-ai-copilot-engine-cloud-front
-Users-chenxuejin-Documents-project-baidu-qianfan-antd-kit

目录里有一个主入口 MEMORY.md 和若干按主题拆分的文件:

~/.claude/projects//memory/
├── MEMORY.md          # 主索引
├── debugging.md       # 调试规律记录
├── api-conventions.md # API 设计决策
└── ...                # Claude 按需自行创建

MEMORY.md 充当记忆目录的索引,Claude Code 会在会话中按需读写其中的文件。

# Memory Index- [用户背景](user_profile.md) — 十年 Go 经验,首次接触本仓库 React 部分,用 Go 类比解释前端概念
- [禁止使用 var](feedback_no_var.md) — 所有变量声明使用 const/let,禁止 var(全局变量/作用域污染问题)
- [日志系统](reference_log_viewer.md) — 对话页面报错时带 log id 去 dumate.n.baidu-int.com/log-viewer 查看日志

而 OpenClaw 这类面向个人生活的 Agent,处境完全不同。它面对的不是项目,而是用户的整条长期生活流,例如:

这些记忆有几个本质特征:

因此,OpenClaw 选择把记忆存进专门的数据库(SQLite),并配合向量搜索与关键词搜索完成信息检索。

检索挑战:怎么找到需要的记忆?

Claude Code 的记忆检索分为两个环节:启动时全量注入运行时按需加载

启动时全量注入

每次 Claude Code 会话开始时,CLAUDE.md 与 Auto Memory 会同时启动加载,分两条线并行进行。

运行时按需加载

预注入解决了"常用知识总是在场"的问题,但并不是所有记忆都值得每次会话都占用上下文 token。Claude Code 为此设计了两个按需加载的触发点。

OpenClaw 采用的是混合检索模式:向量搜索擅长语义理解,关键词搜索擅长精准匹配。最终向量搜索的内容权重为 70%,关键词搜索为 30%。

时效性挑战:怎么让记忆不腐烂?

Claude Code 的自动记忆是一项突破——Agent 第一次能够自动沉淀项目信息。但在大约 20 多次使用之后,这些记录的质量会明显下滑,这是一个共性问题。

本应帮助 Claude 思考的笔记本,反而变成了干扰它判断的噪音。为了解决这个问题,Claude Code 提出了 Auto Dream 方案,目前作为一个尚未正式公布的功能被推送到 Claude Code 中。

什么是 Auto Dream?

Auto Dream 这个名字,灵感来自人脑的 REM(快速眼动睡眠)机制。白天,大脑吸收原始信息,将其暂存为短期记忆;在 REM 睡眠中,大脑再对这些记忆进行二次加工——强化重要内容、丢弃无关内容、把一切系统地归档进长期记忆。

类比之下,Auto Memory 就是白天工作的大脑,在工作中持续记笔记;而 Auto Dream 则是 REM 睡眠周期,在休息时间复盘所有积累的内容,去除过时信息,重新整理成干净、有条理的文件。

Auto Dream 的工作机制

Auto Dream 遵循一个结构化的四阶段流程,每个阶段都有明确目的。它们共同把零散的会话记录,转化为系统化的项目知识。

OpenClaw 采用的是时间衰减机制,通过指数衰减模型实现"近期记忆优先"。

记忆管理的常见误区

误区一:记忆越多越好

这是最常见的误区。一些用户会让 Agent 记下所有对话细节,导致 MEMORY.md 索引膨胀,记忆目录中堆满低价值文件。过多的记忆不仅会加重每次对话的上下文负担,还会让 Agent 被噪音干扰,反而忽略真正重要的内容。

误区二:开了 Auto Dream 就高枕无忧

像把 Webpack 全面迁到 Vite、把 Redux 换成 Zustand 这种重大重构场景,用户往往以为 Auto Dream 会自动处理一切,结果旧的记忆条目仍然滞留,给 Agent 带来更多混乱——因为 Auto Dream 的触发条件是双重的(24 小时 + 5 个会话),整合根本没跑起来。

所以,凡是涉及架构级别的迁移,都应该立即手动触发:在会话里直接说 "consolidate my memory files",不要等系统自动触发。

误区三:忽视相对日期问题

用户说"昨天决定放弃 CSS Modules 改用 Tailwind"、"这周二我们把路由从 React Router 换成了 TanStack Router"——这些表述在写下当天看起来很清晰,但未来 Claude 再读时已完全失去参考价值。

因此,所有涉及时间的记忆都必须使用绝对日期,例如:"2026 年 3 月 2 日决定放弃 CSS Modules,改用 Tailwind。"

参考资料

喜欢(0)

上一篇

读不懂10万行代码?用GitNexus一键生成知识图谱:AI编程再也不瞎改

读不懂10万行代码?用GitNexus一键生成知识图谱:AI编程再也不瞎改

下一篇

Claude Code 桌面版 和 CLI 自动模式及跳过所有授权!

Claude Code 桌面版 和 CLI 自动模式及跳过所有授权!
猜你喜欢