实体
company open-source memory agent long-term graph ycombinator
创建2026-04-17
更新2026-04-17
阅读量级6 分钟
实体导读

Mem0(读作 "mem-zero")是一个为 AI Agent 提供智能长期记忆层的开源框架,

  1. 概述
  2. 核心架构
  3. Mem0 基础版:Incremental Memory Pipeline
  4. Mem0^g:Graph-based Memory
  5. Benchmark 性能
  6. 论文版 (2025-04, LoCoMo)
  7. v3 算法 (2026-04)
  8. 与其他 Agent Memory 方案的对比

Mem0: Universal Memory Layer for AI Agents

概述

Mem0(读作 "mem-zero")是一个为 AI Agent 提供智能长期记忆层的开源框架, YC S24 批次公司。它动态地从对话中提取、整合、检索关键信息,使 Agent 能在多会话中保持个性化和上下文一致性。

GitHub: mem0ai/mem0 | ⭐ 53K+ stars | Apache 2.0 许可 论文: arXiv:2504.19413 (2025-04, 178 citations, ECAI) 语言: Python + TypeScript SDK

核心架构

Mem0 基础版:Incremental Memory Pipeline

两阶段处理流程:

1. Extraction Phase(提取) - 输入:消息对 $(m_{t-1}, m_t)$(通常为 user+assistant 一轮交互) - 双上下文输入: - Conversation Summary $S$:全局对话摘要(来自数据库) - Recent Messages ${m_{t-m}, ..., m_{t-1}}$:最近 $m=10$ 条消息 - LLM 从三重上下文(summary + recent + new pair)中提取 candidate facts

2. Update Phase(更新) - 向量数据库检索 $s=10$ 条最相似的已有记忆 - LLM 通过 tool-call 接口判断四类操作: - ADD: 新事实,无语义等价记忆 → 直接写入 - UPDATE: 已有记忆需要补充/修正 → 合并更新 - DELETE: 新信息与已有记忆矛盾 → 删除旧记忆 - NOOP: 无需修改 → 跳过

2026 年 4 月 v3 算法升级: 改为 Single-pass ADD-only(仅添加,不覆写), 引入 Entity Linking + Multi-signal retrieval(语义 + BM25 + Entity matching 并行融合)。 LoCoMo 从 71.4→91.6, LongMemEval 从 67.8→93.4。

Mem0^g:Graph-based Memory

在基础版上增加图结构记忆:

  • 图表示 $G=(V,E,L)$:
  • Nodes $V$:实体(人、地点、事件等),含类型、embedding、时间戳
  • Edges $E$:关系三元组 $(v_s, r, v_d)$(如 Alice -[lives_in]-> SF)
  • Labels $L$:语义类型标注
  • 双阶段提取:
  • Entity Extractor → 识别实体及类型
  • Relationship Generator → 生成关系三元组
  • 冲突检测: LLM-based update resolver 判断旧关系是否过时,标记为 invalid 而非物理删除(支持时序推理)
  • 双路径检索:
  • Entity-centric:从 query 中提取实体 → 图中锚定节点 → 展开子图
  • Semantic triplet:query 整体编码 → 与所有三元组 embedding 匹配

Benchmark 性能

论文版 (2025-04, LoCoMo)

系统 Single-hop Multi-hop Temporal Open-domain Overall
Full Context (GPT-4o) 26.13 16.55 19.75 51.93 28.59
OpenAI Memory 38.14 14.70 23.91 54.90 32.91
Mem0 41.38 25.53 27.13 67.13 40.29
Mem0^g 43.10 25.00 24.37 68.13 40.15
  • 比 OpenAI Memory +26% (LLM-as-Judge metric)
  • 比 Full Context p95 latency 降低 91%, token cost 降低 >90%

v3 算法 (2026-04)

Benchmark v2 v3 Tokens Latency p50
LoCoMo 71.4 91.6 7.0K 0.88s
LongMemEval 67.8 93.4 6.8K 1.09s
BEAM (1M) — 64.1 6.7K 1.00s
BEAM (10M) — 48.6 6.9K 1.05s

