论文链接:ERSkill: Evolving for Skill-Guided Adaptive Memory Retrieval 发表时间:2026年8月 机构:深圳国际工业与应用数学中心 + 深圳大数据研究院 + 香港中文大学(深圳)+ 中山大学深圳校区 + 深圳河套研究院 领域标签:cs.CL


一、论文背景

1.1 Agent 记忆的"半边进化"

LLM Agent 要从一次性助手变成持久协作者,就得记住几周、几个月交互里积累的用户偏好、事件变化和历史决策。围绕这件事,Agent 记忆研究已经相当热闹:A-Mem、MemoryOS、LightMem 等系统把交互历史外化为显式记忆库,用抽取、压缩、更新、遗忘等操作维护它。更新的"自进化"路线更进一步——让 Agent 复盘轨迹、蒸馏可复用资产:ReasoningBank 蒸馏推理经验,GEPA 进化提示词,Dynamic Cheatsheet 在测试时维护小抄。

但把这些工作放到一起看,会发现一个不对称:进化的都是"写入侧"和"推理侧",“读取侧"几乎原地不动。无论记忆内容被维护得多精致,查询到来时,访问记忆的方式往往还是那套预定义的稠密检索。MemSkill 是离这篇论文最近的工作——它进化"记忆抽取技能”,让记忆构造本身可学习,可查询时依然走固定的稠密检索入口。

1.2 查询是异构的,检索却是一把螺丝刀

固定检索策略的问题在于,记忆问答的查询天然异构。论文给了两个对照鲜明的例子:

  • “Alice 在夏威夷旅行时给 Bob 买了什么礼物?”——需要捞取一个具体事件,正确的动作是锚定实体、定位时间窗、取出那几条原子记录;
  • “为什么 Alice 后来不再计划和 Bob 再去夏威夷?”——需要把早期事件与后续发展连接起来,挖出因果链,正确的动作是沿着关系边扩展、把分散的证据串成线。

这两类查询要求的是质性不同的证据构建行为,而一个固定的检索器只能提供一种行为。用一把螺丝刀拧所有型号的螺丝,在简单查询上尚可蒙混,在证据密集型任务上必然失配。于是论文提出核心问题:LLM Agent 如何进化并学会组合复杂的检索动作,使其检索行为适配不同查询的异构信息需求?

二、论文定位和关联工作

论文的自我定位是"检索中心(retrieval-centric)的自进化框架",与两条研究线形成对照:

谱系代表工作进化对象查询时检索
非进化记忆系统A-Mem、MemoryOS、LightMem无(固定记忆管线)预定义
自进化 Agent(推理侧)ReasoningBank、Dynamic Cheatsheet、GEPA推理经验/小抄/提示词预定义(标准 RAG)
自进化 Agent(写入侧)MemSkill记忆抽取技能预定义(稠密检索)
ERSkill(读取侧)—检索技能 + 路由器可进化、按查询派发

可以看到,ERSkill 补上的正是最后一列的空白:把查询时的记忆访问本身当作进化对象。这个定位不需要推翻写入侧的成果——记忆库照建、经验照蒸馏——只是指出:如果读取口永远是同一个漏斗,写入侧再怎么进化,能倒出来的东西也被限死了。

三、问题定义

3.1 形式化设定

给定:交互历史 D、一组训练查询、验证集。目标:每个查询 q 到来时,选用与 q 信息需求匹配的检索行为 κ,在记忆库上执行 κ 构建证据视图 s,再由 LLM 生成答案。

