【论文阅读】Agent 记忆机制(11):RMM——用主题记忆与在线强化学习优化长期对话召回
文章目录
- 前言
- 零、论文基本信息
- 一、长期个性化对话需要什么样的记忆?
- 二、现有方法面临的两个核心问题
- 三、相关工作
- 四、问题定义
- 五、RMM 框架总览
- 六、Prospective Reflection:基于主题的记忆组织
- 七、Retrospective Reflection:通过 LLM 归因优化召回
- 八、Reranker 的设计
- 九、使用 Gumbel Trick 进行随机采样
- 十、LLM 引用归因如何形成奖励?
- 十一、使用 REINFORCE 更新 Reranker
- 十二、用一个完整例子理解 RMM
- 十三、实验设置
- 十四、数据集与评测指标
- 十五、对比方法
- 十六、主要实验结果
- 十七、消融实验
- 十八、引用奖励是否可靠?
- 十九、不同生成 LLM 的影响
- 二十、不同记忆粒度的影响
- 二十一、离线监督训练的作用
- 二十二、Top-K 和 Top-M 的影响
- 二十三、LLM-as-a-Judge 和人工评估
- 二十四、在线强化学习是否逐渐收敛?
- 二十五、RMM 的优势
- 二十六、RMM 的局限性
- 二十七、RMM 和 MemRL 的区别
- 二十八、RMM 和 Mem0、Zep、A-Mem 的区别
- 二十九、我的理解和启发
- 三十、可以如何改造自己的 Agent 项目?
- 三十一、总结
- 参考资料
前言
最近阅读的几篇 Agent 记忆论文,分别从不同角度回答了长期记忆系统中的关键问题:
- Mem0 关注如何提取事实,并对记忆执行新增、更新、删除和忽略;
- Zep 使用时序知识图谱保存实体、关系及其历史变化;
- GAM 通过层级图和语义边界控制记忆固化;
- MemRL 根据环境奖励学习哪些任务经验真正有用。
这些方法让我逐渐意识到,Agent 记忆系统并不只是一个“把历史信息保存下来”的数据库。
一个完整的记忆系统至少需要回答三个问题:
写入阶段:
历史对话应该以什么粒度保存?
召回阶段:
面对当前问题,应该检索哪些记忆?
反馈阶段:
系统能否根据实际使用结果,继续改进记忆召回?
传统 RAG 通常将一轮对话、一个 Session,或者固定长度的文本块作为记忆单元。
但是,对话中的语义主题并不一定服从这些固定边界。
例如,用户可能在三次不同的对话中陆续提到:
第一次:
最近总是下雨,我很难坚持户外跑步。
第二次:
我在考虑买一台跑步机。
第三次:
附近新开了一家健身房,我现在更倾向于去那里锻炼。
如果系统按照 Session 分别保存,这些信息会被拆成三条相互独立的记忆;如果按照整个 Session 保存,又可能把跑步、工作、饮食等多个主题混在一起。
更合理的做法是围绕“用户的运动方式选择”这一主题,将分散的信息持续合并,得到一条随对话演化的主题记忆。
记忆组织好之后,还有另一个问题:
语义上相关的记忆,不一定是生成回答时真正需要的记忆。
传统 Retriever 通常保持固定。即使某些检索结果长期没有被模型使用,检索器也不会从后续交互中学习。
这篇论文提出了 Reflective Memory Management,简称 RMM,从记忆写入和记忆召回两个方向同时改进长期个性化对话 Agent:
-
Prospective Reflection,前瞻性反思
在当前 Session 结束后,围绕不同语义主题分解和总结对话,为未来检索提前组织记忆。 -
Retrospective Reflection,回顾性反思
在生成回答后,根据 LLM 实际引用了哪些记忆,构造奖励信号,通过在线强化学习持续优化记忆重排器。
可以用一句话概括 RMM:
面向未来,提前把对话整理成便于召回的主题记忆;回看过去,根据记忆是否真正被回答使用,持续学习更好的召回策略。
零、论文基本信息
- 论文名称:In Prospect and Retrospect: Reflective Memory Management for Long-term Personalized Dialogue Agents
- 发表平台:ACL 2025 Main Conference,Long Papers
- 作者信息:
- Arizona State University:Zhen Tan、Huan Liu
- Google Cloud AI Research:Jun Yan、I-Hung Hsu、Rujun Han、Zifeng Wang、Long T. Le、Yiwen Song、Yanfei Chen、Hamid Palangi、George Lee、Chen-Yu Lee、Tomas Pfister
- Google Cloud AI:Anand Iyer
- UNC Chapel Hill:Tianlong Chen
一、长期个性化对话需要什么样的记忆?
大语言模型本身通常是无状态的。
每次调用模型时,模型主要依赖当前输入的上下文,并不会自动保存之前所有 Session 中的用户信息。
但长期个性化对话需要模型记住:
- 用户的兴趣和偏好;
- 用户过去提到的经历;
- 用户当前状态如何由过去状态演变而来;
- 多个 Session 中相互关联的信息;
- 之前已经讨论或解决过的问题。
论文 Figure 1 给出了一个个性化医疗 Agent 的例子。

