Agent 记忆系统选型:Mem0 / Zep / LangGraph Memory 怎么挑
Agent 记忆系统选型:Mem0 / Zep / LangGraph Memory 怎么挑
摘要:Agent 框架选型聊了很多轮,但真正决定长期体验的往往不是编排层,而是记忆层。本文把三个主流记忆方案——Mem0、Zep、LangGraph Memory——放到同一把尺子下对比:架构模型、检索机制、持久化、接入成本,最后按场景给出选型建议,并附一段可直接跑通的 Mem0 接入示例。关键词:AI Agent、记忆系统、Mem0、Zep、LangGraph。
为什么要单独谈「记忆」
很多团队的选型路径是:先定编排框架(LangGraph 还是 CrewAI),跑通 demo,上线,然后发现 Agent 每次对话都「失忆」——用户上周说过偏好,这周它完全不记得;三轮之前确认过的约束,第五轮又被推翻。
问题不在编排层,在记忆层。编排框架解决的是「这一轮怎么把工具和上下文组织起来」,记忆系统解决的是「跨会话、跨周、跨月的长期状态怎么存取」。两件事经常被混在一起谈,导致选型时记忆能力被当成编排框架的附属功能顺带决定——这是最常见的坑。
三者定位:先分清它们是不是同一层的东西
| Mem0 | Zep | LangGraph Memory | |
|---|---|---|---|
| 本质 | 独立记忆层(可作为中间件接任何 Agent) | 独立记忆服务(时序知识图谱为核心) | LangGraph 内置的状态持久化 + Store |
| 检索机制 | 向量检索 + 结构化抽取(双层) | 时序知识图谱(Graphiti),事实带有效期 | 按线程/命名空间存取,语义检索靠外挂向量库 |
| 短期记忆 | 会话内摘要 | 对话历史 + 实体状态 | Checkpoint 天然支持 |
| 长期记忆 | 用户级/Agent级记忆条目,自动增删改 | 实体关系图谱,支持事实失效与更新 | Store + 自定义检索逻辑 |
| 接入成本 | pip 装即用,OpenAI 兼容接口 | 自托管服务或云版,接入稍重 | 若已用 LangGraph,零额外依赖 |
| 开源协议 | Apache 2.0(核心) | Apache 2.0 | MIT(随 LangGraph) |
一句话概括:Mem0 是「给现有 Agent 补记忆」最快的路径;Zep 是「记忆即知识图谱」的重方案;LangGraph Memory 是「已在 LangGraph 生态内」的顺势选择。
各自的适用场景
Mem0:已有 Agent,想低成本补记忆
Mem0 的核心抽象是 add / search:你把对话喂给 add,它自动抽取值得记的事实(用户偏好、约束、事实性陈述),检索时 search 返回相关记忆条目。双层架构(抽取层 + 向量层)意味着它不是把原文全存——存的是结构化记忆,噪声更小。
适合:Agent 已经跑在任意框架上(甚至没有框架),只想加一层「记得住用户」的能力。接入通常半天内能完成。
Zep:多实体、关系密集、要求时效正确
Zep 底层的 Graphiti 时序知识图谱,最强的点是事实有时间维度:「客户 A 的套餐是基础版」这条事实在升级后会被标记失效而不是被覆盖成模糊的新描述。做 CRM 型 Agent、多轮长周期业务流程时,这个特性很值钱。
适合:记忆的正确性直接等于业务正确性的场景。代价是要维护一个图存储后端,运维成本高于 Mem0。
LangGraph Memory:已在 LangGraph 里,别急着引入外部方案
LangGraph 的 Checkpoint + Store 已经覆盖了「线程内状态恢复 + 跨线程共享键值」的大部分需求。如果你的项目本来就构建在 LangGraph 上,先评估内置能力够不够,再考虑外挂 Mem0/Zep——很多「记忆问题」其实是 Store 的命名空间设计没做好。
适合:LangGraph 原生项目、记忆需求以会话状态恢复为主。
一段能跑的 Mem0 示例
from mem0 import Memory
config = {
"llm": {
"provider": "openai_compatible",
"config": {
"model": "qwen-plus",
"api_key": "sk-...",
"openai_base_url": "https://dashscope.aliyuncs.com/compatible-mode/v1",
},
},
"vector_store": {
"provider": "qdrant",
"config": {"host": "localhost", "port": 6333},
},
}
m = Memory.from_config(config)
# 写入:自动抽取值得记的事实
m.add("用户偏好靠窗座位,对香菜过敏", user_id="liu")
# 检索:返回结构化记忆条目
hits = m.search("帮我订餐厅", user_id="liu")
for h in hits:
print(h["memory"])
注意两个工程细节:
openai_base_url指向任何 OpenAI 兼容端点都可以,国产模型接入无障碍;user_id的粒度决定记忆隔离边界——多租户场景必须在接入前想清楚。
选型决策树
- 记忆需求 = 会话恢复 + 少量跨会话共享?→ LangGraph Store 够用,别引外部件
- 需要自动抽取长期事实、接入越快越好?→ Mem0
- 事实时效正确性是硬要求(业务流程型 Agent)?→ Zep
- 多个都要?先跑 Mem0 验证价值,再评估是否值得为图谱上 Zep
写在最后
编排框架的对比我们已经聊了很多轮(LangGraph / AutoGen / CrewAI 各有定位),但真正上线后的体验差距,一半来自记忆层没选对。选型的原则其实和框架层一致:先明确要解决什么业务问题,再让方案对位,而不是拿着功能表逐项打分。
*本文是「Agent 选型」系列之一。相关阅读:主流 Agent 框架对比系列。*斜体样式
更多推荐
所有评论(0)