开源Agent记忆系统横向对比:Mem0、Zep、Letta选型指南 最近被问得最多的问题不是“Agent 能不能做”而是“Agent 做完了怎么让它记住东西”。跑过几个项目后你会发现没有记忆系统的 Agent本质上就是个“每次都重新自我介绍”的聊天盒子用户上轮告诉它的偏好、几个小时前查过的上下文一刷新就全没了。这个痛点几乎每家公司都会撞上所以“开源 Agent 记忆系统”成了大家讨论最多的话题。这篇报告是我把 Mem0、Zep、Letta 等几个主流开源方案拉出来从架构、存储、检索、工程化难度到实际踩坑做了一次横向多维对比。文章适合三种人看正在给 Agent 做记忆模块的开发者、准备选型的技术负责人以及那些想搞清楚“记忆系统到底在解决什么问题”的 AI 产品经理。1. 为什么 Agent 非要一套记忆系统1.1 没有记忆的 Agent到底差在哪很多人最早接触 Agent 是从“调一个 LLM API、写几段 prompt”开始的。这种模式跑 demo 没问题但一上真实业务你就会撞到一堵墙模型上下文窗口再大也有上限。GPT 类模型的上下文动不动就 128K、200K看着很吓人但真实业务里塞几条长文档、几十轮对话、几个工具返回结果很快就满了。满了怎么办两种传统做法都很难受一是拼命压缩改写旧内容信息细节丢得厉害二是直接截断用户刚才说的话被“物理遗忘”。更麻烦的问题还不是上下文长度而是“跨会话记忆”。用户今天跟你说喜欢简洁回复明天再回来Agent 完全不记得。你让 Agent 做数据分析它上次已经确认过数据口径下次又要重新问一遍。这种体验放在内部工具里还能忍放在面向客户的产品里基本就是劝退级体验。没有记忆系统的 Agent只是在“假装聪明”它每轮都在用模型自带的世界知识回答问题但对你和用户之间积累的专属信息一无所知。1.2 记忆系统到底解决了什么记忆系统的核心价值是把“一次性对话”变成“可积累的资产”。它做一个中间层Agent 在每轮交互中把值得记的信息提取出来存到外部存储里下次需要时再从存储中把相关记忆检索出来塞进当前上下文。这样模型每次看到的不是全部聊天记录而是“与当前任务最相关的历史片段”。类比一下大模型的原始上下文相当于你的工作台只有那么大记忆系统则是你的档案柜。你用不着的资料不会堆在工作台上而是归档到柜子里要用的时候按关键词把相关档案抽出来放桌上。这个“归档—抽取”的过程就是记忆系统最核心的两件事写入和召回。开源领域现在做记忆系统的项目本质上都是在优化“写什么、存哪里、怎么取”这三个环节。1.3 记忆系统的典型形态目前开源记忆系统大体分三条路线第一种是长短期记忆分层架构最有代表性的是 Letta原名 MemGPT。它把大模型上下文模拟成操作系统内存通过函数调用管理记忆的换入换出适合在 Agent 的运行机制内做深度集成。第二种是外挂式记忆服务比如 Mem0 和 Zep它们独立维护一套存储层通过 API 或 SDK 和你的 Agent 框架对接好处是不侵入你的主流程。第三种是轻量级组件实现用向量数据库加 embeddings 自己拼比如直接调 LangChain 的 Memory 模块或自己封装 Chroma。这三条路线没有绝对好坏只看你要什么。想要快速验证记忆效果第二种最快。想要深度控制记忆调度逻辑第一种更彻底。如果项目本身对依赖数量很敏感那第三种也许是性价比之选。后面我会把这几个方向的具体项目逐个拆开来拉练一遍。2. 当前值得关注的开源记忆项目全景2.1 Mem0上手最快的外挂记忆层Mem0 是这两年热度蹿升最快的记忆项目之一GitHub star 涨得很快名字就是“Memory 0”的意思定位是给 AI Agent 和 AI 应用提供长期记忆层。它的设计思路非常务实你不需要改 Agent 的调度逻辑只要在需要读写记忆的地方调用它的接口就行。它支持两种使用方式托管 API 和本地自托管。自托管的话底层存储可以从向量数据库、图数据库里选配置好之后通过 add、search 这类接口存取记忆。Mem0 比较特色的地方是它对记忆有一条“重要性过滤”思路写入记忆时会根据和用户任务的关联度给记忆打分有点像人脑的记忆巩固机制——不是所有对话都值得长期保存。集成友好度是 Mem0 的强项。它提供了 Python、JS 等主流 SDK也直接兼容 OpenAI、Anthropic 等模型的调用方式接入 LangChain、CrewAI 这类框架也有现成的适配器。我实测下来一个标准聊天机器人接入 Mem0改动量大概在两三百行代码左右半天就能跑通基本闭环。2.2 Zep时间感知的记忆基础设施Zep 走的路子和 Mem0 不太一样它的口号是“给 Agent 装上长期记忆”但实现上更强调时间这一维度。也就是说它不只是存下事实还会记录每段记忆产生的时间、相关的事件序列让 Agent 能理解“事情发展的先后关系”。这个能力对聊天类 Agent 特别有价值。用户说“我上周已经和你讨论过方案 A”如果你只做关键词检索可能能翻到那轮对话但未必知道方案 A 和后来方案 B 的演变关系。Zep 通过图结构把所有记忆串成一张随时间演进的网络回答这类“之前……现在……”的问题时明显更从容。另一个特点是 Zep 提供了名为 Graphiti 的时间感知知识图谱框架这是它区别于普通“向量库检索”方案的核心。工程上Zep 也是前后端分离设计服务端用 Docker 部署客户端 SDK 接进来就能用。如果你需要处理大量有明确时间线的业务记忆Zep 值得重点考虑。2.3 Letta把记忆做成操作系统Letta 的工业实践背景非常浓它最早来自于 MemGPT 论文核心思想就是“把大模型的上下文窗口当作主存把外部存储当作磁盘”。它在 Agent 内部虚拟出一套分层记忆核心记忆常驻上下文工作记忆处理当前任务归档记忆存到外部存储需要时再调度回上下文。因为这种设计Letta 的能力上限更高。它不是简单地“把聊天记录存进向量库”而是能自主决定哪些内容该放进当前上下文、哪些该挪出去。这比较接近人类的工作记忆模型——你不会把十年里所有事情都摆在脑子里而是在需要时提取相关片段。代价也很明显接入复杂度比 Mem0、Zep 高。Letta 更像个 Agent 框架而不只是记忆插件。你需要在它的架构里开发 Agent 逻辑记忆系统只是其中一部分。如果你的项目规模不大我不建议第一版就直接上 Letta学习曲线会比较陡。2.4 其他方案和自建路线除了上面三个明星项目开源生态里还有一些值得留意的选择。Cognee 走的是知识图谱加向量库的混合路线更适合做企业级知识库场景txtai 本质上是个嵌入式数据库自带语义检索和向量索引也可以当作轻量记忆组件使用Basic Memory 则把记忆文件化基于 Markdown 存储思路很清奇适合与 Obsidian 这类工具链结合。当然也有一大批团队选择“自建记忆系统”链路一般是用 Embedding 模型把文本向量化存入向量数据库如 Chroma、Milvus、Qdrant查询时做相似度检索再配合 PostgreSQL 做结构化信息存储。自建的好处是完全可控、依赖少坏处是记忆的提取、更新、冲突解决这些“脑力活”全都要自己写。3. 多维对比拆解从架构到落地3.1 存储与索引谁在底下扛数据记忆系统的地基是存储层。Mem0 支持多种底层存储包括 Qdrant、Milvus、Chroma 等向量库也可以接 Neo4j 这类图数据库Zep 则深度绑定了自己的 Graphiti 框架数据以时间感知知识图谱的形式组织Letta 走的是自研存储管理层加外部存储的架构底层同样可以接多种数据库。这里我给你一个比较容易判断的标准如果你需要的是“事实型记忆”比如用户偏好、身份信息、业务规则用向量库加结构化字段的组合就够了如果你需要的是“事件型记忆”比如用户做过什么、方案怎么演进那图结构会比纯向量检索更合适。后者的场景下Zep 和 Cognee 这类方案优势明显但代价是你得接受它们更重的部署形态。另外提醒一句不管选哪个都要给记忆数据的提取和索引留出异步处理通道别让写入操作的延迟拖累主链路。3.2 检索与召回记下来还得找得到记忆系统真正见高下的地方在检索。Mem0 的检索逻辑是“相关性评分加过滤”它对每个记忆片段维护元数据查询时综合用户当前问题、记忆时间、重要程度等因素做召回。Zep 用的是图遍历加语义检索的组合能沿时间线找相关事件。Letta 则是自己管理一套“上下文调度”机制通过函数调用来决定把哪部分记忆加载进当前对话。实际体验下来我建议你不要盲目追求检索技术的复杂度。对大多数项目先做到“关键词匹配加向量相似度”的混合召回就已经超过及格线了。真正影响体验的往往是记忆的合并和冲突处理——用户今天说自己喜欢正式语气明天又说随便点你该信哪条开源方案大多采用“新记忆覆盖旧记忆”或“保留双版本”的策略建议你做好时间戳和置信度字段方便后面排查这类问题。3.3 集成方式与工程化难度从开发体验角度排个序Mem0 最简单Zep 居中Letta 最重。Mem0 基本是“装 SDK、配存储、调接口”三件事Zep 需要先起 Docker 服务再通过 API 对接Letta 更像迁移到一个新框架你要在它的语境里开发整个 Agent 逻辑。我做集成实验时踩过不少坑这里直接列几个最有共性的一是向量化模型的选型会影响检索效果中文场景下务必选对中文支持好的 Embedding 模型二是别把所有原始对话都塞进记忆库写入前一定要做文本分割和信息抽取三是记忆检索的 TopK 参数要压着上下文窗口来调别默认取太多。这些坑在官方文档里往往只有一句带过但实际调试时相当耗时。3.4 生态活跃度与社区维护趋势选开源项目不看社区活跃度会吃大亏。目前 Mem0 社区最活跃issue 响应快文档更新频繁Zep 的迭代节奏稳定但 Graphiti 的上手门槛导致社区讨论多数集中在如何配置Letta 由团队主导方向明确但使用者数量相对较小提问时得到有效回复的概率会低一些。判断一个记忆系统项目的长期健康度我习惯看三个指标最近三个月是否有代码提交、issue 里是否有维护者回复、star 增长是否稳定。前两个比第三个更重要因为记忆系统这种中间件一旦维护者断更你后期升级和修 bug 的隐性成本会非常大。所以选型时我建议把社区活跃度放在和功能同等重要的位置。4. 选型建议与实操踩坑记录4.1 按项目阶段和团队情况做选择如果你现在处于 demo 阶段想快速验证“Agent 加记忆”这个方向有没有价值首选 Mem0。原因很简单接入成本最低文档最全就算后面要换你的记忆数据也能通过导出接口迁走。如果项目已经到了生产阶段业务里有大量需要时间线理解的数据比如客服工单流转、项目历史决策那 Zep 更合适它的图结构在回答“之前发生了什么、为什么”时优势明显。如果团队有很强的 AI 研发能力而且想深度定制 Agent 的记忆调度策略可以考虑 Letta。但你要有心理准备这不是一个下午就能接入的插件而是一个要长期维护的架构选择。至于自建路线我的建议是除非你的团队对数据隐私有极端要求否则第一版别自建先用开源方案跑通业务再根据瓶颈决定要不要替换。4.2 实测下来的性能差异与资源占用我拿一个标准测试场景做过对比模拟五十轮对话让 Agent 记住用户的六条偏好然后在新会话里验证记忆召回率。Mem0 在这种“事实型记忆”场景下表现稳健召回速度快API 响应基本在百毫秒级Zep 因为要构建时间图谱写入阶段耗时明显更长但在涉及时间关系的问答里优势突出Letta 的上下文调度逻辑聪明但会多消耗 token因为每次调度都要额外产生函数调用开销。资源占用上Mem0 和自建方案的底噪最低内存占用主要取决于你选的向量库Zep 的图存储和索引服务相对吃资源部署机器的规格不能太低Letta 因为带着整个 Agent 运行时资源消耗自然更高。这里给个实际数字参考我用一台 4 核 8G 的云主机跑 Mem0 自托管加 Chroma日常负载下很轻松换 Zep 之后高峰期 CPU 会到六成以上建议起步规格不要低于 4 核 8G。4.3 实操中高频踩坑问题实录记忆内容写得太碎导致检索召回一团乱。这个是最容易踩的坑。解决办法是写入前做聚合不要每轮对话都往里塞记忆而是在一轮交互结束后把这段对话里的有效信息抽取成结构化描述再写入记忆库。我现在会在 Agent 里加一个“记忆提取提示词”节点效果比直接存原始聊天记录好得多。第二个高频问题是记忆冲突。用户先说了喜欢 A后来又改成 B系统可能同时检索出两条互相矛盾的记忆Agent 就傻了。我的处理方法是给每条记忆加时间戳和来源标记在检索结果里默认取“时间最近且置信度最高”的记忆同时把旧记忆保留成备选让模型在不一致时优先相信新记忆。第三个问题是多租户隔离。多用户场景下如果没有命名空间隔离用户 A 的偏好会被用户 B 的 Agent 检索到这是严重的隐私事故。不管用哪个开源方案接入第一天就要确认你的记忆查询是不是带用户 ID 过滤千万别默认它是隔离好的。4.4 给开发者的几条实战建议先说记忆内容的格式我越来越倾向于“结构化优先、自然语言兜底”。能在字段里表达的信息比如用户 ID、偏好主题、时间就用字段存需要灵活表达的比如用户随口说的一句判断才用自然语言存。这样后续做分析和过滤都会轻松很多。再说检索流程不要只做一次向量检索就完事。我现在的做法是分成两路一路走向量召回 TopK另一路走结构化检索查最近活跃记忆两边结果合并后做个排序再拼进上下文。虽然多写几十行代码但效果比单路检索稳定不少。这也解释了为什么很多开源方案内部都是“向量加规则”双通道单靠语义检索并不可靠。最后提醒一下测试问题。记忆系统的测试要专门设计数据集别用普通问答评测集敷衍。我建了一个大概两百条的小型记忆验证集覆盖事实记忆、时间顺序、冲突更新、跨会话引用四类场景。每次升级记忆相关代码先跑这套验证集基本能挡住八成以上的回归问题。5. 写在最后的个人体会这个领域变化实在太快三个月前我给别人推荐方案时还得费劲解释“为什么需要记忆系统”现在大家已经开始在群里讨论“记忆召回延迟怎么优化”了。我个人的实际体会是不要被概念和架构图吓住先跑通一个最小闭环比什么都重要。哪怕你一开始只是用向量库存聊天记录没有精妙的记忆调度逻辑也比那些还在规划宏大蓝图、迟迟不落地的团队领先一个身位。最后再分享一个小技巧。快速评估一个记忆方案好不好用不要看它的 README 里吹了多少功能直接自己去上下游看它的 issue 列表有没有人在问“记忆混淆”“检索不准”“存储膨胀”这类问题维护者是怎么回的。这些细节决定着你把它引入项目之后是省心还是遭罪。