图源:Tan et al., 2025,Figure 1。
用户在一周前提到自己对青霉素过敏,昨天又提到持续咳嗽和发烧。今天用户表示发烧已经消退,但出现了头痛。
为了生成可靠回答,Agent 不能只看今天的消息,还需要整合:
青霉素过敏
+
昨天的咳嗽和发烧
+
今天的症状变化
这说明长期个性化对话中的记忆并不是简单的历史复述,而是需要在当前情境下重新组合过去的信息。
二、现有方法面临的两个核心问题
论文将现有长期对话记忆的不足总结为两个问题:
- 固定的记忆粒度;
- 固定的记忆检索器。
1. 固定记忆粒度破坏语义结构
传统系统通常采用预先定义的记忆边界:
一句话作为一条记忆
一轮对话作为一条记忆
一个 Session 作为一条记忆
固定时间间隔作为一条记忆
但真实对话中的一个主题可能:
- 只出现在一句话中;
- 跨越多个连续 Turn;
- 分散在同一 Session 的不同位置;
- 跨越多个不同 Session。
例如,一个 Session 中可能同时包含:
用户的运动习惯
用户的饮食偏好
用户的工作安排
用户的旅行计划
如果把整个 Session 作为一条记忆,召回“运动习惯”时也会带入大量无关信息。
反过来,如果把每个 Turn 都独立存储,那么同一个主题又会被切成许多零散片段。
因此:
固定粒度过大:
记忆包含较多无关信息。
固定粒度过小:
完整主题被切割成碎片。
2. 固定 Retriever 无法适应不同用户
现有记忆系统通常直接使用预训练 Retriever,根据语义相似度返回 Top-K 记忆。
但是,不同对话领域和不同用户的检索需求并不相同。
例如,在医疗场景中,以下信息可能非常重要:
过敏史
慢性疾病
近期症状变化
正在使用的药物
在职业咨询场景中,更重要的可能是:
求职目标
城市偏好
项目经历
当前面试进展
职业选择标准
一个固定的通用检索器,未必能够自动适应这些差异。
传统解决方案是使用标注数据训练专门的 Retriever,但长期个性化场景中的用户级检索标注非常昂贵,也很难持续收集。
RMM 因此希望实现:
不依赖额外人工标注,而是利用 LLM 回答时自然产生的引用归因信号,持续改进检索结果。
三、相关工作
论文主要从两个方向梳理了相关研究:
- 大模型的长期会话;
- 基于记忆的个性化对话 Agent。
1. 大模型的长期会话
现有长上下文方法大致可以分为两类。
模型结构层面的改进
例如:
- 扩展注意力机制;
- 压缩或优化 KV Cache;
- 改进位置编码;
- 设计支持更长输入的模型结构。
这些方法可以提高模型能够直接处理的上下文长度,但通常需要访问模型内部结构。
因此,对于仅通过 API 使用的闭源模型,这类方法不容易直接采用。
基于总结或外部记忆的方法
另一类方法会将历史对话:
- 总结成事件;
- 压缩成用户画像;
- 存入外部记忆库;
- 在当前对话中检索相关历史。
RMM 属于这一方向,但它进一步指出:
仅仅进行总结还不够,还要解决记忆粒度固定和检索策略固定的问题。
2. 基于记忆的个性化对话 Agent
MemoryBank 使用对话总结和轮次信息构建长期记忆,并引入受艾宾浩斯遗忘曲线启发的记忆更新机制。
LD-Agent 使用长期、短期记忆库以及关键词匹配等方式管理对话历史。
Theanine 则将记忆按照时间和因果关系连接成 Timeline,以保留用户状态的变化过程。
这些方法提升了长期个性化能力,但通常仍然依赖:
预先定义的记忆粒度
+
固定的检索规则或 Retriever
RMM 的不同之处在于:
- 写入端根据语义主题动态确定粒度;
- 召回端根据 LLM 的实际引用情况在线更新重排器。
需要注意的是,这篇论文中的“Reflection”与 Reflexion 中对任务失败进行语言反思并不完全相同。
RMM 的反思主要指:
Prospective Reflection:
为了未来召回,重新组织当前历史。
Retrospective Reflection:
根据刚刚生成回答时的记忆使用情况,反过来优化检索。
四、问题定义
论文考虑的是多 Session 个性化对话场景。
一个用户会与 Agent 进行多次独立会话。每个 Session 中又包含多个 Turn,每个 Turn 由用户问题和 Agent 回答组成。
系统包含:
- 当前用户查询 q q q;
- 当前 Session 中已经出现的消息 S S S;
- 外部记忆库 B B B;
- Retriever f θ f_\theta fθ;
- Reranker g ϕ g_\phi gϕ;
- 用于生成回答的 LLM。
首先,Retriever 从记忆库中召回 Top-K 候选记忆:
M K = f θ ( q , B ) M_K=f_\theta(q,B) MK=fθ(q,B)
其中:
- q q q 是当前用户查询;
- B B B 是外部记忆库;
- M K M_K MK 是 Retriever 返回的 K 条候选记忆。
然后,Reranker 从 K 条候选中进一步选择 Top-M:
M M = g ϕ ( q , M K ) M_M=g_\phi(q,M_K) MM=gϕ(q,MK)
其中:
- g ϕ g_\phi gϕ 是参数为 ϕ \phi ϕ 的轻量级重排器;
- M M M_M MM 是最终送入 LLM 的 M 条记忆;
- 一般有 M < K M<K M<K。
LLM 综合当前查询、Session 上下文和记忆生成回答:
a , R M = LLM ( q , S , M M ) a,R_M=\operatorname{LLM}(q,S,M_M) a,RM=LLM(q,S,MM)
其中:
- a a a 是最终回答;
- R M R_M RM 表示 LLM 对各条记忆生成的引用归因结果。
系统需要解决两个问题。
1. 应该向记忆库写入什么?
Session 中可能包含大量闲聊和重复内容。
系统需要主动找出:
- 哪些信息值得长期保存;
- 哪些信息属于同一个主题;
- 哪些新信息应该与旧记忆合并。
2. 应该从记忆库召回什么?
检索过少可能遗漏重要历史,检索过多又可能引入噪声。
系统需要在:
完整保存
与:
精确召回
之间取得平衡。
五、RMM 框架总览
RMM 包含四个主要组件:
- Memory Bank;
- Retriever;
- Reranker;
- LLM Generator。
其完整流程可以概括为:
当前用户问题
↓
Retriever 从记忆库召回 Top-K
↓
Reranker 选择 Top-M
↓
LLM 结合当前 Session 和记忆生成回答
↓
LLM 同时标记回答引用了哪些记忆
↓
引用结果作为奖励更新 Reranker
↓
Session 结束
↓
按主题抽取当前 Session 中的记忆
↓
将新主题记忆添加或合并到 Memory Bank
整个流程实际上包含两个时间方向。
1. 面向未来:Prospective Reflection
在一个 Session 结束后,对刚刚发生的对话进行分解和总结。
它考虑的是:
为了让未来的查询更容易找到这些信息,现在应该怎样组织记忆?
2. 回看过去:Retrospective Reflection
在当前回答生成后,检查模型实际使用了哪些召回结果。
它考虑的是:
刚才召回的记忆中,哪些真正帮助了回答,哪些只是无用噪声?
两种反思组成了一个持续闭环:
整理记忆
→ 召回记忆
→ 使用记忆
→ 评价记忆
→ 优化召回
→ 继续整理新记忆
六、Prospective Reflection:基于主题的记忆组织
Prospective Reflection 可以翻译为“前瞻性反思”。
所谓“前瞻”,是指系统在 Session 结束后,不只是压缩过去的内容,而是考虑:
这些内容将来以什么形式保存,才更容易被准确召回?
论文 Figure 2 展示了该过程。