与其他 Agent Memory 方案的对比

方案 记忆表示 提取方式 图结构 评测基准
Mem0 自然语言 fact + 可选图 LLM incremental extraction 有向标记图 $G=(V,E,L)$ LoCoMo, LongMemEval
hypermem 超图 (Topic/Episode/Fact 三层) Hyperedge 分组 超图(高阶关联) LoCoMo 92.73%
memreader 被动/主动双模式 GRPO 训练 ReAct 式决策 无 LoCoMo/LongMemEval/HaluMem
lightmem-agent-memory STM/MTM/LTM 三层 SLM 驱动 LTM Graph LoCoMo +2.5 F1

关键差异: - Mem0 是 工程产品化方案(SDK、托管服务、CLI),HyperMem/MemReader 更偏学术研究 - Mem0 v3 的 ADD-only + Entity Linking 策略最简洁,但 HyperMem 的超图在多跳推理上更强 - MemReader 的"主动提取"思路独特(用 GRPO 训练记忆决策),Mem0 仍依赖 LLM tool-call

记忆类型体系

三种 MemoryType(代码枚举)

class MemoryType(Enum):
    SEMANTIC = "semantic_memory"    # 语义记忆:事实、偏好、关系
    EPISODIC = "episodic_memory"   # 情景记忆(枚举存在但 v3 未独立实现)
    PROCEDURAL = "procedural_memory" # 程序记忆:Agent 执行步骤摘要

默认行为:add() 不指定 memory_type 时创建的即为 semantic memory(事实/偏好)。 语义记忆和情景记忆在 v3 中合并为 ADD-only 事实流,不再区分。

Procedural Memory(程序记忆)

  • 需显式传 memory_type="procedural_memory" + agent_id
  • 用专用 prompt PROCEDURAL_MEMORY_SYSTEM_PROMPT 生成
  • 目的:记录 Agent 的完整执行历史摘要(任务目标、进度、已执行步骤)
  • 让 Agent 能在新的会话中恢复上下文,不丢失执行进度
  • 典型场景:多步任务(如代码生成、数据处理)中 Agent 中断后恢复

三级 Scope 隔离

Scope 参数 用途
User user_id 用户级偏好、个人信息
Agent agent_id Agent 自身知识和行为记忆
Run run_id 单次执行/会话级记忆

三者可组合使用(如同时指定 user_id + agent_id),所有记忆按 scope 做 向量数据库过滤 + 增量维护。

短期 vs 长期

Mem0 本身不管理短期记忆。短期记忆(当前会话的对话历史)由 LLM 自身的 context window 管理。Mem0 的定位是:

短期记忆(LLM context window) ← 不涉及
    ↓ 会话结束后提取
Mem0 长期记忆层 ← 核心产品
    - Semantic Memory: 用户偏好、事实、关系
    - Procedural Memory: Agent 执行摘要
    - Entity Graph (Mem0^g): 实体-关系图谱

与 lightmem-agent-memory 的对比:LightMem 显式管理 STM/MTM/LTM 三层,Mem0 将 STM 交给 LLM、MTM 隐含在 "recent messages" 缓冲($m=10$ 条),LTM 是向量数据库。

多模态支持

Mem0 通过 enable_vision 配置项支持图像理解:

# config 中开启
config.llm.config["enable_vision"] = True
config.llm.config["vision_details"] = "auto"  # "low"/"high"/"auto"

实现机制(parse_vision_messages): 1. 遍历 messages,检测 content 是否为 list(多图)或 dict with type: image_url 2. 调用 get_image_description(msg, llm, vision_details) 将图片转为文本描述 3. 替换原消息中的图片为文本描述,后续走正常文本记忆提取流程

限制: - 仅支持图像→文本的转换,不支持音频、视频等多模态 - 图像不直接存入记忆,而是先由 LLM 描述后提取文字事实 - 论文明确将 multimodal interactions 列为 Future Work

应用场景

  • AI 助手:跨会话个性化对话
  • 客户支持:召回历史工单和用户偏好
  • 医疗保健:追踪患者偏好和病史
  • 游戏和生产力:基于用户行为的自适应