Agent 记忆系统选型:Mem0 / Zep / LangGraph Memory 怎么挑

摘要:Agent 框架选型聊了很多轮,但真正决定长期体验的往往不是编排层,而是记忆层。本文把三个主流记忆方案——Mem0、Zep、LangGraph Memory——放到同一把尺子下对比:架构模型、检索机制、持久化、接入成本,最后按场景给出选型建议,并附一段可直接跑通的 Mem0 接入示例。关键词:AI Agent、记忆系统、Mem0、Zep、LangGraph。

为什么要单独谈「记忆」

很多团队的选型路径是:先定编排框架(LangGraph 还是 CrewAI),跑通 demo,上线,然后发现 Agent 每次对话都「失忆」——用户上周说过偏好,这周它完全不记得;三轮之前确认过的约束,第五轮又被推翻。

问题不在编排层,在记忆层。编排框架解决的是「这一轮怎么把工具和上下文组织起来」,记忆系统解决的是「跨会话、跨周、跨月的长期状态怎么存取」。两件事经常被混在一起谈,导致选型时记忆能力被当成编排框架的附属功能顺带决定——这是最常见的坑。

三者定位:先分清它们是不是同一层的东西

Mem0ZepLangGraph Memory
本质独立记忆层(可作为中间件接任何 Agent)独立记忆服务(时序知识图谱为核心)LangGraph 内置的状态持久化 + Store
检索机制向量检索 + 结构化抽取(双层)时序知识图谱(Graphiti),事实带有效期按线程/命名空间存取,语义检索靠外挂向量库
短期记忆会话内摘要对话历史 + 实体状态Checkpoint 天然支持
长期记忆用户级/Agent级记忆条目,自动增删改实体关系图谱,支持事实失效与更新Store + 自定义检索逻辑
接入成本pip 装即用,OpenAI 兼容接口自托管服务或云版,接入稍重若已用 LangGraph,零额外依赖
开源协议Apache 2.0(核心)Apache 2.0MIT(随 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"])

注意两个工程细节:

  1. openai_base_url 指向任何 OpenAI 兼容端点都可以,国产模型接入无障碍;
  2. user_id 的粒度决定记忆隔离边界——多租户场景必须在接入前想清楚。

选型决策树

  • 记忆需求 = 会话恢复 + 少量跨会话共享?→ LangGraph Store 够用,别引外部件
  • 需要自动抽取长期事实、接入越快越好?→ Mem0
  • 事实时效正确性是硬要求(业务流程型 Agent)?→ Zep
  • 多个都要?先跑 Mem0 验证价值,再评估是否值得为图谱上 Zep

写在最后

编排框架的对比我们已经聊了很多轮(LangGraph / AutoGen / CrewAI 各有定位),但真正上线后的体验差距,一半来自记忆层没选对。选型的原则其实和框架层一致:先明确要解决什么业务问题,再让方案对位,而不是拿着功能表逐项打分。


*本文是「Agent 选型」系列之一。相关阅读:主流 Agent 框架对比系列。*斜体样式

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