文章目录
- 前言
- 零、论文基本信息
- [一、背景与问题:为什么检索 Agent 会原地打转](#一、背景与问题:为什么检索 Agent 会原地打转)
-
- [1. Reasoning-Intensive Retrieval](#1. Reasoning-Intensive Retrieval)
- [2. CoT 路线:一次生成很长,但不保证前进](#2. CoT 路线:一次生成很长,但不保证前进)
- [3. 状态式路线:更省 token,却引入 Markov 遗忘](#3. 状态式路线:更省 token,却引入 Markov 遗忘)
- [4. 三种路线的本质差别](#4. 三种路线的本质差别)
- 二、相关工作
-
- [1. CoT-based Reasoning for IR](#1. CoT-based Reasoning for IR)
- [2. State-based Reasoning for IR](#2. State-based Reasoning for IR)
- [3. Agent Episodic Memory](#3. Agent Episodic Memory)
- 三、问题建模:把检索写成状态转移
-
- [1. State](#1. State)
- [2. Action](#2. Action)
- [3. Policy 与步数上限](#3. Policy 与步数上限)
- [4. Reasoning Cycle](#4. Reasoning Cycle)
- [四、EMR 方法总览:给状态策略增加完整轨迹](#四、EMR 方法总览:给状态策略增加完整轨迹)
- [五、Episodic Memory:从 Markov Policy 到 History-Aware Policy](#五、Episodic Memory:从 Markov Policy 到 History-Aware Policy)
-
- [1. 完整状态历史](#1. 完整状态历史)
- [2. 改变策略条件](#2. 改变策略条件)
- [3. 为什么不用简单的"重复检测后重试"](#3. 为什么不用简单的“重复检测后重试”)
- [六、Memory Read / Write:怎样把完整历史放进 Prompt](#六、Memory Read / Write:怎样把完整历史放进 Prompt)
-
- [1. 两段式纯文本记忆](#1. 两段式纯文本记忆)
- [2. 为什么选择纯文本而不是 JSON](#2. 为什么选择纯文本而不是 JSON)
- [3. Read Operation](#3. Read Operation)
- [4. Write Operation](#4. Write Operation)
- [七、Memory Compression:完整历史为什么没有更费 token](#七、Memory Compression:完整历史为什么没有更费 token)
-
- [1. Sentence Segmentation](#1. Sentence Segmentation)
- [2. Relevance Scoring](#2. Relevance Scoring)
- [3. Global Top-k Filtering](#3. Global Top-k Filtering)
- [4. 压缩不修改后端原文](#4. 压缩不修改后端原文)
- 八、实验设置
-
- [1. BRIGHT Benchmark](#1. BRIGHT Benchmark)
- [2. Baseline](#2. Baseline)
- [3. 模型与运行参数](#3. 模型与运行参数)
- 九、RQ1:情景记忆是否真的消除了推理循环
-
- [1. 循环率从 38.75% 降到 2.25%](#1. 循环率从 38.75% 降到 2.25%)
- [2. 解开循环以后,检索性能是否真的提高](#2. 解开循环以后,检索性能是否真的提高)
- [3. 强模型也会循环](#3. 强模型也会循环)
- [十、RQ2:EMR 是否同时更有效、更省计算](#十、RQ2:EMR 是否同时更有效、更省计算)
-
- [1. BM25 上的主结果](#1. BM25 上的主结果)
- [2. 强初始 Query 下仍然有效](#2. 强初始 Query 下仍然有效)
- [3. Token 效率曲线](#3. Token 效率曲线)
- [4. 与 CoT 和 SMR 的相对成本](#4. 与 CoT 和 SMR 的相对成本)
- [5. 逐数据集 token 下降](#5. 逐数据集 token 下降)
- [6. 端到端延迟](#6. 端到端延迟)
- [十一、RQ3:换成强 Retriever 后,记忆是否仍然有用](#十一、RQ3:换成强 Retriever 后,记忆是否仍然有用)
- 十二、模型泛化与压缩敏感性
-
- [1. 不同模型规模](#1. 不同模型规模)
- [2. 压缩预算消融](#2. 压缩预算消融)
- 十三、失败、异常与证据边界
-
- [1. 词面循环率低估语义循环](#1. 词面循环率低估语义循环)
- [2. EMR 不保证每个领域、每个模型都提升](#2. EMR 不保证每个领域、每个模型都提升)
- [3. 压缩可能漏掉后续步骤需要的句子](#3. 压缩可能漏掉后续步骤需要的句子)
- [4. 最大 16 步会截断未完成搜索](#4. 最大 16 步会截断未完成搜索)
- [5. 主要实验是单轮离线基准](#5. 主要实验是单轮离线基准)
- [十四、与 Agent Memory 系列方法的横向比较](#十四、与 Agent Memory 系列方法的横向比较)
- [十五、对 Coding Agent、Tool Agent 与 Multi-Agent 的启发](#十五、对 Coding Agent、Tool Agent 与 Multi-Agent 的启发)
-
- [1. Coding Agent:记录"尝试---结果---文件状态"而不只保留最新错误](#1. Coding Agent:记录“尝试—结果—文件状态”而不只保留最新错误)
- [2. Tool Agent:用轨迹记忆避免重复调用](#2. Tool Agent:用轨迹记忆避免重复调用)
- [3. Multi-Agent:共享状态轨迹而不是只传最后消息](#3. Multi-Agent:共享状态轨迹而不是只传最后消息)
- [4. 将循环检测从词面扩展到语义和状态](#4. 将循环检测从词面扩展到语义和状态)
- 十六、局限性
-
- [1. 动作空间过于简单](#1. 动作空间过于简单)
- [2. 完整历史常驻上下文的扩展性](#2. 完整历史常驻上下文的扩展性)
- [3. 压缩器是固定的小模型](#3. 压缩器是固定的小模型)
- [4. 缺少记忆错误的独立分析](#4. 缺少记忆错误的独立分析)
- [5. 评估集中在 BRIGHT](#5. 评估集中在 BRIGHT)
- [6. 不是跨任务学习](#6. 不是跨任务学习)
- 十七、我的理解与启发
-
- [1. EMR 的贡献是修复状态表示,而不是增加复杂检索算法](#1. EMR 的贡献是修复状态表示,而不是增加复杂检索算法)
- [2. Memory 的收益来自改变未来,而不是保存过去](#2. Memory 的收益来自改变未来,而不是保存过去)
- [3. 完整历史与压缩并不矛盾](#3. 完整历史与压缩并不矛盾)
- [4. 越强的模型不一定越少循环](#4. 越强的模型不一定越少循环)
- [5. 下一步应从 Episodic Memory 走向 Episodic Learning](#5. 下一步应从 Episodic Memory 走向 Episodic Learning)
- 十八、总结
- 参考资料
前言
复杂信息检索不是把用户问题原样丢给搜索引擎就结束了。
当问题需要跨概念推理时,Agent 往往要反复改写 Query、扩充候选文档、重新排序,再判断当前证据是否足够。例如,从 "AI safety" 出发,下一步可能改写为 "AI alignment",再进一步改写为 "AI alignment for safety"。
问题是:很多检索 Agent 只看当前一步,不记得自己走过哪些状态。于是它可能从 "AI safety" 走到 "AI alignment",下一步又回到 "AI safety"。每一步单独看都合理,连起来却形成了循环。模型消耗了更多 token,却没有扩大搜索空间。
此前的 Agent Memory 系列大多讨论跨对话、跨任务的长期记忆:如何保存用户事实、组织历史事件、提炼操作经验,或者让记忆随交互演化。EMR 把镜头拉回一次推理密集型检索过程内部:Agent 是否应该记住本轮搜索已经访问过的状态?
这篇论文的唯一核心增量可以概括为:
EMR 把状态式检索从只依赖当前状态的 Markov 策略,改造成读取完整历史状态轨迹的记忆增强策略,使 Query Refinement 能主动避开已经走过的状态,从而同时减少推理循环、token 消耗和端到端延迟。
这里的关键不是"存下几条日志",而是改变下一步决策的条件:原策略只看 s t s_t st,EMR 的策略同时看 s t s_t st 与此前所有状态组成的 M t M_t Mt。为了不让完整历史反过来拖垮上下文,它又把动作轨迹、文档内容和压缩机制拆开管理。
零、论文基本信息
- 论文名称: Beyond Markovian Forgetfulness: Episodic Memory for Reasoning-Intensive Retrieval
- 发表平台: Proceedings of the 64th Annual Meeting of the Association for Computational Linguistics(ACL 2026 Long Papers)
- 代码仓库: ldilab/EMR
- 作者: Dohyeon Lee, Yeonseok Jeong, Seung-won Hwang
一、背景与问题:为什么检索 Agent 会原地打转
1. Reasoning-Intensive Retrieval
普通检索主要依赖 Query 与文档之间的词面或语义匹配。推理密集型检索则要求系统先理解隐含的信息需求,再通过多步查询改写或重排序找到证据。
BRIGHT 中的问题来自生物、地球科学、经济学、心理学、机器人、StackOverflow、LeetCode、数学与理论推理等领域。很多 Query 无法直接命中文档,必须补出领域术语、限制条件或中间概念。
2. CoT 路线:一次生成很长,但不保证前进
Rank1、Rank-R1 等方法让 LLM 生成长 Chain-of-Thought,再完成 Query 改写或重排序。长推理链可以容纳复杂分析,但也容易包含重复解释和内部循环,而且单步生成的输入输出都很长。
O1-Pruner 等方法尝试压缩 CoT,但没有改变单次长链生成的基本范式。
3. 状态式路线:更省 token,却引入 Markov 遗忘
SMR 把检索推理拆成离散状态转移。每一步只完成一个操作,因而比长 CoT 更节省 token,也能减少立即重复同一个状态的自环。
但它默认下一步只依赖当前状态。Agent 知道"现在在哪",不知道"如何走到这里、哪些地方已经去过"。这就是论文所说的 Markovian Forgetfulness。
结果是,多步循环仍会出现:
AI safety → AI alignment → AI safety \text{AI safety}\rightarrow\text{AI alignment}\rightarrow\text{AI safety} AI safety→AI alignment→AI safety
论文在实验中观察到,某些数据集上状态式基线的循环率超过 60%。
4. 三种路线的本质差别
理解 EMR 之前,需要先比较 CoT、普通 State-based Reasoning 与 EMR 的信息流。

Figure 1:三种 Query Refinement 范式。 CoT 用单次长推理链,普通状态式方法只看前一状态,EMR 则利用完整历史生成持续前进的新 Query。
Figure 1 中,CoT 可能在一个大步骤里输出与输入相同的 Query;状态式方法避免了立即自环,却可能在第三步返回第一步;EMR 记得 "AI safety" 和 "AI alignment" 都已经访问,因此生成更具体的 "AI alignment for safety"。
二、相关工作
1. CoT-based Reasoning for IR
Rank1 通过推理轨迹微调模型,Rank-R1 进一步使用强化学习;O1-Pruner 则压缩 O1 风格推理路径。它们都把更多测试时计算用于检索,但主要载体仍是显式长推理链。
EMR 不试图生成更漂亮的 CoT,而是把复杂搜索建模为短步骤状态转移,让记忆负责保持全局轨迹。
2. State-based Reasoning for IR
SMR 把多步检索表示成 MDP:策略在每一步观察当前 Query 与文档,选择改写、重排或停止。它的优点是每步短、动作明确;缺点是严格的 Markov 条件让策略看不到更早状态。
EMR 是对这一路线的最小但关键改动:动作空间、基础策略和检索流程基本保留,只把完整历史加入决策条件。这样可以更清楚地把性能变化归因于 episodic memory。
3. Agent Episodic Memory
Agent 领域的情景记忆通常记录按时间排列的经历,使系统能回忆过去的行为与结果,支持规划和避免重复失败。
EMR 将这个概念移植到推理密集型检索。不过它的"Episode"不是跨天对话或完整任务,而是同一 Query 从初始状态到停止之间的搜索轨迹。因此,它是一种任务内工作记忆,也是一种短生命周期的 episodic memory。
三、问题建模:把检索写成状态转移
1. State
第 t t t 步的状态定义为当前 Query 与当前文档集合的二元组:
s t = ( q t , D t ) s_t=(q_t,D_t) st=(qt,Dt)
其中, q t ∈ Q q_t\in\mathcal{Q} qt∈Q 是第 t t t 步 Query, D t ⊂ D D_t\subset\mathcal{D} Dt⊂D 是用该 Query 召回并保留的文档集合。目标是从初始状态 s 0 s_0 s0 转移到终止状态 s n s_n sn,使 D n D_n Dn 更符合用户的信息需求。
2. Action
动作空间只有三种操作:
A = { REFINE , RERANK , STOP } \mathcal{A}=\{\text{REFINE},\text{RERANK},\text{STOP}\} A={REFINE,RERANK,STOP}
- REFINE: 生成新 Query q t + 1 q_{t+1} qt+1,检索新文档并扩展当前集合;
- RERANK: 保持 Query 不变,使用 LLM 对当前文档做 listwise 重排,再截取 Top- k k k;
- STOP: 当前文档已经足够,终止搜索并返回 D t D_t Dt。
策略模型一次前向调用同时输出动作和动作结果。例如选择 REFINE 时,会一起输出新 Query,减少每步调用次数。
3. Policy 与步数上限
策略 π \pi π 观察当前状态 s t s_t st,选择最有希望的动作 a t a_t at。为控制成本,系统设最大步数 T m a x T_{max} Tmax;到达上限时强制 STOP。实验中最多进行 16 个推理步骤。
4. Reasoning Cycle
论文用精确字符串相等定义 Query 循环:
q t = q t ′ , t ′ < t q_t=q_{t'},\qquad t'<t qt=qt′,t′<t
也就是说,只要新 Query 与任一历史 Query 完全相同,就记为循环。
这个定义易于复现,但偏保守:语义等价却措辞不同的 Query 不会被标记,例如 "AI safety alignment" 与 "alignment for safe AI"。因此,论文报告的循环率更接近"显式词面回访率",真实语义循环可能更高。
四、EMR 方法总览:给状态策略增加完整轨迹

Figure 2:EMR 架构。 策略模型每一步读取完整 Episodic Memory 生成新状态,再把本步动作、Query 与文档写回记忆。
左侧是逐步演进的状态,右侧是不断追加的 Episodic Memory。每一步形成一个闭环:
- 从记忆读取此前所有状态;
- 结合当前状态选择 REFINE、RERANK 或 STOP;
- 执行动作,得到新 Query 与文档;
- 把新的状态记录写回记忆;
- 进入下一步,直到 STOP 或达到 T m a x T_{max} Tmax。
EMR 不需要训练新的模型参数,核心机制发生在推理时的 Prompt 与状态管理层。
五、Episodic Memory:从 Markov Policy 到 History-Aware Policy
1. 完整状态历史
第 t t t 步的情景记忆定义为此前访问过的全部状态序列:
M t = ( s 0 , s 1 , ... , s t − 1 ) M_t=(s_0,s_1,\ldots,s_{t-1}) Mt=(s0,s1,...,st−1)
其中 s i = ( q i , D i ) s_i=(q_i,D_i) si=(qi,Di)。这不是从历史里只检索一两条"相似经验",而是把本次搜索的完整轨迹作为策略可见上下文。
2. 改变策略条件
普通状态式策略为:
a t = π ( s t ) a_t=\pi(s_t) at=π(st)
EMR 将它改为:
a t = π ′ ( s t , M t ) a_t=\pi'(s_t,M_t) at=π′(st,Mt)
这个变化带来两个直接效果。
第一,策略能看到所有历史 Query { q 0 , q 1 , ... , q t − 1 } \{q_0,q_1,\ldots,q_{t-1}\} {q0,q1,...,qt−1},Prompt 可以明确要求不要生成已访问 Query,从源头抑制循环。
第二,策略不再只对当前文档做局部反应。它知道此前试过哪些方向、各自召回了什么,可以生成更有针对性的改写。
3. 为什么不用简单的"重复检测后重试"
工程上似乎可以等 Query 重复后,再用字符串检测器要求模型重生成。但那只能阻止完全相同的输出,无法让模型理解此前搜索轨迹,也不能利用早期文档形成更高级的 Query。
EMR 把轨迹直接放入策略上下文,使"避免重复"和"基于历史推进"由同一机制完成。它不只是事后拦截器,而是决策条件的一部分。
六、Memory Read / Write:怎样把完整历史放进 Prompt
1. 两段式纯文本记忆
EMR 将记忆组织为两个部分:
History of Recent Actions 1 Action: a 1 Query: q 1 Ranks: IDs ( D 1 ) ⋯ t − 1 Action: a t − 1 Query: q t − 1 Ranks: IDs ( D t − 1 ) Memory of Documents i d ( d 1 ) d 1 i d ( d 2 ) d 2 ⋯ \begin{array}{l} \texttt{History\ of\ Recent\ Actions}\\ 1\ \texttt{Action: }a_1\ \texttt{ Query: }q_1\ \texttt{ Ranks: IDs}(D_1)\\ \cdots\\ t-1\ \texttt{Action: }a_{t-1}\ \texttt{ Query: }q_{t-1}\ \texttt{ Ranks: IDs}(D_{t-1})\\ \\ \texttt{Memory\ of\ Documents}\\ id(d_1)\ d_1\\ id(d_2)\ d_2\\ \cdots \end{array} History of Recent Actions1 Action: a1 Query: q1 Ranks: IDs(D1)⋯t−1 Action: at−1 Query: qt−1 Ranks: IDs(Dt−1)Memory of Documentsid(d1) d1id(d2) d2⋯
Table 1:EMR 的文本记忆格式。 动作历史只保存文档 ID,文档正文集中放在去重后的 Document Memory 中。
这种分离很关键。如果每个历史状态都重复保存完整文档,同一文档在多轮检索中被反复召回时会多次占用 token。EMR 的 Action History 只记录 ID,而全文只在 Document Memory 中保存一次。
2. 为什么选择纯文本而不是 JSON
作者的预实验发现,JSON 或 XML 没有明显性能优势,却会增加括号、引号和标签等语法 token。于是最终采用简单纯文本。
这说明 Agent Memory 的序列化格式不是中性实现细节。同一份信息用不同格式表达,会直接影响上下文成本和模型可读性。
3. Read Operation
每一步开始时,完整的两段式记忆被格式化为字符串,放在主任务 Prompt 前,通常紧接 System Message。策略因此能持续访问完整历史。
这里没有额外的向量检索:EMR 假设单次搜索轨迹在压缩后可以完整放入上下文。它与长期记忆系统的"从海量历史中召回少量条目"不同。
4. Write Operation
执行 a t a_t at 并得到新状态 s t + 1 = ( q t + 1 , D t + 1 ) s_{t+1}=(q_{t+1},D_{t+1}) st+1=(qt+1,Dt+1) 后,系统做两次写入:
- 向 Action History 追加动作、Query 与文档 ID;
- 对 D t D_t Dt 中每个文档检查 ID,未出现过才把 ID 与正文加入 Document Memory。
这个读写循环持续到 STOP,使 M t M_t Mt 始终是当前搜索 Episode 的完整记录。
七、Memory Compression:完整历史为什么没有更费 token
只做文档去重仍不够。随着 Agent 探索更多 Query,唯一文档也会持续增加。EMR 因此对 Document Memory 做查询相关的抽取式压缩。
1. Sentence Segmentation
系统用 spaCy 把新召回文档拆成句子,形成候选句池。
2. Relevance Scoring
使用预训练的 ms-marco-MiniLM-L6-v2 Cross-Encoder,按当前 Query q t q_t qt 给每个句子计算相关度。
3. Global Top-k Filtering
系统不是每篇文档各保留若干句,而是在全部候选句上统一排序,只保留全局 Top- k k k。这样可以让真正相关的文档占更多预算,也能直接裁掉整篇无关文档。
作者选择固定 Top- k k k 而不是相关度阈值,原因是固定预算能产生更可预测的 Prompt 长度。阈值式过滤虽然更自适应,却会让不同 Query 的上下文规模波动很大。
4. 压缩不修改后端原文
压缩只作用于当前 Prompt 构建,后端仍保存每篇文档的原文。因此同一文档在后续步骤中可以根据新的 Query 重新抽取不同句子,避免永久丢失信息。
这点非常重要:EMR 的压缩是"视图压缩",不是"存储覆写"。
八、实验设置
1. BRIGHT Benchmark
论文使用 BRIGHT 的 12 个推理密集型检索数据集:Biology、EarthScience、Economics、Psychology、Robotics、StackOverflow、SustainableLiving、LeetCode、Pony、AoPS、TheoremQA-Questions 和 TheoremQA-Theorems。
主指标为 nDCG@10,附录同时报告 MAP@10 与 Recall@10。
2. Baseline
- CoT-based:Rank1、Rank-R1、O1-Pruner;
- State-based:SMR;
- Retriever:稀疏检索 BM25 与推理型稠密检索 ReasonIR;
- 额外比较:训练式多跳检索器 GRITHopper。
3. 模型与运行参数
主实验使用 Qwen2.5-32B 和 Qwen3-32B;额外实验使用 DeepSeek-R1 与 Qwen2.5-7B。运行在单张 NVIDIA A6000 GPU 上,使用 vLLM,batch size 为 8,temperature 为 0.1,最大推理步数为 16,检索 Top- k = 10 k=10 k=10。
计算成本按整个推理过程中累计输入 token 数统计。端到端延迟包括检索、Prompt 构建和记忆压缩。
九、RQ1:情景记忆是否真的消除了推理循环
1. 循环率从 38.75% 降到 2.25%

Figure 3:EMR 与 SMR 的推理循环率。 EMR 在 BRIGHT 全部数据集上都显著压低了 Query 回访比例。
12 个数据集平均来看,SMR 的循环率为 38.75%,EMR 只有 2.25%,相对下降约 94%。EarthScience、Psychology 和 StackOverflow 等自然语言 Query 数据集的 SMR 循环率超过 60%,而 EMR 均压到 4% 以下。
LeetCode 和 AoPS 的基线循环率本来就低。作者认为,代码与数学公式具有较高词面特异性,完全相同的 Query 更不容易再次出现。这也提醒我们:EMR 的收益会随任务类型变化,循环本来很少的领域提升空间较小。
2. 解开循环以后,检索性能是否真的提高

Figure 4:循环 Query 的解决率与 nDCG@10 增益。 圆环蓝色部分表示 EMR 成功解开 SMR 循环的比例,中心数字是这些 Query 的平均性能提升。
在 SMR 已经发生循环的 Query 上,EMR 平均解决超过 90% 的循环,并带来约 8 个百分点的 nDCG@10 增益。EarthScience 提升 15.3,Psychology 提升 16.5;这些正是自然语言 Query、循环率较高的领域。
但不是所有数据集都超过 90%。SustainableLiving、LeetCode 与 TheoremQA-Questions 的解决率分别约为 71.9%、66.7% 和 70.6%。因此"平均 94% 降低循环"不等于每一种失败循环都被解决。
3. 强模型也会循环
Qwen3 在部分逻辑领域并不总比 Qwen2.5 更稳。例如在 LeetCode 上,Qwen3 产生的循环比 Qwen2.5 多 25%。更强的模型可能生成更复杂的改写,但复杂不代表不会回到旧路径。
这支持论文的核心判断:轨迹控制与模型能力是正交的。不能假设模型变强后,显式历史记忆就失去价值。
十、RQ2:EMR 是否同时更有效、更省计算
1. BM25 上的主结果
原始 Table 2 包含 12 个数据集和 8 种设置,列数过宽。下面保留各方法的平均 nDCG@10,并列出两个代表性领域用于观察差异。
Method Biology Psychology Avg. BM25 18.9 12.5 14.5 BM25 + Rank1 22.1 15.7 16.5 BM25 + Rank-R1 23.6 15.4 17.4 BM25 + O1-Pruner 23.6 18.0 17.1 BM25 + SMR (Qwen2.5) 28.7 20.7 19.9 BM25 + SMR (Qwen3) 44.0 23.3 20.0 BM25 + EMR (Qwen2.5) 41.2 33.1 26.4 B M 25 + E M R ( Q w e n 3 ) 53.1 37.4 26.7 \begin{array}{l|c|c|c} \textbf{Method} & \textbf{Biology} & \textbf{Psychology} & \textbf{Avg.}\\ \hline \text{BM25} & 18.9 & 12.5 & 14.5\\ \text{BM25 + Rank1} & 22.1 & 15.7 & 16.5\\ \text{BM25 + Rank-R1} & 23.6 & 15.4 & 17.4\\ \text{BM25 + O1-Pruner} & 23.6 & 18.0 & 17.1\\ \text{BM25 + SMR (Qwen2.5)} & 28.7 & 20.7 & 19.9\\ \text{BM25 + SMR (Qwen3)} & 44.0 & 23.3 & 20.0\\ \text{BM25 + EMR (Qwen2.5)} & 41.2 & 33.1 & 26.4\\ \mathbf{BM25 + EMR (Qwen3)} & \mathbf{53.1} & \mathbf{37.4} & \mathbf{26.7} \end{array} MethodBM25BM25 + Rank1BM25 + Rank-R1BM25 + O1-PrunerBM25 + SMR (Qwen2.5)BM25 + SMR (Qwen3)BM25 + EMR (Qwen2.5)BM25+EMR(Qwen3)Biology18.922.123.623.628.744.041.253.1Psychology12.515.715.418.020.723.333.137.4Avg.14.516.517.417.119.920.026.426.7
Table 2:BM25 上的核心 nDCG@10 结果。 表中复现原表的平均值及两个代表性自然语言领域,完整原表覆盖 12 个 BRIGHT 数据集。
EMR-Qwen3 平均 26.7,SMR-Qwen3 为 20.0,绝对提高 6.7 个百分点;EMR-Qwen2.5 为 26.4,也显著高于对应 SMR 的 19.9。
并非每个单项都是 Qwen3-EMR 最佳。LeetCode 上,Qwen2.5-EMR 为 26.4,Qwen3-EMR 只有 15.8;TheoremQA-Theorems 分别为 29.2 和 17.3。这与前述强模型在部分逻辑领域更易出现重复改写相呼应,也说明平均分不能掩盖模型---领域交互。
2. 强初始 Query 下仍然有效
论文使用 BRIGHT 提供的 GPT-4 refined Query 进行控制实验。ReasonIR + EMR-Qwen3 达到 36.7,ReasonIR + SMR-Qwen3 为 33.4,仍提升 3.3 个百分点。
这排除了一个简单解释:EMR 不只是修复很差的初始 Query。即使起点已经由 GPT-4 优化,完整轨迹仍能帮助后续检索避免重复并持续推进。
3. Token 效率曲线

Figure 5:检索性能与累计输入 token。 实线为 EMR,虚线为 SMR;在代表性 BRIGHT 数据集上,EMR 用相当或更少 token 获得更高 nDCG@10。
直觉上,保存完整历史会增加 Prompt。实验却显示,历史记忆带来的"少走弯路"超过了记忆本身的成本:EMR 需要更少的冗余推理步骤,Document Memory 又经过压缩,因此总 token 反而下降。
4. 与 CoT 和 SMR 的相对成本
Method Relative Tokens n D C G @ 10 Rank1 × 8.3 29.4 Rank-R1 × 8.1 30.2 O1-Pruner × 8.2 30.3 SMR × 3.6 33.4 E M R × 1.0 36.7 \begin{array}{l|c|c} \textbf{Method} & \textbf{Relative Tokens} & \mathbf{nDCG@10}\\ \hline \text{Rank1} & \times 8.3 & 29.4\\ \text{Rank-R1} & \times 8.1 & 30.2\\ \text{O1-Pruner} & \times 8.2 & 30.3\\ \text{SMR} & \times 3.6 & 33.4\\ \mathbf{EMR} & \mathbf{\times 1.0} & \mathbf{36.7} \end{array} MethodRank1Rank-R1O1-PrunerSMREMRRelative Tokens×8.3×8.1×8.2×3.6×1.0nDCG@1029.430.230.333.436.7
Table 5:性能与相对输入 token。 EMR 以最低 token 成本取得最高 nDCG@10。
CoT 方法消耗约 8 倍于 EMR 的输入 token,SMR 也为 3.6 倍。这个比较同时支持两个结论:状态式短步骤比长 CoT 更适合控制成本,而在状态式框架上加入历史记忆又能减少循环造成的额外步骤。
5. 逐数据集 token 下降
Dataset S M R ( M ) E M R ( M ) R e d u c t i o n Biology 10.5 4.4 − 58.1 % EarthScience 40.7 5.0 − 87.7 % Psychology 22.7 3.4 − 85.1 % StackOverflow 30.2 5.1 − 83.0 % LeetCode 6.5 5.0 − 22.6 % AoPS 3.3 2.9 − 11.0 % Average 14.6 4.1 − 72.1 % \begin{array}{l|c|c|c} \textbf{Dataset} & \mathbf{SMR(M)} & \mathbf{EMR(M)} & \mathbf{Reduction}\\ \hline \text{Biology} & 10.5 & 4.4 & -58.1\%\\ \text{EarthScience} & 40.7 & 5.0 & -87.7\%\\ \text{Psychology} & 22.7 & 3.4 & -85.1\%\\ \text{StackOverflow} & 30.2 & 5.1 & -83.0\%\\ \text{LeetCode} & 6.5 & 5.0 & -22.6\%\\ \text{AoPS} & 3.3 & 2.9 & -11.0\%\\ \textbf{Average} & \mathbf{14.6} & \mathbf{4.1} & \mathbf{-72.1\%} \end{array} DatasetBiologyEarthSciencePsychologyStackOverflowLeetCodeAoPSAverageSMR(M)10.540.722.730.26.53.314.6EMR(M)4.45.03.45.15.02.94.1Reduction−58.1%−87.7%−85.1%−83.0%−22.6%−11.0%−72.1%
Table 10:SMR 与 EMR 的输入 token。 表中复现代表性数据集和原表平均值;EMR 平均减少 72.1%。
下降幅度与循环风险有明显关系:EarthScience、Psychology、StackOverflow 的节省超过 80%,而本就很少循环的 AoPS 只减少 11%。这比单纯报告平均 72% 更有解释力------EMR 主要节省的是无效循环成本。
6. 端到端延迟
在 A6000 + vLLM 设置下,EMR 相比 SMR 获得 2.7 倍端到端加速。虽然 Prompt 构建和句子压缩增加了开销,但减少的循环步骤更多,最终净收益为正。
论文没有在正文给出每个数据集的绝对秒数,因此不能据此推断其他硬件、API 模型或更大文档库上的实际延迟。
十一、RQ3:换成强 Retriever 后,记忆是否仍然有用
Method A v g . n D C G @ 10 ReasonIR 24.4 ReasonIR + Rank1 24.5 ReasonIR + Rank-R1 25.8 ReasonIR + O1-Pruner 25.8 ReasonIR + SMR (Qwen2.5) 26.0 ReasonIR + SMR (Qwen3) 27.6 ReasonIR + EMR (Qwen2.5) 30.5 R e a s o n I R + E M R ( Q w e n 3 ) 33.4 \begin{array}{l|c} \textbf{Method} & \mathbf{Avg.\ nDCG@10}\\ \hline \text{ReasonIR} & 24.4\\ \text{ReasonIR + Rank1} & 24.5\\ \text{ReasonIR + Rank-R1} & 25.8\\ \text{ReasonIR + O1-Pruner} & 25.8\\ \text{ReasonIR + SMR (Qwen2.5)} & 26.0\\ \text{ReasonIR + SMR (Qwen3)} & 27.6\\ \text{ReasonIR + EMR (Qwen2.5)} & 30.5\\ \mathbf{ReasonIR + EMR (Qwen3)} & \mathbf{33.4} \end{array} MethodReasonIRReasonIR + Rank1ReasonIR + Rank-R1ReasonIR + O1-PrunerReasonIR + SMR (Qwen2.5)ReasonIR + SMR (Qwen3)ReasonIR + EMR (Qwen2.5)ReasonIR+EMR(Qwen3)Avg. nDCG@1024.424.525.825.826.027.630.533.4
Table 4:ReasonIR 上的平均 nDCG@10。 更强稠密 Retriever 与 EMR 的轨迹记忆具有互补收益。
EMR-Qwen3 相比 SMR-Qwen3 提升 5.8 个百分点。CoT 方法加在 ReasonIR 上几乎没有提升,作者认为 ReasonIR 已在训练中内化部分推理能力;EMR 仍然有效,说明"Retriever 会不会找相似文档"与"搜索策略会不会重复旧状态"是两个不同问题。
论文还报告,EMR 的 36.7 高于训练式多跳检索器 GRITHopper 的 30.2。这个比较显示测试时轨迹控制的竞争力,但两者训练数据、架构和主干设置并非完全相同,不能把差值解释为严格的组件优劣。
十二、模型泛化与压缩敏感性
1. 不同模型规模
Backbone S M R E M R DeepSeek-R1 17.6 22.9 Qwen2.5-7B 29.2 31.9 \begin{array}{l|c|c} \textbf{Backbone} & \mathbf{SMR} & \mathbf{EMR}\\ \hline \text{DeepSeek-R1} & 17.6 & \mathbf{22.9}\\ \text{Qwen2.5-7B} & 29.2 & \mathbf{31.9} \end{array} BackboneDeepSeek-R1Qwen2.5-7BSMR17.629.2EMR22.931.9
Table 9:额外主干模型的平均 nDCG@10。 EMR 在 DeepSeek-R1 和较小的 Qwen2.5-7B 上都保持增益。
DeepSeek-R1 提升 5.3,Qwen2.5-7B 提升 2.7。这支持核心机制不依赖单一 32B 模型,但不同主干的绝对分数不能直接代表模型能力强弱,因为 Prompt 适配、推理风格和领域表现都会影响结果。
2. 压缩预算消融
k n D C G @ 10 3 26.2 5 26.7 7 26.8 9 26.3 11 25.9 \begin{array}{c|c} \mathbf{k} & \mathbf{nDCG@10}\\ \hline 3 & 26.2\\ 5 & 26.7\\ 7 & \mathbf{26.8}\\ 9 & 26.3\\ 11 & 25.9 \end{array} k357911nDCG@1026.226.726.826.325.9
Table 11:Memory Compression 的 Top-k 消融。 k = 3 k=3 k=3 到 11 11 11 之间的波动小于 1.0 nDCG@10。
最优点是 k = 7 k=7 k=7,但不同预算下性能相对稳定,而且最低结果仍高于最强 SMR 基线。这说明 EMR 的主要提升不是靠精细调某个压缩参数获得。
同时, k k k 越大并不越好:从 7 增至 11,分数从 26.8 降到 25.9。更多句子可能带来噪声,也会占用策略模型注意力。
十三、失败、异常与证据边界
1. 词面循环率低估语义循环
循环用 Query 字符串完全相等判断。模型只要轻微改写表达,就可能在语义上重复旧方向却不被计数。EMR 的 Prompt 历史可能仍然减少这种行为,但论文没有用向量或人工标注测量语义循环。
2. EMR 不保证每个领域、每个模型都提升
在 BM25 主表中,Qwen3-EMR 的 LeetCode 和 TheoremQA-Theorems 明显低于 Qwen2.5-EMR。单项结果提醒我们,完整历史并不会自动修复基础模型在代码或形式化推理上的搜索策略。
3. 压缩可能漏掉后续步骤需要的句子
Document Memory 按当前 Query 选择全局 Top- k k k 句子。虽然后端保留原文并可重新压缩,但策略模型在当前步骤看不到被裁掉的信息;如果这些信息恰好是生成下一跳 Query 的桥梁,搜索仍可能提前停止或走错方向。
4. 最大 16 步会截断未完成搜索
T m a x T_{max} Tmax 控制成本,也可能把尚未完成但仍在推进的轨迹强制停止。论文没有报告多少 Query 因达到步数上限而终止,也没有比较不同 T m a x T_{max} Tmax 的性能---成本曲线。
5. 主要实验是单轮离线基准
EMR 在一个 Query 的生命周期内维护记忆,任务结束后并不把经验迁移到下一个 Query。它证明的是 episode 内的历史感知,而不是跨任务学习或长期能力演化。
十四、与 Agent Memory 系列方法的横向比较
| 方法 | 记忆生命周期 | 主要记忆对象 | 解决的问题 | 与 EMR 的核心差异 |
|---|---|---|---|---|
| A-MEM | 跨对话、跨任务长期存在 | 可演化记忆条目与关联 | 记忆如何动态组织与关联 | A-MEM 面向长期记忆网络;EMR 保存单次搜索的完整状态轨迹,重点防止状态回访 |
| MAGMA | 长期存在 | 多种关系图上的异构记忆 | 不同关系如何支持检索 | MAGMA 改变记忆表示;EMR 基本不改变知识库结构,而是改变策略的历史可见性 |
| CoM | 持续交互 | 多粒度连续经验 | 记忆如何形成可利用结构 | CoM 关注跨交互组织;EMR 的 Episode 边界是一条 Query 的搜索过程 |
| ReMemR1 | 当前记忆写入时回访过去 | 历史记忆与当前更新 | 修复边读边记造成的信息损失 | ReMemR1 回访历史以改进写入;EMR 读取完整状态史以控制下一步动作 |
| Mem²Evolve | 跨任务持续进化 | 经验与可执行资产 | 同时扩展经验和能力空间 | Mem²Evolve 会生成/进化资产;EMR 不产生新工具,只让检索轨迹避免循环 |
| MUSE | 跨长流程任务积累 | 战略、流程、工具经验 | 从执行成败中测试时学习 | MUSE 复用过去任务的成功经验;EMR 只复用当前搜索中刚经历的状态 |
| HiGMem | 长对话历史长期存在 | Event 摘要与原始 Turn | 用摘要路由到少量精确证据 | HiGMem 在海量历史中选择该读的记忆;EMR 将当前 Episode 的全部压缩历史常驻 Prompt |
| EMR | 单个 Query Episode 内 | Query、动作、文档 ID 与压缩文档 | 避免 Markov 策略回到旧状态 | 用完整轨迹改写策略条件,属于任务内 episodic working memory |
EMR 给 Agent Memory 系列补上了一个容易被忽略的尺度:记忆不一定要跨会话保存才有价值。只要推理过程包含多步状态转移,任务内历史就是一种决定性记忆。
十五、对 Coding Agent、Tool Agent 与 Multi-Agent 的启发
以下内容是基于论文机制的工程推演,不是论文已验证的实验结论。
1. Coding Agent:记录"尝试---结果---文件状态"而不只保留最新错误
Coding Agent 经常在多个修复方案之间来回切换:修改配置、回退代码、再次修改配置。若每一步只看最新报错,很容易重复已经失败的尝试。
可以把状态定义为当前错误、改动文件和测试结果,把动作定义为 PATCH、TEST、INSPECT、STOP,并让策略读取本轮所有历史状态。这样能明确知道哪些补丁已经尝试、哪些测试曾失败。
2. Tool Agent:用轨迹记忆避免重复调用
工具 Agent 可能在不同 API、页面或检索词之间循环。EMR 的 Action History 可以记录工具名、参数摘要和返回结果 ID;大结果放入去重的 Document Memory,只在 Prompt 中保留与当前目标相关的片段。
3. Multi-Agent:共享状态轨迹而不是只传最后消息
多 Agent 协作中,下游 Agent 如果只收到上一位 Agent 的最终结论,也会遭遇"Markovian Forgetfulness":它不知道团队已经排除了哪些方向。
协调层可以维护 Episode Memory,记录每个角色采取的动作、提出的假设与证据 ID。新 Agent 读取轨迹后,能避免重复调查同一路径。
4. 将循环检测从词面扩展到语义和状态
工程系统不应只判断 Query 是否完全相同,还可以结合:
- Query embedding 相似度;
- 召回文档集合的重合率;
- 动作序列模式;
- 状态价值是否持续不变。
这样可以发现"换一种说法继续做同一件事"的软循环。
十六、局限性
1. 动作空间过于简单
论文只包含 REFINE、RERANK 与 STOP。真实搜索 Agent 还需要网页浏览、数据库查询、代码执行、用户澄清和 API 调用。动作变多后,状态与记忆格式是否仍能保持紧凑,尚未验证。
2. 完整历史常驻上下文的扩展性
BRIGHT 设置最多 16 步,压缩后可以完整放入 Prompt。若任务延长到数百步,或者每步产生多模态结果,完整历史常驻将再次遇到上下文膨胀,需要分层、检索或遗忘机制。
3. 压缩器是固定的小模型
句子相关度依赖 MiniLM Cross-Encoder。它在代码、数学公式和高度专业文本上的选择质量可能不同,论文只消融了保留句子数,没有比较压缩器本身。
4. 缺少记忆错误的独立分析
论文重点分析循环,却没有统计记忆导致的新错误,例如历史噪声使策略过早排除有效 Query,或旧文档影响新的改写方向。
5. 评估集中在 BRIGHT
虽然覆盖 12 个领域、多个模型与两类 Retriever,全部主结论仍来自同一个 Benchmark 家族。对动态 Web 搜索、真实企业检索和交互式澄清任务的泛化需要进一步验证。
6. 不是跨任务学习
"Episodic Memory"容易让人联想到长期 Agent 经验库,但 EMR 的记忆只服务当前 Query。它没有证明一个 Query 的成功轨迹能帮助下一个 Query,也没有记忆巩固或跨 Episode 迁移机制。
十七、我的理解与启发
1. EMR 的贡献是修复状态表示,而不是增加复杂检索算法
普通 SMR 的状态 s t = ( q t , D t ) s_t=(q_t,D_t) st=(qt,Dt) 对当前步骤足够,却不是一个对历史充分的状态。EMR 显式加入 M t M_t Mt,相当于承认原状态表示不满足真正的 Markov 性。
从这个角度看,所谓"Markovian Forgetfulness"不是 MDP 本身的问题,而是系统错误地把不完整观察当作完整状态。
2. Memory 的收益来自改变未来,而不是保存过去
EMR 存历史的目的不是展示或审计,而是让下一步 Query 不再重复。判断一个 Agent Memory 是否有用,关键问题应是:它能否改变后续策略?
如果记忆只被写入、却不进入动作选择条件,那么它仍是日志系统,不是决策系统。
3. 完整历史与压缩并不矛盾
EMR 对"结构"保持完整:每一步动作、Query、文档 ID 都留下;对"内容"进行压缩:文档正文只保存去重后的相关句子。
这提供了一个通用原则:
轨迹骨架应该完整保留,体积最大的观测内容可以按当前目标生成可重建视图。
对于 Coding Agent,这意味着保留每次命令与文件版本 ID,却只在 Prompt 中展开相关 Diff 和日志片段。
4. 越强的模型不一定越少循环
Qwen3 在部分逻辑领域产生更多循环,说明"推理能力强"和"轨迹管理好"不是同一个能力。模型可能擅长生成复杂局部推理,却缺少对整个搜索路径的稳定控制。
这也是外部 Agent State 与 Memory 仍然重要的原因:系统层可以补充模型参数中没有稳定实现的过程约束。
5. 下一步应从 Episodic Memory 走向 Episodic Learning
EMR 在 Episode 内避免重复,但任务结束后轨迹被丢弃。更进一步,可以从成功搜索轨迹中提炼:
- 哪类 Query 应先 REFINE;
- 什么状态适合 RERANK;
- 哪些循环模式最常见;
- 不同领域应该使用什么压缩策略。
这会把任务内记忆与 MUSE、Mem²Evolve 一类跨任务经验演化连接起来。不过,跨任务保存前必须先去除 Query 特定细节,避免把一次搜索的偶然路径当作普遍规则。
十八、总结
EMR 关注推理密集型检索中的一个具体却普遍的问题:状态式 Agent 只看当前状态,因此可能在历史 Query 之间反复循环。它把此前所有 ( q i , D i ) (q_i,D_i) (qi,Di) 组成 Episodic Memory,将策略从 π ( s t ) \pi(s_t) π(st) 改为 π ′ ( s t , M t ) \pi'(s_t,M_t) π′(st,Mt),并通过动作历史、去重文档库和句子级 Top- k k k 压缩控制上下文成本。
实验表明,EMR 将 BRIGHT 上的平均循环率从 38.75% 降到 2.25%,相对减少约 94%;在 BM25 上相比对应 SMR 平均提升约 6.7 个 nDCG@10 点,在 ReasonIR 上仍提升 5.8 个点。它还平均减少 72.1% 输入 token,并在论文硬件设置中实现 2.7 倍端到端加速。
证据边界同样明确:循环只按 Query 精确匹配定义,部分逻辑领域存在模型级退化,完整历史只在最多 16 步内验证,而且记忆不会跨 Query 保留。
一句话总结:
EMR 证明了在多步检索中,记住完整的"我已经怎样搜索过"比生成更长的思维链更重要;一个紧凑的任务内情景记忆,就能同时改善搜索质量与计算效率。