图源:Tan et al., 2025,Figure 2。
每条记忆由一对内容组成:
Topic Summary
+
Raw Dialogue
其中:
Topic Summary是主题摘要,作为主要检索键;Raw Dialogue保存该主题对应的原始对话片段。
这样的设计兼顾了:
摘要:
适合高效语义检索。
原始对话:
保留完整证据和表达细节。
1. 什么是 Topic?
论文中的 Topic 指一个语义连贯的讨论单元。
它既可以是细粒度意图:
询问纯素食谱
也可以是较宽泛主题:
旅行规划
一个 Topic 可以跨越一个或多个 Turn,并不受固定对话边界限制。
2. 第一步:Memory Extraction
一个 Session 结束后,系统让 LLM 分析完整对话,并按不同主题抽取:
- 主题摘要;
- 对应的原始 Turn 编号或对话片段。
例如,原始 Session 包含:
用户最近经常跑步;
因为经常下雨,用户在考虑去健身房;
用户对鸡蛋过敏;
用户是一名本科生。
系统可能生成:
{
"summary": "用户经常跑步,并因为天气原因考虑去附近的健身房。",
"reference": [0, 1, 2]
}
{
"summary": "用户对鸡蛋过敏。",
"reference": [3]
}
{
"summary": "用户目前是一名本科生。",
"reference": [4]
}
这里不是把整个 Session 压缩成一条总摘要,而是根据语义拆成多个相对完整的主题记忆。
3. 第二步:Memory Update
对于每条新抽取的记忆,系统先从现有 Memory Bank 中检索 Top-K 条语义相似的旧记忆。
然后,LLM 在两种操作中作出选择:
Add
如果新记忆属于一个此前没有出现过的新主题,就直接加入记忆库。
例如:
旧记忆库没有记录用户过敏史。
新记忆:
用户对鸡蛋过敏。
操作:
Add。
Merge
如果新记忆是在补充或更新已有主题,就与旧记忆合并。
例如:
旧记忆:
用户喜欢徒步。
新记忆:
用户最近也开始跑步,并计划参加越野活动。
合并后:
用户喜欢徒步和跑步,并计划参加越野活动。
最终,Memory Bank 中同一主题的相关信息被逐步整合,而不是不断堆积成相互割裂的文本片段。
4. 为什么不直接保存整个 Session?
假设一个 Session 包含:
用户讨论了跑步;
用户询问了工作面试;
用户提到对鸡蛋过敏。
整个 Session 作为记忆时,查询“用户有什么过敏史”会同时返回运动和面试信息。
主题分解后则变成:
主题一:运动习惯
主题二:求职准备
主题三:过敏史
这样能够降低记忆内部的噪声。
5. 为什么不只保存主题摘要?
摘要可能丢失:
- 时间信息;
- 语气;
- 条件限制;
- 因果关系;
- 具体说法。
例如:
用户说:
如果未来工作地点在北京,我可以接受较长通勤;如果在上海,我更倾向住在公司附近。
如果只总结成:
用户关心通勤距离。
就会丢失重要条件。
因此,RMM 同时保存主题摘要和原始对话,使系统可以先用摘要检索,再将原始证据提供给生成模型。
七、Retrospective Reflection:通过 LLM 归因优化召回
Retrospective Reflection 可以翻译为“回顾性反思”。
其核心问题是:
刚刚召回的 Top-M 条记忆中,哪些真正被 LLM 用于生成回答?
普通 RAG 在回答结束后不会继续利用这一信息。
RMM 则将其转化为在线强化学习奖励,用于持续更新 Reranker。
论文 Figure 3 展示了完整过程。