三个关键形式化对象:

  • 结构化记忆 M(D) = (A, I, G)。A 是原子级记录(每条含文本、元数据、时间戳、实体集);I 是索引集合,提供进入候选原子的入口(嵌入索引、实体-原子倒排索引等);G 是图集合,用于原子扩展(相似度图、类型化关系图)。索引管"从哪进",图管"往哪扩"——这个二分直接对应原语的两大类。
  • 原语库 P(固定,共 7 种)。每条原语是状态转移 p: (q, s, M(D)) → s′。入口类三种:entity_search(实体锚定 + 实体-原子图 + 个性化 PageRank)、lexical_search(BM25 表面匹配)、dense_search(嵌入相似度);扩展类三种:temporal_focus_expand(时间窗取原子)、similarity_expand(沿相似度边传播)、relation_expand(沿类型化关系边,可约束 Cause/Reason 等偏好关系);外加 llm_process 处理原语(改写查询、过滤证据、为扩展生成 time_range 等控制变量)。
  • 检索技能 κ = (cκ, ρκ)。cκ 是技能描述与信息偏好(自然语言),ρκ = (pκ,1, …, pκ,Lκ) 是原语序列。技能以 markdown 文件形式存储——可读、可审计、可被 LLM 编辑。

关键设计决策:原语库在进化全程固定,技能只在"如何组合原语"上不同。这带来两个红利:搜索空间有界(不会进化出无法执行的野路子),且所有技能的执行结果可以累积进同一个经验结构(见 4.3)。

3.2 问题的真正难点

静态技能集的表达力终归有限,检索需求又因查询而异,所以真正要解的是技能-路由器共进化问题,难点有三:

  1. 探索效率:技能候选由 LLM 生成,若无记忆,会反复提议等价的检索程序,浪费进化预算;
  2. 能力 vs 可用性:一个技能"理论上最好"(oracle 能选中它时表现最优)不等于"部署上最好"——router 若选不对它,能力就是空头支票;
  3. 进化稳定性:无节制地接纳新技能会让技能集膨胀、router 选择空间失控,部署性能反而回退。

这三个难点分别对应论文的三个机制:经验 trie、双前沿分离、Pareto 剪枝。

四、问题解法

4.1 整体流程:图书馆的自动化升级

把 ERSkill 想象成一座图书馆的自动化改造:记忆库是馆藏与书目体系(索引+图);检索技能是馆员们各不相同的找书手艺——有的按主题卡找(dense_search),有的按作者名翻(entity_search),有的按关键词查(lexical_search),还有的擅长"顺藤摸瓜"(各种 expand);router 是前台接待员,听读者问一句话,就判断该派哪位馆员出马。检索行为是可组合、可解释、可精炼的显式程序,而非埋在检索器实现里的隐式逻辑。

推理时:query q 进来,router 打分选出 κ̂ = πθ(q; K),κ̂ 在 M(D) 上顺序执行原语得到证据视图 s_{Lκ̂},LLM 以 f_LLM(q, s) 生成答案。

4.2 Router:一个轻量到出乎意料的选择器

Router 的结构简单得近乎朴素:查询和技能各自用冻结的 Qwen3-Embedding-0.6B 编码(技能编码其描述、信息偏好和程序),两个嵌入经 Linear 层投影、拼接后送入两层 MLP,输出标量分数 uθ(q, κ),softmax 归一化成技能分布。可训练参数只有投影层和 MLP。

训练信号来自 rollout 得分:对查询 q 与历史技能集 K_q 中每个技能都有 r(q, κ) ∈ [0,1](实验中实例化为 LLM-as-a-Judge 准确率),softmax(r(q, κ)) 构成软目标分布,router 以软标签交叉熵优化:

L_router = −Σ (q,K_q,·) Σ_κ p̃(κ|q,K_q) · log Rθ(κ|q,K_q)

这个设计的要点是:router 从技能的文本描述就能给新技能打分——技能集扩大不需要扩输出层,嵌入编码天然泛化到没见过的技能描述,解决了"技能在变、分类器不能跟着重建"的难题。

4.3 经验 trie:把试过的路记在小本本上

技能候选生成是三阶段 Agent 工作流:分析器对失败/成功轨迹分别做逐案诊断(失败归因到 skill_capability_gap / skill_over_broad_boundary / answer_generation_mismatch 三种根因,及 retrieval_gap / synthesis_gap 两种失败模式);设计器聚合个案分析、技能目录、聚合指标与进化历史,产出高层进化决策(no_change 或 new_path_candidate);生成器把决策物化为具体技能字段与可执行 program JSON。

