CoEvo-Mem:检索策略和记忆库,谁也别想单独变强

做 Agent 长期记忆的朋友,大概率踩过这个坑:你花大力气优化了检索策略——查询改写、混合召回、重排序全上了——效果涨了一截,然后卡住不动了。转头去优化记忆库的组织结构,记忆质量上去了,但检索那边又开始"水土不服",因为之前调好的检索参数已经配不上新的记忆分布了。

两头来回打补丁,像在玩打地鼠。

这篇 CoEvo-Mem(arXiv: 2608.01739)直接把这件事点破了:检索和记忆之间存在一个反馈回路,分开优化任何一头都会跟另一头失配。检索决定了哪些记忆被捞出来、拿到任务反馈;而记忆更新又改变了后续检索面对的价值分布和图结构。这是一个耦合的学习问题,不是两个独立模块的简单拼接。

核心摘要:CoEvo-Mem 让冻结的大模型生成 dense/sparse 两路查询改写和一个路由先验,只在线学习一个轻量残差路由器;检索结果同时充当任务奖励的信用分配接口和记忆图 TD 估值的更新依据。为压制耦合带来的非平稳性,训练在"冻结记忆库只训路由器"和"冻结路由器只演化记忆库"两个阶段之间交替。七个基准上拿下六个第一,平均比最强 baseline 高 3.72 个点,GPQA Diamond 上最高涨 7.50 个点。说实话,单看数字不算炸裂,但它指出的这个耦合问题是真的,而且解法相当克制——主干模型一个参数都不动。


📖 论文信息

  • 标题:CoEvo-Mem: Co-Evolving Retrieval Policy and Memory Bank for LLM Agents
  • 作者:Bowen Ye、Yongchao Xu、Zhijian Li、Xiang Yin、Junkai Ma(通讯)、Wenzhao Li
  • 机构:Alibaba Group、上海交通大学(自动化与智能感知学院)、中国科学技术大学
  • 链接:https://arxiv.org/abs/2608.01739 (arXiv: 2608.01739v1,2026 年 8 月 3 日)

🎯 问题:记忆系统的"双人划船"困境

现有 Agent 记忆工作大致分两派。

一派优化记忆访问:RAG、HyDE 查询改写、Self-RAG、Search-R1 这类,核心是怎么把相关经验捞得更准。另一派优化记忆本身:MemoryBank 的遗忘机制、Mem0 的事实抽取、A-MEM/Zep 的图结构组织、MemQ/MemRL 用任务反馈学记忆价值。

问题是,这两派基本各干各的——优化检索的时候记忆库是死的,优化记忆的时候检索策略是写死的。

但长期记忆和静态语料检索有个根本区别:记忆库本身是被交互不断改写的。检索策略决定了哪些记忆被曝光、进而有资格接收任务结果的信用分配;而记忆的价值估计和关系结构一变,后续查询面对的检索地形就跟着变了。你固定一头去优化另一头,优化完的那一刻,它就过时了。

图1:记忆系统的三种范式

图1:作者用了一个划船的比喻——只更新记忆库(左)像只有左桨在划,船原地打转;只更新检索器(中)同样打转;只有双桨协同(右),存储和访问才能一起往前走。图做得挺直白,道理也是真道理。


🏗️ 方法:闭环怎么搭

先给一句话版本:冻结的大模型负责出题(查询改写 + 路由先验),一个轻量残差路由器负责在线纠偏,检索到的记忆集合既是生成的上下文,也是两路学习信号的耦合接口;训练时路由器和记忆库交替更新,永不同时动

图2:CoEvo-Mem 框架总览

图2:框架全景。上方是检索链路:用户查询经冻结 LLM 改写为 dense/sparse 两路查询,残差路由器输出融合权重,Q 加权混合检索器取回 top-k,再经时间图扩展得到最终记忆集。下方是记忆库:类型化关系记忆图,边分 Dense/Sparse/Time 三类。右侧两条回路——奖励驱动路由更新(红)和轨迹条件记忆更新(绿),通过交替协同演化协调。注意右下角的相位表:Router Phase 冻结记忆更新路由,Memory Phase 反过来。

SR-QR:让 LLM 先给个"参考答案",路由器只学残差

查询里往往同时有语义意图和精确词面线索(实体、关键词),但两类信号谁更重要因任务而异。Self-Routed Query Rewriter(SR-QR)的做法是:冻结 LLM 在一个固定路由 prompt 下,一次输出 dense 改写、sparse 改写、一个 dense-sparse 路由先验 \(p_t^0\),外加一个置信度特征。

