文章目录
- 前言
- 零、论文基本信息
- 一、背景与问题
-
- [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 将记忆结构选择建模为一个可学习的分类问题:
- 建立短期、中期和长期三层记忆;
- 在中期情景记忆中同时支持线性、图和层次化结构;
- 从当前对话中提取时间、实体关系和话题变化等特征;
- 使用一个轻量分类器选择最合适的记忆结构;
- 使用下游回答质量和记忆利用率作为离线监督信号;
- 使用 Beta 混合模型控制新记忆应该合并到哪个情景单元。
这篇论文的核心贡献可以概括为:
记忆结构不应该只是开发者预先确定的系统配置,而应该成为 Agent 根据对话内容动态选择的决策变量。
零、论文基本信息
- 论文名称:Choosing How to Remember: Adaptive Memory Structures for LLM Agents
- 发表平台:arXiv
- 代码仓库:论文暂未提供公开代码仓库
- 作者信息:Mingfei Lu、Mengjia Wu、Feng Liu、Jiawei Xu、Weikai Li、Haoyang Wang、Zhengdong Hu、Ying Ding、Yizhou Sun、Jie Lu、Yi Zhang
一、背景与问题
1. 长对话不仅存在"记不住",还存在"记忆结构不匹配"
在长对话中,Agent 需要持续处理:
- 用户事实;
- 用户偏好;
- 偏好变化;
- 事件发生时间;
- 人物和事物之间的关系;
- 跨会话的因果信息;
- 不同话题之间的层次结构。
传统 RAG 通常会将这些信息转化为文本片段,然后使用向量相似度进行检索。
这种方法对下面的问题比较有效:
text
用户养的宠物叫什么?
因为答案可能直接存在于某一条记忆中。
但面对下面的问题时,单纯的相似度检索就不一定足够:
text
用户为什么不再喜欢以前经常参加的活动?
回答这个问题可能需要:
- 找到用户过去喜欢的活动;
- 找到后来发生的事件;
- 判断事件与偏好变化之间的关系;
- 以最新状态为准生成回答。
这已经不是简单的"检索一个相似文本",而是需要在时间、关系和话题结构中组织信息。
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 情景单元包含什么
每个情景单元包含:
- 对话内容、时间戳和连续性连接;
- 情景摘要及其向量表示;
- 与所选结构对应的索引;
- 实体关系图或主题层次结构;
- 访问和使用相关的元数据。
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 提供了一种值得借鉴的思路:让记忆结构从固定配置变成可以根据当前交互动态选择的能力。
参考资料
- Lu, Mingfei, et al. Choosing How to Remember: Adaptive Memory Structures for LLM Agents. arXiv, 2026.