【论文阅读】Agent 记忆机制(35):MAGMA——用多关系图与意图路由实现结构化长期记忆检索

文章目录

  • 前言
  • 零、论文基本信息
  • 一、背景与问题
    • [1. 从 RAG 到 Memory-Augmented Generation](#1. 从 RAG 到 Memory-Augmented Generation)
    • [2. 单一向量空间混合了不同关系](#2. 单一向量空间混合了不同关系)
    • [3. 固定 Top-K 检索无法适应不同问题](#3. 固定 Top-K 检索无法适应不同问题)
    • [4. 复杂图构建不能阻塞 Agent](#4. 复杂图构建不能阻塞 Agent)
  • 二、相关工作
    • [1. 长上下文与完整历史](#1. 长上下文与完整历史)
    • [2. 扁平检索式记忆](#2. 扁平检索式记忆)
    • [3. 分层与操作系统式记忆](#3. 分层与操作系统式记忆)
    • [4. 自进化记忆网络](#4. 自进化记忆网络)
    • [5. 图结构记忆](#5. 图结构记忆)
    • [6. MAGMA 的研究定位](#6. MAGMA 的研究定位)
  • [三、MAGMA 方法总览](#三、MAGMA 方法总览)
    • [1. 查询处理层](#1. 查询处理层)
    • [2. 数据结构层](#2. 数据结构层)
    • [3. 写入更新层](#3. 写入更新层)
  • 四、多图记忆结构
    • [1. 时间变化的有向多重图](#1. 时间变化的有向多重图)
    • [2. 统一事件节点](#2. 统一事件节点)
    • [3. 语义图](#3. 语义图)
    • [4. 时间图](#4. 时间图)
    • [5. 因果图](#5. 因果图)
    • [6. 实体图](#6. 实体图)
    • [7. 为什么需要多张图?](#7. 为什么需要多张图?)
  • 五、自适应分层检索
    • [1. 第一阶段:查询分析与分解](#1. 第一阶段:查询分析与分解)
    • [2. 第二阶段:多信号锚点识别](#2. 第二阶段:多信号锚点识别)
    • [3. 第三阶段:自适应遍历策略](#3. 第三阶段:自适应遍历策略)
    • [4. 第四阶段:子图线性化](#4. 第四阶段:子图线性化)
    • [5. 基于显著性的 Token 预算](#5. 基于显著性的 Token 预算)
  • 六、双通路记忆演化
    • [1. 设计动机](#1. 设计动机)
    • [2. 快速路径:突触式写入](#2. 快速路径:突触式写入)
    • [3. 慢速路径:异步结构固化](#3. 慢速路径:异步结构固化)
  • 七、案例分析
    • [1. 事实召回:Melanie 会哪些乐器?](#1. 事实召回:Melanie 会哪些乐器?)
    • [2. 多跳推理:Melanie 有几个孩子?](#2. 多跳推理:Melanie 有几个孩子?)
    • [3. 时间推理:她什么时候参加了徒步?](#3. 时间推理:她什么时候参加了徒步?)
  • 八、实验设置
    • [1. 数据集](#1. 数据集)
    • [2. 对比方法](#2. 对比方法)
    • [3. 模型与实现设置](#3. 模型与实现设置)
    • [4. 评价指标](#4. 评价指标)
  • [九、LoCoMo 实验结果](#九、LoCoMo 实验结果)
    • [1. 主要结果](#1. 主要结果)
    • [2. 最大优势来自对抗问题](#2. 最大优势来自对抗问题)
    • [3. 时间推理只是小幅领先](#3. 时间推理只是小幅领先)
    • [4. 多跳推理并非最优](#4. 多跳推理并非最优)
  • [十、LongMemEval 泛化结果](#十、LongMemEval 泛化结果)
    • [1. 多图结构可以扩展到超长历史](#1. 多图结构可以扩展到超长历史)
    • [2. Full Context 在部分任务上仍然更强](#2. Full Context 在部分任务上仍然更强)
  • 十一、系统效率分析
    • [1. MAGMA 的查询延迟最低](#1. MAGMA 的查询延迟最低)
    • [2. MAGMA 并不是 Token 最少的方法](#2. MAGMA 并不是 Token 最少的方法)
    • [3. 异步处理隐藏了部分成本](#3. 异步处理隐藏了部分成本)
  • 十二、消融实验
    • [1. 核心模块消融](#1. 核心模块消融)
    • [2. 自适应策略贡献最大](#2. 自适应策略贡献最大)
    • [3. 因果关系与时间关系不可互相替代](#3. 因果关系与时间关系不可互相替代)
    • [4. 实体边下降较小但仍然有效](#4. 实体边下降较小但仍然有效)
    • [5. 单图实验](#5. 单图实验)
  • 十三、评价指标需要谨慎理解
    • [1. LLM Judge 与传统指标给出不同结论](#1. LLM Judge 与传统指标给出不同结论)
    • [2. LLM Judge 也不是绝对客观](#2. LLM Judge 也不是绝对客观)
  • 十四、局限性与未来方向
  • 十五、我的理解和启发
    • [1. 记忆结构必须与查询类型对齐](#1. 记忆结构必须与查询类型对齐)
    • [2. 一张统一知识图不一定是最佳方案](#2. 一张统一知识图不一定是最佳方案)
    • [3. 路由策略与记忆结构同样重要](#3. 路由策略与记忆结构同样重要)
    • [4. 快速写入与慢速整理适合真实 Agent](#4. 快速写入与慢速整理适合真实 Agent)
    • [5. 对工具型 Agent 的启发](#5. 对工具型 Agent 的启发)
    • [6. 推断关系必须包含置信度](#6. 推断关系必须包含置信度)
    • [7. 记忆评估最终应该落到 Agent 行为上](#7. 记忆评估最终应该落到 Agent 行为上)
  • 十六、总结
  • 参考资料

前言

前面已经阅读了 A-MEM、Mem0、MemoryOS、Nemori 等不同类型的 Agent 记忆方法。

这些方法分别关注了不同的问题:

  • Mem0 关注记忆的新增、更新和删除;
  • A-MEM 关注记忆之间如何动态建立关联;
  • MemoryOS 关注如何用分层架构管理不同生命周期的记忆;
  • Nemori 关注如何识别情节边界,并将连续交互组织成更加稳定的记忆单元。

不过,大多数记忆系统在真正召回信息时,仍然主要依赖语义相似度。

其基本流程是:

text 复制代码
用户问题
   ↓
编码为向量
   ↓
查找语义最相似的历史记忆
   ↓
将检索结果加入上下文

这种方式适合回答"过去提到过什么",但面对下面的问题时就容易遇到困难:

  • 某件事情为什么发生?
  • 某件事情具体发生在什么时间?
  • 同一个人在不同会话中还做过什么?
  • 两个相隔很远的事件之间有什么关系?
  • 哪些信息虽然语义相似,但实际上与当前问题无关?

例如,用户先说:

text 复制代码
我在一次旅行中扭伤了脚。

几天后又说:

text 复制代码
医生建议我暂停跑步。

后来,用户询问:

text 复制代码
为什么我最近没有继续晨跑?

系统需要的不是简单检索"晨跑"这个关键词,而是恢复下面的因果链:

text 复制代码
旅行中扭伤脚
   ↓
医生建议暂停跑步
   ↓
最近没有继续晨跑

单纯依赖向量相似度,很可能只找到包含"跑步"的记忆,却漏掉语义表面上并不相似、但实际构成原因的"旅行受伤"。

MAGMA 的核心思想,是不再把所有记忆关系混合在同一个向量空间或单一图结构中,而是将同一批事件分别组织为:

  • 语义图;
  • 时间图;
  • 因果图;
  • 实体图。

收到问题后,系统先判断用户询问的是"为什么""什么时候"还是"与哪个实体有关",然后动态选择需要优先遍历的关系。

因此,MAGMA 想解决的核心问题不是:

怎样为 Agent 保存更多记忆?

而是:

怎样根据当前问题的推理意图,从不同关系视角中找到正确的证据路径?


零、论文基本信息


一、背景与问题

1. 从 RAG 到 Memory-Augmented Generation

传统 RAG 面对的通常是一个相对静态的知识库:

text 复制代码
固定文档
   ↓
建立索引
   ↓
检索相关段落
   ↓
辅助大模型回答

Agent 记忆则不是一个固定语料库。

Agent 会持续与用户或环境交互,新事件不断产生,已有记忆也会持续更新。论文将这种系统称为 Memory-Augmented Generation,简称 MAG。

为了理解 MAG 与普通 RAG 的区别,可以先看论文 Figure 1。

图源:论文 Figure 1,Memory-Augmented Generation 的整体架构。

用户或环境向 Agent 提交问题,Agent 从动态记忆中召回历史信息并构造新的提示词;回答产生后,当前交互又会被写回记忆,使记忆随着时间持续演化。

在时刻 t t t,Agent 根据当前问题和已有记忆生成回答:

o t = LLM ⁡ ( q t , Retrieve ⁡ ( q t , M t ) ) o_t=\operatorname{LLM}\left(q_t,\operatorname{Retrieve}(q_t,M_t)\right) ot=LLM(qt,Retrieve(qt,Mt))

其中:

  • q t q_t qt 表示时刻 t t t 的当前输入;
  • M t M_t Mt 表示时刻 t t t 的记忆状态;
  • o t o_t ot 表示模型输出;
  • Retrieve ⁡ \operatorname{Retrieve} Retrieve 表示记忆检索过程。

回答完成后,系统再更新记忆:

M t + 1 = Update ⁡ ( M t , q t , o t ) M_{t+1}=\operatorname{Update}(M_t,q_t,o_t) Mt+1=Update(Mt,qt,ot)

其中:

  • M t + 1 M_{t+1} Mt+1 表示更新后的记忆;
  • Update ⁡ \operatorname{Update} Update 表示记忆写入和更新过程。

因此,Agent 记忆与传统 RAG 的重要区别是:

Agent 记忆是一个会随着交互持续写入、更新和演化的动态系统。

2. 单一向量空间混合了不同关系

假设 Agent 的长期记忆中存在以下事件:

text 复制代码
事件 A:Melanie 曾经学习小提琴。
事件 B:Melanie 后来开始学习单簧管。
事件 C:Melanie 在 10 月 20 日说,自己昨天参加了徒步。
事件 D:Melanie 的孩子出现在一次旅行照片中。

这些事件之间可能存在不同类型的关系:

  • 事件 A 和事件 B 在语义上都与乐器有关;
  • 事件 A 和事件 B 在时间上存在先后顺序;
  • 事件 C 中的"昨天"需要结合会话时间解析;
  • 事件 D 与 Melanie 之间存在实体关系;
  • 某些行为之间还可能存在原因和结果。

如果把所有关系都压缩到一个向量空间,系统只能根据整体语义相似度判断距离,却无法明确区分:

  • 两个事件是因为内容相似而相关;
  • 还是因为时间连续而相关;
  • 还是因为属于同一个实体;
  • 还是因为存在因果依赖。

MAGMA 将这些关系拆分成多个图,使检索系统可以明确选择某一种关系。

3. 固定 Top-K 检索无法适应不同问题

同一批记忆面对不同问题时,需要的检索方式并不相同。

问题 更需要的关系
Melanie 会哪些乐器? 实体关系、语义关系
Melanie 什么时候参加了徒步? 时间关系
Melanie 为什么停止跑步? 因果关系
Melanie 最近提到过哪些运动? 时间关系、实体关系、语义关系

如果所有问题都执行相同的 Top-K 向量检索,就没有利用查询意图对检索过程进行控制。

MAGMA 因此引入意图感知路由器,先判断问题需要哪种关系,再调整图遍历策略。

4. 复杂图构建不能阻塞 Agent

多关系图能够提供更加丰富的结构,但构建因果边和实体关系通常需要额外的 LLM 推理。

如果每次用户发送消息后,系统都要等待大模型完成全部关系抽取,Agent 的响应延迟就会明显增加。

MAGMA 将记忆写入拆成两条路径:

text 复制代码
快速路径:立即保存事件并建立基础索引
慢速路径:在后台推断复杂关系并完善记忆图

这种设计试图在两个目标之间取得平衡:

  • 当前交互需要快速响应;
  • 长期记忆需要持续形成更加完整的结构。

二、相关工作

1. 长上下文与完整历史

最直接的长期记忆方案,是把完整对话历史全部加入上下文。

这种方式的优点是:

  • 不需要额外的记忆抽取;
  • 不容易因为摘要而丢失原始信息;
  • 实现方式相对简单。

但它也存在明显限制:

  • Token 消耗随着历史长度持续增长;
  • 推理延迟增加;
  • 重要信息可能出现 Lost in the Middle 问题;
  • 语义相似的干扰信息会影响模型判断;
  • 超过模型上下文上限后仍然需要截断。

因此,长上下文可以扩大 Agent 的工作空间,却不能完全替代长期记忆管理。

2. 扁平检索式记忆

另一条路线是将历史交互切分成记忆单元,再通过向量相似度检索。

这种方法能够减少每轮输入模型的内容,但主要回答:

当前问题与哪段历史最相似?

它适合事实召回,却不擅长表达:

  • 时间先后;
  • 因果依赖;
  • 同一实体跨会话出现;
  • 多个远距离事件之间的组合关系。

3. 分层与操作系统式记忆

MemGPT、MemoryOS 和 MemOS 等方法采用操作系统或分层存储的思路,将记忆划分为不同层次。

这类方法主要解决:

  • 哪些信息保留在当前上下文;
  • 哪些信息迁移到长期存储;
  • 如何控制记忆容量;
  • 如何管理不同生命周期的内容。

它们强化了记忆管理能力,但最终召回仍然可能高度依赖语义匹配。

4. 自进化记忆网络

A-MEM 使用类似 Zettelkasten 的方式组织记忆,使新记忆可以与已有笔记建立链接。

这让记忆不再是完全独立的文本块,而可以形成动态关联网络。

不过,MAGMA 认为,如果不同关系仍然混合在同一种链接或统一语义空间中,系统就难以明确知道一条边表达的是:

  • 语义相似;
  • 时间先后;
  • 实体共现;
  • 还是因果依赖。

5. 图结构记忆

GraphRAG、Zep 等方法开始使用知识图谱或时间知识图谱组织外部信息。

不同图记忆系统的重点并不相同:

  • GraphRAG 更关注实体关系与社区级摘要;
  • Zep 关注具有时间信息的知识图谱;
  • A-MEM 关注记忆笔记之间的动态链接;
  • MAGMA 强调将关系拆成多个相互独立的图,并让检索策略根据问题意图选择图。

6. MAGMA 的研究定位

MAGMA 可以概括为:

将 Agent 的同一批长期经历表示为多个正交关系图,并把记忆召回建模为意图驱动的图遍历。

这里包含两个关键增量:

  1. 记忆表示从扁平向量库或单一图,变成语义、时间、因果和实体多图;
  2. 记忆检索从固定 Top-K 搜索,变成根据问题意图调整关系权重的策略化遍历。

三、MAGMA 方法总览

为了理解 MAGMA 的查询层、数据结构层和更新层如何协同,可以先看论文 Figure 2。

图源:论文 Figure 2,MAGMA 整体架构。

上方是查询处理层,包括意图感知路由、锚点识别、自适应拓扑检索和上下文合成;中间是由向量数据库以及语义图、时间图、因果图、实体图组成的数据结构层;下方是由快速写入和异步结构固化组成的写入更新层。

MAGMA 可以分成三个逻辑层。

1. 查询处理层

查询处理层负责根据当前问题检索和组织证据,包括:

  • 意图感知路由;
  • 锚点识别;
  • 自适应图遍历;
  • 上下文合成。

它回答的是:

面对当前问题,应该从哪些记忆关系中寻找答案?

2. 数据结构层

数据结构层负责保存和组织长期事件,包括:

  • 向量数据库;
  • 语义图;
  • 时间图;
  • 因果图;
  • 实体图。

它回答的是:

长期经历应该使用什么结构保存?

3. 写入更新层

写入更新层负责让记忆随着新交互持续演化,包括:

  • 快速路径 Synaptic Ingestion;
  • 慢速路径 Asynchronous Consolidation。

它回答的是:

新事件如何快速写入,又如何在后台形成更加完整的关系?

整体流程可以整理为:

text 复制代码
用户产生新交互
   ↓
将交互切分为事件
   ↓
快速建立时间边和向量索引
   ↓
后台推断因果关系与实体关系
   ↓
形成多关系记忆图
   ↓
收到新问题
   ↓
分析语义、关键词、时间和问题意图
   ↓
确定图遍历锚点
   ↓
根据意图选择关系并扩展证据
   ↓
将检索子图线性化为结构化上下文
   ↓
交给大模型生成回答

四、多图记忆结构

1. 时间变化的有向多重图

MAGMA 将时刻 t t t 的记忆表示为一个有向多重图:

G t = ( N t , E t ) G_t=(N_t,E_t) Gt=(Nt,Et)

其中:

  • G t G_t Gt 表示时刻 t t t 的完整记忆图;
  • N t N_t Nt 表示时刻 t t t 的记忆节点集合;
  • E t E_t Et 表示时刻 t t t 的关系边集合;
  • 同一对节点之间可以存在多种不同类型的边。

使用多重图的原因是,同两个事件之间可能同时存在语义、时间和因果联系。

2. 统一事件节点

每一个事件节点定义为:

n i = ⟨ c i , τ i , v i , A i ⟩ n_i=\langle c_i,\tau_i,v_i,A_i\rangle ni=⟨ci,τi,vi,Ai⟩

其中:

  • n i n_i ni 表示第 i i i 个事件节点;
  • c i c_i ci 表示事件内容;
  • τ i \tau_i τi 表示事件时间戳;
  • v i ∈ R d v_i\in\mathbb{R}^d vi∈Rd 表示事件的 d d d 维向量表示;
  • A i A_i Ai 表示结构化属性集合。

属性集合 A i A_i Ai 可以包含:

  • 事件涉及的实体;
  • 时间表达;
  • 对话角色;
  • 主题;
  • 上下文描述;
  • 其他检索元数据。

这种设计让同一个节点既可以用于向量检索,也可以参与符号约束和图结构遍历。

3. 语义图

语义图连接概念上相似的事件。

当两个事件向量的余弦相似度超过阈值时,系统可以建立语义边:

cos ⁡ ( v i , v j ) > θ s i m \cos(v_i,v_j)>\theta_{\mathrm{sim}} cos(vi,vj)>θsim

其中:

  • v i v_i vi 和 v j v_j vj 分别表示两个事件节点的向量;
  • θ s i m \theta_{\mathrm{sim}} θsim 表示建立语义边的相似度阈值。

例如:

text 复制代码
事件 A:用户学习小提琴。
事件 B:用户开始练习单簧管。

虽然两个事件发生在不同时间,但它们都与乐器学习有关,因此可以通过语义边连接。

语义图主要回答:

  • 哪些事件讨论了相近主题?
  • 哪些经历在内容上具有相似性?
  • 当前问题可能对应哪些候选记忆?

它保留了向量检索的优势,但不再承担所有关系的表达任务。

4. 时间图

时间图按照事件时间建立严格有序的关系。

对于两个事件节点 n i n_i ni 和 n j n_j nj,如果:

τ i < τ j \tau_i<\tau_j τi<τj

则表示事件 n i n_i ni 发生在事件 n j n_j nj 之前。

例如:

text 复制代码
10 月 18 日:用户开始公路旅行。
10 月 19 日:用户参加徒步。
10 月 20 日:用户说自己昨天参加了徒步。

在写入阶段,系统需要把"昨天"解析为绝对日期 10 月 19 日。

这样,当用户询问"公路旅行后什么时候参加了徒步"时,系统可以直接沿时间图定位事件。

时间图主要用于:

  • 相对时间解析;
  • 事件排序;
  • 持续时间计算;
  • 前后事件检索;
  • 跨会话时间定位。

5. 因果图

因果图使用有向边表示事件之间的逻辑依赖。

如果事件 n i n_i ni 被判断为事件 n j n_j nj 的原因,系统就可以建立从 n i n_i ni 到 n j n_j nj 的因果边。

例如:

text 复制代码
脚踝受伤
   ↓
医生建议暂停跑步
   ↓
用户没有继续晨跑

当问题以"为什么"开头时,MAGMA 会提高因果边的遍历权重。

与语义图相比,因果图关注的不是两个事件是否讨论相似内容,而是:

一个事件是否构成另一个事件的原因、条件或结果?

需要注意的是,因果边由 LLM 在后台推断,并不一定代表经过严格验证的真实因果关系。

6. 实体图

实体图把分散在不同时间和上下文中的事件连接到共同实体。

例如,Melanie 可能在多个会话中分别出现:

text 复制代码
Melanie 学过小提琴。
Melanie 后来学习单簧管。
Melanie 的孩子出现在旅行照片中。
Melanie 的儿子发生过一次交通事故。

这些内容的表面语义不同,但都与实体 Melanie 有关。

实体图可以将这些远距离事件聚集到同一个实体邻域中,从而支持:

  • 跨会话实体追踪;
  • 人物经历汇总;
  • 同名实体关联;
  • 多跳关系推理;
  • 实体属性补全。

7. 为什么需要多张图?

四种图不是简单重复保存四份记忆,而是提供四种访问同一批事件的方式。

关系图 关注的问题 典型查询
语义图 内容是否相似 用户还提到过哪些相似兴趣?
时间图 事件何时发生、先后如何 用户什么时候参加了徒步?
因果图 为什么发生、导致了什么 用户为什么停止晨跑?
实体图 同一实体还关联哪些事件 Melanie 会哪些乐器?

多图设计的核心价值是关系解耦:

不再要求一个统一的相似度分数同时表达语义、时间、实体和因果关系。


五、自适应分层检索

MAGMA 没有直接从图中固定取出 Top-K 个节点,而是将检索拆成四个阶段。

为了理解这个过程,可以看论文 Figure 3。

图源:论文 Figure 3,MAGMA 的查询与自适应检索流程。

系统首先分析问题意图,并融合语义、关键词和时间信号寻找锚点;随后根据意图分别扩展语义图、时间图、实体图和因果图;最后将检索节点交给上下文合成器,生成结构化提示词。

完整流程为:

text 复制代码
查询分析
   ↓
多信号锚点识别
   ↓
意图驱动的图遍历
   ↓
子图线性化与上下文合成

1. 第一阶段:查询分析与分解

系统先把用户问题转换为多种控制信号。

意图分类

路由器将查询 q q q 映射为意图类型 T q T_q Tq:

T q ∈ { W H Y , W H E N , E N T I T Y } T_q\in\{\mathrm{WHY},\mathrm{WHEN},\mathrm{ENTITY}\} Tq∈{WHY,WHEN,ENTITY}

其中:

  • W H Y \mathrm{WHY} WHY 表示因果类问题;
  • W H E N \mathrm{WHEN} WHEN 表示时间类问题;
  • E N T I T Y \mathrm{ENTITY} ENTITY 表示实体类问题。

不同意图决定后续优先使用的图:

  • WHY:提高因果关系权重;
  • WHEN:提高时间关系权重;
  • ENTITY:提高实体关系权重。

例如:

text 复制代码
为什么用户停止晨跑?
→ WHY
→ 优先遍历因果图
text 复制代码
用户什么时候参加了徒步?
→ WHEN
→ 优先遍历时间图
text 复制代码
Melanie 会哪些乐器?
→ ENTITY
→ 优先遍历实体图和语义图

时间解析

系统会识别问题中的时间约束,并将相对时间转换为绝对时间窗口:

τ s , τ e \] \[\\tau_s,\\tau_e\] \[τs,τe

其中:

  • τ s \tau_s τs 表示时间窗口的起点;
  • τ e \tau_e τe 表示时间窗口的终点。

需要解析的时间表达包括:

text 复制代码
上周五
昨天
旅行结束后的第二天
第一次面试之前

时间窗口不仅用于排序,还可以作为过滤条件,提前排除时间范围外的记忆。

稠密与稀疏表示

系统同时提取:

  • 查询向量 q ⃗ \vec{q} q ,用于语义检索;
  • 关键词集合 q k e y q_{\mathrm{key}} qkey,用于精确匹配。

只依赖向量可能漏掉人名、日期和专有名词,只依赖关键词又难以识别同义表达,因此 MAGMA 同时保留两种信号。

2. 第二阶段:多信号锚点识别

图遍历需要先找到合适的起点,也就是锚点节点。

MAGMA 综合三种检索信号:

  • 向量语义检索;
  • 关键词检索;
  • 时间过滤。

系统使用 Reciprocal Rank Fusion,也就是倒数排名融合,将多路结果合并:

S a n c h o r = TopK ⁡ ( ∑ m ∈ { v e c , k e y , t i m e } 1 k + r m ( n ) ) S_{\mathrm{anchor}}=\operatorname{TopK}\left(\sum_{m\in\{\mathrm{vec,key,time}\}}\frac{1}{k+r_m(n)}\right) Sanchor=TopK m∈{vec,key,time}∑k+rm(n)1

其中:

  • m m m 表示一种检索方式;
  • r m ( n ) r_m(n) rm(n) 表示节点 n n n 在第 m m m 种检索结果中的排名;
  • k k k 表示平滑常数;
  • S a n c h o r S_{\mathrm{anchor}} Sanchor 表示最终选择的锚点集合。

论文实验中使用的 RRF 常数为:

k = 60 k=60 k=60

初始向量检索数量为 Top-20。

这种融合方式可以保证:

  • 语义相似的节点进入候选集;
  • 包含精确实体名称的节点不会被忽略;
  • 不满足时间条件的节点可以被过滤;
  • 不需要直接比较不同检索器的原始分数。

3. 第三阶段:自适应遍历策略

从锚点集合 S a n c h o r S_{\mathrm{anchor}} Sanchor 出发后,MAGMA 使用启发式束搜索扩展邻居节点。

从当前节点 n i n_i ni 转移到邻居节点 n j n_j nj 的分数为:

S ( n j ∣ n i , q ) = exp ⁡ ( λ 1 ϕ ( type ⁡ ( e i j ) , T q ) + λ 2 sim ⁡ ( n ⃗ j , q ⃗ ) ) S(n_j\mid n_i,q)=\exp\left(\lambda_1\phi(\operatorname{type}(e_{ij}),T_q)+\lambda_2\operatorname{sim}(\vec{n}_j,\vec{q})\right) S(nj∣ni,q)=exp(λ1ϕ(type(eij),Tq)+λ2sim(n j,q ))

其中:

  • e i j e_{ij} eij 表示节点 n i n_i ni 与节点 n j n_j nj 之间的关系边;
  • type ⁡ ( e i j ) \operatorname{type}(e_{ij}) type(eij) 表示关系边的类型;
  • T q T_q Tq 表示查询意图;
  • ϕ \phi ϕ 表示结构对齐函数;
  • sim ⁡ \operatorname{sim} sim 表示语义相似度;
  • λ 1 \lambda_1 λ1 控制结构关系的权重;
  • λ 2 \lambda_2 λ2 控制语义相似度的权重。

结构对齐

结构对齐部分为:

ϕ ( type ⁡ ( e i j ) , T q ) \phi(\operatorname{type}(e_{ij}),T_q) ϕ(type(eij),Tq)

它衡量当前边类型与问题意图是否匹配。

例如:

  • WHY 问题遇到因果边时获得更高分;
  • WHEN 问题遇到时间边时获得更高分;
  • ENTITY 问题遇到实体边时获得更高分。

论文进一步使用意图权重向量计算结构对齐:

ϕ ( r , T q ) = w T q ⊤ 1 r \phi(r,T_q)=w_{T_q}^{\top}\mathbf{1}_r ϕ(r,Tq)=wTq⊤1r

其中:

  • r r r 表示关系类型;
  • w T q w_{T_q} wTq 表示意图 T q T_q Tq 对应的关系权重向量;
  • 1 r \mathbf{1}_r 1r 表示关系类型 r r r 的独热编码。

语义相关性

语义相关性部分为:

sim ⁡ ( n ⃗ j , q ⃗ ) \operatorname{sim}(\vec{n}_j,\vec{q}) sim(n j,q )

它衡量候选节点 n j n_j nj 与当前查询 q q q 在语义上是否相关。

因此,MAGMA 的遍历既不是只遵循图结构,也不是只看向量相似度,而是同时考虑:

text 复制代码
这条关系是否符合问题意图?
               +
这个节点是否与当前问题相关?

论文给出的主要遍历配置包括:

  • 最大深度:5 跳;
  • 最大节点数量:200;
  • 丢弃阈值:0.15;
  • 结构系数 λ 1 \lambda_1 λ1:基础值为 1.0;
  • 语义系数 λ 2 \lambda_2 λ2:取值范围为 0.3 至 0.7。

4. 第四阶段:子图线性化

图结构不能直接交给普通大模型,因此系统需要把检索到的子图 G s u b G_{\mathrm{sub}} Gsub 转换为文本。

MAGMA 根据问题类型选择排序方式:

  • 时间问题按照时间戳排序;
  • 因果问题按照因果拓扑排序;
  • 实体问题围绕实体关系组织证据。

每个节点都会保留:

  • 时间戳;
  • 事件内容;
  • 来源标识符。

例如:

text 复制代码
<time: 2023-10-18>
用户开始公路旅行
<ref: event_21>

<time: 2023-10-19>
用户参加徒步
<ref: event_24>

<time: 2023-10-20>
用户提到昨天参加了徒步
<ref: event_29>

最终构造的提示上下文可以表示为:

C p r o m p t = ⨁ n i ∈ Sort ⁡ ( G s u b ) ⟨ t : τ i ⟩   n i . c o n t e n t   ⟨ r e f : n i . i d ⟩ C_{\mathrm{prompt}}=\bigoplus_{n_i\in\operatorname{Sort}(G_{\mathrm{sub}})}\\langle t:\\tau_i\\rangle\\,n_i.\\mathrm{content}\\,\\langle ref:n_i.\\mathrm{id}\\rangle Cprompt=ni∈Sort(Gsub)⨁⟨t:τi⟩ni.content⟨ref:ni.id⟩

其中:

  • G s u b G_{\mathrm{sub}} Gsub 表示检索得到的子图;
  • Sort ⁡ \operatorname{Sort} Sort 表示按照时间或因果关系进行排序;
  • ⨁ \bigoplus ⨁ 表示字符串拼接;
  • C p r o m p t C_{\mathrm{prompt}} Cprompt 表示最终交给大模型的结构化上下文。

这样做有两个作用:

  1. 保留证据之间的时间或因果顺序;
  2. 让回答可以追溯到具体记忆节点。

5. 基于显著性的 Token 预算

如果检索子图过大,系统仍然不能把所有节点完整加入上下文。

MAGMA 根据节点转移分数分配 Token 预算:

  • 高分节点保留完整内容;
  • 低分节点进行压缩;
  • 超出预算的弱相关节点被移除。

因此,系统最终提供给大模型的不是一组无序 Top-K 文本,而是一个经过关系排序和预算控制的证据上下文。


六、双通路记忆演化

1. 设计动机

记忆图需要持续更新,但复杂关系推断会产生额外延迟。

MAGMA 将写入过程分成:

  • 快速路径:Synaptic Ingestion;
  • 慢速路径:Asynchronous Consolidation。

这借鉴了快速记录经历、随后逐步固化关系的认知思路。

2. 快速路径:突触式写入

快速路径位于用户交互的关键链路中,因此只执行低延迟操作:

text 复制代码
新消息
   ↓
事件切分
   ↓
创建事件节点
   ↓
连接到上一时间节点
   ↓
生成向量并写入索引
   ↓
将节点 ID 加入异步队列

快速路径主要完成:

  • 事件分割;
  • 时间主干更新;
  • 稠密向量索引;
  • 稀疏关键词索引;
  • 基础语义和实体信息提取;
  • 触发后台固化任务。

对于新事件节点 n t n_t nt,系统首先建立从上一个事件到当前事件的时间边:

n t − 1 → n t n_{t-1}\rightarrow n_t nt−1→nt

随后,系统为事件内容生成向量:

v t = Encoder ⁡ ( n t . c ) v_t=\operatorname{Encoder}(n_t.c) vt=Encoder(nt.c)

其中:

  • n t . c n_t.c nt.c 表示事件节点 n t n_t nt 的文本内容;
  • v t v_t vt 表示新事件的向量表示;
  • Encoder ⁡ \operatorname{Encoder} Encoder 表示文本编码器。

这里不执行阻塞式 LLM 因果推理,因此当前回答不需要等待全部图结构构建完成。

3. 慢速路径:异步结构固化

慢速路径在后台消费事件队列。

系统获取新事件附近的局部子图,再调用 LLM 推断潜在关系:

E n e w = Φ r e a s o n ( N ( n t ) , H h i s t o r y ) E_{\mathrm{new}}=\Phi_{\mathrm{reason}}\left(\mathcal{N}(n_t),H_{\mathrm{history}}\right) Enew=Φreason(N(nt),Hhistory)

其中:

  • n t n_t nt 表示新写入的事件;
  • N ( n t ) \mathcal{N}(n_t) N(nt) 表示新事件附近的局部邻域;
  • H h i s t o r y H_{\mathrm{history}} Hhistory 表示相关历史;
  • Φ r e a s o n \Phi_{\mathrm{reason}} Φreason 表示负责结构推断的 LLM;
  • E n e w E_{\mathrm{new}} Enew 表示新发现的关系边。

后台任务主要补充:

  • 潜在因果边;
  • 跨事件实体关系;
  • 更深层的结构连接。

这种设计的优势是:

  • 用户不必等待复杂关系抽取;
  • 系统可以逐步改善已有记忆结构;
  • 查询阶段能够使用更丰富的长期关系。

但它也会引入最终一致性问题:一条记忆刚写入时,复杂关系可能尚未建立,因此立即查询和稍后查询可能获得不同结果。


七、案例分析

论文通过 Melanie 的长期对话展示了多图检索的作用。

假设记忆中存在:

text 复制代码
事件 1:Melanie 提到自己喜欢拉小提琴。
事件 2:Melanie 后来开始学习单簧管。
事件 3:Melanie 分享了一张两个孩子的照片。
事件 4:Melanie 提到自己的儿子发生过交通事故。
事件 5:Melanie 后来说明,照片中的孩子有一个哥哥。
事件 6:10 月 20 日,Melanie 说自己昨天参加了徒步。

1. 事实召回:Melanie 会哪些乐器?

系统识别为实体型问题:

text 复制代码
定位 Melanie 实体节点
   ↓
遍历与 Melanie 相关的事件
   ↓
找到小提琴和单簧管

最终回答:

text 复制代码
小提琴和单簧管。

A-MEM 在论文案例中遗漏了早期的小提琴信息,MemoryOS 只回答了单簧管。MAGMA 通过实体邻域聚合了相隔较远的两个事件。

2. 多跳推理:Melanie 有几个孩子?

这个问题需要跨多个事件进行实体解析:

text 复制代码
照片中出现两个孩子
        +
另外提到一个儿子
        +
后续说明照片中的孩子有一个哥哥
        ↓
至少三个孩子

它不是从单个段落中提取数字,而是需要在实体图中组合多条证据。

3. 时间推理:她什么时候参加了徒步?

系统解析:

text 复制代码
会话时间:10 月 20 日
相对表达:昨天
        ↓
绝对日期:10 月 19 日

A-MEM 在论文案例中直接使用了会话日期,MemoryOS 则生成了错误的未来日期。MAGMA 在记忆构建阶段归一化相对时间,因此能够恢复 10 月 19 日。

这些案例说明,MAGMA 的核心优势并不是简单使用图,而是:

根据问题所需的推理类型,激活不同的关系视图。


八、实验设置

1. 数据集

论文使用 LoCoMo 和 LongMemEval 两个长期记忆基准。

LoCoMo

LoCoMo 用于评估超长对话中的记忆和推理能力,平均对话长度约为 9K Token。

论文在完整 LoCoMo 测试集上评估了 1,986 个问题:

问题类型 数量
单跳检索 841
对抗问题 446
时间推理 321
多跳推理 282
开放域问题 96
总计 1,986

LongMemEval

LongMemEval 的平均上下文长度超过 100K Token,用于测试超长交互历史下的记忆保持、检索和扩展能力。

它包含:

  • 单会话偏好问题;
  • 单会话助手信息问题;
  • 时间推理;
  • 多会话信息整合;
  • 知识更新;
  • 单会话用户信息问题。

2. 对比方法

Full Context

将完整对话历史直接放入大模型上下文,用于观察模型原生长上下文能力。

A-MEM

使用自进化笔记网络组织 Agent 经历,记忆之间能够动态建立链接。

MemoryOS

采用分层存储策略管理不同类型和生命周期的记忆。

Nemori

使用预测与校准机制进行情节分割和记忆组织。

LongMemEval 实验主要比较 Full Context、Nemori 和 MAGMA。

3. 模型与实现设置

为控制基础模型差异,论文统一使用:

  • 推理与回答模型:GPT-4o-mini;
  • LLM-as-a-Judge:GPT-4o-mini;
  • Judge 温度:0;
  • 默认嵌入模型:all-MiniLM-L6-v2;
  • 可选嵌入模型:text-embedding-3-small;
  • RRF 常数:60;
  • 初始向量检索数量:20;
  • 最大图遍历深度:5 跳;
  • 最大遍历节点数量:200。

4. 评价指标

论文主要使用:

  • LLM-as-a-Judge;
  • Token 级 F1;
  • BLEU-1;
  • 记忆构建时间;
  • 每个问题的平均 Token 数;
  • 平均查询延迟。

LLM Judge 按照 0 到 1 的连续分数评估回答与标准答案的语义一致性。


九、LoCoMo 实验结果

1. 主要结果

论文 Table 1 的 LLM-as-a-Judge 结果如下:

方法 多跳 时间 开放域 单跳 对抗 总体
Full Context 0.468 0.562 0.486 0.630 0.205 0.481
A-MEM 0.495 0.474 0.385 0.653 0.616 0.580
MemoryOS 0.552 0.422 0.504 0.674 0.428 0.553
Nemori 0.569 0.649 0.485 0.764 0.325 0.590
MAGMA 0.528 0.650 0.517 0.776 0.742 0.700

MAGMA 的总体得分达到 0.700,高于:

  • Full Context:0.481;
  • A-MEM:0.580;
  • MemoryOS:0.553;
  • Nemori:0.590。

2. 最大优势来自对抗问题

MAGMA 在对抗问题上的得分为 0.742,而其他方法分别为:

  • Full Context:0.205;
  • A-MEM:0.616;
  • MemoryOS:0.428;
  • Nemori:0.325。

对抗问题通常包含:

  • 语义相似但事实错误的干扰项;
  • 不可回答的问题;
  • 同名实体;
  • 时间冲突;
  • 表面相关但结构无关的信息。

单纯向量检索容易把"最相似"的信息当成"正确证据"。MAGMA 会进一步检查因果、时间和实体关系,因此更容易过滤结构上不一致的干扰节点。

3. 时间推理只是小幅领先

MAGMA 的时间推理得分为 0.650,只比 Nemori 的 0.649 高 0.001。

因此,不能把时间类别描述成"大幅领先"。

更准确的说法是:

显式时间图和时间解析让 MAGMA 获得了最好的时间推理结果,但与最强基线 Nemori 基本相当。

4. 多跳推理并非最优

MAGMA 在多跳问题上的得分为 0.528,低于:

  • MemoryOS:0.552;
  • Nemori:0.569。

这说明,多图结构并不能保证所有多跳问题都取得最优效果。

可能的失败原因包括:

  • 图中缺少必要关系;
  • 因果边或实体边推断错误;
  • 路由器选择了不合适的关系;
  • 束搜索过早剪枝;
  • 问题需要图中没有显式表示的计算。

MAGMA 的总体优势主要来自不同任务之间更加均衡的表现,尤其是单跳、开放域和对抗问题,而不是在每个类别中都领先。


十、LongMemEval 泛化结果

论文 Table 2 的结果如下:

问题类型 Full Context Nemori MAGMA
单会话偏好 6.7% 62.7% 73.3%
单会话助手信息 89.3% 73.2% 83.9%
时间推理 42.1% 43.0% 45.1%
多会话 38.3% 51.4% 50.4%
知识更新 78.2% 52.6% 66.7%
单会话用户信息 78.6% 77.7% 72.9%
平均 55.0% 56.2% 61.2%

MAGMA 的平均准确率为 61.2%,高于:

  • Full Context:55.0%;
  • Nemori:56.2%。

1. 多图结构可以扩展到超长历史

LongMemEval 的平均上下文超过 100K Token。

MAGMA 不需要把完整历史全部交给模型,而是将历史压缩为与问题相关的结构化子图,每个问题使用约 0.7K 至 4.2K Token。

相比完整上下文超过 100K Token 的输入,Token 使用量减少了 95% 以上。

2. Full Context 在部分任务上仍然更强

Full Context 在以下类别中优于 MAGMA:

  • 单会话助手信息;
  • 知识更新;
  • 单会话用户信息。

尤其是知识更新任务:

  • Full Context:78.2%;
  • MAGMA:66.7%。

这说明结构化记忆在压缩历史时仍然可能丢失信息,或者没有正确处理新旧知识的替换关系。

因此,更准确的实验结论是:

MAGMA 在显著减少上下文的同时取得了最高平均准确率,但在部分要求保留完整原始信息的任务上仍然不如 Full Context。


十一、系统效率分析

论文 Table 3 比较了 LoCoMo 上的记忆构建时间、平均 Token 和查询延迟:

方法 构建时间 每次查询 Token 查询延迟
Full Context N/A 8.53K 1.74 秒
A-MEM 1.01 小时 2.62K 2.26 秒
MemoryOS 0.91 小时 4.76K 32.68 秒
Nemori 0.29 小时 3.46K 2.59 秒
MAGMA 0.39 小时 3.37K 1.47 秒

1. MAGMA 的查询延迟最低

MAGMA 的平均查询延迟为 1.47 秒。

这主要来自:

  • 意图路由提前缩小检索范围;
  • 束搜索剪枝无关子图;
  • 复杂图构建转移到异步后台;
  • 最终只向模型提供较小的证据子图。

2. MAGMA 并不是 Token 最少的方法

A-MEM 每次查询使用 2.62K Token,少于 MAGMA 的 3.37K。

但 A-MEM 在 LoCoMo 上的总体 Judge 得分为 0.580,低于 MAGMA 的 0.700。

两者体现了不同取舍:

  • A-MEM 更激进地压缩记忆;
  • MAGMA 保留更多结构化证据,以换取更好的总体推理表现。

3. 异步处理隐藏了部分成本

MAGMA 的在线查询延迟较低,并不代表系统没有复杂计算。

因果边和部分实体关系仍然需要后台 LLM 推断。系统只是把一部分成本从用户等待时间转移到了:

  • 后台计算;
  • 图存储;
  • 队列处理;
  • 关系一致性维护。

在生产环境中,还需要评估后台 LLM 调用成本和队列积压问题。


十二、消融实验

1. 核心模块消融

论文 Table 4 的结果如下:

配置 Judge F1 BLEU-1
移除自适应策略 0.637 0.413 0.357
移除因果边 0.644 0.439 0.354
移除时间主干 0.647 0.438 0.349
移除实体边 0.666 0.451 0.363
完整 MAGMA 0.700 0.467 0.378

2. 自适应策略贡献最大

移除自适应检索策略后,Judge 得分从 0.700 降至 0.637,是所有消融中下降最大的。

这说明,多图结构本身还不够。

如果系统仍然使用固定方式遍历所有图,就会引入大量结构上无关的节点。

MAGMA 真正的关键是:

text 复制代码
多图记忆
     +
根据问题选择关系

3. 因果关系与时间关系不可互相替代

移除因果边后,得分下降至 0.644;移除时间主干后,得分下降至 0.647。

两者影响接近,说明:

  • 因果图负责解释为什么;
  • 时间图负责解释何时以及先后顺序;
  • 语义相似度无法完整替代这两类结构。

4. 实体边下降较小但仍然有效

移除实体边后,得分从 0.700 下降到 0.666。

实体边尤其适合:

  • 跨会话人物追踪;
  • 汇总同一对象的多个属性;
  • 减少实体混淆;
  • 连接相隔较远的事件。

5. 单图实验

论文 Table 5 进一步只保留单一关系图:

图配置 多跳 时间 开放域 单跳 对抗 总体
仅因果图 0.470 0.460 0.430 0.650 0.680 0.590
仅时间图 0.440 0.620 0.450 0.650 0.520 0.577
仅实体图 0.485 0.420 0.460 0.640 0.450 0.531
完整 MAGMA 0.528 0.650 0.517 0.776 0.742 0.700

在单图配置中:

  • 因果图的总体得分最高,为 0.590;
  • 时间图在时间问题上表现最好,为 0.620;
  • 实体图的总体得分最低,为 0.531;
  • 所有单图的总体得分都没有超过 0.600。

这说明不同关系具有明显的任务偏好,而完整 MAGMA 的优势来自多种关系的互补。


十三、评价指标需要谨慎理解

1. LLM Judge 与传统指标给出不同结论

在 LoCoMo 的 Token 级指标中:

方法 总体 F1 总体 BLEU-1
Full Context 0.140 0.096
A-MEM 0.116 0.074
MemoryOS 0.413 0.355
Nemori 0.502 0.403
MAGMA 0.467 0.378

MAGMA 的 LLM-as-a-Judge 得分最高,但 F1 和 BLEU-1 低于 Nemori。

作者认为,词面指标存在两类问题。

错误奖励

例如:

text 复制代码
标准答案:compatible with Mac
模型回答:not compatible with Mac

两者只有一个否定词的差异,F1 仍然可能很高,但语义完全相反。

正确惩罚

例如:

text 复制代码
标准答案:14:00
模型回答:2 PM

两者语义相同,但词面重合可能为零。

因此,论文选择 LLM Judge 作为主要指标。

2. LLM Judge 也不是绝对客观

论文统一使用 GPT-4o-mini 进行:

  • 图关系推断;
  • 回答生成;
  • LLM-as-a-Judge 评分。

统一模型可以减少不同基础模型带来的变量,但也可能产生同模型偏好或自洽偏差。

因此,更稳妥的评价方式应该结合:

  • 语义 Judge;
  • 精确事实匹配;
  • 人工评估;
  • 证据覆盖率;
  • 引用正确性;
  • 最终任务成功率。

不能只根据单一指标断言一种记忆系统全面优于另一种方法。


十四、局限性与未来方向

1. 方法限制

图关系依赖 LLM 推断

因果边和部分实体关系由大模型生成。

如果模型把时间相关性误判为因果关系,错误边可能进一步影响后续检索和回答。

离散意图类别有限

论文主要将问题映射为:

  • WHY;
  • WHEN;
  • ENTITY。

但真实查询可能同时包含多种需求:

text 复制代码
为什么用户在搬家以后改变了运动习惯?

这个问题同时涉及:

  • 时间关系;
  • 因果关系;
  • 用户实体;
  • 行为变化。

固定类别可能不足以描述复杂意图,更合理的方式可能是输出多个关系的连续权重。

多图之间存在一致性问题

同一事件可能在不同图中具有不同邻居。

当系统更新或删除一条记忆时,需要同步维护:

  • 节点版本;
  • 关系边;
  • 向量索引;
  • 实体索引;
  • 时间主干;
  • 后台推断结果。

论文主要讨论逻辑架构,对生产级一致性管理涉及较少。

缺少完整的记忆生命周期

MAGMA 重点关注写入、结构固化和检索,但没有深入讨论:

  • 错误记忆如何删除;
  • 过期事实如何失效;
  • 用户要求删除数据时如何清理所有关系;
  • 新旧事实冲突时如何更新;
  • 低价值子图如何压缩。

因此,它更擅长解决"怎样组织和召回",还不是完整的记忆生命周期系统。

2. 工程限制

多图增加存储和维护成本

一个事件可能参与多种关系。随着交互历史增长,节点与边的数量都会增加。

实际部署需要控制:

  • 每种边的最大数量;
  • 图遍历深度;
  • 低置信度边清理;
  • 重复实体合并;
  • 冷数据归档。

后台队列可能积压

当新消息写入速度超过后台固化速度时,异步队列会持续增长。

此时可能出现:

  • 新记忆已经可以被向量检索;
  • 但因果关系尚未建立;
  • 不同时间查询得到不同结果;
  • 高优先级事件没有及时完成固化。

因果推断成本较高

每个新事件都调用 LLM 分析局部子图,会产生持续成本。

更合理的工程方案可能是,只在以下条件满足时触发因果固化:

  • 新事件具有较高重要性;
  • 出现新的核心实体;
  • 与已有事实存在冲突;
  • 后续任务确实需要因果推理。

3. 实验限制

论文主要在 LoCoMo 和 LongMemEval 上评估。

这些基准适合测试长对话记忆,但没有覆盖:

  • 长期软件开发任务;
  • 工具调用轨迹;
  • 多模态经历;
  • 机器人环境状态;
  • 多 Agent 协作记忆;
  • 真实用户数月级交互;
  • 记忆隐私与删除。

此外,系统高度依赖 GPT-4o-mini,结论能否稳定迁移到更小的本地模型,还需要进一步实验。

4. 未来方向

可以继续研究:

  • 用学习策略代替手工设置的关系权重;
  • 为每条关系边加入置信度和证据来源;
  • 对复杂问题生成多意图权重;
  • 增加矛盾关系和事实更新关系;
  • 将多图扩展到工具、任务和技能;
  • 对低价值子图进行压缩和归档;
  • 使用小模型完成基础关系抽取;
  • 在关键因果关系上使用强模型复核;
  • 支持用户查看、修改和删除图记忆;
  • 在真实 Agent 任务中评估最终成功率。

十五、我的理解和启发

1. 记忆结构必须与查询类型对齐

MAGMA 最重要的启发,不是简单地认为"图比向量数据库更好",而是:

不同问题需要不同的记忆关系。

向量检索回答的是:

text 复制代码
什么内容与问题相似?

但 Agent 还需要回答:

text 复制代码
什么事件发生在之前?
什么事件导致了结果?
这个实体还出现在哪里?
哪些分散信息共同构成答案?

如果数据结构中没有显式保存这些关系,检索阶段就只能要求大模型从若干文本片段中临时推断,容易丢失信息或受到干扰。

2. 一张统一知识图不一定是最佳方案

将所有关系放进一张知识图虽然统一,但也会产生大量不同类型的边。

查询时如果不区分关系,仍然可能遍历到无关节点。

MAGMA 的多图设计让我更倾向于将 Agent 记忆理解为多个索引视图:

text 复制代码
同一份事件数据
   ├── 语义视图
   ├── 时间视图
   ├── 因果视图
   ├── 实体视图
   ├── 任务视图
   └── 技能视图

底层事件可以共享,但不同视图服务于不同决策。

3. 路由策略与记忆结构同样重要

消融实验中,移除自适应策略造成了最大的性能下降。

这说明,即使构建了高质量图结构,如果不知道当前问题应该走哪张图,结构本身也无法发挥全部价值。

在自己的 Agent 项目中,可以先进行记忆需求分类:

text 复制代码
FACT:检索明确事实
TIME:恢复时间顺序
CAUSE:查找原因和结果
ENTITY:汇总对象相关信息
PROCEDURE:召回操作流程
EXPERIENCE:寻找类似成功或失败经验
CONSTRAINT:恢复不能违反的约束

然后为不同类型配置不同的检索和排序策略。

4. 快速写入与慢速整理适合真实 Agent

MAGMA 的双通路设计具有较强的工程价值。

在实际 Agent 中,可以采用:

在线快速写入

每一步立即保存:

  • 用户输入;
  • Agent 行动;
  • 工具调用;
  • 工具结果;
  • 时间戳;
  • 基础实体;
  • 向量表示。

离线记忆整理

后台逐步执行:

  • 事实去重;
  • 冲突检测;
  • 因果关系推断;
  • 经验总结;
  • 实体合并;
  • 失败模式提取;
  • 技能结晶。

这种方式既不会让每次交互等待复杂整理,也能让记忆库随着时间逐渐形成更好的结构。

5. 对工具型 Agent 的启发

MAGMA 的多图思想不只适用于长期对话。

对于自动修复代码的 Agent,可以建立:

关系图 示例
语义图 相似报错、相似模块
时间图 修改、测试、回滚的执行顺序
因果图 某次修改导致哪个测试失败
实体图 文件、函数、依赖和配置
过程图 某类问题的解决步骤
约束图 用户要求、项目规范和禁止操作

当 Agent 问:

text 复制代码
为什么这个测试又失败了?

应该优先遍历因果图和时间图。

当 Agent 问:

text 复制代码
这个函数还影响哪些文件?

应该优先遍历实体图。

当 Agent 问:

text 复制代码
之前遇到过类似错误吗?

应该优先使用语义图和经验图。

6. 推断关系必须包含置信度

MAGMA 的图边并不都来自客观事实,其中一部分由 LLM 推断。

实际系统中的每条边最好包含:

json 复制代码
{
  "source": "event_128",
  "target": "event_136",
  "relation": "causes",
  "confidence": 0.78,
  "evidence": ["event_128", "event_131"],
  "created_by": "background_reasoner",
  "verified": false
}

查询时不应把所有边当成同等可靠。

特别是因果关系,需要区分:

  • 用户明确说明的因果;
  • 根据时间顺序推断的因果;
  • 大模型根据上下文猜测的因果。

7. 记忆评估最终应该落到 Agent 行为上

MAGMA 的实验主要衡量问答准确率,但实际 Agent 更重要的问题是:

  • 是否减少了重复失败?
  • 是否遵守了早期约束?
  • 是否正确恢复任务状态?
  • 是否提高了长期任务成功率?
  • 是否减少了工具调用次数?
  • 是否降低了 Token 成本?
  • 是否能解释使用了哪段记忆?

因此,在自己的项目中,我会建立三层评价:

text 复制代码
检索层:是否找到正确节点和证据路径?
推理层:是否正确理解时间、因果和实体关系?
任务层:记忆是否真正改善最终决策?

十六、总结

MAGMA 提出了一种面向长期 Agent 的多图记忆架构。

它不再把所有历史信息存储在一个扁平向量库或关系混杂的统一图中,而是将同一批事件组织成四种关系视图:

  1. 语义图:表示内容相似性;
  2. 时间图:表示事件顺序和时间锚点;
  3. 因果图:表示原因与结果;
  4. 实体图:表示跨会话实体关联。

在查询阶段,MAGMA 会:

  1. 分析问题意图、时间和关键词;
  2. 融合向量、关键词和时间信号寻找锚点;
  3. 根据 WHY、WHEN、ENTITY 等意图调整关系权重;
  4. 使用束搜索遍历相关子图;
  5. 将子图按照时间或因果顺序线性化;
  6. 在 Token 预算内构造结构化证据上下文。

在写入阶段,MAGMA 使用双通路设计:

  • 快速路径立即保存事件、时间边和向量索引;
  • 慢速路径在后台推断因果和实体关系。

实验表明,MAGMA 在 LoCoMo 上取得 0.700 的总体 Judge 得分,在 LongMemEval 上取得 61.2% 的平均准确率,并在减少上下文 Token 的同时保持了较低的查询延迟。

不过,MAGMA 仍然依赖 LLM 推断图关系,缺少完整的删除、冲突更新和记忆压缩机制,多图结构也会增加存储与工程复杂度。此外,LLM Judge 与 F1、BLEU-1 给出了不同的模型排名,实验结论仍然需要结合评价指标谨慎理解。

如果用一句话概括 MAGMA:

MAGMA 将长期记忆召回从"寻找语义最相似的文本",升级为"根据问题意图选择关系,并沿着结构化证据路径进行检索"。


参考资料

相关推荐
冬奇Lab2 小时前
Code Agent 解剖(02):agent 是怎么一轮一轮思考和行动的?
人工智能·llm·agent
tech讯息2 小时前
企业视觉内容生产场景:多模态 AI 云平台甄选指南
人工智能
冬奇Lab2 小时前
开源项目第188期:深入理解 AI Agent — 李博杰开源的 AI Agent 完整技术书,10章95实验
人工智能·开源·资讯
测开小菜鸟2 小时前
智能体安全与伦理测试:守护AI的“底线”,让智能体安全、负责任地工作
网络·人工智能·安全
林伽一2 小时前
林伽一 · AI科技日报 | 2026年08月15日
人工智能
2501_942389552 小时前
时钟组件支持自由拖拽缩放
人工智能·散列表·启发式算法·宽度优先·图搜索算法
小马过河R2 小时前
不只是又一个 Agent 框架:DeepSeek Harness 如何重新定义“可组合”
人工智能·机器学习·系统架构·agent·ai编程·harness
蓝速科技2 小时前
蓝速科技 3D 全息舱 AI 数字人一体机全尺寸选型实测指南
人工智能·科技·3d
蒸蒸yyyyzwd3 小时前
cpp选手秋招准备 学习笔记day7 webserver
笔记·学习
lifallen3 小时前
DeepSeek Harness:把 Agent 做成可替换的运行时插件树
人工智能·学习·ai·开源软件·ai编程