让 Agent 真正“记住“项目:从会话记忆到长期记忆

发布时间:2026/8/29 2:29:11
让 Agent 真正“记住“项目:从会话记忆到长期记忆 人脑的记忆有遗忘曲线Agent 的记忆呢一个被忽视的问题2024 年以来AI Agent 的能力在快速迭代——代码生成、工具调用、多步推理、自主规划——几乎每个月都有新东西出来。但在这些热闹的能力背后有一个基础问题始终没解决好Agent 记不住东西。当前绝大多数 Agent 的记忆是会话级的。一次对话就是一次完整的记忆周期对话开始记忆初始化对话结束记忆清空。下次再来从零开始。这就像你有一个能力很强但患有短期记忆丧失症的同事。每次合作你都要从头自我介绍从头解释项目背景从头对齐术语和约定。这篇文章想聊的是Agent 的记忆技术到底经历了哪些阶段当前的瓶颈在哪里我们距离Agent 真正记住项目还有多远上下文窗口Agent 的工作记忆最早期的 Agent或者说 LLM 本身只有一种记忆形式上下文窗口Context Window。你可以把它理解为人类的工作记忆——容量有限保持时间很短只够处理当前任务。技术实现也很直接把所有历史对话拼成一个长文本作为 Prompt 发给模型。模型能记住多少取决于上下文窗口的长度。问题很明显容量有上限。即使上下文窗口从 4K 扩展到 128K 甚至 1M一个中大型项目的代码库轻松超过百万 Token。成本线性增长。上下文越长推理成本越高。把 100K Token 的上下文发给模型每次推理都在烧钱。注意力衰减。大量研究表明LLM 对上下文中间部分的信息关注度明显低于首尾部分Lost in the Middle 问题。但更根本的问题是上下文窗口本质上是一次性的。会话结束窗口关闭一切归零。RAG外挂知识检索为了突破上下文窗口的容量限制RAGRetrieval-Augmented Generation出现了。RAG 的思路很直接既然上下文窗口装不下所有信息那就把信息存在外部知识库中需要的时候再检索出来。这是一个实实在在的进步。通过 RAGAgent 可以访问远超上下文窗口容量的知识。你不需要把整个代码库塞进 Prompt只需要在需要时检索相关的代码片段或文档。但 RAG 有一个根本的局限它是无状态的。RAG 每次都是从一个静态的知识库中检索信息。它不知道上次我们讨论了什么用户偏好什么风格这个项目之前踩过什么坑。打个比方RAG 就像给了 Agent 一个图书馆借阅证。Agent 可以去图书馆查资料但它没有笔记本——不能记录自己的阅读心得不能标注重点不能积累对某个领域的逐步理解。具体来说RAG 用在 Agent 记忆场景下有几个缺陷它缺乏时间维度。RAG 不知道一条知识是什么时候产生的不知道它的新鲜度。三个月前的技术方案和昨天刚确认的架构决策在 RAG 看来权重一样。它也缺乏关联推理。RAG 基于文本相似度检索无法理解知识之间的关联关系。比如用户说喜欢简洁的代码风格和用户要求所有函数不超过 20 行这两条信息在语义上不太相似但实际上高度相关。它还缺乏主动积累。RAG 是被动的——你需要显式地往知识库里添加内容。它不会自动从对话中提取有价值的信息并沉淀。Agent Memory让 Agent 拥有笔记本为了解决 RAG 的局限业界开始出现专门针对 Agent 记忆的方案其中比较有代表性的是 Mem0。Mem0 的思路是在 RAG 之上增加一层记忆管理自动从对话中提取信息存储为结构化的记忆条目并在后续对话中自动检索和注入。这比纯 RAG 前进了一步。Agent 终于有了笔记本——它可以在对话过程中自动记录关键信息下次对话时自动翻阅。但现有 Agent Memory 方案普遍面临几个挑战准确率不够高。记忆提取和检索的准确率直接影响 Agent 的表现。如果 Agent 基于错误的记忆做出决策后果比没有记忆更严重。缺乏知识治理。记忆越积越多如何去重如何处理冲突信息昨天用户说用 MySQL今天改口要用 PostgreSQL如何管理记忆的时效性Token 成本高。很多方案简单粗暴地把大量记忆塞进上下文导致 Token 消耗激增。上下文数据库记忆的系统化管理这就引出了一个更新的思路上下文数据库Context Database。如果说 RAG 是给了 Agent 一个图书馆借阅证Mem0 是给了 Agent 一个笔记本那上下文数据库的思路是给了 Agent 一个完整的知识管理系统——有分类、有索引、有版本管理、有权限控制。ContextDB 是目前这个方向上做得比较完整的一个实现。它的设计体现了几个思路三层记忆架构它没有把记忆简单理解为一条一条的记录而是设计了三层结构原子事实Atomic Fact。每次 Agent 与用户交互时自动提取最小粒度的知识单元。比如该项目使用 Spring Boot 3.2用户偏好函数式编程风格支付模块的超时时间设置为 5 秒。每个原子事实都带有置信度分数和时间戳。置信度不是固定的——它会随时间衰减也会被后续的确认或否定所调整。这解决了 RAG 缺乏时间维度的问题。记忆实体Entity Card。多个相关的原子事实聚合形成实体画像。关于项目技术栈这个实体可能聚合了框架版本、数据库选择、部署方式等十几条原子事实。Agent 需要了解项目技术栈时不用一条条检索直接获取完整的实体画像。记忆图谱Memory Graph。实体之间建立关联关系形成知识网络。支付模块关联到超时重试策略超时重试策略关联到幂等设计幂等设计关联到分布式锁。这使得 Agent 能够进行关联推理当你问 Agent 关于支付模块的问题时它不仅能检索到支付模块的直接信息还能沿着图谱获取相关的技术决策和设计约束。知识生命周期管理对知识的管理不是只增不减的有完整的生命周期启动支持热启动导入已有文档、Wiki、Confluence 页面和冷启动从零开始积累。准入新知识的入库不是无条件的——AI 先做初步筛选过滤明显的噪音关键知识可以设置人工评审流程。演进自动去重、冲突消解、置信度衰减。如果两条记忆互相矛盾比如数据库用 MySQL和数据库用 PostgreSQL系统会根据时间、置信度等因素进行消解。分发按照 Workspace 和权限模型将知识分发给不同的 Agent。实测数据在 LOCOMO 基准测试中我们跑了一些数据供参考准确率我们测下来在 79% 左右LightRAG 方案大约在 65%有 14 个百分点的差距Token 成本大概是 LightRAG 的 1/3——日常使用中成本优势会随着使用量的增加而放大检索延迟 1.64 秒在 Coding Agent 场景下可以接受在 FinanceBench、SyllabusQA、Qasper、ClapNQ 四个数据集上跑了一遍没有出现明显的短板不过需要说明LOCOMO 是一个通用基准和真实编码场景还是有差距的。我们在实际项目中的感受是对于规范明确、知识密度高的项目效果确实好对于比较随意的个人项目提升没那么显著。不确定这是否具有普遍性。另外有一个数据比较意外Mem0 兼容迁移的场景下在保持协议不变的前提下仅切换 endpoint准确率从 20% 提升到 78%。底层记忆管理的质量差异能带来这么大的效果差距说明这个环节确实被很多人忽视了。接入与使用接入比较简单curl -fsSL https://context-database-client.oss-cn-hangzhou.aliyuncs.com/install.sh | bash -s -- --agent agent --api-key api-key支持主流的 Coding AgentQoder、Claude Code、Codex、OpenClaw、OpenCode、Hermes、QoderWork。不过目前它是基于阿里云 RDS MySQL 的服务对数据库引擎有依赖。如果你的场景对数据驻留或私有化部署有要求需要确认一下是否满足。从工具到队友回顾 Agent 记忆技术的演进阶段方案类比核心能力核心局限第一阶段上下文窗口工作记忆即时处理容量有限用完即弃第二阶段RAG图书馆知识检索无状态无时间维度第三阶段Agent Memory笔记本自动记录准确率低缺乏治理第四阶段上下文数据库知识管理系统系统化管理尚在早期每一步演进Agent 的记忆能力都在向人类靠拢。从什么都记不住到能查资料从能查资料到能记笔记从能记笔记到有系统的知识管理。上下文数据库代表的是当前最新的方向。它试图解决的不是Agent 能不能记住的问题而是Agent 能不能像人类专家一样积累和管理知识的问题。当然这个方向还在很早期数据量特别大的场景、跨语言跨领域的能力都还没有充分验证。但方向本身我觉得是对的。当一个 Agent 真正记住了你的项目——它的架构决策、技术栈、业务约束、历史踩坑记录——它就不再是一个通用的代码生成工具而是一个真正理解你项目的队友。