防止这个流程原地打转的,是经验 trie T:由于技能是固定原语库上的序列,每条根到节点路径代表一个原语前缀,共享前缀只存一次。每个探索过的路径存其训练 rollout、验证 rollout 和前沿状态。生成器提议候选时,排除 trie 中已记录的路径——试过的路线都记在小本本上,不再重复推荐;无论接受还是拒绝都有记录,失败的经验同样指导后续进化。这相当于把进化预算全部押给"没试过的新行为"。

4.4 双前沿:研发部与门店的分离

ERSkill 最有辨识度的设计是 Pareto 式双前沿。前沿(frontier)是已探索技能的活跃边界,保留紧凑、非冗余的技能。两条前沿分工明确:

  • 能力前沿 C_t(研发部):保留具有 oracle 侧价值的技能——即"如果每次都能为查询选中最优技能"时表现最好的技能集合。它追踪迄今发现的检索能力上限,允许大胆探索。
  • 部署前沿 B_t(门店):router 在推理时实际面对的技能集,只包含经过 routed 验证的技能——不仅要技能好,还要router 真的选得动它。

这套机制像一家公司把研发部与门店分开:新品先在研发部证明价值(进入能力前沿),再经门店试销、验证店员(router)真的卖得动才上架(进入部署前沿)。店员卖不动的新品不伤门店业绩,退回研发部打磨。

具体更新规则(每步 t):

  1. 能力前沿更新:候选生成 U_t 后,先用训练 batch 算临时前沿 C̃_{t+1} = Φ(C_t ∪ U_t; Q_t) 快速过滤,幸存者 V_t 再上验证集重算 C_{t+1} = Φ(C_t ∪ V_t; Q_val)。核心是前沿重算算子 Φ:按效用排序技能,只有当删除某技能不降低任何查询的 oracle 最优分 g_K(q) = max_κ r(q, κ) 时才删——保能力、剪冗余。
  2. Router 更新:把当前步的 rollout 实例写入窗口 W_{t+1},持续训练 router。
  3. 部署前沿更新:仅当能力前沿变化时,取新留存候选 H_t = U_t ∩ C_{t+1},构造候选部署前沿 B′_t = Φ(B_t ∪ H_t; Q_val),计算 routed 性能变化 Δ_route。接纳条件(满足其一):Δ_route ≥ γ_route(有 routed 增益),或 Δ_route ≥ −ξ_drop 且 |B′t| ≤ |B_t|(容忍小幅回退,换取更紧凑的部署技能集)。否则 B{t+1} = B_t。接受/拒绝结果写回经验 trie。

Proposition 2.1(oracle 安全的两级前沿更新):定义 oracle 覆盖 OCov(K; Q) = 平均每查询的 g_K(q),则每一步都有 OCov(C_{t+1}) ≥ OCov(C_t) 且 OCov(B_{t+1}) ≥ OCov(B_t)。证明思路不复杂:Φ 算子保 g_K 逐点不变,并集只增不减,拒绝则保持原集——两条前沿的 oracle 覆盖单调不降。这给了"探索不伤部署"一个数学保证:部署前沿可以落后于能力前沿,但永远不会退化。

4.5 进化的起点与成本控制

进化从三个单原语种子技能起步:semantic-clue(dense_search)、entity-focus(entity_search)、surface-fact(lexical_search),B_0 = C_0。工程上,ERSkill 大量复用 rollout:批量 oracle 表一次计算多处复用;router 更新后的 routed 性能用重放估算(选技能、查缓存表,不再重跑);新候选只增量评估并合并进已有表;技能 markdown 内容哈希缓存防止同名改内容的错误复用。昂贵的 rollout 只为新增查询-技能对执行。

五、评估指标与实验证据

