MRAgent:记忆应该被重建,而不是被检索

笔记日期: 2026-06-22 笔记作者: Zhongzhu Zhou 论文标题: Memory is Reconstructed, Not Retrieved: Graph Memory for LLM Agents 论文作者: Shuo Ji, Yibo Li, Bryan Hooi(新加坡国立大学) arXiv: 2606.06036v1,2026-06-04 状态/发表: ICML 2026(第43届国际机器学习大会,首尔)

一句话总结

这篇论文的核心观点很简单,却很深刻:大脑回忆记忆不是搜索引擎,而是一个主动的重建过程——MRAgent 把这个认知神经科学的洞见落地成了一套可工程化的 LLM Agent 记忆系统,在长对话记忆基准上以最高 23% 的相对提升和最低 118k tokens 的访问开销,远超所有被动检索基线。

一、前置知识

读这篇论文需要几块背景知识。我来一块一块拆开讲。

1.1 为什么 LLM Agent 需要外部记忆

语言模型的上下文窗口再大,也无法装下无限的交互历史。一个对话了几十个 session、执行了几百次工具调用的 Agent,必须把历史信息存到外部记忆系统里,在需要时才检索进来。

一个好的 Agent 记忆系统需要满足四个要求:

  1. 保真度:存进去的内容不能在检索时失真。
  2. 精准度:检索到的内容要和查询真正相关,不能把大量无关内容一并塞进上下文。
  3. 组合性:能够支持跨多条记忆进行推理——很多问题没有任何一条记录能单独回答,必须把多条线索组合起来。
  4. 自适应性:检索策略能够根据中间发现动态调整——找到第一条线索之后,能顺着线索继续找下一条。

现有的系统在第 3、4 条上都有明显的不足,这就是 MRAgent 要解决的核心问题。

1.2 标准 RAG 及其瓶颈

标准的检索增强生成(RAG)把历史对话分成若干文本块,存入向量数据库。给定查询 xx,对全库计算余弦相似度,取 top-kk 个最相似的块:

πpRAG(x)=TopK({sim(x,v)}vV,k)(1)\pi_{\text{p}}^{\text{RAG}}(x) = \text{TopK}\bigl(\{\text{sim}(x, v)\}_{v \in \mathcal{V}},\, k\bigr) \tag{1}

这叫被动检索:检索目标完全由查询 xx 决定,不考虑任何中间证据。

来看论文里的经典反例:

查询: “Nate 赢得第二次电子游戏比赛时,Caroline 在做什么?”

  • 对”电子游戏比赛”做相似度搜索,返回的全是 Nate 的比赛相关记录,没有 Caroline 的活动。
  • 正确答案需要先从记录中推断出”第二次比赛发生在七月”,再去检索 Caroline 七月的活动。
  • 但被动检索在开始时就不知道要找”七月”这个时间锚点——没有任何机制能从中间证据中推导出新的检索线索。
被动检索(RAG)失败路径:

查询: "Nate 第二次比赛时 Caroline 在做什么?"
     ↓ 相似度搜索
内存: [m1: Nate 5月赢了第一次比赛]
     [m2: Nate 7月赢了第二次比赛]
     [m3: Caroline 7月在旅行]     ← 无法检索到

检索结果: m1, m2 (Nate 相关事件)
❌ 漏掉了 Caroline 的7月活动
❌ 没有机制推断出"7月"是关键时间锚点

基于图的记忆系统(如 A-Mem)通过固定 N-hop 邻居扩展有所改善,但也无法跨越语义鸿沟——如果 Caroline 和 Nate 的事件没有直接图边相连,扩展也找不到。

根本问题:被动检索只能选出和查询字面相似的内容,或预定义邻居,无法从中间证据中推断出新的检索线索。

1.3 知识图谱与异构图基础

**知识图谱(KG)**是一个有向图 G=(V,E,R)\mathcal{G} = (\mathcal{V}, \mathcal{E}, \mathcal{R}),其中:

  • V\mathcal{V}:节点集合(实体或概念)
  • EV×R×V\mathcal{E} \subseteq \mathcal{V} \times \mathcal{R} \times \mathcal{V}:带类型的边集合(三元组)
  • R\mathcal{R}:关系类型集合

异构图允许节点有不同类型(例如:人物、事件、抽象概念),边也有不同类型。MRAgent 的记忆图就是一个异构图,节点类型包括 {线索(cue)、标签(tag)、情节(episode)、语义(semantic)、主题(topic)}。

图结构的核心优势:检索到一个节点之后,可以沿其出边跳到相邻节点——即使相邻节点和原始查询文本在语义上毫不相似,只要图结构连通,就能访问到。这就是”证据链”推理的物理基础。

1.4 认知神经科学:人类记忆是怎样工作的

这篇论文的设计受到认知神经科学的深度启发。关键洞见来自 Rugg & Renoult (2025) 和 Rashid et al. (2016):人类的记忆回忆是一个重建过程,不是检索过程

具体地说:

  • 你从一个情境线索(contextual cue)出发,比如”周二晚饭想吃什么”。
  • 这个线索激活了印迹(engram)——大脑对过去经历编码形成的紧凑神经印记。
  • 印迹激活通过联想链传播,激活相关印迹,逐步重建出一段完整的记忆情节。
  • 这个过程是迭代的、证据依赖的:中间被激活的内容会影响下一步的激活方向,大脑沿着语义联想链一步步往下走,直到找回完整的情节。

这与文本搜索根本不同。大脑不会把所有存储的记忆按照和线索的相似度排名,然后取 top-k。它是沿着语义联想链一步步走,每一步根据当前激活的内容更新”搜索状态”。

MRAgent 在计算上实现了这个过程:

人类记忆MRAgent 对应组件
情境线索查询线索(从查询中提取的实体/关键词)
印迹标签(图中的联想标签)
情节记忆情节节点(具体历史事件)
语义记忆语义节点(稳定事实/属性)
主动重建过程迭代的 LLM 引导图遍历

1.5 顺序决策过程与自适应策略的价值

