ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

Agent长期记忆六大方案对比,彻底解决AI失忆问题

Agent长期记忆六大方案对比,彻底解决AI失忆问题 文章目录前言一、先搞清楚Agent 为什么会失忆1. 不是智商问题是没地方记2. 上下文窗口再大也是临时工3. 所以真正要解决的是四个问题二、四条路线四个门派三、Mem0给老应用装个外挂硬盘1. 它到底是啥2. 它怎么工作的3. 举个例子4. 主要特点5. 适合谁四、Zep别人记你爱啥它记你为啥爱、啥时候不爱了1. 思路差异2. 经典例子3. 定位五、GraphitiZep 的开源亲儿子1. 关系先搞清楚2. 三类核心信息3. 时间语义才是灵魂4. 适合谁六、OpenViking把记忆做成文件夹1. 思路2. 和普通向量库的区别3. L0/L1/L2 控制读取深度4. 适合谁七、MemGPT让 AI 自己当记忆管理员1. 灵感来源2. 记忆分层3. 关键区别八、LettaMemGPT 的正式出道版1. 别搞混了2. Letta 管什么九、同一个例子四个门派各显神通1. Mem0 的玩法2. Graphiti 和 Zep 的玩法3. OpenViking 的玩法4. MemGPT 和 Letta 的玩法十、怎么选对号入座P.S. 无意间发现了一个巨牛的人工智能教程非常通俗易懂对AI感兴趣的朋友强烈推荐去看看 传送门https://blog.csdn.net/HHX_01前言跟同一个 AI 聊了三天旅行计划。第一天我说不坐红眼航班第二天补了一句要靠过道第三天它眨巴着眼睛问我“请问您对座位有要求吗”那一刻我悟了。AI 不是笨是记性差。差到什么程度呢金鱼看了都摇头我甚至想给它办一张健忘症关爱证。说白了绝大多数模型调用都是无状态的。请求一结束它转头就把你忘了。上下文窗口再大也只是它一次能看多少不代表它真记住了。那 Agent 要跨会话干活怎么办总不能每次见面都重新自我介绍一遍吧。于是江湖上冒出来六个狠角色Mem0、Zep、Graphiti、OpenViking、Letta、MemGPT。这六位各有各的绝活今天咱就掰开揉碎一个一个聊。一、先搞清楚Agent 为什么会失忆1. 不是智商问题是没地方记你让一个没带纸笔的人背圆周率他背不下来不是因为他傻是因为他手里没有纸。模型也一样。一次请求结束状态就清空了。它连你叫什么都记不住更别说你前天说过的话了。这不是态度问题是硬件问题。2. 上下文窗口再大也是临时工有人要抬杠了现在上下文窗口不是越来越大吗几百万 token 都有。大是大了但那是临时工不是正式工。窗口一关什么都留不下。它只是让你一次看得多不是让你一直记得住。两码事。3. 所以真正要解决的是四个问题什么信息值得记用什么结构存需要的时候怎么找回来由谁来负责写入和更新这四个问题就是今天六个项目的分水岭。二、四条路线四个门派先把六个项目摆一起看个全景路线代表项目核心思路更像什么提取式记忆Mem0从对话里提取值得记住的事实需要时检索回来Agent 的外接记忆库时间知识图谱Zep、Graphiti把人物、事件、关系及其变化组织成带时间的图Agent 的动态世界模型层级上下文数据库OpenViking用目录树组织 Memory、Resource 和 Skill按需检索不同详细度Agent 的上下文文件系统Agent RuntimeLetta、MemGPT让 Agent 自己管理上下文、记忆和执行循环运行 Agent 的操作系统四条路线的区别一句话总结Mem0 关心记哪些事实、怎么找回Zep 和 Graphiti 关心事实之间啥关系、啥时候有效OpenViking 关心怎么分层组织、按需读多少MemGPT 和 Letta 关心谁在 Agent 整个生命周期里管记忆。三、Mem0给老应用装个外挂硬盘1. 它到底是啥Mem0 就是一层独立的长期记忆层放在应用和大模型中间。你手上已经有一套 Agent 或聊天应用只想让它记住用户偏好和历史决策好办加个 Mem0。这操作像不像给你家那台老电脑加了一块固态硬盘不用换机插上就能用开机速度立竿见影。2. 它怎么工作的用户对话 ↓ LLM 提取值得长期保留的信息 ↓ 去重、更新并存入向量数据库 ↓ 下次对话前根据问题搜索相关记忆 ↓ 把少量相关记忆加入模型上下文3. 举个例子用户说我以后出差尽量订靠过道的位置。Mem0 不存整段原话而是提炼成类似这样的记忆用户偏好靠过道的座位下次用户让 Agent 订机票应用调用 Mem0 搜索相关记忆再把这条偏好塞进 Prompt。你看AI 终于记住你是个过道爱好者了。这体验比它第三次问你座位要求舒服一百倍。4. 主要特点接入相对简单对话后调用add模型调用前执行search。默认保存经过 LLM 提炼、去重的事实而不是完整聊天记录。可以按user_id、agent_id、run_id等维度隔离记忆。擅长保存用户偏好、项目决策、个人资料和跨会话信息。Agent Runtime 仍由 LangGraph、CrewAI 或应用自己的代码负责。所以把 Mem0 归为轻量提取式记忆比较合适。注意这并不代表它只能用向量检索——它也提供 Graph Memory 来表达人物、事件和关系但从整体产品形态看它更像一个可以嵌入现有 Agent 的记忆组件。5. 适合谁客服记住用户偏好、教育助手记住学生掌握情况、个人助手记住日程习惯……场景简单够用。但一旦信息开始牵扯复杂关系、连续变化或历史状态光靠一条条事实加语义搜索就不一定精确了。这时候得看下一位。四、Zep别人记你爱啥它记你为啥爱、啥时候不爱了1. 思路差异Mem0 擅长记一条条事实Zep 更关心事实之间的关系以及这些关系如何随时间变化。Zep 早期常被介绍为给聊天机器人用的长期记忆服务现在更强调 Context Engineering 和 Context Graph。它不仅保存用户喜欢什么还会把对话、业务数据和文档转换成一张图里面包含实体用户、公司、产品、项目关系就职于、购买过、负责、依赖事件或原始数据片段事实成立与失效的时间事实来自哪段原始数据2. 经典例子系统先后收到两条信息2025 年小王负责支付系统 2026 年小王转去负责搜索系统支付系统改由小李负责普通向量记忆会把两条都搜出来但说不清哪条现在有效。Zep 的时间图会保留历史同时标记关系的有效时间于是它能回答小王现在负责什么 2025 年小王负责什么 支付系统的负责人什么时候发生了变化这就跟查户口一样不仅知道你现在住哪还知道你啥时候搬的家、以前住哪儿。哪个派出所看了不说一声专业。3. 定位可以把 Zep 理解为一个围绕时间上下文图构建的生产级平台。除了保存和查询图数据它还负责托管、扩展、低延迟检索、上下文组装和治理。五、GraphitiZep 的开源亲儿子1. 关系先搞清楚Graphiti 不是 Zep 的竞品而是由 Zep 团队开发、构成 Zep 技术基础的开源框架。一句话理清Graphiti开源的时间图构建与查询框架 ↓ Zep基于这套思路构建的生产级托管平台2. 三类核心信息Graphiti 会把持续进入的数据组织成三类信息Entity人、产品、组织、概念等实体Fact/Edge实体之间的事实和关系Episode产生这些事实的原始对话、文档或事件3. 时间语义才是灵魂普通知识图谱知道 A 认识 B。Graphiti知道 A 从哪天开始认识 B、哪天绝交了、系统是啥时候知道这事儿的。它会区分事实什么时候开始成立、什么时候不再成立、系统什么时候得知这条事实、系统什么时候得知它失效。每条推导出的事实还能追溯到原始Episode。检索时可以向量搜索、全文搜索、图遍历三管齐下。4. 适合谁客户关系、组织关系经常变化需要理解人物、项目、文件之间的多跳关系需要回答当时是什么状态需要追踪事实来源企业数据持续更新不能每次整体重建知识图谱不过话说回来结构越强成本越高。部署、数据建模、日常维护全是活儿。这就是结构自由的价格。你要是没那个精力伺候它它分分钟教你做人。六、OpenViking把记忆做成文件夹1. 思路前面几位都在搞记忆OpenViking 干脆把记忆、外部知识和可复用能力全塞进同一个上下文空间做成一个面向 AI Agent 的上下文数据库。它的核心结构长这样viking:// ├── resources/ 外部知识 ├── user/{user_id}/ │ ├── memories/ 用户与任务记忆 │ ├── resources/ 用户私有资源 │ ├── skills/ 用户技能 │ └── sessions/ 会话 └── agent/ └── skills/ 共享技能2. 和普通向量库的区别普通向量库全部平铺一锅烩检索全靠相似度硬捞。OpenViking每个 Context 有稳定的viking://URI保留目录、范围和上下级关系。向量检索负责找到相关区域目录树负责限定搜索范围Agent 再沿目录读取真正需要的内容。这操作像什么像你家 AI 终于从在垃圾桶里翻文件升级成会用电脑了。进步实打实的进步。3. L0/L1/L2 控制读取深度层级内容主要用途L0 Abstract一句话摘要快速召回和初筛L1 Overview目录概览判断相关性和继续导航L2 Detail原始文件和完整内容获取事实、细节与证据所以它的典型检索过程不是直接挑出几个相似片段塞进 Prompt而是先定位区域再逐层深入问题 ↓ 向量检索定位候选目录 ↓ 读取 L0 或 L1 判断相关性 ↓ 沿目录进入相关分支 ↓ 按需读取 L2 原文4. 适合谁知识和记忆天然有目录结构、需要按作用域隔离、或者想让 Agent 像逛文件系统一样逐步探索上下文的场景。它不像 Graphiti 那样重点表达实体关系和时间变化也不像 Letta 那样接管整个 Agent Runtime。它更接近 Agent 下方的一层统一上下文基础设施——位置摆得很清楚不抢戏。七、MemGPT让 AI 自己当记忆管理员1. 灵感来源MemGPT 是 UC Berkeley 团队 2023 年提出的研究项目。灵感来自操作系统的虚拟内存。操作系统能在内存和磁盘之间调度数据让程序感觉自己拥有很大的内存。那 Agent 能不能在有限上下文窗口和外部存储之间搬运信息能。这就是 MemGPT 干的事。理论上讲这就是给 AI 装了套虚拟内存只不过它搬的不是数据页是记忆。2. 记忆分层模型当前上下文 ├── 系统指令 ├── Agent 身份和重要事实 ├── 最近对话 └── 当前任务信息 外部存储 ├── 历史消息 ├── 长期档案 ├── 文档 └── 可搜索的其他信息3. 关键区别重点不是应用在调用模型前检索一次而是Agent 本身拥有记忆工具自己决定哪些信息该写入长期记忆哪些核心记忆需要更新什么时候检索旧信息上下文空间不够时移出什么是否需要继续执行下一轮操作想象你雇了个助理这助理不光会干活还自己记笔记、自己整理工位、自己决定旧文件扔哪。MemGPT 就是这个助理。也就是说MemGPT 把记忆管理变成了 Agent 推理循环的一部分而不只是外围的 RAG 插件。这套方法在论文里被称为虚拟上下文管理。八、LettaMemGPT 的正式出道版1. 别搞混了MemGPT 和 Letta 关系很近但指向的对象并不完全一样MemGPT 更偏向原始研究和 Agent 设计模式Letta 则是从这套思想发展出来的框架与平台。MemGPT原始论文、记忆架构和 Agent 设计模式 ↓ 演进 Letta用于构建、运行、持久化和调试有状态 Agent 的框架与平台2024 年原团队把开源框架改名为 Letta把MemGPT这个名字留给论文中的原始设计模式。这就好比论文是原稿Letta 是出版版。同一个作者同一个灵魂只是 title 更响了。2. Letta 管什么Agent 的持久化状态上下文窗口的组装方式可编辑的记忆块工具调用和执行循环文件、数据源和技能多次运行之间的身份延续本地或云端部署Agent 的调试与观察所以用 Letta通常不只是给现有 Agent 接个记忆组件而是在 Letta Runtime 中创建并运行一个 Agent。当前的 Letta 已经超出原始 MemGPT 架构提供多种 Agent 类型和更现代的执行循环但有状态 Agent和记忆属于 Runtime 核心能力的思想一直没变。九、同一个例子四个门派各显神通概念说再多不如落到数据上。假设用户说我原来在北京工作下个月搬去上海以后推荐活动时优先考虑上海。1. Mem0 的玩法用户下个月搬到上海 用户偏好上海的活动调用方负责在推荐活动前搜出这些记忆。简单直接任务完成。2. Graphiti 和 Zep 的玩法用户 --居住或工作于-- 北京 有效至某日 用户 --居住或工作于-- 上海 有效自某日 用户 --偏好活动城市-- 上海系统既能回答现在的位置也能回答过去的位置还知道关系啥时候变的。妥妥的搬家档案管理员。3. OpenViking 的玩法viking://user/{user_id}/memories/ ├── profile/ │ └── location.md └── preferences/ └── activity-city.md目录摘要负责说明这儿存了位置变化和活动城市偏好向量检索负责找到目录Agent 再按需读具体记忆。原始会话留在 Session 里当详细上下文不必每次请求都背着全部历史。轻装上阵舒服。4. MemGPT 和 Letta 的玩法Agent 判断这是不是重要信息 → 调用记忆工具更新用户档案 → 调整自己的核心上下文 → 在未来推荐任务中主动使用 → 必要时检索更详细的历史信息重点不再是某一种存储结构而是谁负责管理记忆由 Agent Runtime 和 Agent 自己共同完成。十、怎么选对号入座这四条路线没有绝对的优劣关键看你缺的是记忆组件、数据结构、上下文基础设施还是完整的 Agent Runtime。你的需求更值得先看给现有聊天应用快速增加用户记忆Mem0数据有大量实体关系和时间变化Graphiti不想自己维护图基础设施想用生产级服务Zep想用目录统一组织记忆、知识和技能分层读取上下文OpenViking从头构建具有长期身份和自管理记忆的 AgentLetta研究 Agent 如何像操作系统一样管理上下文MemGPT 论文最后说两句实在的。实际系统不一定只能选一个你可以用 Letta 管理 Agent 的执行与状态再挂一个知识图谱或上下文数据库。真正要理清楚的是职责边界谁决定写入什么谁处理更新和冲突谁负责检索最终哪些内容进入模型上下文Agent 记忆不是加个向量数据库就完事。它更像一组逐层展开的工程问题先决定记什么再决定怎么组织和找回最后决定谁来管理整个记忆生命周期。把这几个层次想明白这六个项目之间的差异你心里基本就有数了。毕竟你总不希望自己养了个比金鱼还健忘的 AI 吧P.S. 无意间发现了一个巨牛的人工智能教程非常通俗易懂对AI感兴趣的朋友强烈推荐去看看传送门https://blog.csdn.net/HHX_01
RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进