5.1 实验设置

  • 基准:LoCoMo(多会话对话,233 训练/152 验证/314 测试)、LongMemEval-S(时间戳交互记忆,205/98/197)、PerLTQA(画像/关系/事件/对话等异构记忆源,439/272/483)。LongMemEval 上直接复用 LoCoMo 训练的 router 与技能,零训练迁移。
  • 骨干:Qwen3-Next-80B-A3B-Instruct 与 GPT-5.4-nano;判官 GPT-4o-mini;指标 F1 / BLEU-1 / LLM-as-a-Judge。
  • 超参:单 epoch;γ_route 取 0.00/0.00/0.02,ξ_drop 取 0.15/0.15/0.05(对应三基准);稠密检索统一 Contriever。

5.2 主结果:碾压式领先

Qwen3-Next-80B-A3B 骨干下(各指标为三基准平均):

方法类型F1B1L-J
A-Mem非进化30.1528.7545.00
LightMem非进化34.0829.7353.44
ReasoningBank自进化25.2819.8452.72
MemSkill自进化(最强基线)31.8627.9648.24
ERSkill自进化(读取侧)49.5549.1961.30

三项指标整体平均较最强基线提升 31.3%(GPT-5.4-nano 骨干下 28.1%),领先跨骨干稳定。LongMemEval 零训练迁移设定下 ERSkill 仍全面第一(Qwen3 骨干 46.79/53.31/59.39)——在 A 训练的技能直接用到 B 数据集上不掉队,说明学到的检索行为是可迁移的能力而非数据集补丁。

5.3 细粒度与成本证据

  • 细粒度(LoCoMo 四类问题):ERSkill 的优势在 Single Hop 与 Multi Hop 这类需要精准定位证据点的任务上最大——正是"检索行为适配查询需求"应有直接收益的地方。
  • 成本:LLM 构建类方法中最轻(LLM 只用于原子间关系抽取),推理 token 同处最低档而 L-J 最高——增益来自有针对性的证据构建,而非堆更多内容。
  • 消融:去掉技能进化(只留种子技能)与去掉 router(换 LLM 选技能)掉分最狠;去掉双前沿与去掉经验 trie 也各有损失。
  • 超参:训练 batch size 控制进化粒度——太大则进化步数少、太小则单步统计不可靠,20 是平衡点。
  • 进化案例:两条前沿的 oracle 准确率稳步上升;routed 部署准确率在技能替换初期可能暂时回落(router 尚未适应),随后恢复;前沿规模全程可控,弱技能被强技能覆盖后即被剪除。
  • 稳定性:5 次独立运行的变异系数在所有指标上低于 5.4%——进化可复现,不是抽奖。

六、效果优势的根源解释

为什么"进化读取侧"能带来 31.3% 的提升?三条因果链。

因果链一:查询异构性 → 固定检索失配 → 技能化使行为可组合可路由 → 证据密集型任务直接受益

方法差异:现有系统查询侧访问固定(单一稠密检索);ERSkill 把检索行为拆成原语组合、按查询派发。机制变化:“买礼物"类查询被路由到实体锚定+时间窗的技能,“为什么不再计划"类查询被路由到关系扩展的技能——每种查询都得到量身定制的证据构建路径,而非都过同一个漏斗。指标落点:Single Hop / Multi Hop 增益最大,正是需要精准定位证据点的任务;消融中去掉技能进化与去掉 router 掉分最狠——既要有好馆员,又要有会派活的前台,缺一不可。反事实:只有技能没有 router,技能集再丰富也是摆设;只有 router 没有技能进化,三个种子技能的表达力就是系统上限。

因果链二:经验 trie → 避免等价重复提议 → 有限进化预算集中于新行为

方法差异:无记忆的候选生成会反复提出语义等价的检索程序;经验 trie 以共享前缀压缩的方式记录全部探索路径(含被拒者),生成时硬性排除已存路径。机制变化:有限的 rollout 与验证机会全部花在"没试过的组合"上,且失败记录同样指导后续生成。指标落点:消融中 w/o experience trie(只从当前前沿生成、无历史记录)全面低于完整版;进化案例图中前沿规模可控、能力稳步爬升。这符合进化搜索的一般规律:在有界组合空间里,去重就是加速。