从强化学习的角度,记忆检索可以被建模为一个顺序决策过程

  • 状态 S(t)S^{(t)}:到目前为止积累的证据
  • 动作:选择访问哪个记忆节点/分支
  • 观察:新的证据内容

被动检索策略 πp\pi_{\text{p}} 是无状态的:

{v(1),,v(T)}=πp(x)(2)\{v^{(1)}, \ldots, v^{(T)}\} = \pi_{\text{p}}(x) \tag{2}

所有 TT 步的检索目标在看到任何证据之前就被 xx 单独决定了。

主动检索策略 πa\pi_{\text{a}} 是有状态的:

v(t)=πa(t) ⁣(x,S(t1)),S(t)=S(t1){v(t)}(3)v^{(t)} = \pi_{\text{a}}^{(t)}\!\bigl(x,\, S^{(t-1)}\bigr),\quad S^{(t)} = S^{(t-1)} \cup \{v^{(t)}\} \tag{3}

tt 步的检索目标依赖于前 t1t-1 步的所有观察。这就是核心优势:自适应策略可以追踪新发现的证据,而被动策略在看到任何证据之前就必须锁定所有检索目标。

二、论文方法概述

MRAgent 包含两个主要组件:

  1. 联想记忆系统(Associative Memory System):把对话历史组织成一个异构的 Cue–Tag–Content 图。
  2. 主动重建 Agent(Reconstructive Memory Agent):给定查询,在图上进行迭代 LLM 引导的多步遍历,逐步积累证据直至回答问题。

图 1:MRAgent 整体架构

flowchart LR
    subgraph 离线构建["离线构建阶段"]
        T["原始对话文本 T"] --> SEG["情节分割"]
        SEG --> EP["情节单元 e1..en"]
        EP --> TAG["标签提取: e_i to g_i"]
        EP --> CUE["线索提取: e_i to C_i"]
        EP --> SEM["语义提取: T to cue-tag-sem"]
        EP --> TOP["主题抽象: episodes to tau_j"]
        TAG --> G["异构记忆图 Cue-Tag-Content"]
        CUE --> G
        SEM --> G
        TOP --> G
    end

    subgraph 在线查询["在线查询阶段"]
        Q["查询 x"] --> CE["线索提取 ExtractCues"]
        CE --> LOOP["主动重建循环\nLLM 推理 + 图遍历 + 路由"]
        G --> LOOP
        LOOP --> ANS["生成最终答案"]
    end

三、联想记忆系统:Cue–Tag–Content 图

3.1 图的节点类型

MRAgent 的记忆图 G=(C,V,R)\mathcal{G} = (\mathcal{C}, \mathcal{V}, \mathcal{R}) 包含三类基本节点:

线索(Cues)cCc \in \mathcal{C}:细粒度的关键词,如实体名、动作、上下文描述词。例如:“Nate”、“电子游戏比赛”、“Caroline”、“七月”。

内容(Contents)vVv \in \mathcal{V},进一步分为三个子层:

  • 情节(Episode) vVev \in \mathcal{V}^e:带时间戳的具体事件,如”Nate 上周赢了第一次电子游戏比赛”。
  • 语义(Semantic) vVsv \in \mathcal{V}^s:稳定的抽象知识,如”Nate 是个聪明大胆的人”。
  • 主题(Topic) vVτv \in \mathcal{V}^\tau:跨多个情节的高层抽象,如”Nate 的游戏活动”。

关联三元组 RC×Gtag×V\mathcal{R} \subseteq \mathcal{C} \times \mathcal{G}_{\text{tag}} \times \mathcal{V}:每个三元组 (c,g,v)R(c, g, v) \in \mathcal{R} 通过一个标签(Tag) gg 把线索 cc 连接到内容节点 vv

图 2:Cue–Tag–Content 图结构示意

graph TD
    subgraph "线索层 Cue Layer"
        C1["线索: Nate"]
        C2["线索: 电子游戏比赛"]
        C3["线索: Caroline"]
    end

    subgraph "标签层 Tag Layer(联想桥梁)"
        T1["标签: 比赛胜利"]
        T2["标签: 旅行/位置"]
        T3["标签: 个性特征"]
    end

    subgraph "情节层 Episode Layer"
        E1["情节 e1: Nate 5月赢了第一次比赛\n时间戳: 04-15"]
        E2["情节 e2: Nate 7月赢了第二次比赛\n时间戳: 06-27"]
        E3["情节 e3: Caroline 7月在旅行\n时间戳: 06-20"]
    end

    subgraph "语义层 Semantic Layer"
        S1["语义 s1: Nate 享受游戏和电影"]
        S2["语义 s2: Caroline 是舞者"]
    end

    C1 -- "比赛胜利" --> E1
    C2 -- "比赛胜利" --> E1
    C1 -- "比赛胜利" --> E2
    C2 -- "比赛胜利" --> E2
    C3 -- "旅行/位置" --> E3
    C1 -- "个性特征" --> S1
    C3 -- "职业" --> S2

3.2 标签:联想桥梁的核心作用

标签是区分 MRAgent 图和普通知识图谱的关键设计。普通 KG 的边是预定义的关系类型(如 is-a、located-in);MRAgent 的标签是 LLM 抽取的联想标签,捕捉情节的关系模式:“比赛胜利”、“财务决策”、“创意作品提交”。

为什么这很重要?考虑如下推理链:

  1. 查询提到”Nate”和”电子游戏比赛”,标签”比赛胜利”把它们连到了情节 e2e_2
  2. 情节 e2e_2 的时间戳是七月。
  3. 七月是 Caroline 的旅行情节 e3e_3 的时间戳。
  4. 此时 Agent 可以构造新线索”七月”,沿”旅行/位置”标签找到 e3e_3

这条推理链的每一跳都依赖中间证据——没有第一跳发现的”七月”时间锚点,第二跳无从开始。被动检索永远无法完成这种跨情节的证据链接。

3.3 两个核心遍历算符

论文在关系集 R\mathcal{R} 上定义了两个基本映射算符:

正向算符(线索 → 标签 → 内容):