图源:Tan et al., 2025,Figure 3。
需要强调的是,论文这里使用的是 LLM Attribution,即 LLM 归因或引用信号,而不是“大模型属性”。
完整流程为:
Retriever 返回 Top-K
→ Reranker 选择 Top-M
→ LLM 生成回答并引用使用过的记忆
→ 被引用记忆奖励 +1
→ 未引用记忆奖励 -1
→ 使用 REINFORCE 更新 Reranker
八、Reranker 的设计
论文没有直接大规模微调 Retriever,而是在其后添加一个轻量级 Reranker。
原因是:
- Retriever 参数量可能较大;
- 用户级标注数据有限;
- 在线完整微调成本高;
- 小规模数据可能破坏 Retriever 原有能力;
- 轻量重排器更适合持续适应。
1. Embedding Adaptation
设当前查询的 embedding 为 q q q,第 i i i 条候选记忆的 embedding 为 m i m_i mi。
Reranker 首先通过带残差连接的线性变换进行适配:
q ′ = q + W q q , m i ′ = m i + W m m i q'=q+W_q q,\quad m_i'=m_i+W_m m_i q′=q+Wqq,mi′=mi+Wmmi
其中:
- W q W_q Wq 是查询 embedding 的变换矩阵;
- W m W_m Wm 是记忆 embedding 的变换矩阵;
- 残差连接保留原始 Retriever 的语义空间;
- 新增变换用于学习当前对话场景中的检索偏好。
之后,通过点积计算相关性:
s i = q ′ ⊤ m i ′ s_i={q'}^\top m_i' si=q′⊤mi′
其中, s i s_i si 是第 i i i 条记忆经过重排器计算的相关性分数。
直观来看:
原始 Retriever:
提供通用语义相关性。
Reranker:
在原始语义空间上进行小幅调整,
使排序逐渐适应当前任务和用户。
九、使用 Gumbel Trick 进行随机采样
如果每次都确定性地选择当前得分最高的记忆,系统很容易过早固定在已有策略上。
为了在强化学习中保留探索能力,论文使用 Gumbel Trick。
首先为每条候选记忆的分数加入 Gumbel 噪声:
s i ~ = s i + g i , g i = − log ( − log u i ) , u i ∼ U ( 0 , 1 ) \tilde{s_i}=s_i+g_i,\quad g_i=-\log(-\log u_i),\quad u_i\sim U(0,1) si~=si+gi,gi=−log(−logui),ui∼U(0,1)
其中:
- s i s_i si 是原始相关性分数;
- g i g_i gi 是 Gumbel 噪声;
- u i u_i ui 从 0 到 1 的均匀分布中采样;
- s i ~ \tilde{s_i} si~ 是加入探索噪声后的分数。
然后,通过 Softmax 得到采样概率:
p i = exp ( s i ~ / τ ) ∑ j = 1 K exp ( s j ~ / τ ) p_i=\frac{\exp(\tilde{s_i}/\tau)}{\sum_{j=1}^{K}\exp(\tilde{s_j}/\tau)} pi=∑j=1Kexp(sj~/τ)exp(si~/τ)
其中:
- K K K 是 Retriever 返回的候选数量;
- τ \tau τ 是温度参数;
- p i p_i pi 是第 i i i 条记忆被选择的概率。
温度越低:
分布越尖锐
→ 更倾向选择当前最高分记忆
→ 更偏向利用
温度越高:
分布越平滑
→ 更多低排名记忆有机会被选择
→ 更偏向探索
论文默认将温度设置为:
τ = 0.5
十、LLM 引用归因如何形成奖励?
高质量用户级检索标注很难获得。
RMM 的解决方案是让生成 LLM 在一次调用中同时输出:
- 最终回答;
- 回答使用了哪些记忆的引用信息。
例如,系统提供了三条记忆:
Memory 1:
用户对青霉素过敏。
Memory 2:
用户昨天发烧并持续咳嗽。
Memory 3:
用户喜欢周末徒步。
当前问题是:
我的发烧已经消退,但开始头痛,我应该注意什么?
如果最终回答使用了 Memory 1 和 Memory 2,而没有使用 Memory 3,则奖励为:
Memory 1:+1
Memory 2:+1
Memory 3:-1
论文将:
- 被引用的记忆视为 Useful;
- 未被引用的记忆视为 Not Useful。
这种设计的优势在于:
- 不需要额外人工逐条标注;
- 回答和引用可以在一次 LLM 调用中生成;
- 引用与最终回答联合生成,而不是事后再独立判断;
- 系统可以在实际对话过程中持续积累反馈。
需要注意的是,这里的奖励衡量的是:
该记忆是否被生成模型显式引用。
它并不一定完全等价于这条记忆对回答的真实因果贡献,这一点将在局限性中继续讨论。
十一、使用 REINFORCE 更新 Reranker
RMM 使用 REINFORCE 算法优化 Reranker:
Δ ϕ = η ( R − b ) ∇ ϕ log P ( M M ∣ q , M K ; ϕ ) \Delta\phi=\eta(R-b)\nabla_\phi\log P(M_M\mid q,M_K;\phi) Δϕ=η(R−b)∇ϕlogP(MM∣q,MK;ϕ)
其中:
- ϕ \phi ϕ 表示 Reranker 参数;
- η \eta η 表示学习率;
- R R R 表示引用奖励,取值为 +1 或 -1;
- b b b 是用于降低梯度方差的基线值;
- M K M_K MK 是 Retriever 返回的 K 条候选;
- M M M_M MM 是 Reranker 选出的 M 条记忆;
- P ( M M ∣ q , M K ; ϕ ) P(M_M\mid q,M_K;\phi) P(MM∣q,MK;ϕ) 表示当前策略选择这些记忆的概率。
如果奖励高于基线:
R - b > 0
系统会提高当前记忆选择行为的概率。
如果奖励低于基线:
R - b < 0
系统会降低类似选择在未来出现的概率。
论文使用的主要超参数包括:
| 参数 | 数值 |
|---|---|
| Batch Size | 4 |
| Top-K | 20 |
| Top-M | 5 |
| Gumbel Temperature | 0.5 |
| 正奖励 | +1 |
| 负奖励 | -1 |
| Baseline | 0.5 |
| Learning Rate | 1 × 10 − 3 1\times10^{-3} 1×10−3 |
因此,RMM 的学习对象不是生成 LLM,也不是完整 Retriever,而是中间的轻量级 Reranker。
十二、用一个完整例子理解 RMM
假设一个用户先后进行了三个 Session。
1. Session A
用户:
最近经常下雨,我很难在户外跑步,正在考虑买一台跑步机。
Prospective Reflection 提取:
Topic Summary:
用户因为天气原因难以户外跑步,正在考虑购买跑步机。
Raw Dialogue:
保存对应原始对话。
2. Session B
用户:
附近新开了一家健身房,我觉得去健身房可能比在家买跑步机更合适。
系统检索到 Session A 的主题记忆,并执行 Merge:
用户原本考虑购买跑步机,但在附近新健身房开业后,
更倾向于去健身房锻炼。
3. Session C
用户问:
你觉得我现在还需要买跑步机吗?
Retriever 可能返回:
Memory 1:
用户的跑步机和健身房选择。
Memory 2:
用户喜欢户外徒步。
Memory 3:
用户所在地区经常下雨。
Memory 4:
用户最近在准备面试。
Memory 5:
用户喜欢力量训练。
Reranker 从中选择 Top-M。
LLM 最终回答:
根据你之前的想法,你已经更倾向使用附近的新健身房,
而且那里也有跑步机,所以目前没有必要急着购买家用跑步机。
可以先使用一段时间,再根据到店频率决定。
回答可能引用:
Memory 1:+1
Memory 3:+1
Memory 5:+1
Memory 2:-1
Memory 4:-1
Reranker 根据这些奖励更新参数。
未来面对类似的运动选择问题时,它会更倾向于召回:
- 用户当前选择状态;
- 天气条件;
- 健身房设施和运动习惯;
而减少对求职等无关主题的召回。
这体现了 RMM 的完整闭环:
主题组织
→ 记忆合并
→ 候选召回
→ 动态重排
→ 回答引用
→ 在线学习
十三、实验设置
1. 生成模型
论文主要使用:
Gemini-1.5-Flash
作为生成模型,并在部分实验中比较:
Gemini-1.5-Pro
LLM 参数设置为:
Context Window:128k
Temperature:0.0
2. Retriever
论文使用三种 Dense Retriever:
Contriever
facebook/contriever
通过对比学习训练的通用语义检索模型,也是论文默认 Retriever。
Stella
dunzhang/stella_en_1.5B_v5
基于语言模型构建的大规模文本向量模型。
GTE
Alibaba-NLP/gte-Qwen2-7B-instruct
面向指令式查询训练的向量检索模型。
在没有 Reranker 的实验中:
Top-K = 5
加入 Reranker 后,默认设置为:
Retriever Top-K = 20
Reranker Top-M = 5
也就是先广泛召回 20 条候选,再精选 5 条送入生成模型。
十四、数据集与评测指标
论文使用两个长期个性化对话数据集:
- MSC;
- LongMemEval。
1. MSC
MSC 是一个多 Session 对话数据集。
论文关注的是:
模型能否利用此前多个 Session 中的历史信息,生成接近人工参考答案的个性化回复。
评测指标包括:
METEOR
主要衡量生成回答与参考回答之间的词汇匹配程度。
BERTScore
通过上下文语义表示衡量生成回答与参考答案的语义相似度。
论文按照已有工作构造实验数据,将前 1000 个 Session 作为聊天历史,其余部分用于评估。
2. LongMemEval
LongMemEval 专门评估长期对话记忆能力。
系统需要从很长的历史中找到特定个人信息,并回答人工设计的问题,例如:
Mary 去年夏天买了什么车?
用户先参加了哪一个活动?
用户当前的偏好和之前相比发生了什么变化?
评测指标包括:
Recall@K
判断系统是否从历史中召回了回答问题所需的 Ground-truth 对话片段。
Accuracy
使用 Gemini-1.5-Pro 作为 Judge,判断模型回答是否与人工 Ground-truth 一致。
十五、对比方法
论文比较了四类方法。
1. No History
不提供任何历史 Session,只依赖当前上下文回答。
它用于衡量:
如果没有长期记忆,模型能够做到什么程度?
2. Long Context
尽可能将历史对话直接放入 LLM 上下文。
如果超出上下文窗口,则截断更早的 Turn。
3. RAG
使用 Contriever、Stella 或 GTE 检索相关 Turn 或 Session,再将结果提供给 LLM。
论文默认使用 Turn 作为 RAG 的检索粒度,因为其整体表现更好。
4. 个性化对话 Agent
包括:
- MemoryBank;
- LD-Agent。
MemoryBank 使用对话摘要、轮次内容和遗忘曲线启发式机制。
LD-Agent 使用长期和短期记忆,并通过关键词等方法调节召回。
十六、主要实验结果
论文 Table 1 给出了主要结果,所有分数均为三次运行的平均值。
| 方法 | Retriever | MSC METEOR | MSC BERTScore | LongMemEval Recall@5 | LongMemEval Accuracy |
|---|---|---|---|---|---|
| No History | — | 5.2 | 10.6 | — | 0.0 |
| Long Context | — | 14.8 | 31.9 | — | 57.4 |
| RAG | Contriever | 24.8 | 50.8 | 54.3 | 58.8 |
| RAG | Stella | 26.2 | 51.6 | 59.2 | 61.4 |
| RAG | GTE | 27.5 | 52.1 | 62.4 | 63.6 |
| MemoryBank | 特定检索策略 | 20.1 | 40.3 | 58.6 | 59.6 |
| LD-Agent | 特定检索策略 | 25.4 | 51.5 | 56.8 | 59.2 |
| RMM | Contriever | 30.8 | 55.4 | 60.4 | 61.2 |
| RMM | Stella | 31.9 | 56.3 | 65.9 | 64.8 |
| RMM | GTE | 33.4 | 57.1 | 69.8 | 70.4 |
| RAG Oracle | — | — | — | 100.0 | 90.2 |
表源:Tan et al., 2025,Table 1。表中数值均为百分数。
1. 历史信息非常重要
不使用历史时:
MSC METEOR:5.2%
LongMemEval Accuracy:0.0%
尤其是 LongMemEval 中的问题本来就是围绕历史信息设计的,没有历史记录几乎无法回答。
2. 长上下文并不能代替记忆管理
Long Context 在 LongMemEval 上达到:
57.4%
虽然明显优于完全没有历史,但仍然低于 GTE-RAG 的 63.6% 和 GTE-RMM 的 70.4%。
在 MSC 上,Long Context 的 METEOR 只有:
14.8%
远低于 RMM 的 33.4%。
这说明完整历史中包含大量无关内容,模型并不一定能自动定位和利用关键信息。
历史信息更多
≠
有效信息更多
3. RAG 明显优于直接输入长上下文
以 GTE 为例:
MSC METEOR:
14.8% → 27.5%
LongMemEval Accuracy:
57.4% → 63.6%
说明先检索再生成能够减少历史噪声。
同时,不同 Retriever 的结果差异明显:
Contriever < Stella < GTE
这表明基础 Retriever 的质量仍然非常重要。
4. 基于启发式规则的对话 Agent 并未领先强 RAG
MemoryBank 和 LD-Agent 虽然比 Long Context 在部分指标上更好,但整体低于使用强 Retriever 的 RAG。
例如 LongMemEval Accuracy:
MemoryBank:59.6%
LD-Agent:59.2%
GTE-RAG:63.6%
论文认为,固定启发式策略限制了这些方法对复杂检索需求的适应能力。
5. RMM 在所有 Retriever 上都带来稳定提升
使用同一 Retriever 比较:
Contriever
RAG → RMM
METEOR:24.8 → 30.8
BERTScore:50.8 → 55.4
Recall@5:54.3 → 60.4
Accuracy:58.8 → 61.2
Stella
METEOR:26.2 → 31.9
BERTScore:51.6 → 56.3
Recall@5:59.2 → 65.9
Accuracy:61.4 → 64.8
GTE
METEOR:27.5 → 33.4
BERTScore:52.1 → 57.1
Recall@5:62.4 → 69.8
Accuracy:63.6 → 70.4
这说明 RMM 并不是依赖某一个特定 Retriever 才有效,而是能够作为一个通用的记忆组织和重排层。
6. 与 Long Context 相比提升超过 10 个百分点
在 LongMemEval 上:
Long Context:57.4%
GTE-RMM:70.4%
绝对提升为:
13.0 个百分点
7. Oracle 结果说明仍有较大改进空间
Oracle Retriever 能够直接召回 Ground-truth 历史片段,其 Recall 为 100%,最终 Accuracy 达到 90.2%。
而 GTE-RMM 的 Accuracy 为 70.4%。
这说明当前系统仍有两类瓶颈:
检索瓶颈:
没有召回全部正确证据。
生成与推理瓶颈:
即使给出正确证据,模型也不一定能完全答对。
8. 记忆在多少样本上真正改善了回答?
论文还统计了记忆使回答质量提高的样本比例:
MSC:86%
LongMemEval:100%
LongMemEval 本身专门测试历史记忆,因此所有样本都能从记忆中获益。
十七、消融实验
论文 Table 2 分析了 Prospective Reflection、Retrospective Reflection 和 Reranker 的作用。
| 方法 | MSC METEOR | MSC BERTScore | LongMemEval Recall@5 | LongMemEval Accuracy |
|---|---|---|---|---|
| RAG | 24.8 | 50.8 | 54.3 | 58.8 |
| + PR | 28.6 | 53.3 | 57.4 | 59.6 |
| + RR,直接微调 Retriever | 20.3 | 31.8 | 34.2 | 31.0 |
| + RR,使用 Reranker | 27.5 | 52.2 | 58.8 | 60.2 |
| 完整 RMM | 30.8 | 55.4 | 60.4 | 61.2 |
表源:Tan et al., 2025,Table 2。实验使用 Contriever 和 Gemini-1.5-Flash。
1. Prospective Reflection 单独有效
加入 PR 后:
METEOR:24.8 → 28.6
Recall@5:54.3 → 57.4
说明主题化组织能够:
- 合并碎片信息;
- 降低冗余;
- 提供语义更完整的检索单位。
2. 直接在线微调 Retriever 会严重下降
如果不用轻量 Reranker,而是直接使用 RL 奖励更新 Retriever:
LongMemEval Accuracy:58.8 → 31.0
性能出现大幅下降。
论文认为,完整 Retriever 需要大量数据才能稳定训练,而个性化长期对话中的在线反馈较少。
在少量数据上直接调整 Retriever,可能造成:
- 原始语义空间被破坏;
- 训练不稳定;
- 灾难性遗忘;
- 新用户反馈过度影响全局检索能力。
3. 轻量 Reranker 是在线适应的关键
引入独立 Reranker 后:
Recall@5:54.3 → 58.8
Accuracy:58.8 → 60.2
它在保留 Retriever 通用能力的同时,提供了一个较小、较容易在线更新的适应层。
4. 两种反思相互补充
完整 RMM 的结果最好:
PR:
改善记忆的组织形式。
RR:
改善记忆的召回排序。
这说明只优化写入或只优化召回都不够。
十八、引用奖励是否可靠?
RMM 的在线学习依赖一个关键假设:
LLM 输出的引用能够较准确地反映一条记忆是否真正有用。
论文使用 Gemini-1.5-Pro 作为 Judge,在 LongMemEval 上验证引用标签。
| 类别 | Precision | Recall | F1 |
|---|---|---|---|
| Useful Memory | 89.4 | 91.1 | 90.2 |
| Not Useful Memory | 87.2 | 84.6 | 85.9 |
| Overall | 87.6 | 85.8 | 86.7 |
表源:Tan et al., 2025,Table 3。
对于 Useful Memory:
Precision:89.4%
Recall:91.1%
F1:90.2%
说明引用信号具有较高准确性,可以作为低成本的弱监督奖励。
但它并不是完全可靠的人工真值。
整体 F1 仍然只有:
86.7%
因此,在线学习中仍然会存在一定比例的奖励噪声。
十九、不同生成 LLM 的影响
论文比较了 Gemini-1.5-Flash 和 Gemini-1.5-Pro。
| 方法 | LLM | MSC METEOR | MSC BERTScore | LongMemEval Accuracy |
|---|---|---|---|---|
| Long Context | Gemini-1.5-Flash | 14.8 | 31.9 | 57.4 |
| Long Context | Gemini-1.5-Pro | 17.4 | 36.1 | 56.6 |
| RMM | Gemini-1.5-Flash | 30.8 | 55.4 | 61.2 |
| RMM | Gemini-1.5-Pro | 24.6 | 50.6 | 58.6 |
表源:Tan et al., 2025,Table 4。Retriever 为 Contriever。
1. Long Context 下,Pro 在 MSC 上更好
在不使用 RMM 时,Gemini-1.5-Pro 的:
- METEOR;
- BERTScore;
都高于 Gemini-1.5-Flash。
说明更强的模型在直接处理长上下文时具有一定优势。
2. RMM 下,Flash 反而表现更好
加入 RMM 后,Gemini-1.5-Flash 在三个指标上都高于 Gemini-1.5-Pro。
论文认为,一个可能原因是:
更强、对齐程度更高的模型,在涉及个人信息的问题上可能更容易拒答或保持谨慎,从而降低个性化问答得分。
这只是作者对实验现象的解释,并不意味着较强模型通常都不适合记忆系统。
它反而说明:
记忆系统效果不仅受 Retriever 影响,也受生成模型的隐私对齐和回答策略影响。
二十、不同记忆粒度的影响
论文在 LongMemEval 的 100 个随机样本上比较了五种粒度:
- Turn;
- Session;
- Mix;
- PR;
- Best。
其中:
Turn:每个 Turn 作为检索单元;Session:每个完整 Session 作为检索单元;Mix:同时从 Turn 和 Session 池中检索;PR:Prospective Reflection 生成的主题粒度;Best:对每个样本事先选择 Turn 或 Session 中表现更好的一个,是一种 Oracle 设置。

图源:Tan et al., 2025,Figure 4。
| 粒度 | Recall@5 | Accuracy |
|---|---|---|
| Turn | 47 | 29 |
| Session | 69 | 34 |
| Mix | 38 | 17 |
| PR | 78 | 49 |
| Best Oracle | 86 | 58 |
1. Session 优于 Turn
Session 包含更完整的上下文,因此 Recall 为:
69% vs 47%
但是,其 Accuracy 只从 29% 提升到 34%,说明更大粒度也会带入更多无关信息。
2. 简单混合两种粒度效果最差
Mix 的结果为:
Recall@5:38%
Accuracy:17%
这说明把 Turn 和 Session 全部放进同一个检索池,并不会自动获得两者优势。
相反,更大的候选空间可能增加噪声,使相似度排序更加困难。
3. Prospective Reflection 接近 Oracle 粒度
PR 达到:
Recall@5:78%
Accuracy:49%
虽然低于 Oracle 的 86% 和 58%,但明显优于固定粒度。
它说明:
根据对话语义动态形成主题,是逼近“每个问题都使用最佳记忆粒度”的一种可实现方案。
二十一、离线监督训练的作用
RMM 主要强调不依赖大量标注数据的在线优化。
但如果系统能够获得少量人工检索标签,也可以先进行离线监督训练,再在线强化学习。
论文使用 GTE Retriever,在 LongMemEval 中随机抽取 100 条作为测试集,其余作为训练和验证数据。

图源:Tan et al., 2025,Figure 5。
离线训练后,不同粒度的 Recall 分别提升:
Turn:+7
Session:+8
Mix:+11
PR:+7
Best:+5
Accuracy 分别提升:
Turn:+3
Session:+4
Mix:+6
PR:+6
Best:+2
这表明 RMM 并不排斥监督训练。
更合理的部署方式可以是:
离线监督训练:
提供较好的通用冷启动能力。
在线 Retrospective Reflection:
继续适应具体领域和用户。
二十二、Top-K 和 Top-M 的影响
论文比较了两种配置:
配置一:
Retriever Top-K = 20
Reranker Top-M = 5
配置二:
Retriever Top-K = 50
Reranker Top-M = 10
| Retriever | Recall@5 | Accuracy | Recall@10 | Accuracy |
|---|---|---|---|---|
| Contriever | 60.4 | 61.2 | 67.2 | 66.8 |
| Stella | 65.9 | 64.8 | 70.6 | 71.0 |
| GTE | 69.8 | 70.4 | 74.4 | 73.8 |
表源:Tan et al., 2025,Table 5。
在论文测试的范围内,增加候选和最终记忆数量能够提升结果。
以 GTE 为例:
Recall:69.8 → 74.4
Accuracy:70.4 → 73.8
但不能据此推断记忆数量越多越好。
论文只比较了两组配置,而且加入过多记忆仍可能:
- 增加上下文成本;
- 引入重复信息;
- 干扰生成模型;
- 降低在线延迟。
更准确的结论是:
当基础 Retriever 较强、Reranker 能有效过滤候选时,适当扩大候选池可以减少遗漏。
二十三、LLM-as-a-Judge 和人工评估
论文还在 MSC 上使用 Gemini-1.5-Pro 作为 Judge,判断模型回答是否与 Ground-truth 匹配。
| 方法 | LLM | METEOR | BERTScore | LLM Judge Yes |
|---|---|---|---|---|
| Long Context | Gemini-1.5-Flash | 14.8 | 31.9 | 25.4 |
| Long Context | Gemini-1.5-Pro | 17.4 | 36.1 | 22.8 |
| RMM | Gemini-1.5-Flash | 30.8 | 55.4 | 69.7 |
| RMM | Gemini-1.5-Pro | 24.6 | 50.6 | 65.4 |
表源:Tan et al., 2025,Table 6。
使用 Gemini-1.5-Flash 时:
Long Context:25.4%
RMM:69.7%
说明 RMM 的优势并不只体现在词汇重合指标中,在 LLM 语义判断下同样明显。
1. LLM Judge 是否可信?
论文从 MSC 中随机抽取 100 个样本,由两名 NLP 研究人员独立判断。
| 比较对象 | Cohen’s Kappa |
|---|---|
| Human A vs. Human B | 0.82 |
| LLM vs. Human A | 0.71 |
| LLM vs. Human B | 0.69 |
表源:Tan et al., 2025,Table 7。
两名人工标注者之间的一致性为:
κ = 0.82
LLM 与两名人工标注者之间分别为:
κ = 0.71
κ = 0.69
说明 LLM Judge 与人工判断有较高一致性,但仍不能完全代替人工评估。
二十四、在线强化学习是否逐渐收敛?
论文附录 Figure 6 展示了随着 RL 训练进行,被 LLM 引用的 Useful Memory 比例变化。

图源:Tan et al., 2025,Figure 6。
初始阶段,Useful Memory 比例大约为:
0.2
经过约 1000 个训练 Step 后,提高并逐渐稳定在:
0.4
这说明 Reranker 确实逐渐学会将生成模型会使用的记忆排在前面。
但这个结果也反映出一个问题:
即使训练收敛,最终被选择的记忆中也只有约 40% 被显式引用。
因此,当前重排结果仍包含较多未被使用的候选记忆,还有明显优化空间。
二十五、RMM 的优势
1. 同时改进写入与召回
很多记忆方法只优化其中一个环节。
RMM 同时考虑:
如何形成适合未来检索的记忆
+
如何根据实际使用情况持续优化召回
2. 记忆粒度由语义决定
它不再强制使用:
- 固定 Turn;
- 固定 Session;
- 固定长度 Chunk。
而是根据对话中的语义主题形成记忆单元。
3. 同时保存摘要和原始证据
Topic Summary 适合检索,Raw Dialogue 适合保留完整上下文和事实来源。
4. 不需要大量人工检索标签
RMM 使用 LLM 回答时的引用归因作为弱监督信号。
这使系统能够在真实交互中持续收集训练反馈。
5. 只更新轻量 Reranker
基础 Retriever 和生成 LLM 可以保持冻结。
相较于完整微调 Retriever:
- 成本更低;
- 更容易部署;
- 更适合少量用户级反馈;
- 降低破坏原始能力的风险。
6. 能与多种 Retriever 结合
Contriever、Stella 和 GTE 上都取得了稳定提升,说明其框架具有一定通用性。
7. 支持离线训练与在线适应结合
可以先用少量标注数据完成冷启动,再通过用户交互持续优化。
二十六、RMM 的局限性
1. 在线强化学习仍然存在计算成本
论文明确指出,持续训练 Reranker 会带来额外开销。
在大规模用户场景中,需要考虑:
- 是否为每个用户维护独立 Reranker;
- 多久更新一次;
- 如何批量处理在线反馈;
- 如何保存和部署大量个性化参数;
- 在线更新是否影响响应延迟。
2. 当前主要处理文本记忆
RMM 尚未覆盖:
- 图片;
- 音频;
- 视频;
- 多模态用户行为。
对于语音助手或多模态 Agent,仅保存文本主题可能无法完整表示用户交互。
3. Memory Update 只有 Add 和 Merge
论文中的主题记忆更新主要包含:
Add
Merge
但长期运行还可能需要:
- Split:一个主题逐渐分裂成不同主题;
- Delete:删除错误或用户要求忘记的信息;
- Invalidate:标记旧信息已经失效;
- Version:保留主题状态变化;
- Conflict:处理相互矛盾的用户陈述。
如果只进行 Add 和 Merge,记忆摘要可能不断增长,或者把不同时期的冲突信息压缩在一起。
4. 引用不完全等于真实贡献
这一点属于基于方法设计的进一步分析。
一条记忆没有被显式引用,不代表它完全没有作用。它可能:
- 帮助模型理解背景;
- 改变回答语气;
- 辅助模型排除某个选项;
- 与另一条记忆共同产生作用。
反过来,一条被引用的记忆也可能只是模型事后生成了引用,并不一定真正导致回答变好。
因此:
Citation
≈
低成本的记忆使用代理信号
Citation
≠
严格的因果贡献
5. 二元奖励过于粗糙
当前只有:
引用:+1
未引用:-1
它无法区分:
- 核心证据;
- 辅助信息;
- 部分有用;
- 重复但正确;
- 与回答冲突;
- 被错误引用。
未来可以引入更细粒度奖励,例如:
核心证据:+1.0
辅助证据:+0.5
重复信息:0
无关信息:-0.5
错误或冲突信息:-1.0
6. 主题抽取和合并依赖 LLM
LLM 可能出现:
- 漏掉重要主题;
- 错误拆分主题;
- 将不相关信息合并;
- 生成过于宽泛的摘要;
- 丢失时间和条件约束;
- 错误更新用户状态。
一旦摘要出错,后续 Retriever 和 Reranker 都只能基于错误记忆工作。
7. 个性化在线训练存在数据稀疏问题
一个新用户可能只有少量 Session。
此时,在线 RL 奖励不足以训练稳定的个性化 Reranker。
论文的离线监督实验说明,实际部署可能仍然需要:
通用离线模型
+
领域级适应
+
用户级轻量在线更新
8. 用户信息涉及隐私风险
长期记忆可能保存:
- 健康信息;
- 工作经历;
- 家庭关系;
- 兴趣偏好;
- 行程安排;
- 个人身份信息。
论文提出未来应探索:
- 数据加密;
- 差分隐私;
- 联邦学习;
- 明确用户授权;
- 透明的数据使用政策。
此外,实际系统还应该支持:
查看记忆
修改记忆
删除记忆
关闭记忆
设置记忆有效期
二十七、RMM 和 MemRL 的区别
RMM 和刚刚阅读的 MemRL 都使用反馈优化记忆选择,但它们并不是同一种方法。
| 维度 | RMM | MemRL |
|---|---|---|
| 主要场景 | 长期个性化对话 | 代码、工具调用和环境任务 |
| 记忆类型 | 用户主题与原始对话 | Intent-Experience-Utility 经验 |
| 反馈来源 | LLM 是否引用记忆 | 环境任务奖励 |
| 学习对象 | 轻量级 Reranker 参数 | 每条经验的 Q 值 |
| 是否更新参数 | 更新 Reranker 参数 | 不更新模型参数 |
| 核心目标 | 让召回结果更符合生成模型需求 | 选择历史上任务效用更高的经验 |
可以简单理解为:
RMM:
哪些用户记忆会被当前回答使用?
MemRL:
哪些历史经验能够提高任务成功率?
RMM 的反馈更容易获得,但引用信号相对间接。
MemRL 的环境奖励更接近最终任务结果,但只适用于具有明确成功标准的场景。
二十八、RMM 和 Mem0、Zep、A-Mem 的区别
| 方法 | 主要表示 | 核心关注点 |
|---|---|---|
| Mem0 | 自然语言事实 | 事实如何新增、更新和删除 |
| Zep | 双时间知识图谱 | 实体关系和历史状态如何变化 |
| A-Mem | 动态链接的记忆卡片 | 记忆如何关联和自进化 |
| RMM | 主题摘要与原始对话 | 如何形成合适粒度并在线优化召回 |
1. RMM 和 Mem0
Mem0 主要围绕事实进行操作:
用户喜欢跑步。
用户现在住在上海。
用户准备参加秋招。
RMM 的记忆更接近完整主题:
用户近期的运动方式选择:
由于天气影响,用户从考虑购买跑步机逐渐转向使用附近健身房。
Mem0 更适合维护原子事实。
RMM 更适合保留一个话题中的上下文和演变过程。
2. RMM 和 Zep
Zep 使用实体、关系和时间字段显式构建图:
用户 --LIVES_IN--> 北京
用户 --LIVES_IN--> 上海
RMM 不构建正式知识图,而是以自然语言主题摘要组织记忆。
因此:
Zep:
结构更明确,关系和时间推理能力更强。
RMM:
结构更轻量,更适合开放式对话主题。
3. RMM 和 A-Mem
A-Mem 强调记忆节点之间自动建立链接,并通过新信息更新已有节点属性。
RMM 则重点解决:
- 记忆粒度;
- Retriever 结果的在线适应。
二者可以组合:
RMM 负责形成主题记忆;
A-Mem 负责在主题之间建立关联;
RMM Reranker 再根据使用反馈优化召回。
二十九、我的理解和启发
这篇论文给我的最大启发是:
记忆系统的“反思”不仅可以发生在任务执行失败后,也可以发生在记忆写入前和回答生成后。
1. 记忆粒度不应该完全固定
自己目前的记忆系统主要以一条结构化 Memory 为基本单位。
但真实对话中可能同时存在三种情况:
一句话就能表达完整事实;
多个 Turn 才能形成完整主题;
同一主题跨越多个 Session 持续变化。
因此,可以采用动态记忆粒度:
原子事实:
适合明确、独立的信息。
主题记忆:
适合多个相关事实和上下文。
事件记忆:
适合包含时间演变的完整经历。
2. 保存摘要时必须保留来源
可以将记忆结构改为:
{
"topic": "秋招与实习选择",
"summary": "用户计划先集中准备项目和算法,再开始投递实习,并优先考虑北京岗位。",
"source_message_ids": ["m102", "m118", "m132"],
"raw_dialogue_path": "memory/dialogue/session_12.json",
"created_at": "2026-07-17",
"updated_at": "2026-07-17"
}
这样既能使用 Summary 检索,也能回溯原始对话。
3. 记忆更新不能只有相似度判断
在决定是否 Merge 时,还应该考虑:
- 是否是同一主题;
- 新旧信息是否冲突;
- 是否描述不同时间状态;
- 是否需要保留历史;
- 是否应该拆分为子主题。
例如:
旧记忆:
用户倾向去上海实习。
新记忆:
用户决定优先留在北京准备秋招。
不能简单合并成:
用户倾向在上海和北京发展。
更合理的是:
历史状态:
曾考虑上海实习。
当前状态:
现阶段优先留在北京准备秋招。
4. 两阶段召回值得借鉴
可以把现有检索流程设计为:
第一阶段:
BM25 + 向量检索获得 Top-20。
第二阶段:
轻量 Reranker 或 Cross-Encoder 选 Top-5。
第三阶段:
LLM 只读取最终结果。
这样既保留较高召回率,也控制最终上下文噪声。
5. 输出记忆引用可以形成闭环
可以要求 Agent 在内部结构化输出中标记:
{
"answer": "……",
"used_memory_ids": ["mem_12", "mem_37"],
"memory_roles": {
"mem_12": "core_evidence",
"mem_37": "supporting_context"
}
}
任务结束后,根据这些字段更新:
usage_count
citation_count
last_used_at
utility_score
不过,不应该只依赖模型自报引用,还可以结合:
- 最终任务是否成功;
- 用户是否接受回答;
- 引用内容与回答之间的文本蕴含关系;
- 删除该记忆后回答是否发生明显变化。
6. 可以采用离线和在线两级优化
对于自己的 Agent 项目,可以先利用已有评测数据离线训练通用 Reranker。
上线后再使用:
- 工具执行结果;
- 自动测试;
- 用户反馈;
- LLM 引用;
进行轻量更新。
即:
离线学习通用相关性
+
在线学习当前用户和任务偏好
7. 不同记忆类型需要不同反馈
事实记忆、经验记忆和主题记忆的价值判断方式不同。
事实记忆
应关注:
是否正确
是否仍然有效
是否与用户有关
经验记忆
应关注:
是否提高任务成功率
是否能迁移到相似任务
主题记忆
应关注:
是否帮助形成连贯、个性化的回答
是否被当前回答使用
因此,可以分别借鉴:
Mem0:
管理事实生命周期。
MemRL:
学习经验任务效用。
RMM:
学习主题记忆的回答效用。
8. RMM 可以和现有方法组合
结合此前阅读的论文,可以形成一套更完整的记忆架构:
GAM:
使用缓冲区和语义边界控制什么时候固化。
RMM Prospective Reflection:
按主题组织固化后的对话。
Mem0:
维护其中的原子事实及其增删改。
Zep:
对关系密集、时间敏感的信息建立时序图。
A-Mem:
建立主题和事实之间的动态链接。
RMM Retrospective Reflection:
根据回答中的实际使用情况优化召回。
MemRL:
根据环境成功率优化程序性经验。
这说明不同 Agent Memory 方法并不一定互相替代,而是可以作用于不同生命周期阶段。
三十、可以如何改造自己的 Agent 项目?
结合 RMM,可以将当前记忆流程改为以下结构。
1. Session 结束时进行主题抽取
完整 Session
→ LLM 识别不同主题
→ 每个主题生成 Summary
→ 绑定原始 Message ID
2. 对每条主题记忆执行更新判断
建议不只支持 Add 和 Merge,而是扩展为:
ADD
MERGE
UPDATE
SPLIT
INVALIDATE
NOOP
3. 建立两阶段召回
Query
→ BM25 + Vector Top-20
→ Reranker Top-5
→ 多跳扩展或相邻记忆补充
4. 生成回答时要求内部引用
回答
+
used_memory_ids
+
每条记忆的作用
5. 综合多个信号更新记忆价值
可以定义:
U = w 1 C + w 2 S + w 3 F + w 4 R U=w_1C+w_2S+w_3F+w_4R U=w1C+w2S+w3F+w4R
其中:
- C C C:记忆是否被引用;
- S S S:任务是否成功;
- F F F:用户反馈;
- R R R:记忆与回答的相关性;
- w 1 w_1 w1 到 w 4 w_4 w4:不同信号权重。
相比单纯的 +1/-1 引用奖励,这种方式能更全面地估计记忆价值。
6. 设置记忆治理机制
长期运行还需要:
低价值记忆压缩;
重复主题合并;
过期记忆失效;
敏感记忆加密;
用户主动删除;
周期性重新构建索引。
三十一、总结
本文提出了 Reflective Memory Management,RMM,用于改善长期个性化对话 Agent 的记忆组织和召回能力。
论文指出,现有方法主要存在两个问题:
- 固定的记忆粒度无法匹配对话中的自然语义主题;
- 固定 Retriever 无法适应不同领域和用户的检索需求。
为此,RMM 提出了两种相互补充的反思机制。
1. Prospective Reflection
在 Session 结束后,系统:
- 按语义主题分解对话;
- 为每个主题生成 Summary;
- 保留对应 Raw Dialogue;
- 将新主题直接添加;
- 将相关主题与已有记忆合并。
它解决的是:
为了未来更容易检索,现在应该如何组织记忆?
2. Retrospective Reflection
在回答生成后,系统:
- 检查 LLM 引用了哪些召回记忆;
- 为被引用记忆分配 +1;
- 为未引用记忆分配 -1;
- 使用 REINFORCE 在线更新轻量 Reranker。
它解决的是:
刚才召回的记忆哪些真正被使用,未来应该如何调整排序?
实验结果表明:
- RMM 在 Contriever、Stella 和 GTE 上均能带来稳定提升;
- GTE-RMM 在 MSC 上达到 33.4% METEOR 和 57.1% BERTScore;
- 在 LongMemEval 上达到 69.8% Recall@5 和 70.4% Accuracy;
- 相比 Long Context,LongMemEval Accuracy 提升 13.0 个百分点;
- 主题粒度明显优于固定 Turn、Session 和简单混合粒度;
- LLM 引用信号识别 Useful Memory 的 F1 达到 90.2%;
- 在线 RL 训练使 Useful Memory 比例从约 0.2 提升至约 0.4;
- 离线监督训练可以与在线优化进一步结合。
RMM 的核心价值不只是增加了一个 Reranker,而是构建了一个记忆闭环:
面向未来组织记忆
→ 面向当前召回记忆
→ 回顾回答中的实际使用
→ 根据反馈继续改进召回
它代表了 Agent Memory 的一个重要发展方向:
记忆系统不应只是被动保存和静态检索历史,而应该根据未来需求组织信息,并根据实际使用结果持续学习。
参考资料
- Tan Z, Yan J, Hsu I H, et al. In Prospect and Retrospect: Reflective Memory Management for Long-term Personalized Dialogue Agents. ACL 2025.
- Zhong W, Guo L, Gao Q, et al. MemoryBank: Enhancing Large Language Models with Long-Term Memory. AAAI 2024.
- Ong K T, Yu Z, Qi S, et al. Towards Lifelong Dialogue Agents via Timeline-based Memory Management. NAACL 2025.
- Wu D, et al. LongMemEval: Benchmarking Chat Assistants on Long-Term Interactive Memory. 2025.
更多推荐

所有评论(0)