因果链三:双前沿 → 能力探索与部署稳定解耦 → router 错误不伤线上

方法差异:单前沿系统要么保守(不敢收新技能,能力停滞)、要么激进(新技能全上,router 面前选项暴增、选错概率上升);ERSkill 用 oracle 侧的能力前沿放行"原则上好"的技能,用 routed 验证的部署前沿只上"router 选得动"的技能。机制变化:一个技能再好,若 router 总选不中,就留在研发部不上架;部署前沿显式检验 Δ_route,且 Proposition 2.1 保证两条前沿 oracle 覆盖单调不降——探索的失败成本被隔离在研发部,门店永远只卖验证过的货。指标落点:消融中 w/o double frontier(接纳所有候选)掉分;进化案例中 routed 准确率短暂回落后恢复、前沿规模受控——没有双前沿,技能集膨胀与 router 失配会互相放大。

汇总

方法差异机制变化指标提升
检索行为原语化+技能化异构查询获得定制证据构建路径Single/Multi Hop 增益最大;整体 +31.3%
经验 trie 记录全部路径进化预算集中于新行为,失败经验可复用消融去 trie 掉分;前沿规模可控
双前沿分离 + Δ_route 验证探索失败不外溢,部署技能集紧凑消融去双前沿掉分;routed 回落可恢复

一句话根源:写入侧的进化把图书馆的书整理得越来越好,但读者能不能拿到书取决于找书的手艺;ERSkill 把找书手艺本身变成可组合、可路由、可进化的资产,并用"研发部/门店分离"保证进化在扩大家底的同时不砸门店的场子。

七、必要知识反推

假设一个毫无背景的人要做这项工作,最少必须掌握什么?

领域知识层

  1. Agent 记忆系统解剖:原子化、索引、图、检索管线这套词汇——不理解就不知道"哪些环节可以被技能化”。
  2. 检索基础件:BM25、稠密检索(Contriever/DPR)、查询改写的原理与互补性——三个入口原语正对应三种经典检索视角。
  3. 记忆问答基准的查询类型学:LoCoMo 的 single/multi-hop、temporal、open-domain 分类——查询异构性这个动机不是拍脑袋,是基准设计里明摆着的事实。

方法论知识层

  1. 技能/程序抽象:Voyager、Agent Skills 一脉的"把行为显式化为可执行程序"思想——技能的 markdown 表示与可编辑性直接继承此谱系。
  2. 双编码器匹配模型:共享冻结编码器 + 轻量打分头的套路——router 的设计就是它的一次极简应用。
  3. Pareto 前沿与质量多样性搜索:非支配保留、冗余剪除的思想——Φ 算子和"前沿"命名来自这里。
  4. 自进化系统的病历:ReasoningBank 进化什么、MemSkill 缺什么——知道前人进化了哪一侧,才能定位没被进化的一侧。

工程知识层

  1. LLM 工作流编排:分析器/设计器/生成器三阶段 Agent 的 prompt 设计与 JSON 输出约束——候选生成的工程实体。
  2. 评估缓存与增量计算:oracle 表复用、router 重放、内容哈希缓存——没有这些,rollout 成本会淹没进化本身。
  3. LLM-as-a-Judge 工程:各基准不同的判官 prompt 与判定尺度——r(q, κ) 这条生命线依赖判官的可靠性。

知识融合的关键节点

  • 信息检索 × 程序合成:把"检索策略"从超参数变成可组合的程序。
  • 进化计算 × 部署工程:Pareto 前沿本是搜索概念,双前沿把它翻译成"灰度发布/试销"的工程语义。
  • 软标签蒸馏 × Agent 路由:router 训练本质上是把 oracle 选择行为蒸馏进轻量匹配器。

八、论文中可以提取的通用性灵感