ϕcg(c){g(c,g,)R}(4)\phi_{c \to g}(c) \triangleq \{g \mid (c, g, \cdot) \in \mathcal{R}\} \tag{4} ϕ(c,g)v(c,g){v(c,g,v)R}(5)\phi_{(c,g) \to v}(c, g) \triangleq \{v \mid (c, g, v) \in \mathcal{R}\} \tag{5}

算符 ϕcg\phi_{c \to g} 给定线索 cc,返回所有和它关联的标签——这是轻量级操作,因为标签是紧凑的短语,不需要加载完整的情节内容。算符 ϕ(c,g)v\phi_{(c,g) \to v} 则在已知线索和标签的条件下,精确检索对应的内容节点。

反向算符(内容 → 新线索/标签,用于激活新线索):

Πv(c,g)(V(t)){(c,g)vV(t), (c,g,v)R}(6)\Pi_{v \to (c,g)}(\mathcal{V}^{(t)}) \triangleq \{(c', g') \mid \exists v' \in \mathcal{V}^{(t)},\ (c', g', v') \in \mathcal{R}\} \tag{6}

反向算符让已检索到的内容节点激活新的线索和标签,类似于大脑中印迹激活相关印迹的过程。这就是”发现七月 → 激活旅行线索 → 找到 Caroline”这条推理链的操作化实现。

两个算符的组合把”先看标签目录,再查详细内容”变成了一个可控的双阶段检索,避免了无约束 N-hop 扩展导致的组合爆炸。

3.4 多粒度记忆层

完整的记忆图有三个粒度层:

情节层(Cue–Tag–Episode):存储具体的历史事件,每个情节带时间戳,沿统一时间线组织,支持时序推理(如”七月发生了什么?”)。

语义层(Cue–Tag–Semantic):存储相对稳定的知识——个性特征、偏好、从对话中提炼出的一般性事实。语义单元锚定在实体级线索上,不需要遍历大量情节节点即可访问。

抽象层(Topics):主题节点 τj\tau_j 总结跨多个情节的重复模式,通过 ϕτe\phi_{\tau \to e} 连接到对应情节。支持自顶向下访问:先定位相关主题,再下钻到具体情节。

四、记忆构建流水线

记忆图在接收查询之前作为预处理步骤,从原始对话文本 TT 构建完成。

4.1 情节记忆构建

第一步:情节分割

{ei}RLLM(T)(7)\{e_i\} \leftarrow \mathcal{R}_{\text{LLM}}(T) \tag{7}

LLM 先对文本做指代消解和时间表达式归一化,再切分成连贯的情节单元——每个情节对应一个在特定时间发生的具体事件。

第二步:标签与线索提取

giTLLM(ei),CiKLLM(ei)(8)g_i \leftarrow \mathcal{T}_{\text{LLM}}(e_i),\quad \mathcal{C}_i \leftarrow \mathcal{K}_{\text{LLM}}(e_i) \tag{8}
  • TLLM\mathcal{T}_{\text{LLM}} 产生简短的联想标签(如”比赛胜利”),概括情节的关系模式。
  • KLLM\mathcal{K}_{\text{LLM}} 提取细粒度线索集合 Ci\mathcal{C}_i——实体名、属性、显著描述词。

第三步:构建三元组

每个线索 cCic \in \mathcal{C}_i 与情节 eie_i 通过标签 gig_i 相连,形成 Cue–Tag–Episode 三元组 (c,gi,ei)R(c, g_i, e_i) \in \mathcal{R}

4.2 语义记忆构建

{(cis,gis,si)}SLLM(T)(9)\{(c_i^s, g_i^s, s_i)\} \leftarrow \mathcal{S}_{\text{LLM}}(T) \tag{9}

语义单元 sis_i 是从对话中提炼出的稳定事实,用实体级线索 cisc_i^s 和方面级标签 gisg_i^s 索引(如:“Nate”—“个性特征”—“Nate 是个聪明大胆的人”)。

4.3 主题抽象构建

{τj}ALLM({ei})(10)\{\tau_j\} \leftarrow \mathcal{A}_{\text{LLM}}(\{e_i\}) \tag{10}

主题节点通过 LLM 对情节集合进行主题汇总生成,并通过主题–情节链接连接到对应情节。

五、MRAgent:主动重建循环

5.1 重建状态定义

Agent 在每一步 tt 维护一个重建状态

S(t)=(Z(t),H(t))(11)\mathcal{S}^{(t)} = (\mathcal{Z}^{(t)},\, \mathcal{H}^{(t)}) \tag{11}
  • Z(t)\mathcal{Z}^{(t)}活跃集——当前正在考虑用于下一步遍历的记忆元素(线索、标签、内容节点)。
  • H(t)\mathcal{H}^{(t)}重建上下文——前 tt 步积累的所有证据,用于条件化后续遍历决策。

初始状态:S(0)=(Z(0),)\mathcal{S}^{(0)} = (\mathcal{Z}^{(0)}, \emptyset),其中 Z(0)\mathcal{Z}^{(0)} 由查询线索匹配图中存储的线索节点得到。

5.2 遍历动作空间

Agent 可以执行的遍历动作集合 A={Π1,,Πm}\mathcal{A} = \{\Pi_1, \ldots, \Pi_m\},每个动作对应一个类型化的映射算符。

正向遍历动作(沿 Cue→Tag→Content 方向扩展):

