Mem0: Building Production-Ready AI Agents with Scalable Long-Term Memory

article/2025/8/4 12:46:58

文章目录

  • 摘要
  • Abstract
  • 1. 引言
  • 2. Mem0
  • 3. graph-based Mem0
  • 参考
  • 总结

摘要

  Mem0是一种针对AI智能体的长时记忆架构,旨在解决大型语言模型固定上下文窗口导致的跨会话连贯性问题。其基础版本采用两阶段处理范式:提取阶段通过结合对话摘要、近期消息序列和新消息对生成提示,利用LLM提取关键记忆集合;更新阶段则通过检索相似记忆并调用LLM决策机制,动态执行添加、更新、删除或无操作四种记忆管理动作,确保知识库的时效性与一致性。在此基础上发展的图结构版本(graph-based Mem0)创新性地采用有向标记图表示记忆,其中节点承载实体类型、嵌入向量及时间戳元数据,边则通过关系三元组刻画实体间关联。该版本通过实体提取器和关系生成器构建结构化图谱,更新时结合语义匹配与冲突检测机制动态维护图谱完整性,并采用双轨检索策略——实体中心法构建关联子图,语义三元组法实现全局相似度匹配——有效支持复杂关系推理。两种架构共同实现了对话信息的动态捕获、结构化组织和精准检索,显著提升了长时对话的连贯性。

Abstract

  Mem0 is a long-term memory architecture designed for AI agents to address the issue of cross-session coherence caused by the fixed context window in large language models (LLMs). Its basic version adopts a two-stage processing paradigm: in the extraction stage, it generates prompts by combining conversation summaries, recent message sequences, and new messages, and uses an LLM to extract a set of key memories. In the update stage, it retrieves similar memories and invokes an LLM-based decision mechanism to dynamically perform one of four memory management actions—add, update, delete, or no operation—ensuring the timeliness and consistency of the knowledge base.Building on this, the graph-based version of Mem0 introduces an innovative approach by representing memory as a directed, labeled graph. In this structure, nodes carry entity types, embedding vectors, and timestamp metadata, while edges capture relationships between entities using relation triples. This version constructs a structured knowledge graph via an entity extractor and a relation generator, and maintains its integrity dynamically through semantic matching and conflict detection mechanisms during updates. It also employs a dual-track retrieval strategy: an entity-centric method to construct relevant subgraphs, and a semantic triple-based approach to achieve global similarity matching, both of which support complex relational reasoning.Together, these two architectures enable dynamic capture, structured organization, and precise retrieval of conversational information, significantly enhancing the coherence of long-term dialogues.

1. 引言

  人类记忆是智能的基础,对沟通至关重要,使我们能够回忆过去的互动、推断偏好并构建对他人不断发展的心理模型,从而实现跨越长时间(天、周、月)的连贯、上下文丰富的交流。虽然基于大型语言模型(LLM)的AI代理在生成流畅、上下文合适的响应方面取得了显著进展,但它们本质上受到固定上下文窗口的限制,严重限制了它们在长时间互动中保持连贯性的能力。这种限制源于LLM缺乏能够超越其有限上下文窗口的持久记忆机制。
  没有持久记忆,AI智能体会忘记用户偏好、重复提问并违背先前确定的事实。即使在医疗、教育和企业支持等高风险领域,这种记忆缺失也会破坏用户体验和信任。虽然像GPT-4o、Claude 3.7 Sonnet和Gemini这样的模型通过扩展上下文长度(128K至数百万token)来应对,但这些改进只是延迟而非解决了根本限制。原因有二:(1) 随着有意义的长期人-AI关系发展,对话历史最终会超过最长的上下文限制;(2) 现实对话很少保持主题连续性,关键信息可能被埋没在大量无关信息中,使得完整上下文方法效率低下。此外,注意力机制在远距离token上会退化,仅提供更长的上下文并不能确保有效检索或利用过去的信息。
  为了解决这些挑战,AI智能体必须采用超越静态上下文扩展的记忆系统。一个强大的AI记忆应该能够选择性地存储重要信息、整合相关概念并在需要时检索相关细节——模仿人类的认知过程。通过整合这种机制,我们可以开发出能够保持角色一致性、跟踪用户偏好演变并基于先前交流构建的AI代理。这将把AI从短暂的、健忘的响应者转变为可靠的长期协作者,从根本上重新定义对话智能的未来。本文介绍了Mem0,一种新颖的记忆架构,旨在解决AI系统在跨不同会话的长时间对话中保持连贯推理的根本限制。它动态捕获、组织和检索持续对话中的关键信息。