然后才是可学习的部分——一个查询编码器 \(\phi_\psi\) 和策略头 \(f_\omega\),输出对先验的修正量:

\[\boldsymbol{\pi}_t = \mathrm{softmax}\left(\log \bar{\mathbf{p}}_t^0 + \boldsymbol{\Delta}_t\right)\]

这里有个细节我很喜欢:\(f_\omega\) 的最后一层零初始化,所以训练刚开始时 \(\boldsymbol{\pi}_t\) 就等于平滑后的 LLM 先验。学习的目标不是从零学路由,而是学"在 LLM 先验基础上,往哪个方向偏能拿更高奖励"。这个设计和 control 里的残差策略学习一脉相承,工程上最大的好处是冷启动不翻车——初始行为就是一个合理的 LLM 路由,训练只做微调。

路由器阶段的探索用 Beta 分布采样混合比:\(\zeta_t \sim \mathrm{Beta}(\kappa\pi_t^d, \kappa\pi_t^s)\),条件均值就是 \(\boldsymbol{\pi}_t\)。优化目标是经典的 score-function 估计器加 KL 正则:

\[\widehat{\mathcal{L}}_{\mathrm{router},t}(\theta) = -\mathrm{sg}[\widehat{A}_t]\log p_\theta(\zeta_t \mid q_t, \mathbf{o}_t) + \beta_{\mathrm{KL}} D_{\mathrm{KL}}\!\left(\mathrm{Cat}(\boldsymbol{\pi}_t) \,\middle\|\, \mathrm{Cat}(\bar{\mathbf{p}}_t^0)\right)\]

\(\widehat{A}_t\) 是任务奖励减去 EMA 基线的优势估计,KL 项拉住策略不要偏离 LLM 先验太远。你想想看,检索过程本身不可微(离散 top-k + 状态化图),用 REINFORCE 系的估计器几乎是必然选择;方差控制就靠 EMA 基线和先验正则,都是很务实的工程件。

Q 加权混合检索:记忆价值直接进排序

检索侧,dense 路按描述嵌入相似度排,sparse 路按 BM25 排,然后进入 Q-Weighted Hybrid Retriever,用加权倒数排名融合把三路信号合在一起:

\[S_t(m;\mathcal{P}) = \sum_{a\in\{d,s\}}\frac{w_t^a}{N_a}\sum_{i=1}^{N_a}\frac{1}{\eta+\mathrm{rank}_{a,i}^t(m;\mathcal{P})} + \frac{\lambda_Q}{\eta+\mathrm{rank}_Q^t(m;\mathcal{P})}\]

关键在最后一项:记忆自身的效用估计 \(Q_t(m)\) 直接作为一个排序信号参与融合。也就是说,一条历史上"帮过忙"的记忆,即使这次查询相关性一般,也会被抬高。这是把记忆价值学习(MemQ/MemRL 那一路的思想)直接织进了检索排序,而不是事后重排。

取完初始 top-k 后还有一步 Temporal Graph Expansion:把这些候选的时间邻居(前后续记忆)扩进池子重新排序再取 top-k。对话场景里这一步很合理——答案经常藏在某条命中记忆的"上文"里。

记忆图:TD 估值 + 关系信用传播

记忆库是一张类型化关系图,节点存内容、dense 描述、sparse 关键词、时间元数据和效用值 \(Q_t(m)\),边只有三类:Dense(语义邻近,双向)、Sparse(词面重叠,双向)、Time(时间先后,有向)。边类型和检索通道一一对应——这不是一个通用知识图谱,而是为检索操作量身定制的索引结构

记忆阶段的更新分两层。一层是对被曝光记忆 \(\mathcal{A}_t\) 的 TD 式估值:先用固定 prompt 让 LLM 给每条曝光记忆打一个贡献分 \(u_t(m)\in[0,1]\),然后算 TD 残差:

\[\delta_t(m) = R_t\,u_t(m) + \gamma\widehat{Q}_t(m_t^{\mathrm{new}}) - Q_t(m)\]

即时项是任务奖励乘上记忆归因分,bootstrap 项把"本次交互蒸馏出的新记忆"的价值回传给支撑它产生的上下文。说实话,\(u_t(m)\) 靠 LLM 打分这一步,信用分配的噪声不会小——LLM-as-judge 做归因,判断错了 TD 更新就会把错误价值扩散出去。这是我对这套方案最大的存疑点,论文也没有针对归因质量做鲁棒性实验。

