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:作者用了一个划船的比喻——只更新记忆库(左)像只有左桨在划,船原地打转;只更新检索器(中)同样打转;只有双桨协同(右),存储和访问才能一起往前走。图做得挺直白,道理也是真道理。
🏗️ 方法:闭环怎么搭
先给一句话版本:冻结的大模型负责出题(查询改写 + 路由先验),一个轻量残差路由器负责在线纠偏,检索到的记忆集合既是生成的上下文,也是两路学习信号的耦合接口;训练时路由器和记忆库交替更新,永不同时动。

图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\),输出对先验的修正量:
这里有个细节我很喜欢:\(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{A}_t\) 是任务奖励减去 EMA 基线的优势估计,KL 项拉住策略不要偏离 LLM 先验太远。你想想看,检索过程本身不可微(离散 top-k + 状态化图),用 REINFORCE 系的估计器几乎是必然选择;方差控制就靠 EMA 基线和先验正则,都是很务实的工程件。
Q 加权混合检索:记忆价值直接进排序
检索侧,dense 路按描述嵌入相似度排,sparse 路按 BM25 排,然后进入 Q-Weighted Hybrid Retriever,用加权倒数排名融合把三路信号合在一起:
关键在最后一项:记忆自身的效用估计 \(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 残差:
即时项是任务奖励乘上记忆归因分,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: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前沿,关注我