2. Mem0

  Mem0遵循增量处理范式,该框架由两阶段组成:提取阶段和更新阶段。
  提取阶段首先获取新消息对 ( m t − 1 , m t ) (m_{t-1},m_t) (mt1,mt) m t − 1 m_{t-1} mt1是用户消息而 m t m_t mt是智能体响应消息,两者构成了一个完整的交互单元。为了获取合适的上下文以提取记忆,还需要一个对话总结 S S S和一系列最近的消息序列 { m t − m , m t − m + 1 , ⋯ , m t − 2 } \{m_{t-m}, m_{t-m+1},\cdots, m_{t-2}\} {mtm,mtm+1,,mt2}。对话总结 S S S由一个异步执行的总结生成模块产生。由于在对话总结 S S S中可能没有包含最近消息的内容,因此需要一系列最近的消息序列来补充这些信息。最后由对话总结 S S S、最近的一系列消息 { m t − m , m t − m + 1 , ⋯ , m t − 2 } \{m_{t-m}, m_{t-m+1},\cdots, m_{t-2}\} {mtm,mtm+1,,mt2}和新消息对 ( m t − 1 , m t ) (m_{t-1}, m_t) (mt1,mt)构成一个提示 P P P以用于指导大语言模型进行记忆提取 ϕ \phi ϕ,提取后的结果是重要记忆的集合 Ω = { ω 1 , ω 2 , ⋯ , ω n } \Omega=\{\omega_1, \omega_2, \cdots, \omega_n\} Ω={ω1,ω2,,ωn}
  更新阶段将已知的记忆与提取出的记忆进行比较:对于每个提取出的记忆,首先从数据库中检索出前 s s s个语义相似的记忆,然后将该提取出的记忆与检索的前 s s s个记忆送入大语言模型,让大语言模型决定以下四个操作中哪种该执行:1. 当没有语义相等的记忆存在,将提取出的记忆作为新记忆进行添加操作。2. 当存在语义相等的记忆存在,使用提取出的记忆增强已知的记忆。3. 当与已知的记忆冲突时,删除冲突的已知记忆。4. 当提取出的记忆不需要对数据库进行修改时,不进行任何操作。
在这里插入图片描述

3. graph-based Mem0

  graph-based Mem0与基础的Mem0相比,只是存储的形式从嵌入变为图谱。graph-based Mem0最终输出的结果是一个有向标记图 G = ( V , E , L ) G=(V, E, L) G=(V,E,L),其中节点 V V V代表实体,边 E E E代表实体之间的关系,标记 L L L将语义信息赋值给节点。
  每个节点 v ∈ V v\in V vV包含三部分信息:1. 实体类型。2. 一个描述实体信息的嵌入向量。3. 包含创建时间戳的元信息。实体之间的关系由一个三元组 ( v s , r , v d ) (v_s, r, v_d) (vs,r,vd)构成,其中 v s v_s vs v d v_d vd是起始和结束实体节点, r r r是连接它们的标记边。
  提取阶段利用两阶段的管道将文本转换为结构化的图表示:首先,实体提取器从输入文本中提取出一系列实体及其对应的类型。接着,关系生成器生成这些实体之间的关系,得到一系列关系三元组。
  更新阶段针对每个关系三元组,首先计算起始和结束节点的嵌入,通过语义相似度查找存在的节点;基于查找到的结果,接着可能创建两个节点,创建一个节点或使用已知的节点;然后执行冲突检测机制,判断新信息是否与已知的关系存在潜在的冲突;最后通过更新解析器判断某些关系是否过时,如果过时,将某些关系标记为无效的,更新该关系三元组到有向标记图。
在这里插入图片描述
  该框架使用的记忆检索方法如下:实体中心方法首先识别查询中的关键实体,然后利用语义相似度在知识图谱中定位对应节点。该方法系统地探索从这些锚点出发的入向和出向关系,构建一个包含相关上下文信息的全面子图。作为补充,语义三元组方法采用更整体化的视角,将整个查询编码为稠密嵌入向量。该查询表示随后与知识图谱中每个关系三元组的文本编码进行匹配。系统计算查询与所有可用三元组之间的细粒度相似度分数,仅返回超过相关性阈值的结果,并按相似度降序排序。