另一层是关系信用传播:信用不只给被曝光的记忆,还沿图边传给相关记忆。路径强度取各边衰减因子 \(\rho_c\) 的乘积,只保留最强路径(防止路径数量多就机械放大信用),时间边只从早向晚传播——也就是被曝光记忆的"前序"能分到功劳。这个设计挺讲究的:一条记忆这次没被检索到,但它是某条立功记忆的前情提要,那它也该涨身价。

交替训练:治非平稳性的土办法,但管用

同时更新路由器和记忆图,等于两个移动靶互相瞄准:路由改了记忆曝光分布,记忆演化改了检索地形。CoEvo-Mem 的方案是分相位的块坐标更新——每个 phase 完整过一遍训练集,Router phase 图只读只训 \(\theta\),Memory phase 冻结路由器只演化图。如果初始图为空,先补一个 Memory phase 引导。

这个思路在优化上毫无新意,就是 block coordinate descent。但后面的消融会说明,土办法确实比"同时更新"和"分两阶段各训到底"都好。


📊 实验:七个基准,六个第一,一个"惜败"

实验覆盖七个基准:OS 交互(LLAB)、代码生成(LiveCodeBench)、多模态推理(MMMU Pro)、科学问答(GPQA Diamond)、函数调用(BFCL,分 thinking/non-thinking 两种设置)、长程对话记忆(LoCoMo、LongMemEval)。主干模型随基准走,回答 LLM 全程冻结。

主表(Table 1)的数字:

基准(主干) No Mem. RAG Self-RAG Mem0 MemP MemRL MemQ CoEvo-Mem
LLAB(4o-mini) 66.89 68.89 70.45 70.00 71.11 74.44 74.67 76.00
LiveCodeBench(Gemma-4-E4B) 44.76 50.48 49.52 47.62 49.52 45.71 51.43 55.24
MMMU Pro 48.46 53.76 53.57 49.90 54.24 53.66 54.43 55.49
GPQA Diamond 47.50 58.33 58.33 58.33 59.17 60.83 60.83 68.33
BFCL non-thinking(Qwen3.5-35B) 33.67 35.33 38.00 35.00 37.33 39.00 37.33 45.33
BFCL thinking(Qwen3.5-35B) 56.71 55.45 60.07 54.79 61.39 60.07 62.38 64.69

表1:六项设置全部第一,平均比各行最强 baseline 高 3.72 个点,单项提升 1.06 到 7.50 个点。

几个观察。GPQA Diamond 涨 7.50 个点最猛,BFCL non-thinking 涨 6.33 次之——前者是科学推理,后者是工具调用,说明收益不集中在单一任务形态。但也要泼点冷水:LLAB 上只比 MemQ 高 1.33 个点(76.00±0.82 vs 74.67±0.67),考虑方差后优势不算硬;BFCL non-thinking 那行 MemRL 的 39.00±0.00 也很可疑,标准差为零说明要么只跑了一次要么种子太少,这个 baseline 可能没跑充分。

长程对话记忆上(Table 2,LoCoMo 自由问答,GPT-4o-mini 作答 + DeepSeek-V4-Pro 评判):

方法 Overall Multi Open Single Temp
FullContext 73.83 68.79 56.25 86.56 50.16
Mem0 66.88 67.13 51.15 72.93 59.19
Zep 75.14 74.11 66.04 79.79 67.71
Memobase 75.78 70.92 46.88 77.17 85.05
StructMem 76.82 68.77 46.88 81.09 81.62
CoEvo-Mem 81.71 72.22 71.42 86.44 83.87

表2:LoCoMo 总分 81.71,比 StructMem 高 4.89 个点,五个问题类别里 Open/Single/Temp 三项第一。

训练曲线也值得看:

图3:LoCoMo 自由问答上的训练成功率

图3:15 个 epoch 的交替训练曲线,顶部色带标出 Router/Memory 相位切换。训练准确率爬到 87%,验证集到 84%——交替优化的收益泛化到了 held-out 问题上,不是纯粹的训练集过拟合。注意每个 Memory phase(橙色段)曲线都有可见的上抬,符合"记忆演化在喂饱检索"的叙事。

那块"惜败"的遮羞布

论文摘要说"七个基准 SOTA",但 Table 4 的固定记忆多选协议(LoCoMo-MC / LongMemEval-MC,冻结记忆图只比检索)上,CoEvo-Mem 其实全面排在 ElasticMem 后面

