1. 引言与背景
-
大型语言模型 (LLMs) 在生成连贯的上下文回复方面表现出色,但其固定的上下文窗口在长时间的多会话对话中难以保持一致性。
-
缺乏持久记忆机制导致了人机交互中的根本脱节。
-
没有记忆的 AI 代理会遗忘用户的偏好、重复提问,甚至提出与已知事实相矛盾的建议。
-
论文中给出了一个典型示例:如果用户在初始对话中提到自己是素食主义者且不吃乳制品,没有记忆的系统可能会在后续的会话中向其推荐含有鸡肉的晚餐,这完全违背了用户已建立的饮食限制。
-
相比之下,具备持久记忆的系统能够跨会话保留这些关键的用户信息,并推荐合适的素食和无乳制品选项。
-
尽管现有的先进模型(如 GPT-4 128K、Claude 3.7 Sonnet 200K 以及 Gemini 10M)不断扩大上下文窗口,但这仅仅是推迟了问题的发生,并未从根本上解决记忆限制。
-
仅仅扩大上下文窗口不足以应对实际应用,主要有两个关键原因:
-
首先,随着人机关系在数周或数月内的长期发展,对话历史的长度必然会超过哪怕是最慷慨的上下文限制。
-
其次,现实世界中的对话很少保持主题的连续性;例如,用户提到饮食偏好后可能会进行数小时无关的编程任务讨论,这种情况下关键信息会被淹没在数千个无关的 token 中。
-
此外,单纯提供更长的上下文并不能确保过去信息的有效检索,因为模型的注意力机制在处理距离较远的 token 时会发生衰退。
-
为了解决上述挑战,论文提出了 Mem0(发音为 mem-zero),这是一种新颖的记忆架构,能够从持续的对话中动态捕获、组织和检索关键信息。
-
论文还进一步提出了 Mem0 的增强变体,通过基于图的记忆表示来捕获对话元素之间的复杂关系结构。
-
论文相关代码已开源于:https://mem0.ai/research。
2. 提出的方法:Mem0 与图记忆架构
论文提出了两种用于 AI 代理的记忆架构,以模仿人类认知过程中的记忆整合与检索。
2.1 Mem0 基础架构
- Mem0 遵循增量处理范式,使其能够在持续的对话中无缝运行。
- 完整的管道架构由两个主要阶段组成:提取 (Extraction) 阶段和更新 (Update) 阶段。
提取阶段 (Extraction Phase)
-
当系统接收到新的消息对(通常包含一条用户消息和一条助手回复,代表一个完整的交互单元)时,提取阶段就会启动。
-
系统利用两个互补的来源来建立记忆提取的上下文:
-
对话摘要 (Conversation Summary):从数据库中检索,概括整个对话历史的语义内容。系统实现了一个异步摘要生成模块来定期刷新摘要,从而在不引入处理延迟的情况下为提取提供最新的全局主题理解。
-
近期消息序列 (Recent Message Sequence):包含对话历史中的最近 m 条消息,提供未被摘要整合的细粒度时间上下文。
-
新消息对与这两种上下文信息结合,形成一个全面的提示 (Prompt)。
-
系统通过 LLM 作为提取函数,在保持对对话广泛上下文感知的同时,从新的交流中提取出一组显著的记忆(即候选事实)。
更新阶段 (Update Phase)
-
提取完成后,更新阶段会评估每个候选事实与现有记忆的关系,以保持知识库的一致性并避免冗余。
-
系统首先使用密集嵌入向量,从数据库中检索出前 s 个语义上最相似的记忆。
-
这些检索到的相似记忆连同新的候选事实一起,通过函数调用 (Tool Call) 接口提交给 LLM。
-
借助于 LLM 的推理能力,系统自主决定执行以下四种操作之一:
-
ADD (添加):当知识库中不存在语义等效的记忆时,创建新记忆。
-
UPDATE (更新):使用补充信息增强、完善现有记忆。
-
DELETE (删除):当现有记忆与新信息相矛盾时,将其删除。
-
NOOP (无操作):当候选事实不需要对知识库进行任何修改时执行此操作。
-
在实验配置中,系统设定 m=10(参考前10条消息)和 s=10(检索10条相似记忆),所有的语言模型操作均使用了 GPT-4o-mini 作为推理引擎。
2.2 Mem0g:基于图的增强记忆架构
- Mem0g 采用了基于图的记忆方法,将记忆表示为有向标签图 G = (V, E, L)。
- 在图框架中,节点 V 代表实体(如人物、地点),边 E 代表实体之间的关系,标签 L 则为节点分配特定的语义类型。
- 每个实体节点都包含三个核心组件:分类实体的实体类型、捕获实体语义含义的嵌入向量,以及包含创建时间戳的元数据。
图提取过程 (Extraction Process)
- 提取过程采用双阶段管道,利用 LLM 将非结构化文本转换为结构化的图表示。
- 实体提取器 (Entity Extractor):分析对话文本以识别实体及其相应类型。它能够识别人物、地点、物体、概念、事件和属性等离散且有价值的信息单元。
- 关系生成器 (Relationship Generator):该模块分析提取出的实体及其在对话中的上下文,通过检查语言模式、上下文线索和领域知识,推导出实体间具有语义意义的连接(例如“居住在”、“偏好”、“拥有”等),并生成关系三元组。
存储与更新策略 (Storage and Update Strategy)
- 当整合新信息时,系统会计算源实体和目标实体的嵌入,然后搜索语义相似度高于设定阈值的现有节点。
- 为了维护知识图谱的一致性,系统实施了冲突检测机制来识别互相冲突的现有关系。
- 基于 LLM 的更新解析器会评估某些关系是否已经过时;系统会将这些过时关系标记为无效,而不是直接在物理上删除它们,从而保留进行时间推理的能力。
图检索机制 (Dual Retrieval Mechanism)
-
系统实现了双重检索策略以实现最佳的信息获取:
-
以实体为中心的方法 (Entity-centric method):首先识别查询中的关键实体,利用语义相似度在图中定位对应的锚节点,然后系统性地探索与这些节点相关的传入和传出关系,构建出一个相关的子图。
-
语义三元组方法 (Semantic triplet approach):将整个用户查询编码为密集的嵌入向量,并与知识图谱中每个关系三元组的文本编码进行匹配,最终返回相似度得分超过配置阈值的相关三元组。
-
在具体实现层面,该基于图的系统利用 Neo4j 作为底层的图数据库。
3. 实验设置与评估
3.1 数据集
- 实验使用了 LOCOMO 数据集,这是一个专门设计用于评估对话系统中长期对话记忆的数据集。
- 数据集包含 10 个扩展对话,每个对话平均分布在多个会话中,包含约 600 个轮次和 26000 个 token。
- 每个对话之后附带有约 200 个问题以及对应的真实答案,问题被分类为单跳 (single-hop)、多跳 (multi-hop)、时间 (temporal) 和开放领域 (open-domain) 四种类型。
3.2 评估指标
论文将评估指标分为两类,以全面了解系统性能:
-
性能指标 (Performance Metrics):
-
研究指出传统的词汇相似度指标(如 F1 分数和 BLEU-1)在评估事实准确性方面存在严重局限性。
-
论文提供了一个反例:如果正确答案是“Alice 出生在 3 月”,而系统生成“Alice 出生在 7 月”,由于大量词汇(Alice, born, in)重叠,传统指标会给出高分,从而掩盖了关键的事实错误。
-
为了克服这一缺陷,论文引入了 LLM-as-a-Judge 作为补充指标,利用强大的 LLM 从事实准确性、相关性、完整性和上下文适当性等多个维度去评估回答质量。
-
部署指标 (Deployment Metrics):
-
跟踪了检索期间提取的 Token 消耗量,这直接关系到系统的运营成本。
-
同时监控了 延迟 (Latency),包含搜索延迟(检索记忆或数据块所需的时间)以及产生最终答复的总延迟。
3.3 实验结果亮点
- 论文将提出的方法与六大类基准(包括现有的记忆增强系统、检索增强生成 (RAG)、全上下文方法、开源记忆方案以及专有模型系统等)进行了系统比较。
- 实验结果表明,Mem0 方法在各类问题中均始终优于所有现有的记忆系统。
- 具体而言,Mem0 在 LLM-as-a-Judge 指标上相对 OpenAI 实现了高达 26% 的相对改进。
- 带有图记忆架构的 Mem0 相比于基础配置的 Mem0,其整体得分进一步提高了约 2%。
- 在计算开销和效率方面,相比于全上下文方法,Mem0 实现了 91% 的 p95 延迟降低,并节省了超过 90% 的 token 成本,成功在高级推理能力和实际部署约束之间取得了出色的平衡。