参考

Prateek Chhikara, Dev Khant, Saket Aryan, and et al. Mem0: Building Production-Ready AI Agents with Scalable Long-Term Memory.

总结

  Mem0架构采用增量处理范式,包含提取和更新两阶段。提取阶段处理新消息对时,结合异步生成的对话摘要和近期消息序列构建提示,指导大语言模型提取关键记忆集合。更新阶段通过语义检索比对新增记忆与现有记忆,由大语言模型动态决策执行添加、更新、删除或无操作,确保记忆库的时效性和一致性。其图增强版本(graph-based Mem0)将记忆表示为有向标记图:节点承载实体类型、嵌入向量及元数据,边以三元组形式捕捉实体间关系。该架构通过实体提取器和关系生成器将文本转化为结构化图谱,更新时采用嵌入相似度匹配节点并引入冲突检测机制,通过标记失效处理过时关系。记忆检索融合双模式策略——实体中心法定位节点并构建关联子图,语义三元组法则通过整体嵌入匹配筛选高相关度关系,兼顾精准检索与语义泛化能力。


http://www.hkcw.cn/article/CgPjcLxjNx.shtml

相关文章

C++构造函数详解:从基础到高级

文章目录 1. 摘要2. 默认构造函数3. 无参构造函数4. 带参构造函数5. 拷贝构造函数6. 移动构造函数 (C11)7. 委托构造函数 (C11)8. 转换构造函数9. 默认拷贝构造函数10. 总结 1. 摘要 构造函数是C类的重要组成部分,负责对象的初始化工作。本文将详细讲解8种构造函数…

day16 leetcode-hot100-32(链表11)