主干 方法 LoCoMo-MC LongMemEval-MC
Qwen2.5-3B ElasticMem 74 68
Qwen2.5-3B CoEvo-Mem 63 56
Qwen2.5-7B ElasticMem 84 76
Qwen2.5-7B CoEvo-Mem 71 64
Qwen2.5-7B MemGen 68 63
GPT-4 CoEvo-Mem 89 82

表4:固定记忆多选协议。ElasticMem 是可训练的模型内置隐记忆(紫色行),CoEvo-Mem 在外部记忆/冻结模型组件的方法里排第一,但绝对分差被 ElasticMem 拉得很开(7B 下 71 vs 84)。

这个对比其实信息量很大。ElasticMem 那种把记忆做成模型内部可训练资源的路子,上限明显更高;CoEvo-Mem 的优势在于主干模型零改动——7B 换成 GPT-4 直接飙到 89/82,不用重训记忆系统,检索接口跨主干迁移。如果你手里是闭源 API 模型或者没预算动主干,这条路几乎是唯一选择;如果你能动主干,表 4 告诉你还有更大的空间。

消融:每个组件都在干活

基准 Full w/o SR-QR w/o Memory Evolution Simultaneous Two-Stage
GPQA Diamond 68.33 60.00 58.33 66.67 63.33
LiveCodeBench 55.24 50.48 47.62 52.38 51.43
LLAB 76.00 74.00 74.00 75.00 74.00
MMMU Pro 55.49 52.60 53.28 53.95 52.60
BFCL non-thinking 45.33 43.00 43.33 44.33 43.33
BFCL thinking 64.69 59.74 58.75 61.39 60.06
LoCoMo 81.71 77.29 77.88 79.65 78.76

表3:消融。去掉 SR-QR 宏平均掉 4.24 个点,去掉记忆演化掉 4.80 个点;交替训练比同时更新高 1.92 个点,比两阶段高 3.33 个点。固定记忆的两个 MC 协议上 SR-QR 单独带来 6.00 和 10.00 个点的错误下降。

消融里最值钱的一行是调度对比:Simultaneous 一致地当老二,Two-Stage 垫底。这直接支撑了论文的核心论点——耦合系统里,交替对着"对方的最新状态"优化,优于同时乱动,更远优于"先训死一个再训另一个"。记忆演化对 GPQA(掉 10.00)和 LiveCodeBench(掉 7.62)贡献最大,恰好是主表提升最猛的两个基准,闭环叙事是自洽的。


🤔 我的判断

这篇论文最值钱的不是某个模块,而是把"检索-记忆反馈回路"作为一个明确的优化问题提了出来。单看组件,残差路由、RRF、TD 估值、图信用传播、交替优化,每一个都是现成的技术;真正的贡献在于组装方式和那个被反复验证的洞察:分开优化会失配。

几个我保留意见的地方:

  • 归因噪声\(u_t(m)\) 靠 LLM 给记忆打贡献分,这个分数错了会沿图传播放大。论文没有做归因质量的扰动实验,比如故意注入噪声看性能掉多少。
  • 基线强度参差。MemRL 在 BFCL 上 ±0.00 的标准差让我皱眉,部分 baseline 可能没调到最佳。
  • 七基准 SOTA 的说法有水分。固定记忆协议上被 ElasticMem 明显压制,论文正文承认了第二名,但摘要措辞偏乐观。
  • 成本未充分讨论。每个训练交互都要 LLM 改写查询、打分、验证时间边,Memory phase 每条轨迹都要蒸馏新记忆——token 开销不小,附录里硬件一节也没有给出端到端训练成本的对标。

工程上的启发倒是实打实的:如果你在做带记忆的 Agent 系统,又没法动主干模型,这套"LLM 先验 + 零初始化残差 + 交替块更新"的组合拳可以直接抄。尤其是零初始化残差这个设计——让学习过程从"一个能用的策略"出发而不是随机策略——在任何 LLM 输出作为先验、小模型做纠偏的场景都适用,不止记忆检索。

往深了说,这篇论文和 ElasticMem 代表了 Agent 记忆的两条路线之争:外挂式(冻结主干,记忆在外部演化)vs 内置式(记忆成为模型可训练的一部分)。表 4 的数字说明内置式上限更高,但外挂式的可迁移性和零训练成本在工业落地里权重极大。短期内我赌外挂式是主流,长期看两条线大概率会合流——毕竟人脑的记忆和提取机制,本来也是长在一起的。


觉得有启发的话,欢迎点赞、在看、转发。跟进最新AI前沿,关注我