灵感一:把隐式策略显式化为可执行程序,才有进化可言(机制类)

核心思想:一个系统若想"自我进化”,前提是它的行为有可被编辑的显式表示。检索策略埋在检索器代码里时,谁也无法对它做变异、重组与选择;写成 markdown 程序后,分析、生成、剪枝全套进化机制立刻可用。论文证据:技能 = (描述, 原语序列) 的表示让 LLM 生成器能做"真实的图编辑"(前插节点、换原语、重写控制流),且同构程序可在 trie 中判重。推广场景:把客服 SOP、代码评审清单、数据清洗流程从"老员工脑子里的经验"写成显式可编辑程序,才有持续优化的抓手;任何"靠 best practice 但没人说得清"的环节,都是技能化候选。

灵感二:探索与部署分离的双前沿范式,可迁移到任何持续学习系统(范式迁移类)

核心思想:能力探索和面向用户的部署用不同的准入标准——探索侧只看 oracle 价值,部署侧还要验证"执行系统能否可靠激活它"。两层之间用单调不降的覆盖率保证兜底。论文证据:Proposition 2.1 证明双前沿 oracle 覆盖单调不降;消融去掉双前沿掉分;进化中 routed 准确率短暂回落可恢复。推广场景:推荐系统的候选池(离线评估好)与线上展示层(需模型能排对)分离;机器人新技能先在仿真过能力测试、再经真机小流量验证控制器调得动才全量;研发 KPI 与上线标准本来就是两条前沿。

灵感三:记录被拒绝的候选与接受的一样重要(机制类)

核心思想:进化系统的记忆若只存成功者,生成器会反复撞同一堵墙;把失败路径与前缀共享地存进 trie,去重与"此路不通"的知识同时到手。论文证据:经验 trie 同时记录接受/拒绝结果并反馈给候选生成,消融显示去掉后全面掉分。推广场景:招聘系统记录被拒候选人特征防止重复筛选;科研记录失败实验防止重复试错(负结果的档案价值);编译器/数据库的查询计划缓存天然就是这么做的——试错历史是资产,不是垃圾。

灵感四:蒸馏 oracle 选择行为,让轻量 router 泛化到新选项(机制类)

核心思想:当"选项集合"持续变化时,不要训练固定输出的分类器,而是训练一个基于选项文本表示打分的匹配器——softmax 得分蒸馏让新选项零样本进入打分空间。论文证据:冻结编码器 + MLP 的 router 只读技能描述就能给进化出的新技能打分,输出空间无需扩展;消融中 LLM 选技能显著劣于训练的 router。推广场景:工具路由器面对不断新增的工具;RAG 检索策略选择器面对新增知识源;任何"选项会长大"的分发问题。

灵感五:读取侧的进化杠杆不小于写入侧(领域认知类)

核心思想:一个存储系统的价值上限由两个因子的乘积决定——存了什么,以及怎么取。社区惯性是优化前者,但后者往往是被遗忘的乘数。论文证据:同样的记忆库(甚至比基线更轻的构建成本),仅凭读取侧技能化就拿到 31.3% 的平均提升;LongMemEval 零训练迁移仍居首,说明检索行为是可迁移能力。推广场景:向量数据库的检索策略调优常被忽视;个人知识管理的"检索界面"比"收藏习惯"更值得投资;“知识在哪”(写入)之外,“谁能找到它”(读取)是另一条独立生产线。

九、局限与收束

论文自陈三点局限:进化依赖 rollout 评估与 LLM-as-a-Judge 监督,训练时有成本(尽管部署前沿推理很轻);原语库固定,检索行为空间有界(未来可做原语发现);实验限于长期记忆问答,向规划、工具使用、个性化扩展是方向。一句话收束:记忆的价值不只在于存了什么,更在于取的方式能否跟着问题的形状进化——ERSkill 证明,当检索成为可组合的技能、选择成为可训练的路由、进化被双前沿护住下限,读取侧就是 Agent 记忆系统里下一座金矿。