138. 随机链表的复制 - 力扣(LeetCode) 1.哈希表 思路 第一次遍历创建新节点并将原节点与新节点同时放入哈希表中 第二次遍历为新节点加入next与random 具体代码 /* // Definition for a Node. class Node {int val;Node next;Node random;public N…

52. N-Queens II

题目描述 52. N-Queens II 回溯法 这道题与第51题是一样的。51. N-Queens-CSDN博客 class Solution {int columns; //从低位到高位起算,第i位为0表示棋盘第i列可以放置皇后,第i位为1表示棋盘第i列不能放置皇后//边长为n的棋盘分别有2n-1条正斜线和反…

关于adb devices无法找到设备:error: device not found 的解决办法

一、此类问题出现的原因,一般是设备所使用的端口被占用,需要找到被占用的端口。 二、操作步骤 1、打开命令窗口。 2、输入adb shell 会发现提示error:device not found! 3、输入adb kill-server ,然后启动adb start-server 4、输入 net…

关于不同平台微信多开的解决方案(WIN/MAC/IOS/Andriod)

日常生活跟工作中需要用到多开微信,本次分享下在不同平台上解决微信多开的方法。这些方法我都用了超过1年以上,都比较稳定。中间遇到的一些问题我也有说明,包括每个方法的优缺点,每个平台的操作等。 先说下我自己体验下来的结论&a…

Flutter项目兼容鸿蒙Next系统

一、环境搭建: 1.1 下载鸿蒙DevEco Studio开发工具。 下载地址:下载中心 | 华为开发者联盟-HarmonyOS开发者官网,共建鸿蒙生态 下载之前需要先登录,后面的模拟器创建还要开发者验证、审核啥的,好在审核进度还可以&am…

无需密码强制移除Apple ID 工具! iOS 11.3以下可用 ipad和iphone通用!还不快快收藏起来

无需密码强制移除Apple ID 工具! iOS 11.3以下可用 ipad和iphone通用!还不快快收藏起来 ✅ 支持的设备范围注意事项使用方法如何下载? 很多朋友在不再使用某个Apple 帐户或是转卖旧的iPhone,为了防止 ID 被盗导致个人信息泄露&…

Mac 散热救星:Macs Fan Control,让你的苹果电脑“冷静”又安静!

各位果粉们,是不是经常遇到这样的烦恼:用着用着电脑,突然就发热卡顿,风扇狂转噪音大得跟拖拉机似的?别担心,今天给大家安利一款超实用的软件 —— Macs Fan Control,它可是让苹果电脑“冷静”又…

mac 安装idea,碰到“已损坏,无法打开,您应该推出磁盘映像”的解决办法

1.打开终端,先输入如下命令,之后回车操作,碰到输入密码时,正常输入密码即可 sudo spctl --master-disable 2.打开系统设置-安全与隐私性-找到‘允许以下来源的应用程序’ ,更改为任何来源,碰到输入密码时&…

k8s 四种Service类型(ClusterIP、NodePort、LoadBalancer、ExternalName)详解

🐇明明跟你说过:个人主页 🏅个人专栏:《Kubernetes航线图:从船长到K8s掌舵者》 🏅 🔖行路有良友,便是天堂🔖 目录 一、引言 1、k8s概述 2、Service在Kubernetes中的作用 二、ClusterIP类型 1、ClusterIP 类型的特点和用途 2、ClusterIP 的工作机制 3、…

Android studio 模拟器运行时弹窗显示The emulator process for AVD 模拟器的名字 has terminated 的解决方法

Android studio 问题解决方案 一:.运行模拟器报错展示二.解决步骤第一步:找到.android的文件夹第二步:剪切该文件到SDK的下载路径第三步:点开该文件第四步:找到配置文件第五步:编辑配置文件 三:设置环境变量…

Android Studio快速配置国内镜像源和HTTP代理

最近开始学习Android Studio开发,发现老是连接超时,下面配置下国内镜像源和HTTP代理,而且通过尝试发现最快下载速度方法 一.配置 SDK 镜像源 打开 Android Studio。 进入 File > Settings 然后点击 System Settings,点击 Android SDK。 …

mac/Windows安装python+pycharm【小白操作】

macOS通常自带Python,但建议安装最新版本的Python。你可以通过Homebrew来安装Python。 方法一:通过Homebrew安装Python 安装Homebrew(如果尚未安装): 打开终端,输入以下命令并按回车: /bin/bas…

Mac电脑安装Postman教程

Postman 是一款非常常用的 API 调试工具,支持接口测试、自动化测试等功能,本文将分享在 Mac 电脑上安装 Postman 的完整步骤。 1. 下载 Postman 安装包 方法一:官网下载 打开 Postman 官方网站:https://www.postman.com/downlo…

MySQL连接报错处理:1130-host ... is not allowed to connect to this MySql server

在MySQL安装完成后,很多开发者会遇到这样一个问题: 错误代码 1130:host xxx.xxx.xxx.xxx is not allowed to connect to this MySql server 这个错误通常出现在你尝试通过远程工具(如 Navicat、DBeaver 等)连接 MySQL …

五、单元测试-概述入门

目录 main方法测试缺点: 在pom.xm中,引入junit的依赖。,在test/java目录下,创建测试类,并编写对应的测试方法,并在方法上声明test注解。 练习:验证身份证合法性 测试成功 测试失败 main方法测试缺点&am…

Python中的None值是什么?——浅析“无”的哲学与编程智慧

在Python编程世界中,None是一个极其特殊且基础的概念。它既是一个对象,又是表达“无”与“空”的唯一标识符。它的设计和应用不仅反映了Python对“无”这一哲学问题的简洁处理方式,也蕴含着深刻的编程理念和实践智慧。 本文将深入剖析Python…

Linux正则三剑客篇

一、历史命令 history 命令 :用于输出历史上使用过的命令行数量及具体命令。通过 history 可以快速查看并回顾之前执行过的命令,方便重复操作或追溯执行过程。 !行号 :通过指定历史命令的行号来重新执行该行号对应的命令。例如,若…

配网导线自取电式视频监测装置

在现代社会,电力如同城市的血脉,支撑着生活与生产的正常运转。而电力配网系统,作为电力传输和分配的“最后一公里”,其稳定运行尤为关键。然而,复杂的配电设备、暴露的线路以及多变的外部环境(如人为施工破…

8天Python从入门到精通【itheima】-60~61

目录 60节-变量的作用域 1.局部变量 2.局部变量的代码演示 3.全局变量 4.全局变量的代码演示 5.global关键字 【1】体会局部变量和全局变量的区别 【2】global关键字:将变量直接声明为全局变量 6.小节总结 61节-第五章末尾-关于函数的综合案例-ATM机 1.案例…