Πcg(C(t))cC(t)ϕcg(c)(12)\Pi_{c \to g}(\mathcal{C}^{(t)}) \triangleq \bigcup_{c' \in \mathcal{C}^{(t)}} \phi_{c \to g}(c') \tag{12} Π(c,g)v(C(t),G(t))cC(t)gG(c)ϕ(c,g)v(c,g)(13)\Pi_{(c,g) \to v}(\mathcal{C}^{(t)}, \mathcal{G}^{(t)}) \triangleq \bigcup_{c' \in \mathcal{C}^{(t)}} \bigcup_{g' \in \mathcal{G}(c')} \phi_{(c,g) \to v}(c', g') \tag{13}

先扩展线索到标签(轻量),再从线索+标签精确检索内容(重量)——这种两步设计让 Agent 在加载昂贵的情节内容之前,先用标签做语义筛选。

反向遍历动作(已检索内容 → 激活新线索/标签):

Πv(c,g)(V(t)){(c,g)vV(t), (c,g,v)R}(14)\Pi_{v \to (c,g)}(\mathcal{V}^{(t)}) \triangleq \{(c', g') \mid \exists v' \in \mathcal{V}^{(t)},\ (c', g', v') \in \mathcal{R}\} \tag{14}

这是核心的”重激活”机制:检索到情节 e2e_2(Nate 七月赢了第二次比赛)之后,反向遍历可以挖掘出线索”七月”和标签”旅行/位置”,为后续检索 Caroline 的七月活动铺路。

论文的具体工具箱包含 7 个专用操作(对应论文 Table 4):

工具名映射函数用途
query_tag_eventsϕ(c,g)e(c,g)\phi_{(c,g) \to e}(c, g)检索线索-标签对对应的情节事件
query_conversation_timeϕet(ve)\phi_{e \to t}(v^e)返回情节的对话时间戳
query_event_keywordsϕectx(e)\phi_{e \to \text{ctx}}(e)从情节中提取线索和标签
query_event_contextϕectx(e)\phi_{e \to \text{ctx}}(e)检索情节周围的上下文文本
query_personal_informationϕ(cs,gs)vs(cs)\phi_{(c^s, g^s) \to v^s}(c^s)返回人物实体的语义方面
query_personal_aspectϕ(cs,gs)vs(cs,gs)\phi_{(c^s, g^s) \to v^s}(c^s, g^s)检索人物特定方面的语义内容
query_topic_eventsϕτe(τ)\phi_{\tau \to e}(\tau)检索与主题节点关联的情节

5.3 主动重建算法(Algorithm 1)

图 3:MRAgent 主动重建循环

flowchart TD
    Q["查询 x"] --> CI["线索初始化: ExtractCues"]
    CI --> IS["初始状态 S0 = Z0, 空 H"]
    IS --> LOOP["循环: t = 0 到 T-1"]
    LOOP --> LLM1["步骤1: LLM 推理\n选择动作子集 A_t"]
    LLM1 --> TRAV["步骤2: 受控遍历\n对每个动作扩展候选节点"]
    TRAV --> LLM2["步骤3: LLM 路由\n剪枝不相关分支\n更新活跃集 Z_next"]
    LLM2 --> UPD["状态更新: H_next = H_prev + Z_next"]
    UPD --> STOP{"证据充足?"}
    STOP -- "是" --> ANS["AnswerLLM 生成最终答案"]
    STOP -- "否" --> LOOP
    ANS --> Output["最终答案 y-hat"]
算法 1:主动记忆重建
输入:查询 x,记忆图 G,动作集 A = {Π₁,...,Πₘ},最大步数 T
输出:答案 ŷ

1:  C ← ExtractCues(x)               // 从查询提取初始线索
2:  Z⁽⁰⁾ ← ActiveSetInit(C, G)       // 匹配查询线索到图中线索节点
3:  H⁽⁰⁾ ← ∅
4:  S⁽⁰⁾ ← (Z⁽⁰⁾, H⁽⁰⁾)
5:  for t = 0 to T - 1 do
6:      // 第一步:LLM 动作选择
7:      A⁽ᵗ⁾ ← f_select(x, H⁽ᵗ⁾, Z⁽ᵗ⁾)    // LLM 从 A 中选择动作子集
8:      // 第二步:受控遍历
9:      Z̃⁽ᵗ⁺¹⁾ ← ∅
10:     for all a ∈ A⁽ᵗ⁾ do
11:         Z̃⁽ᵗ⁺¹⁾ ← Z̃⁽ᵗ⁺¹⁾ ∪ Πₐ(Z⁽ᵗ⁾)   // 扩展候选节点集
12:     end for
13:     // 第三步:LLM 路由与状态更新
14:     Z⁽ᵗ⁺¹⁾ ← f_route(x, H⁽ᵗ⁾, Z̃⁽ᵗ⁺¹⁾) // LLM 剪枝不相关分支
15:     H⁽ᵗ⁺¹⁾ ← H⁽ᵗ⁾ ∪ Z⁽ᵗ⁺¹⁾
16:     if Stop(x, H⁽ᵗ⁺¹⁾) then break     // 判断证据是否充足
17: end for
18: ŷ ← AnswerLLM(x, H⁽ᵗ⁺¹⁾)
19: return ŷ

5.4 逐步推理示例

查询: “Nate 赢得第二次电子游戏比赛时,Caroline 在做什么?”

第 0 轮:初始化

  • ExtractCues(x) → {Caroline, 电子游戏比赛, 第二次}
  • 初始活跃集:在图中匹配到线索节点 Caroline电子游戏比赛
  • LLM 选择动作:Πcg\Pi_{c \to g}(扩展到标签)
  • 遍历结果:标签集合 {比赛胜利, 比赛参与}
  • LLM 路由:选择 比赛胜利 最相关

第 1 轮:情节检索

  • LLM 选择:Π(c,g)v(电子游戏比赛, 比赛胜利)\Pi_{(c,g) \to v}(\text{电子游戏比赛, 比赛胜利}) → 检索情节
  • 遍历返回:{e1e_1: 5月第一次比赛, e2e_2: 7月第二次比赛}
  • LLM 路由:选择 e2e_2(第二次),调用 query_conversation_time(e₂) → 时间戳:七月
  • 积累证据:e2e_2 内容 + 时间锚点”七月”

第 2 轮:反向激活

  • 反向遍历:Πv(c,g)(e2)\Pi_{v \to (c,g)}(e_2) → 激活新线索”七月” + 标签”旅行/位置”
  • LLM 选择:query_tag_events(Caroline, 旅行/位置) + 七月时间窗口过滤
  • 遍历返回:{e3e_3: Caroline 七月在旅行}
  • LLM 路由:e3e_3 直接相关
  • 积累证据:e3e_3 内容

第 3 轮:停止并作答

  • STOP 条件满足:有足够证据
  • AnswerLLM → “Nate 赢得第二次比赛时,Caroline 正在旅行”

整个过程清晰展示了主动重建的价值:没有第 1 轮发现的”七月”时间锚点,第 2 轮无从开始;任何被动检索方法都无法从查询出发直接定位到 Caroline 的旅行记录。

六、理论分析:主动检索严格强于被动检索

6.1 假设类框架

论文用近似论的视角证明,对任意检索预算 T2T \geq 2,主动重建的表达能力严格强于被动检索。

主动策略假设类:

HactiveLM(T):={πθact:θΘ}(15)\mathcal{H}_{\text{active}}^{\text{LM}}(T) := \{\pi_\theta^{\text{act}} : \theta \in \Theta\} \tag{15}

tt 步的节点选择函数 Qθ,t(x,z(1),,z(t1))Q_{\theta,t}(x, z^{(1)}, \ldots, z^{(t-1)}) 依赖完整历史。

被动策略假设类:

HpassiveLM(T):={πθpass:θΘ}(16)\mathcal{H}_{\text{passive}}^{\text{LM}}(T) := \{\pi_\theta^{\text{pass}} : \theta \in \Theta\} \tag{16}

tt 步的选择函数 Qθ,t(x)Q_{\theta,t}(x) 只依赖查询,不依赖历史。

定理 4.1(论文主定理): 对任意检索预算 T2T \geq 2,被动假设类严格包含于主动假设类:

HpassiveLM(T)HactiveLM(T)(17)\mathcal{H}_{\text{passive}}^{\text{LM}}(T) \subsetneq \mathcal{H}_{\text{active}}^{\text{LM}}(T) \tag{17}

6.2 证明草图:二叉树针-干草堆任务

图 4:主动与被动检索假设类的包含关系

graph TD
    subgraph "所有可能的检索预测器"
        subgraph "H_active(T)"
            subgraph "H_passive(T)"
                P["被动策略\n(只依赖查询)"]
            end
            A["主动策略独有区域\n(依赖历史的策略)\n例:二叉树路径追踪器"]
        end
    end

证明构造了一个分离分布 Dn,dD_{n,d}——“二叉树针-干草堆”任务:

  • 记忆 MM 是深度 d=T1d = T-1 的完整二叉树,有 n=2d+11n = 2^{d+1}-1 个节点。
  • 每个内部节点 vuv_u 的内容编码了”下一步走哪个子节点”的比特:p(vu)=uu+1{0,1}p(v_u) = u^*_{|u|+1} \in \{0, 1\}
  • 答案 yy 编码在目标叶子节点 vuv_{u^*} 的内容中,u{0,1}du^* \in \{0,1\}^d 均匀随机采样。
  • 查询 xx 指向根节点,要求获取 yy

主动策略实现零误差: 从根出发,每步读取当前节点的比特,沿指示方向走向子节点。dd 步后到达 vuv_{u^*},读出 yy。总共用 T=d+1T = d+1 步检索,误差为零。

被动策略有不可消除的误差: 被动策略必须在看到任何节点内容之前,就把所有 TT 步的检索目标确定下来(只依赖 xx)。但目标叶子 uu^*2d2^d 个叶子中均匀随机。固定 TT 个检索目标最多覆盖 TT 个叶子,命中 vuv_{u^*} 的概率 T/2d\leq T/2^d。因此:

L(πθpass; Dn,d)εY(1T2d)=εY(1T2T1)(18)L(\pi_\theta^{\text{pass}};\ D_{n,d}) \geq \varepsilon_Y \left(1 - \frac{T}{2^d}\right) = \varepsilon_Y \left(1 - \frac{T}{2^{T-1}}\right) \tag{18}

εY=1supyPY(y)\varepsilon_Y = 1 - \sup_y P_Y(y) 是只知道先验分布时的最小误差。对任意固定 TT,当 d=T1d = T-1 时,T/2T10T/2^{T-1} \to 0,被动策略误差趋近于 εY>0\varepsilon_Y > 0,而主动策略误差为 0。证毕。

这个结论不只是理论——二叉树是”每一跳依赖上一跳揭示的信息”这类多跳查询的极简化模型,恰好对应了 MRAgent 要解决的实际问题结构。

七、实验结果

7.1 实验设置

评估基准:

  • LoCoMo(Maharana et al., 2024):50 组长对话,每组最多 35 个 session,平均 300 轮,配约 200 对问答。问题类型:单跳、多跳、时序、开放域。
  • LongMemEval(Wu et al., 2025):500 个问题,每个配约 115k token 的对话历史(LongMemEval-S 设置)。问题类型:多会话、单用户、时序推理、单一偏好。

对比基线:

  • RAG:标准余弦相似度 top-k 检索。
  • A-Mem(Xu et al., 2025):LLM 辅助关系提取构建图结构记忆,相似度种子+邻居扩展检索。
  • MemoryOS(Kang et al., 2025):短期/中期/长期三层层次化记忆,层次化检索。
  • LangMem(LangChain, 2025):压缩对话为记忆摘要,嵌入向量存储,检索时汇总。
  • Mem0(Chhikara et al., 2025):增量抽取自然语言事实,LLM 驱动的 ADD/UPDATE/DELETE/NOOP 操作,相似度检索。

LLM 骨干: Gemini-2.5-Flash 和 Claude-Sonnet-4.5。

评估指标:

  • LLM-Judge(J):GPT-4o-mini 语义正确性评判(二元 0/1)。
  • F1F_1 分数:精确率和召回率调和均值。
  • 证据召回率:检索过程中成功找到的真实支持证据比例。

7.2 主要结果

图 5:LoCoMo 各问题类型结果(Gemini 骨干)

方法多跳 J时序 J开放域 J单跳 J总体 J
RAG58.1649.2241.6769.2061.30
A-Mem53.5449.5333.4361.8355.97
MemoryOS63.8247.0441.6671.9063.35
LangMem61.8253.5843.6569.6862.86
Mem068.7961.6841.6673.7268.31
MRAgent75.1780.3768.7590.4884.21

关键观察:

  • 时序问题提升最显著(+18.7 J 对 Mem0),直接验证了核心设计——时序查询需要从中间证据推断时间锚点,正是主动重建的强项。
  • 多跳问题显著提升(+6.4 J 对 Mem0),证实了链式证据对组合检索的必要性。
  • 单跳问题同样提升(+16.8 J 对 Mem0),说明即使对简单查询,结构化标签访问比相似度检索更精准。

在 Claude 骨干下,总体 J 分数 88.32(对比 LangMem 78.61),提升更为明显。

在 LongMemEval 上,MRAgent 总体 72.95 J 对比最佳基线 MemoryOS 54.92,相对提升 32%

7.3 效率分析

图 6:token 消耗与运行时间对比(LongMemEval,Gemini 骨干)

方法Token 消耗运行时间(s)
A-Mem632k1,122
MemoryOS273k3,136
LangMem3,268k1,210
Mem0245k533
MRAgent118k586

MRAgent 每样本只用 118k tokens——是 A-Mem 的 1/5,是 LangMem 的 1/28。原因:标签作为语义路标,在加载昂贵的情节内容之前,就允许 Agent 判断一个记忆分支是否值得深入。不相关分支在标签层就被剪掉,从不触及完整情节文本。

运行时间 586s,略高于 Mem0 的 533s,但远低于 MemoryOS 的 3136s。多步重建循环确实增加了些延迟,但被大幅减少的上下文 token 数所抵消。

7.4 消融实验

对比三种结构变体,各自启用/禁用推理(多步遍历):

  • CE(Cue→Episode):直接用线索索引情节,无标签中间层。
  • CTE(Cue→Tag→Episode):标签中介,但无语义节点。
  • CTC(Cue→Tag→Content):完整架构,含语义节点。

核心发现:

  1. 主动推理是最重要的因素。 所有结构变体中,加上推理(多步遍历)都显著优于不加推理。多步探索比任何单一结构选择更重要。
  2. 标签提供有效的语义引导。 即使不开启推理,从 CE 到 CTE 到 CTC,性能单调提升——更丰富的联想结构带来更可靠的检索。
  3. 情节层和语义层互补。 去掉语义节点(CTC→CTE)会在需要稳定事实的多跳问题上退化。

7.5 多轮推理分析

在 LoCoMo 上追踪各问题类型在不同推理轮数下的累积证据召回率:

问题类型平均轮数最大有效轮数
多跳3.162.65
时序2.422.40
开放域2.601.09
单跳2.071.28

单跳问题大约 2 轮就收敛;多跳问题的证据召回率在连续步骤中提升超过 30%(论文图 6 红线),清楚说明迭代探索对组合推理的必要性。

Agent 的自我停止机制也很有效:最大有效轮数与平均轮数接近,说明 LLM 能正确判断何时继续探索已无额外价值。增加每轮并行检索预算(KK)收益有限;增加推理深度(TT,轮数)才能稳定提升性能——重建深度无法被并行探索替代。

7.6 检索算符的覆盖率分析

论文附录 D.7 进一步分析了不同检索算符在各问题类型上的证据覆盖率(对应论文 Table 6):

  • 时序问题主要由 query_conversation_time 解决,该工具承担了大多数时间定位证据的检索。
  • 多跳问题大量依赖 query_tag_eventsquery_topic_events,标签和主题的联想扩展对于跨情节的证据链接至关重要。
  • 开放域问题在多个算符之间分布更均匀,反映了需要整合情节、语义和上下文信息。

这说明 MRAgent 执行的是结构化的、按算符分工的记忆重建,而不是通用的相似度驱动检索。Agent 根据查询结构选择性地激活不同算符,形成差异化的证据获取模式。这也从侧面验证了:增加并行检索宽度(每轮调更多工具)对多跳问题的提升有限,因为跨跳的时序依赖必须由顺序推理步骤来解决。

图 7:预算敏感性分析(LoCoMo,多跳问题,Claude 骨干)

论文图 9 的热图显示了推理轮数 TT 和每轮工具调用预算 KK 对多跳问题 LLM-Judge 分数的影响:

  • 增加 TT(纵轴,从 turn2 到 turn8):性能持续单调提升,从约 65 涨到约 90。
  • 增加 KK(横轴,从 call2 到 call8):提升很快饱和,从 call2 到 call4 有小幅提升,从 call4 到 call8 几乎无变化。

这个热图非常直观地说明了为什么深度优于宽度:每增加一轮推理,模型可以利用新证据重新定向搜索方向;而增加每轮的并行检索只是加大了同一个推理步骤内的检索广度,无法替代跨步骤的证据链接。

八、边界条件与局限

作者在论文结论中承认以下局限:

1. 重建延迟随深度增长。 多步探索在壁钟时间上比单次检索更慢。时序+多跳查询可能需要 T=4T=488 轮,每轮都需要 LLM 推理调用。在低延迟生产场景(如实时对话助手)中,这是实际瓶颈。

2. 静态记忆构建——无遗忘机制。 记忆图随交互积累单调增长,没有:

  • 当事实变化时更新已有节点的机制(如 Caroline 搬家了);
  • 遗忘旧的或矛盾信息的机制;
  • 近似重复事件的合并机制。

在长期部署场景(如使用数年的个人助手),图可能变得庞大且嘈杂。

3. 构建质量依赖 LLM 蒸馏精度。 标签和线索由 LLM 提取,提取噪声会直接影响图结构质量,进而影响重建性能。论文没有分析对提取噪声的鲁棒性。

4. 理论保证需要 T2T \geq 2 定理 4.1 对任意 T2T \geq 2 成立;对 T=1T = 1(单次检索),主动和被动策略等价。

5. 工具调用开销未建模。 七个工具的工具箱要求 LLM 在每一步决定调用哪个工具——这是函数调用开销。对于参数量小于 7B 的模型,结构化工具调用生成的可靠性更低。论文使用 Gemini-2.5-Flash 和 Claude-Sonnet-4.5,两者规模较大且函数调用可靠,但对于更小的模型,MRAgent 的性能边界在哪里并不清楚。

6. 不支持持续学习。 记忆图是从历史数据静态构建的,没有任何机制让 Agent 从重建失败中学习(如某条路径没有找到有用证据),从而改进未来的遍历策略。一个可以从遍历经验中学习更好 traversal policy 的系统(例如用 RL 优化工具调用序列),将是更完整的设计。

九、批判性分析:不足与可改进之处

9.1 不好的地方

评估范围过窄,结论泛化性存疑。 论文只用了两个基准(LoCoMo 和 LongMemEval),两者都是人-LLM 对话生成的数据集,问题结构相对固定。没有在开放域任务完成、工具使用密集型 agent、或需要跨外部文档检索的场景上验证。23% 提升的结论能否在更复杂的多模态 agent 任务上保持,是存疑的。

无延迟分解分析。 论文报告了 586s 的聚合运行时间,但没有分解成 (a) LLM 推理时间、(b) 图遍历时间、(c) LLM 路由时间、(d) 停止条件评估时间。没有这个分解,就无法判断优化应该针对哪个环节,也无法预测在不同硬件/模型规模下的行为。

MRAgent 和 MRAgent 的 13.8 分差距没有解释清楚。* 在 LongMemEval 上,MRAgent*(Gemini 构建+Claude 检索)得到 86.76 J,而 MRAgent(同一骨干)只有 72.95 J。这 13.8 分的差距说明构建和检索用的 LLM 不同时系统表现更好。但论文没有做充分的消融来解释:是 Gemini 的标签提取质量更高?是 Claude 的路由判断更准确?这个”异构骨干组合效应”需要分离。

硬查询的重建轮数分布未分析。 论文设定 Tmax=8T_{\max} = 8,但没有分析在数据集上实际需要超过 4 轮的问题比例,以及在极端情况(需要超过 8 跳)下系统的行为。停止条件是否会在证据不足时过早终止?

9.2 作者淡化或回避的局限

“无遗忘”限制比论文承认的更严重。 论文实验基于固定的有限对话历史。但在真实部署中,对话永远不会结束。图的单调增长会带来:

  • 同一事实有多个版本(“Nate 住在新加坡” vs 后来的”Nate 搬到伦敦”),检索时哪条更权威?
  • 图的节点数随时间线性增长,标签的歧义性也会增加(不同情节的标签文字相似但语义不同),影响检索精度。
  • 论文没有任何实验分析图规模对性能的影响。

记忆构建是最薄弱的环节,却获得了最少的注意。 构建流水线只在附录 B 简要描述,没有任何消融(如果标签是随机的会怎样?如果线索提取不准确会怎样?)。118k token 的效率优势建立在图结构良好的前提下;如果构建质量差,更多遍历步骤反而会引入更多噪声。

没有对抗性查询或分布外查询的评估。 LoCoMo 明确排除了对抗性问题。在实际 agent 部署中,用户问题可能模糊、矛盾、或指向不存在的记忆。主动重建在初始线索提取错误的情况下如何表现?会陷入错误的图分支反复探索吗?

9.3 可以改进的地方

自适应记忆维护机制。 最迫切的工程方向是为图添加轻量级维护流水线:每个 session 结束后,用小型 LLM 扫描新增三元组,识别与已有节点矛盾或高度重叠的内容,执行 UPDATE/MERGE/DELETE 操作。Mem0 的事实管理机制(ADD/UPDATE/NOOP/DELETE)可以作为参考,但需要适配三元组粒度的图结构。

标签质量消融与鲁棒性测试。 作者应该做:(a) 用随机标签替换 LLM 提取的标签;(b) 用更弱的提取模型;(c) 主动注入错误线索。这会揭示方法对构建质量的依赖程度,以及实际部署的鲁棒性下限。

大规模图测试。 在包含 10410^410510^5 个情节节点的记忆图上测试系统,验证遍历效率在大规模下是否还能保持。平均重建深度是随图规模对数增长(期望)还是线性增长?如果线性,则需要引入分层索引结构。

小模型骨干验证。 用 7B 或 13B 参数模型验证,确认结构化工具调用在小模型上是否可靠。工具调用精度对主动重建的成功至关重要——如果小模型频繁生成格式错误的工具调用,整个推理链就会断裂。

多 Agent 共享记忆的扩展方向。 论文只考虑了单 Agent 场景。一个自然的延伸是多个 Agent 共享同一个记忆图:Agent A 的交互历史和 Agent B 的都存在同一个 Cue-Tag-Content 图里,互相可以访问。图结构天然支持这种组合(直接合并即可),但跨 Agent 的冲突消解(两个 Agent 对同一事件有矛盾记录)需要新的机制,比如给三元组加 Agent 来源标签和时间戳,在路由时考虑来源可信度。

对抗性鲁棒性分析。 论文完全没有做对抗性鲁棒性测试。在现实部署中,Agent 可能遇到恶意用户注入错误信息的场景(如诱导 Agent 更新错误的语义事实)。主动重建依赖图结构,如果图被污染(注入虚假三元组),遍历路径可能被恶意引导。这是安全方面的隐患,值得在未来工作中专门讨论。

十、总结

MRAgent 提出了一个清晰的设计原则:把记忆检索结构(Cue-Tag-Content 图)和检索策略(LLM 引导的主动遍历循环)解耦。 结构在离线构建,策略在线自适应——这是对现有系统的根本改进,现有系统把结构和策略混为一谈(图边就是策略),因此无法在推理时调整。

理论结果(定理 4.1)给这个设计哲学提供了严格的基础:主动重建的表达能力严格强于任意固定预算的被动检索。实验结果验证了这一点:在 LoCoMo 上最高 23% 提升,在 LongMemEval 上 32% 提升,同时 token 消耗降至竞品的 1/5 到 1/28。

开放问题主要集中在两方面:记忆的生命周期管理(图如何随时间更新和遗忘)、以及评估范围的扩展(更多样化的 agent 任务、更大规模的图)。这两个问题解决了,MRAgent 的设计范式才能真正走向生产级的长期部署。

认知神经科学的视角——记忆是重建,不是检索——不只是一个好的比喻,而是指导未来设计的纲领性原则:下一代 Agent 记忆系统,应该更像大脑,而不是更像数据库。

十一、可复现性与实现细节

11.1 记忆构建细节

记忆构建流水线在任何查询送达之前,作为预处理步骤在完整对话历史上运行。几个关键实现细节:

情节分割策略。 论文中 RLLM\mathcal{R}_{\text{LLM}} 没有指定精确的提示词或分段长度约束。根据作者公开的代码,实现中使用了重叠的上下文窗口来确保跨轮次的指代关系被正确解析——这个细节对标签质量影响显著,因为标签需要捕捉情节的完整关系模式,而不只是局部文字。

标签词汇表。 标签是 LLM 生成的自由格式短语,没有预定义词汇表。这意味着语义相近的标签(如”比赛胜利”、“赢得比赛”、“游戏获胜”)可能在图中共存而不被合并。代码用嵌入相似度聚类做了后处理,但聚类阈值是超参数,论文主体没有讨论。

实验中图的规模。 LoCoMo(50 组对话 × 约 300 轮 × 大约每 2 轮一个情节)每组对话图大约有 150–300 个情节节点、500–1000 个线索节点、200–400 个标签节点。这个规模下全图遍历是可行的;在 N=105N = 10^5 量级,还需要额外的索引结构。

11.2 重建循环的实现方式

Navigate/Answer 模式切换是用类似 ReAct 的方式实现的:LLM 生成结构化 JSON 工具调用,格式如下:

{
  "mode": "Navigate",
  "action": "query_tag_events",
  "parameters": {
    "cue": "电子游戏比赛",
    "tag": "比赛胜利"
  },
  "reasoning": "需要找出哪一次比赛是第二次。"
}

LLM 必须生成带有正确工具名和参数的有效 JSON——这要求模型有较强的结构化生成能力。论文使用 Gemini-2.5-Flash 和 Claude-Sonnet-4.5,两者都能可靠处理结构化输出。对于更小的模型,可能需要引入带 JSON Schema 约束的受约束解码(constrained decoding)。

停止条件 Stop(x, H^{(t+1)}) 也是 LLM 评估的:模型通过输出 "mode": "Answer" 来表示它认为已经收集到足够的证据。这是一个隐式奖励信号——模型需要内部估计继续遍历是否还有边际收益。

11.3 评估指标细节

LLM-Judge 指标用 GPT-4o-mini 作为语义等价性评判器,温度设为 0。每种方法独立评估三次,报告均值±标准差。评判提示问的是:“生成的答案是否在语义上等价于参考答案(允许换写和不同表述形式)“——输出二元值 0/1。

证据召回率的计算(论文公式 24):

Recall=1Ni=1NE^iEiEi(19)\text{Recall} = \frac{1}{N} \sum_{i=1}^{N} \frac{|\hat{\mathcal{E}}_i \cap \mathcal{E}_i^*|}{|\mathcal{E}_i^*|} \tag{19}

其中 E^i\hat{\mathcal{E}}_i 是 Agent 检索到的证据集,Ei\mathcal{E}_i^* 是标注的真实支持证据集。这个指标独立于答案生成质量,专门衡量检索过程的完整性。

11.4 与 GraphRAG 的对比

GraphRAG(Han et al., 2025)也把检索语料组织成图结构,通过社区摘要和邻居扩展检索。与 MRAgent 的关键架构差异:

  • GraphRAG 用自顶向下的社区摘要:图在多个粗粒度层次上被汇总,检索从高层社区描述开始。
  • MRAgent 用自底向上的标签引导遍历:从细粒度线索出发,通过标签向上导航,再向下到内容。

GraphRAG 面向文档语料(新闻文章、Wikipedia);MRAgent 面向 Agent 的交互历史,其中时序关系和实体特定关联至关重要。两种方法互补,理论上可以组合:外部文档用 GraphRAG 风格,交互历史用 MRAgent 风格,由元路由器决定查询哪个来源。

十二、更广泛的意义

12.1 一个新的 Agent 记忆设计范式

MRAgent 最重要的贡献不是具体的架构,而是设计原则:把检索结构和检索策略解耦。现有系统把两者混为一谈——图的边隐含地编码了检索策略(沿这些边走)。MRAgent 把它们分开:Cue-Tag-Content 图是结构,LLM 引导的遍历循环是策略。这种解耦让策略可以在推理时自适应,而无需重新训练记忆表示。

这个原则在 Agent 记忆之外也有更广泛的适用性。任何满足以下条件的系统都能受益于主动重建而非被动检索: (a) 正确答案依赖异构信息的多跳推理; (b) 中间证据会揭示新的检索方向; (c) 检索预算有限。

候选应用场景:科学文献综述(根据中间发现追踪引用链)、医疗记录分析(沿症状→诊断→治疗链跳转)、代码库导航(追踪函数调用链以定位 bug 根源)。

12.2 与 Search-R1 和 Agentic RAG 的关系

Search-o1(Li et al., 2025)和 Search-R1(Jin et al., 2025)也把检索嵌入推理循环,在检测到知识缺口时按需发起搜索。MRAgent 与它们的根本区别:

  • Search-o1/R1 从外部语料库(网页搜索、知识库)检索,用于在单个推理任务内填补事实空白。
  • MRAgent 从 Agent 自身的交互历史重建,用于回忆过去的经历

两个范式互补。一个完整的长期 Agent 应当兼具:

  • MRAgent 风格的主动重建用于访问自身记忆(历史 session 发生了什么);
  • Search-o1 风格的 Agentic RAG 用于访问外部世界知识(当前事实、文档)。

两种记忆来源是否应该统一在单个图中,还是分开维护并由元路由器协调,是一个开放的架构问题。

代码: https://github.com/Ji-shuo/MRAgent

十三、一句话回顾

MRAgent 用”主动重建”取代”被动检索”,将认知神经科学中记忆重建的洞见落地为可工程化的 LLM Agent 记忆架构。Cue–Tag–Content 图提供了轻量高效的联想结构;迭代 LLM 遍历循环实现了真正的证据链推理;定理 4.1 从理论上严格证明了主动策略的表达能力优势。当前最紧迫的开放问题是记忆的生命周期管理——未来的工作需要解决图的动态更新、遗忘和冲突消解,才能让这套范式真正走向长期部署的生产环境。