【论文阅读】Agent 记忆机制(22):FluxMem——根据对话结构动态选择记忆组织方式

文章目录

  • 前言
  • 零、论文基本信息
  • 一、背景与问题
    • [1. 长对话不仅存在"记不住",还存在"记忆结构不匹配"](#1. 长对话不仅存在“记不住”,还存在“记忆结构不匹配”)
    • [2. 单一记忆结构的局限](#2. 单一记忆结构的局限)
      • [2.1 单一结构假设](#2.1 单一结构假设)
      • [2.2 缺少对话自适应的结构选择](#2.2 缺少对话自适应的结构选择)
  • 二、相关工作
    • [1. 扁平检索式记忆系统](#1. 扁平检索式记忆系统)
    • [2. 显式结构化记忆系统](#2. 显式结构化记忆系统)
    • [3. 策略管理的记忆系统](#3. 策略管理的记忆系统)
  • [三、FluxMem 方法总览](#三、FluxMem 方法总览)
  • 四、问题形式化
  • 五、三层记忆层次结构
    • [1. 短期互动记忆 STIM](#1. 短期互动记忆 STIM)
      • [1.1 设计动机](#1.1 设计动机)
      • [1.2 方法流程](#1.2 方法流程)
      • [1.3 容量控制](#1.3 容量控制)
    • [2. 中期情景记忆 MTEM](#2. 中期情景记忆 MTEM)
      • [2.1 设计动机](#2.1 设计动机)
      • [2.2 情景单元包含什么](#2.2 情景单元包含什么)
      • [2.3 情景效用](#2.3 情景效用)
      • [2.4 Agent 场景示例](#2.4 Agent 场景示例)
    • [3. 长期语义记忆 LTSM](#3. 长期语义记忆 LTSM)
      • [3.1 设计动机](#3.1 设计动机)
      • [3.2 存储内容](#3.2 存储内容)
      • [3.3 资格式剪枝](#3.3 资格式剪枝)
  • 六、多结构记忆组织与召回
    • [1. 线性记忆](#1. 线性记忆)
      • [1.1 设计动机](#1.1 设计动机)
      • [1.2 组织方式](#1.2 组织方式)
      • [1.3 检索方式](#1.3 检索方式)
      • [1.4 举例](#1.4 举例)
    • [2. 图记忆](#2. 图记忆)
      • [2.1 设计动机](#2.1 设计动机)
      • [2.2 组织方式](#2.2 组织方式)
      • [2.3 检索方式](#2.3 检索方式)
      • [2.4 举例](#2.4 举例)
    • [3. 层次化记忆](#3. 层次化记忆)
      • [3.1 设计动机](#3.1 设计动机)
      • [3.2 组织方式](#3.2 组织方式)
      • [3.3 检索方式](#3.3 检索方式)
      • [3.4 举例](#3.4 举例)
    • [4. 三种结构的对比](#4. 三种结构的对比)
  • 七、上下文感知的记忆结构选择
    • [1. 将结构选择建模为分类问题](#1. 将结构选择建模为分类问题)
    • [2. 对话特征表示](#2. 对话特征表示)
    • [3. 结构选择器](#3. 结构选择器)
    • [4. 通过交互奖励构造离线监督](#4. 通过交互奖励构造离线监督)
      • [4.1 为什么没有直接标签](#4.1 为什么没有直接标签)
      • [4.2 标签构造流程](#4.2 标签构造流程)
      • [4.3 训练数据](#4.3 训练数据)
      • [4.4 我的理解](#4.4 我的理解)
  • [八、基于 Beta 混合模型的记忆融合](#八、基于 Beta 混合模型的记忆融合)
    • [1. 为什么固定相似度阈值不可靠](#1. 为什么固定相似度阈值不可靠)
    • [2. 两成分 Beta 混合模型](#2. 两成分 Beta 混合模型)
    • [3. 后验门控](#3. 后验门控)
    • [4. BMM 真正解决了什么](#4. BMM 真正解决了什么)
  • 九、实验设置
    • [1. 数据集](#1. 数据集)
      • [1.1 PERSONAMEM](#1.1 PERSONAMEM)
      • [1.2 LoCoMo](#1.2 LoCoMo)
    • [2. 对比方法](#2. 对比方法)
    • [3. 实现细节](#3. 实现细节)
    • [4. 评估指标](#4. 评估指标)
  • 十、实验结果与分析
  • 十一、消融实验
    • [1. 去掉线性记忆](#1. 去掉线性记忆)
    • [2. 去掉图记忆](#2. 去掉图记忆)
    • [3. 去掉层次化记忆](#3. 去掉层次化记忆)
    • [4. 去掉 BMM](#4. 去掉 BMM)
    • [5. 我的理解](#5. 我的理解)
  • 十二、参数敏感性分析
    • [1. BMM 后验阈值](#1. BMM 后验阈值)
    • [2. 最少保留候选数量](#2. 最少保留候选数量)
  • 十三、案例分析
    • [1. 时间问题:选择线性记忆](#1. 时间问题:选择线性记忆)
    • [2. 复杂关系问题:选择图记忆](#2. 复杂关系问题:选择图记忆)
    • [3. 话题演化问题:选择层次化记忆](#3. 话题演化问题:选择层次化记忆)
  • 十四、局限性与未来方向
    • [1. 主要实验集中在对话记忆](#1. 主要实验集中在对话记忆)
    • [2. 结构选择依赖人工特征](#2. 结构选择依赖人工特征)
    • [3. 每个情景只选择一种结构](#3. 每个情景只选择一种结构)
    • [4. 离线标签构造成本较高](#4. 离线标签构造成本较高)
    • [5. BMM 仍然包含超参数](#5. BMM 仍然包含超参数)
    • [6. 缺少完整的效率结果](#6. 缺少完整的效率结果)
    • [7. 复现信息仍不完整](#7. 复现信息仍不完整)
  • 十五、我的理解和启发
    • [1. 记忆结构应该与问题结构匹配](#1. 记忆结构应该与问题结构匹配)
    • [2. 记忆分层和记忆结构是两个独立维度](#2. 记忆分层和记忆结构是两个独立维度)
    • [3. 可以先用规则实现一个简化版 FluxMem](#3. 可以先用规则实现一个简化版 FluxMem)
    • [4. 结构选择器可以作为记忆系统的路由层](#4. 结构选择器可以作为记忆系统的路由层)
    • [5. 应该记录记忆"利用率",而不只是检索命中率](#5. 应该记录记忆“利用率”,而不只是检索命中率)
    • [6. 与其他论文的联系](#6. 与其他论文的联系)
  • 十六、总结
  • 参考资料

前言

前面已经阅读了 Mem0、A-MEM、MemoryOS、LightMem、Zep 等不同类型的 Agent 记忆系统。

这些方法在记忆表示上采用了不同路线:

  • Mem0 将对话提取为事实,并管理事实的增加、更新和删除;
  • A-MEM 将记忆组织为相互关联的笔记网络;
  • Zep 使用带有时间信息的知识图谱;
  • MemoryOS 使用类似操作系统的分层存储与淘汰机制;
  • LightMem 更关注长期记忆的成本和效率。

它们都在尝试解决同一个问题:

如何让 Agent 在长对话中保存并召回历史信息?

但这篇论文提出了一个更细的问题:

面对不同类型的问题,Agent 是否应该始终使用同一种记忆结构?

考虑下面三类问题。

第一类是时间问题:

text 复制代码
用户去年喜欢跑步,今年改成了游泳。
用户现在最喜欢什么运动?

这类问题需要保留事件顺序,线性记忆可能更合适。

第二类是关系问题:

text 复制代码
Alice 是 Bob 的同事,Bob 的家乡是瑞典。
与 Alice 存在同事关系的人来自哪里?

这类问题需要沿实体关系进行多跳推理,图记忆更有优势。

第三类是话题演化问题:

text 复制代码
用户先讨论旅行,后来分别讨论交通、酒店、餐饮和户外活动。
用户在户外活动方面表现出了什么偏好?

这类对话包含多个不断分化的子话题,层次化记忆更容易从大类逐步定位到具体内容。

因此,线性、图和层次化记忆并不存在绝对的优劣关系。它们分别擅长处理:

  • 时间顺序;
  • 实体关系;
  • 话题层次。

现有系统通常在设计阶段固定选择一种结构,或者为不同记忆层预先指定结构,却不会根据当前对话内容动态改变选择。

本文提出的 FluxMem 将记忆结构选择建模为一个可学习的分类问题:

  1. 建立短期、中期和长期三层记忆;
  2. 在中期情景记忆中同时支持线性、图和层次化结构;
  3. 从当前对话中提取时间、实体关系和话题变化等特征;
  4. 使用一个轻量分类器选择最合适的记忆结构;
  5. 使用下游回答质量和记忆利用率作为离线监督信号;
  6. 使用 Beta 混合模型控制新记忆应该合并到哪个情景单元。

这篇论文的核心贡献可以概括为:

记忆结构不应该只是开发者预先确定的系统配置,而应该成为 Agent 根据对话内容动态选择的决策变量。


零、论文基本信息


一、背景与问题

1. 长对话不仅存在"记不住",还存在"记忆结构不匹配"

在长对话中,Agent 需要持续处理:

  • 用户事实;
  • 用户偏好;
  • 偏好变化;
  • 事件发生时间;
  • 人物和事物之间的关系;
  • 跨会话的因果信息;
  • 不同话题之间的层次结构。

传统 RAG 通常会将这些信息转化为文本片段,然后使用向量相似度进行检索。

这种方法对下面的问题比较有效:

text 复制代码
用户养的宠物叫什么?

因为答案可能直接存在于某一条记忆中。

但面对下面的问题时,单纯的相似度检索就不一定足够:

text 复制代码
用户为什么不再喜欢以前经常参加的活动?

回答这个问题可能需要:

  1. 找到用户过去喜欢的活动;
  2. 找到后来发生的事件;
  3. 判断事件与偏好变化之间的关系;
  4. 以最新状态为准生成回答。

这已经不是简单的"检索一个相似文本",而是需要在时间、关系和话题结构中组织信息。

2. 单一记忆结构的局限

论文指出,现有方法存在两个主要缺口。

2.1 单一结构假设

很多方法默认某种结构足以处理所有任务,例如:

  • 所有记忆都按时间排列;
  • 所有记忆都写入知识图谱;
  • 所有记忆都组织为层次化主题;
  • 所有记忆都使用向量相似度检索。

但不同问题依赖的结构并不相同。

对话特征 更适合的结构
时间演化、连续步骤 线性结构
实体关系、多跳关联 图结构
话题分支、多粒度抽象 层次结构

一种结构在某些问题上表现很好,并不代表它适用于所有问题。

2.2 缺少对话自适应的结构选择

一些系统虽然也包含多层记忆,但每一层采用什么结构通常是固定的。

例如:

text 复制代码
短期记忆 → 线性列表
中期记忆 → 情景集合
长期记忆 → 知识图谱

这种设计解决了不同时间尺度的信息管理,却没有根据当前对话内容改变结构。

FluxMem 进一步提出:

同样属于中期情景记忆,不同情景单元也可以采用不同结构。

例如:

text 复制代码
情景 A:用户偏好的时间变化 → 线性结构
情景 B:家庭成员和职业关系 → 图结构
情景 C:旅行需求的多级分类 → 层次结构

这也是 FluxMem 与普通多层记忆系统的重要区别。


二、相关工作

1. 扁平检索式记忆系统

扁平记忆系统通常将记忆保存为相对独立的文本单元,然后通过相似度检索召回。

代表方法包括:

  • Mem0;
  • LightMem;
  • MemoryBank;
  • LangMem。

典型流程为:

text 复制代码
对话
  ↓
提取事实或摘要
  ↓
写入向量数据库
  ↓
根据当前问题检索 Top-k

这类方法的优点是:

  • 实现简单;
  • 检索成本较低;
  • 易于增量更新;
  • 适合直接事实召回。

但其局限也比较明显:

  • 难以表示实体之间的复杂关系;
  • 难以处理多跳推理;
  • 对偏好变化和时间演化支持有限;
  • 相似文本不一定是完成当前推理真正需要的证据。

2. 显式结构化记忆系统

结构化记忆会主动建立记忆之间的关系。

代表方法包括:

  • A-MEM;
  • O-Mem;
  • MemGAS;
  • MIRIX;
  • Zep。

例如,图记忆可以将信息组织为:

text 复制代码
用户
 ├── 喜欢 → 跑步
 ├── 居住地 → 悉尼
 └── 同事 → Alice

层次化记忆则可以组织为:

text 复制代码
用户偏好
 ├── 饮食
 │   ├── 不喜欢乳制品
 │   └── 喜欢低糖食品
 └── 运动
     ├── 过去喜欢跑步
     └── 现在喜欢游泳

相比扁平存储,这些方法能够支持:

  • 关系推理;
  • 跨记忆关联;
  • 多粒度检索;
  • 结构化更新。

但它们通常会在设计阶段固定结构。

图记忆擅长关系问题,却可能为简单的时间问题引入额外开销;层次化记忆适合话题组织,却可能弱化事件的严格时间顺序。

3. 策略管理的记忆系统

第三类方法不只关心如何存储记忆,还引入控制策略决定:

  • 什么内容值得写入;
  • 哪些记忆应该保留;
  • 什么时候检索;
  • 什么时候遗忘。

例如:

  • Memory-R1、MIRA 使用奖励学习记忆写入或保留策略;
  • MemoryOS 使用分层存储、淘汰和更新机制;
  • Mnemosyne 通过冗余过滤和概率召回控制资源消耗;
  • MemR3 在检索、反思和回答之间进行闭环控制。

这些方法让记忆行为变得更加主动,但大多仍然保留了固定的结构偏置。

FluxMem 的定位是:

不仅学习"是否写入、是否检索",还学习"应该使用什么结构组织和检索"。


三、FluxMem 方法总览

为了理解三层记忆、结构选择器和 BMM 记忆融合之间的关系,可以先看论文 Figure 2。

图源:论文 Figure 2。

中间是 STIM、MTEM 和 LTSM 三层记忆;右侧展示线性、图和层次化三种情景记忆结构及其离线训练过程;左侧展示基于 Beta 混合模型的记忆融合机制,以及查询时从三层记忆中联合召回信息的过程。

FluxMem 的整体流程为:

text 复制代码
用户和 Agent 产生一轮交互
            ↓
写入短期互动记忆 STIM
            ↓
STIM 超出容量后淘汰旧交互
            ↓
BMM 判断旧交互是否应合并到已有情景
            ↓
结构选择器选择线性、图或层次结构
            ↓
写入中期情景记忆 MTEM
            ↓
高价值情景被抽象和整理
            ↓
写入长期语义记忆 LTSM
            ↓
新问题到来
            ↓
联合检索 STIM、MTEM 和 LTSM
            ↓
生成最终回答

这里有两个不同维度的组织机制。

第一是记忆生命周期:

text 复制代码
STIM → MTEM → LTSM

它回答的是:

一条信息目前属于近期上下文、历史情景,还是稳定知识?

第二是中期情景记忆的内部结构:

text 复制代码
Linear / Graph / Hierarchical

它回答的是:

这个情景应该按照时间、实体关系,还是话题层次进行组织?

二者不能混为一谈。


四、问题形式化

论文研究长周期多轮对话。

设时间步 t t t 之前的对话历史为:

H t = { p 1 , ... , p t } H_t=\{p_1,\ldots,p_t\} Ht={p1,...,pt}

其中,每个页面 p i p_i pi 表示一轮用户和 Agent 的交互:

p i = ( u i , a i ) p_i=(u_i,a_i) pi=(ui,ai)

其中:

  • u i u_i ui 表示用户输入;
  • a i a_i ai 表示 Agent 回答。

论文使用"Page"作为一轮交互的基本单位,它不是网页页面。

给定当前用户问题 q t q_t qt,系统需要结合:

  • 最近对话;
  • 历史情景;
  • 长期语义知识

生成回答 y t y_t yt。

中期情景记忆包含多个情景单元:

M t E = { e 1 , ... , e N } \mathcal{M}_t^E=\{e_1,\ldots,e_N\} MtE={e1,...,eN}

每个情景单元由多轮在语义或时间上相关的交互组成:

e j = { p j , 1 , ... , p j , m } e_j=\{p_{j,1},\ldots,p_{j,m}\} ej={pj,1,...,pj,m}

三层记忆分别表示为:

  • M t S \mathcal{M}_t^S MtS:短期互动记忆;
  • M t E \mathcal{M}_t^E MtE:中期情景记忆;
  • M L \mathcal{M}^L ML:长期语义记忆。

信息会逐层流动:

p i → ϕ S M t S → M t E → ϕ L M L p_i\xrightarrow{\phi_S}\mathcal{M}_t^S\rightarrow\mathcal{M}_t^E\xrightarrow{\phi_L}\mathcal{M}^L piϕS MtS→MtEϕL ML

其中:

  • ϕ S \phi_S ϕS 表示短期记忆写入和转移过程;
  • ϕ L \phi_L ϕL 表示从情景记忆到语义记忆的整理过程。

查询时,系统从三个层次联合检索并融合记忆:

M ~ t = Ψ ( q t , M t S , M t E , M L ) \widetilde{\mathcal{M}}_t=\Psi(q_t,\mathcal{M}_t^S,\mathcal{M}_t^E,\mathcal{M}^L) M t=Ψ(qt,MtS,MtE,ML)

最终回答为:

y t ∼ p ( y ∣ q t , M ~ t ) y_t\sim p(y\mid q_t,\widetilde{\mathcal{M}}_t) yt∼p(y∣qt,M t)


五、三层记忆层次结构

1. 短期互动记忆 STIM

1.1 设计动机

最近几轮对话通常与当前问题最相关。

例如:

text 复制代码
用户:我下个月想去日本。
Agent:你更关注城市还是自然风景?
用户:自然风景。
用户:那应该去哪里?

最后一个问题中的"那里"和"去哪里",需要依赖最近几轮对话理解,不应该每次都经过复杂检索。

因此,STIM 直接保存最近的交互。

1.2 方法流程

text 复制代码
新一轮对话
    ↓
写入 STIM
    ↓
查询时全部加入上下文
    ↓
超过容量后淘汰最旧内容

STIM 中的内容在检索时不进行过滤,而是全部提供给生成模型。

1.3 容量控制

论文参考工作记忆研究,将 STIM 容量设置为 4 个 Page。

当 STIM 超出容量 C C C 时,系统根据最近访问时间淘汰旧内容:

E t = arg ⁡ min ⁡ P ⊂ M t ,    ∣ P ∣ = ∣ M t ∣ − C ∑ p ∈ P τ ( p ) \mathcal{E}t=\arg\min{\mathcal{P}\subset\mathcal{M}_t,\;|\mathcal{P}|=|\mathcal{M}t|-C}\sum{p\in\mathcal{P}}\tau(p) Et=argP⊂Mt,∣P∣=∣Mt∣−Cminp∈P∑τ(p)

其中:

  • M t \mathcal{M}_t Mt 表示当前 STIM;
  • C C C 表示容量;
  • τ ( p ) \tau(p) τ(p) 表示 Page 最近一次被访问的时间;
  • E t \mathcal{E}_t Et 表示需要转移的 Page 集合。

被淘汰的内容不会直接删除,而是不可逆地转移到 MTEM。

需要注意,论文将这一过程称为基于 LRU 的转移,但在容量只有 4 的情况下,它本质上承担的是"近期上下文缓冲区"作用。


2. 中期情景记忆 MTEM

2.1 设计动机

如果把每一轮旧对话都单独保存,会造成:

  • 记忆过于碎片化;
  • 同一个事件被拆成多个片段;
  • 检索结果重复;
  • 很难恢复完整上下文。

如果把所有历史内容都放在一起,又会造成:

  • 单个记忆过长;
  • 不相关主题混杂;
  • 检索粒度过粗;
  • 记忆规模持续增长。

因此,MTEM 将多轮相关对话组织为一个情景单元。

2.2 情景单元包含什么

每个情景单元包含:

  1. 对话内容、时间戳和连续性连接;
  2. 情景摘要及其向量表示;
  3. 与所选结构对应的索引;
  4. 实体关系图或主题层次结构;
  5. 访问和使用相关的元数据。

2.3 情景效用

FluxMem 使用轻量效用分数估计情景的长期价值:

U ( s ) = w 1 c ( s ) + w 2 ℓ ( s ) + w 3 d ( s ) U(s)=w_1c(s)+w_2\ell(s)+w_3d(s) U(s)=w1c(s)+w2ℓ(s)+w3d(s)

其中:

  • c ( s ) c(s) c(s) 表示访问频率;
  • ℓ ( s ) \ell(s) ℓ(s) 表示交互强度;
  • d ( s ) d(s) d(s) 表示近期程度;
  • w 1 , w 2 , w 3 w_1,w_2,w_3 w1,w2,w3 表示各指标权重。

效用较高的情景会被优先整理到 LTSM。

2.4 Agent 场景示例

假设用户连续讨论:

text 复制代码
第一轮:我最近开始跑步。
第二轮:但是膝盖受伤了。
第三轮:医生建议我改成游泳。
第四轮:现在我每周游泳三次。

MTEM 不会简单保存为四条独立事实,而是形成一个情景:

text 复制代码
情景:用户运动偏好的变化

开始跑步
  ↓
膝盖受伤
  ↓
医生建议游泳
  ↓
目前每周游泳三次

这个情景既保留了事实,也保留了变化原因。


3. 长期语义记忆 LTSM

3.1 设计动机

情景记忆保存了丰富过程,但某些信息在长期交互中已经比较稳定。

例如:

  • 用户目前生活在悉尼;
  • 用户不食用乳制品;
  • 用户偏好自然景观;
  • 用户习惯在周末运动。

如果每次都重新检索完整情景,会产生不必要的成本。

因此,LTSM 将高价值情景抽象为更稳定的语义知识。

3.2 存储内容

LTSM 主要保存:

  • 用户画像;
  • 稳定事实;
  • 长期偏好;
  • 通用知识;
  • 可复用交互策略;
  • 论文图中提到的程序性记忆。

3.3 资格式剪枝

LTSM 不只是计算一个总分,而是要求记忆同时满足多个条件:

m ∈ M L T S M    ⟺    u ( m ) ≥ τ u ∧ r ( m ) ≥ τ r    ( ∧ c ( m ) ≥ τ c ) m\in\mathcal{M}_{\mathrm{LTSM}}\iff u(m)\geq\tau_u\land r(m)\geq\tau_r\;(\land c(m)\geq\tau_c) m∈MLTSM⟺u(m)≥τu∧r(m)≥τr(∧c(m)≥τc)

其中:

  • u ( m ) u(m) u(m) 表示使用情况;
  • r ( m ) r(m) r(m) 表示近期程度;
  • c ( m ) c(m) c(m) 表示可选的置信度;
  • τ u , τ r , τ c \tau_u,\tau_r,\tau_c τu,τr,τc 表示对应条件。

当容量不足时,不满足条件的内容会被清理。

这种方法和简单加权评分的区别是:

一条记忆不能仅靠某一个特别高的指标掩盖其他方面的问题。

例如,一条内容曾经被频繁使用,但已经长期过期,也可能不再适合保留。


六、多结构记忆组织与召回

FluxMem 的结构选择主要发生在 MTEM。

每个情景单元只分配一种结构:

  • 线性结构;
  • 图结构;
  • 层次结构。

不是同一个情景同时建立三套完整索引,而是根据情景内容选择其中一种。

1. 线性记忆

1.1 设计动机

当问题依赖时间顺序时,必须保留事件的先后关系。

适用场景包括:

  • 用户偏好变化;
  • 分步骤指令;
  • 计划执行过程;
  • 目标演化;
  • 带有"之前、后来、现在"的问题。

1.2 组织方式

text 复制代码
Page 1 → Page 2 → Page 3 → Page 4

内容按照时间顺序追加。

1.3 检索方式

检索主要结合:

  • 语义相似度;
  • 时间顺序;
  • 近期偏好。

1.4 举例

text 复制代码
2024 年:用户喜欢跑步
2025 年:用户膝盖受伤
2026 年:用户改为游泳

当用户询问"我现在更适合什么运动"时,线性结构能够避免错误地返回最早的跑步偏好。


2. 图记忆

2.1 设计动机

当答案依赖人物、地点、事件和属性之间的关系时,单纯按照时间排列不一定有效。

2.2 组织方式

text 复制代码
用户
 ├── 朋友 → Caroline
 ├── Caroline 曾居住于 → 德国
 └── Caroline 来自 → 瑞典

记忆被表示为节点和关系边。

2.3 检索方式

图检索以实体为中心,结合:

  • 实体定位;
  • 邻居扩展;
  • 多跳遍历;
  • 语义匹配。

2.4 举例

问题:

text 复制代码
用户那位搬到德国的朋友来自哪个国家?

系统需要完成:

text 复制代码
搬到德国的人
    ↓
Caroline
    ↓
Caroline 来自
    ↓
瑞典

这种问题更适合图结构。


3. 层次化记忆

3.1 设计动机

长对话可能包含多个不断变化的话题,每个话题内部还有子话题。

如果全部平铺,容易出现:

  • 相似内容相互干扰;
  • 近期无关信息压过早期相关内容;
  • 难以从高层概念定位具体证据。

3.2 组织方式

text 复制代码
旅行
 ├── 交通
 ├── 住宿
 ├── 饮食
 └── 活动
     ├── 徒步
     ├── 骑马
     └── 滑雪

3.3 检索方式

采用从粗到细的检索流程:

text 复制代码
匹配高层主题
    ↓
定位相关子主题
    ↓
检索具体情景

3.4 举例

用户先后讨论了多个旅行话题,但问题只询问:

text 复制代码
我对户外活动表现出了什么兴趣?

层次结构可以先定位"旅行---活动",再进一步找到"骑马",避免受到酒店、餐饮等近期内容干扰。


4. 三种结构的对比

结构 主要组织依据 更适合的问题 主要风险
线性记忆 时间和顺序 偏好变化、步骤、事件演化 关系推理能力有限
图记忆 实体与关系 多跳关联、人物关系、因果连接 构图成本和噪声边
层次记忆 主题和抽象层级 话题演化、多粒度检索 可能弱化精确时间顺序

FluxMem 的关键不是提出这三种结构。论文也明确说明,这些实现改编自已有工作。

真正的创新在于:

将三种结构放入统一系统,并学习什么对话应该选择什么结构。


七、上下文感知的记忆结构选择

1. 将结构选择建模为分类问题

FluxMem 定义候选结构集合:

S = { L i n e a r , G r a p h , H i e r a r c h i c a l } \mathcal{S}=\{\mathrm{Linear},\mathrm{Graph},\mathrm{Hierarchical}\} S={Linear,Graph,Hierarchical}

在每轮交互中,系统根据当前对话特征,从三种结构中选择一种。

结构选择不是直接让大模型输出,而是使用一个轻量 MLP 分类器。

这样做的好处是:

  • 推理开销低;
  • 输出稳定;
  • 决策容易复现;
  • 不需要每轮额外调用一个大模型进行结构判断。

2. 对话特征表示

当前对话被表示为特征向量:

x t ∈ R d x_t\in\mathbb{R}^d xt∈Rd

论文实际使用 12 个可解释特征。

特征 主要作用
Page 数量 表示交互规模
平均 Page 长度 表示信息密度
实体密度 判断是否适合图结构
关系表达频率 判断关系推理需求
话题多样性 判断是否存在多个主题
话题切换频率 判断对话是否快速转向
是否为问答模式 问答型交互通常适合线性召回
是否为决策树模式 条件分支可能适合层次结构
是否以实体为中心 实体密集问题偏向图结构
时间跨度 时间跨度越长,纯近期检索越不可靠
时间密度 高频连续交互更依赖短期顺序
语义复杂度 内容越异构,越需要结构化组织

这里可以看到,选择器主要使用"结构信号",而不是直接理解全部对话语义。

例如:

text 复制代码
实体密度高 + 关系表达多
              ↓
更可能选择图结构

话题多样性高 + 频繁切换
              ↓
更可能选择层次结构

时间密度高 + 问答模式明显
              ↓
更可能选择线性结构

3. 结构选择器

选择器使用两层 MLP。

它首先输出三种结构的概率:

f θ ( x t ) = S o f t m a x ( g θ ( x t ) ) f_\theta(x_t)=\mathrm{Softmax}(g_\theta(x_t)) fθ(xt)=Softmax(gθ(xt))

其中:

  • g θ g_\theta gθ 表示 MLP;
  • f θ ( x t ) f_\theta(x_t) fθ(xt) 表示三种结构的概率分布。

然后选择概率最高的结构:

s ^ t = arg ⁡ max ⁡ s ∈ S f θ ( x t ) s \hat{s}t=\arg\max{s\in\mathcal{S}}f_\theta(x_t)s s^t=args∈Smaxfθ(xt)s

实验中的选择器配置非常轻量:

  • 输入维度:12;
  • 隐藏层维度:4;
  • 输出维度:3。

因此,它相对大模型推理几乎不会引入明显额外成本。


4. 通过交互奖励构造离线监督

4.1 为什么没有直接标签

真实对话数据通常不会标注:

text 复制代码
这个问题应该使用图记忆。
这个问题应该使用线性记忆。

因此,作者需要自己构造结构标签。

4.2 标签构造流程

对于训练集中的每个对话情景,分别使用三种结构运行 Agent:

text 复制代码
同一段对话
 ├── 使用线性记忆运行
 ├── 使用图记忆运行
 └── 使用层次记忆运行

然后计算每种结构的奖励:

r t ( s ) = λ q r t j u d g e ( s ) + λ m r t m e m ( s ) r_t(s)=\lambda_qr_t^{\mathrm{judge}}(s)+\lambda_mr_t^{\mathrm{mem}}(s) rt(s)=λqrtjudge(s)+λmrtmem(s)

其中:

  • r t j u d g e ( s ) r_t^{\mathrm{judge}}(s) rtjudge(s) 表示回答质量;
  • r t m e m ( s ) r_t^{\mathrm{mem}}(s) rtmem(s) 表示记忆利用效果;
  • λ q \lambda_q λq 和 λ m \lambda_m λm 表示权重。

论文算法中给出的示例权重为:

text 复制代码
回答质量:0.7
记忆利用率:0.3

奖励最高的结构被当作监督标签:

s t ∗ = arg ⁡ max ⁡ s ∈ S r t ( s ) s_t^*=\arg\max_{s\in\mathcal{S}}r_t(s) st∗=args∈Smaxrt(s)

然后使用交叉熵训练分类器:

L s e l ( θ ) = ∑ t ℓ ( f θ ( x t ) , s t ∗ ) \mathcal{L}{\mathrm{sel}}(\theta)=\sum_t\ell(f\theta(x_t),s_t^*) Lsel(θ)=t∑ℓ(fθ(xt),st∗)

4.3 训练数据

论文使用 Multi-Session Chat 数据集中的交互构造离线监督。

训练完成后,在线运行时不再需要让三种结构全部执行一遍,只需要:

text 复制代码
提取 12 个特征
        ↓
MLP 预测结构
        ↓
使用选中的结构组织和召回

4.4 我的理解

这是一种"先昂贵标注,后轻量决策"的方案。

离线阶段需要为同一情景运行三种结构,成本比较高;但完成训练后,在线选择只需要一次很小的 MLP 推理。

它避免了在线强化学习的:

  • 高方差;
  • 训练不稳定;
  • 交互成本高;
  • 难以复现。

但同时,它的泛化能力依赖于:

  • 离线数据是否覆盖真实对话;
  • 12 个特征是否足以描述新场景;
  • 离线奖励能否代表线上体验。

八、基于 Beta 混合模型的记忆融合

1. 为什么固定相似度阈值不可靠

当旧 Page 从 STIM 转移到 MTEM 时,系统需要决定:

  • 合并到已有情景;
  • 还是建立一个新情景。

传统方法通常会计算新记忆与已有情景的相似度。

例如:

text 复制代码
最高相似度 > 0.8 → 合并
最高相似度 ≤ 0.8 → 新建情景

但不同对话的相似度分布可能差异很大。

场景 A:

text 复制代码
0.95、0.91、0.88、0.20

场景 B:

text 复制代码
0.68、0.64、0.61、0.57

在场景 A 中,0.8 是合理阈值;在场景 B 中,固定使用 0.8 会拒绝所有候选。

因此,FluxMem 不直接根据原始相似度判断,而是建模当前候选分数的整体分布。

2. 两成分 Beta 混合模型

系统首先将相似度归一化到 ( 0 , 1 ) (0,1) (0,1),然后使用两个 Beta 分布建模:

p ( x ) = π B e t a ( x ; α 1 , β 1 ) + ( 1 − π ) B e t a ( x ; α 0 , β 0 ) p(x)=\pi\mathrm{Beta}(x;\alpha_1,\beta_1)+(1-\pi)\mathrm{Beta}(x;\alpha_0,\beta_0) p(x)=πBeta(x;α1,β1)+(1−π)Beta(x;α0,β0)

两个成分分别表示:

  • 高兼容性候选;
  • 低兼容性候选。

其中:

  • π \pi π 表示混合权重;
  • α k , β k \alpha_k,\beta_k αk,βk 表示第 k k k 个 Beta 分布的参数;
  • x x x 表示归一化后的匹配分数。

参数通过 EM 过程估计。

3. 后验门控

对于一个候选分数 x x x,系统计算它属于高兼容性成分的后验概率:

g ( x ) = P ( z = 1 ∣ x ) = π B e t a ( x ; α 1 , β 1 ) ∑ k ∈ { 0 , 1 } π k B e t a ( x ; α k , β k ) g(x)=P(z=1\mid x)=\frac{\pi\mathrm{Beta}(x;\alpha_1,\beta_1)}{\sum_{k\in\{0,1\}}\pi_k\mathrm{Beta}(x;\alpha_k,\beta_k)} g(x)=P(z=1∣x)=∑k∈{0,1}πkBeta(x;αk,βk)πBeta(x;α1,β1)

其中:

  • z = 1 z=1 z=1 表示高兼容性成分;
  • g ( x ) g(x) g(x) 表示候选应该被保留的概率。

接下来:

text 复制代码
候选属于高兼容性分布
          ↓
保留为可能的合并目标
          ↓
选择其中最匹配的情景
          ↓
将新记忆合并进去

如果没有候选满足条件,则创建新的情景单元。

系统还设置 minimum-keep 机制,避免 BMM 过滤掉所有候选。

4. BMM 真正解决了什么

需要注意,BMM 并不是彻底取消阈值。

系统仍然会使用后验概率阈值 τ B M M \tau_{\mathrm{BMM}} τBMM:

g ( x ) ≥ τ B M M g(x)\geq\tau_{\mathrm{BMM}} g(x)≥τBMM

变化在于:

text 复制代码
传统方法:
对原始相似度设置固定阈值。

FluxMem:
先根据当前分数分布判断高、低兼容性,
再对后验概率设置阈值。

因此,更准确的说法是:

BMM 将固定的原始相似度判断,替换为分布感知的概率判断。

这使系统更容易适应不同对话阶段中的分数漂移,但后验阈值本身仍然需要设置。


九、实验设置

1. 数据集

论文使用两个长周期对话记忆基准。

1.1 PERSONAMEM

PERSONAMEM 主要评估动态用户画像和个性化能力。

任务包括:

  • 召回用户提供的事实;
  • 识别用户最新偏好;
  • 追踪完整偏好变化;
  • 回忆偏好变化原因;
  • 根据用户偏好提出新想法;
  • 生成符合偏好的推荐;
  • 将用户信息泛化到新场景。

这类任务不只要求"记住用户喜欢什么",还要求区分:

text 复制代码
过去偏好
    ↓
变化原因
    ↓
当前偏好

1.2 LoCoMo

LoCoMo 主要评估长对话中的记忆与推理。

每段对话平均约包含:

  • 300 轮交互;
  • 9000 个 token;
  • 19~35 个会话;
  • 数月时间跨度。

任务类型包括:

  • 单跳推理;
  • 多跳推理;
  • 时间推理;
  • 开放问题;
  • 对抗性问题。

论文主表主要报告前四类任务的结果。

2. 对比方法

论文比较了:

  • LangMem;
  • Mem0;
  • Zep;
  • MemoryOS;
  • A-MEM;
  • O-Mem;
  • MemR3;
  • MEMOS;
  • HippoRAG 2。

这些方法覆盖:

  • 扁平记忆;
  • 图记忆;
  • 分层记忆;
  • 记忆操作系统;
  • 闭环反思检索;
  • 知识图谱 RAG。

3. 实现细节

实验使用:

  • 2 张 A100 GPU;
  • GPT-4.1;
  • 温度设置为 0。

记忆配置为:

模块 配置
STIM 容量为 4,使用 LRU
MTEM 最多 2000 个情景单元
LTSM 最多 100 条整理后的长期记忆
结构选择器 两层 MLP,输入 12,隐藏层 4,输出 3
稠密检索模型 all-MiniLM-L6-v2
稀疏检索 BM25
检索融合 Reciprocal Rank Fusion
BMM 两成分 Beta 混合模型
最少保留候选 1

论文的主实现细节将 BMM 后验阈值写为 0.6,而参数敏感性实验显示 0.5 附近结果最好。由于论文暂未提供代码,复现时需要特别核对最终实验所采用的具体配置。

4. 评估指标

PERSONAMEM 是单选任务,使用准确率。

LoCoMo 是自由文本生成任务,使用:

  • F1;
  • BLEU-1;
  • ROUGE-L;
  • ROUGE-1;
  • ROUGE-2;
  • BERTScore。

十、实验结果与分析

1. PERSONAMEM 总体结果

论文 Table 1 的结果如下。

方法 召回事实 提出新想法 追踪偏好演化 回忆变化原因 偏好推荐 泛化新场景 平均
LangMem 31.29 24.73 53.24 81.82 40.00 8.77 40.64
Mem0 32.13 15.05 54.68 80.81 52.73 57.89 48.55
A-MEM 63.01 27.96 54.68 85.86 69.09 57.89 59.75
MemoryOS 72.72 17.20 58.27 78.79 72.72 56.14 59.97
O-Mem 67.81 21.51 61.15 89.90 65.45 73.68 63.25
HippoRAG 2 76.74 33.33 56.12 78.79 23.64 38.60 51.87
FluxMem 85.27 36.56 65.47 91.92 70.91 82.46 72.43

FluxMem 的平均准确率为 72.43%,比第二名 O-Mem 的 63.25% 高 9.18 个百分点。

它在以下任务上优势明显:

  • 用户事实召回;
  • 完整偏好演化;
  • 偏好更新原因;
  • 向新场景泛化。

但 FluxMem 并不是每个类别都最好。

在"偏好一致的推荐"上:

  • MemoryOS:72.72;
  • FluxMem:70.91。

这说明某些任务与固定结构本身高度匹配时,专门设计的系统仍然可能更强。

FluxMem 的优势更接近:

在多种不同对话结构之间取得更稳定的综合表现。

2. LoCoMo 总体结果

论文 Table 2 的平均结果如下。

方法 平均 F1 平均 BLEU-1 平均 ROUGE-L
LangMem 44.32 37.95 39.50
Mem0 27.35 21.41 26.21
Zep 7.92 4.48 6.08
MemoryOS 41.28 32.99 40.02
A-MEM 31.69 26.87 32.10
MEMOS 16.49 9.87 13.51
MemR3 20.49 11.89 17.49
O-Mem 46.40 39.63 36.76
HippoRAG 2 27.55 21.05 26.59
FluxMem 51.16 41.73 49.51

FluxMem 相比对应的最强基线分别提升:

  • F1:6.84 个百分点;
  • BLEU-1:2.10 个百分点;
  • ROUGE-L:9.49 个百分点。

三项提升的平均值约为 6.14,这也是论文摘要中 LoCoMo 平均提升 6.14% 的来源。

3. 分类结果分析

FluxMem 在不同任务类型上的表现并不完全一致。

多跳推理

FluxMem 的 F1 为 48.56,高于其他方法。

这说明图结构和自适应结构选择有助于从多个会话中组合证据。

时间推理

FluxMem 的 F1 为 56.67,略低于 O-Mem 的 57.48;BLEU-1 也低于 O-Mem。

但 FluxMem 的 ROUGE-L 达到 54.89,高于其他方法。

这再次说明,在某些明确的单一任务类型上,固定结构可能获得局部优势。

开放问题

FluxMem 的 F1 达到 37.30,明显高于其他方法。

开放问题通常同时包含:

  • 较弱的时间线索;
  • 稀疏的实体关系;
  • 外部常识;
  • 多种潜在检索路径。

这类问题尤其需要灵活选择和融合记忆结构。

单跳推理

FluxMem 的三项指标分别为:

  • F1:62.12;
  • BLEU-1:53.52;
  • ROUGE-L:62.33。

即使是单跳问题,自适应结构也没有因为增加控制模块而显著损害简单召回能力。


十一、消融实验

1. 去掉线性记忆

在 PERSONAMEM 的"用户事实召回"任务中:

text 复制代码
FluxMem:85.27
去掉线性记忆:80.62

在 LoCoMo 时间推理中,去掉线性结构后:

text 复制代码
F1:56.67 → 49.86

说明线性结构对以下信息非常重要:

  • 时间顺序;
  • 最近状态;
  • 偏好演化;
  • 连续步骤。

2. 去掉图记忆

在 PERSONAMEM 中,去掉图结构后,多项指标下降。

在 LoCoMo 开放问题中:

text 复制代码
F1:37.30 → 17.86
ROUGE-L:36.76 → 17.76

下降非常明显。

这说明开放问题虽然不一定直接表现为知识图谱问答,但其中经常包含跨会话实体关联,需要关系结构辅助召回。

3. 去掉层次化记忆

去掉层次结构后,FluxMem 在话题多样、需要抽象组织的任务上下降明显。

例如,PERSONAMEM 的偏好推荐从 70.91 降到 63.64。

这说明层次结构能够帮助系统:

  • 区分不同话题;
  • 在多个子主题中定位相关内容;
  • 进行粗到细检索;
  • 减少相邻但无关内容的干扰。

4. 去掉 BMM

去掉 BMM 后,LoCoMo 多跳任务的 F1 从 48.56 降到 41.18,开放问题 F1 从 37.30 降到 20.97。

这说明问题不只在于选择哪种结构,还在于:

新记忆能否被合并到正确的情景单元。

如果合并过于宽松,不相关记忆会进入同一情景;如果合并过于严格,同一事件会被拆成多个碎片。

BMM 主要用于在这两种错误之间寻找更稳定的平衡。

5. 我的理解

消融结果说明三个结构不是简单的冗余备份:

模块 主要贡献
线性结构 时间与顺序
图结构 实体关系与多跳关联
层次结构 话题演化与抽象
BMM 情景合并与噪声控制

不过,论文没有在主消融表中单独比较:

  • 学习式结构选择器;
  • 固定单一结构选择;
  • 随机结构选择;
  • 规则式结构选择。

因此,实验能够证明三种结构和 BMM 都有价值,但对"学习式选择器本身贡献了多少"的隔离仍不够充分。


十二、参数敏感性分析

论文主要分析两个参数:

  • BMM 后验阈值 τ B M M \tau_{\mathrm{BMM}} τBMM;
  • 最少保留候选数量 m min ⁡ m_{\min} mmin。

1. BMM 后验阈值

论文将阈值从 0.4 调整到 0.7。

在 PERSONAMEM 和 LoCoMo 上,0.5 附近表现最好。

阈值过低时:

text 复制代码
更多低兼容性记忆被接受
        ↓
情景中混入噪声

阈值过高时:

text 复制代码
过滤条件过于严格
        ↓
相关记忆也可能被拒绝
        ↓
情景被过度拆分

2. 最少保留候选数量

固定 τ B M M = 0.5 \tau_{\mathrm{BMM}}=0.5 τBMM=0.5 后,论文将 m min ⁡ m_{\min} mmin 从 1 调整到 3。

结果显示,强制保留更多候选会持续降低性能。

原因是:

当分布已经表明只有一个候选具有较高兼容性时,强行保留第二、第三个候选只会引入冗余和噪声。

因此,实验更支持:

text 复制代码
τBMM = 0.5
mmin = 1

但论文实现细节部分报告主配置阈值为 0.6。后续复现需要结合代码或作者配置进一步确认。


十三、案例分析

论文通过 Figure 4~Figure 6 展示了三种结构各自适合的场景。

1. 时间问题:选择线性记忆

问题要求判断 Melanie 在什么时间读过一本书。

回答需要将:

  • 相对时间表达;
  • 会话发生时间;
  • 事件先后关系

进行对齐。

FluxMem 选择线性记忆,最终推断出 2022 年。

其他方法虽然可能检索到"读过书"这条事实,却缺少事件和会话时间之间的连接。

2. 复杂关系问题:选择图记忆

问题询问 Caroline 来自哪里。

相关信息分散在不同会话中:

  • 一段对话提到 Caroline 搬到了某地;
  • 另一段对话提到她来自某个国家。

FluxMem 使用图记忆连接跨会话关系,最终回答瑞典。

这说明图记忆的价值不只是存储实体,而是让系统能够沿关系寻找分散证据。

3. 话题演化问题:选择层次化记忆

第三个案例包含明显的话题漂移。

近期对话中存在大量内容,但真正相关的信息位于较早的户外活动话题中。

FluxMem 使用层次结构:

text 复制代码
高层话题
    ↓
旅行活动
    ↓
户外活动
    ↓
骑马

最终找到用户对骑马的兴趣,同时避免被最近但无关的内容干扰。


十四、局限性与未来方向

1. 主要实验集中在对话记忆

FluxMem 的实验使用 PERSONAMEM 和 LoCoMo,主要研究:

  • 用户画像;
  • 偏好变化;
  • 长对话召回;
  • 跨会话推理。

它是否适用于下面的 Agent 场景仍需要进一步验证:

  • 软件工程;
  • 网页研究;
  • GUI 操作;
  • 自动化办公;
  • 具身智能;
  • 多 Agent 任务协作。

这些任务中的记忆不仅是对话文本,还可能包含:

  • 工具状态;
  • 文件;
  • 代码;
  • 环境观察;
  • 动作结果;
  • 可执行 Skill。

2. 结构选择依赖人工特征

选择器使用的 12 个特征具有较强可解释性,也比较轻量。

但它们仍然是人工定义的。

如果真实对话中出现新的结构模式,例如:

  • 多条并行因果链;
  • 图和时间共同重要;
  • 需要同时进行层次和关系推理;

一个三分类器可能无法完整表达。

未来可以研究:

  • 多标签结构选择;
  • 软结构组合;
  • 可学习的结构特征;
  • 图、线性和层次结构的动态组合。

3. 每个情景只选择一种结构

论文为每个 MTEM 情景单元分配一种结构。

这种设计比较清晰,但现实记忆可能同时包含:

  • 时间顺序;
  • 实体关系;
  • 主题层次。

例如,用户职业变化既有时间顺序,也有人物和公司关系。

未来可以让结构选择器输出权重:

text 复制代码
线性:0.5
图:0.4
层次:0.1

然后进行多结构联合召回,而不是必须进行单选。

4. 离线标签构造成本较高

为了生成一个结构标签,需要让同一对话分别运行:

  • 线性记忆;
  • 图记忆;
  • 层次记忆。

这会使离线数据构造成本接近普通方案的三倍,还需要额外计算回答质量和记忆利用率。

如果扩展到更多结构,成本会进一步增加。

5. BMM 仍然包含超参数

BMM 减少了对原始相似度固定阈值的依赖,但系统仍然需要设置:

  • 后验概率阈值;
  • 最少保留数量;
  • EM 迭代次数;
  • 候选记忆数量。

因此,它不是完全无参数的自适应融合。

6. 缺少完整的效率结果

论文分析指出:

  • 两层 MLP 的开销很小;
  • BMM 对候选数量呈线性复杂度;
  • 稠密检索和 BM25 与常见混合检索相近。

但论文主要实验表格仍然关注准确率和文本质量,没有系统报告:

  • 单次写入延迟;
  • 三种结构的存储成本;
  • 图构建成本;
  • token 消耗;
  • 端到端响应时间;
  • 记忆库长期增长速度。

对于生产级 Agent,这些指标非常重要。

7. 复现信息仍不完整

论文当前没有提供公开代码仓库,并且实现细节中的 BMM 阈值与敏感性分析的最优值存在差异。

后续复现时需要重点核对:

  • 主实验最终使用的阈值;
  • 记忆利用率奖励的具体计算方式;
  • LLM Judge 的提示词;
  • 三种结构的完整写入和检索逻辑;
  • 离线训练集的构造和划分方式。

十五、我的理解和启发

1. 记忆结构应该与问题结构匹配

这篇论文最重要的启发不是"三种结构一起使用",而是:

问题以什么方式依赖历史信息,记忆就应该以什么方式组织。

如果问题依赖:

text 复制代码
先发生什么,后发生什么

应该突出时间顺序。

如果问题依赖:

text 复制代码
谁和谁有什么关系

应该突出实体连接。

如果问题依赖:

text 复制代码
这个内容属于哪个大类和子类

应该突出层次关系。

这比统一使用向量检索更接近真实的记忆推理过程。

2. 记忆分层和记忆结构是两个独立维度

在 Agent 开发中,很容易把"短期、中期、长期"直接理解为三种存储结构。

但 FluxMem 说明:

text 复制代码
记忆层次:
决定信息处于哪个生命周期。

记忆结构:
决定信息如何组织和访问。

例如,中期情景记忆既可以是线性的,也可以是图或层次化的。

同样,长期语义记忆也不一定只能使用向量数据库,未来同样可以引入不同结构。

3. 可以先用规则实现一个简化版 FluxMem

如果暂时不训练 MLP,可以先在自己的 Agent 中使用规则选择。

例如:

text 复制代码
问题包含"之前、后来、现在、哪一年"
    → 使用时间线记忆

问题包含多个人名、公司、地点和关系
    → 使用图记忆

问题包含多个主题、分类或逐层细化需求
    → 使用层次化记忆

其他问题
    → 使用普通语义检索

然后记录:

  • 每次选择了什么结构;
  • 最终任务是否成功;
  • 检索结果是否被 Agent 使用;
  • 哪种结构经常误选。

积累数据后,再训练一个轻量选择器替代规则。

4. 结构选择器可以作为记忆系统的路由层

结合自己的 Agent 项目,可以将记忆系统设计为:

text 复制代码
当前任务
    ↓
任务与对话特征提取
    ↓
记忆路由器
    ├── 事实记忆
    ├── 时间线记忆
    ├── 图记忆
    ├── 工作流记忆
    └── Skill 记忆
    ↓
结果融合
    ↓
进入 Agent 上下文

这比让所有检索器并行返回大量内容更节省上下文,也更容易分析问题。

5. 应该记录记忆"利用率",而不只是检索命中率

FluxMem 的离线奖励同时考虑:

  • 回答质量;
  • 记忆利用效果。

这一点很值得借鉴。

因为检索到正确内容,不等于 Agent 真正使用了它。

实际项目可以记录:

指标 含义
Recall Hit 是否检索到目标记忆
Memory Use Agent 是否引用或依据该记忆
Decision Change 记忆是否改变了后续行动
Final Success 最终任务是否成功
Negative Impact 记忆是否误导了 Agent

记忆系统真正需要优化的是后面几项,而不是单纯提高语义相似度。

6. 与其他论文的联系

方法 核心问题
Mem0 事实记忆如何增加、更新和删除
A-MEM 记忆之间如何动态建立关联
MemoryOS 记忆如何分层、迁移和淘汰
Zep 如何表达跨会话实体与时间关系
MemEvolve 如何自动进化记忆架构
FluxMem 如何根据当前对话选择记忆结构

FluxMem 和 MemEvolve 看起来都在改变记忆结构,但两者层次不同。

MemEvolve 更关注:

text 复制代码
根据一批任务的长期评测反馈,
修改编码、存储、检索和管理架构。

FluxMem 更关注:

text 复制代码
在每轮对话中,
从已有的线性、图和层次结构中选择一种。

可以将它们理解为:

text 复制代码
MemEvolve:较慢的架构级进化
FluxMem:较快的交互级结构路由

未来二者可以结合:

  • 外层使用 MemEvolve 发现候选记忆结构;
  • 内层使用 FluxMem 根据当前任务选择结构。

十六、总结

现有 Agent 记忆系统通常会预先确定一种组织结构:

  • 扁平向量存储;
  • 时间序列;
  • 知识图谱;
  • 层次化主题。

但长对话中的问题并不遵循单一模式。

有些问题依赖时间,有些依赖实体关系,还有些依赖话题层次。如果所有问题都使用同一种记忆结构,系统就会在不匹配的任务上出现召回和推理错误。

FluxMem 为此提出了三项主要设计。

第一,构建三层记忆:

text 复制代码
STIM:保存最近交互
MTEM:保存结构化情景
LTSM:保存稳定语义知识

第二,在 MTEM 中同时支持:

  • 线性记忆;
  • 图记忆;
  • 层次化记忆。

第三,使用对话特征和离线交互奖励训练轻量分类器,根据当前对话动态选择结构。

此外,FluxMem 还使用 Beta 混合模型分析候选记忆的相似度分布,判断新记忆应该合并到已有情景,还是建立新的情景单元。

实验表明:

  • FluxMem 在 PERSONAMEM 上达到 72.43% 平均准确率,比最强基线高 9.18 个百分点;
  • 在 LoCoMo 上,F1、BLEU-1 和 ROUGE-L 的平均提升约为 6.14 个百分点;
  • 线性、图和层次结构分别对时间、关系和话题演化问题发挥作用;
  • BMM 能够减少错误记忆融合带来的影响。

但论文仍存在实验场景集中在对话、结构候选有限、依赖人工特征、离线标注成本较高、效率评估不足和复现信息不完整等限制。

我认为,这篇论文最值得记住的一句话是:

Agent 记忆的关键不仅是"召回什么",还包括"用什么结构去记忆和召回"。

当 Agent 面对的任务越来越复杂时,单一向量数据库可能只是记忆系统的一个组件。更完整的记忆系统需要同时管理:

  • 时间;
  • 实体关系;
  • 话题层次;
  • 事实更新;
  • 情景融合;
  • 结构路由;
  • 记忆生命周期。

FluxMem 提供了一种值得借鉴的思路:让记忆结构从固定配置变成可以根据当前交互动态选择的能力。


参考资料

相关推荐
YHL1 小时前
🤖 Agent 智能体开发实战 · RAG 实战 —— 从零搭建检索增强生成系统
人工智能
ambition2371 小时前
WorkBuddy迁移至D盘完整操作指南
人工智能
科技圈快迅2 小时前
在机场与高铁站:智能服务机器人正在深度对接业务系统,实现从信息孤岛到移动服务窗口的转变
大数据·人工智能·机器人
小企鹅么么2 小时前
【AI应用开发工程师】第七章:Agent 工程与实践
人工智能
CIO_Alliance2 小时前
AI+iPaaS解决方案:跨系统业务流程自动化助力企业AI化转型
运维·人工智能·自动化
天国梦2 小时前
英语词汇学习软件深度测评:天学网等三款APP实测对比与选型指南
学习
综合资讯2 小时前
2026年打开设备ETF的产品清单:八只同类,两只能买
人工智能·科技·芯片·半导体·科创
声讯电子2 小时前
A-59 双麦双通道语音处理模块:重新定义全双工通话的极限性能
人工智能·语音识别·ai降噪·usb接口·回音消除
菜鸟‍2 小时前
【论文学习】Frontiers in Physics 2024 || Cap2Seg:基于文本描述生成的 COVID-19 医学图像分割性能提升方法
人工智能·学习