Recuris: Recursive Experiential-Working Memory Evolution for Long-Horizon Agent Harnesses 精读

论文链接:arXiv:24876 代码仓库:Gen-Verse/Recuris 发表时间:2026年8月 机构:新加坡国立大学、斯坦福大学、牛津大学、普林斯顿大学——四所高校合作,纯学术阵容;企业模型 Doubao-2.0-Pro 仅作为"部署模型"(演化环跑在其上的被测骨干),Meta-Agent 由 Claude Code 实现 领域标签:cs.AI(智能体架构 / 递归自我改进 / 记忆系统)

一、论文背景

Agent Harness 是什么? 现在的 LLM 智能体早已不只是"一个模型":模型外面包着一层执行装置,负责管理记忆、调用技能、跟踪任务状态、与工具交互、验证结果——这层外部执行层就叫 harness(可类比为"飞机座舱仪表与操作规程",模型是飞行员,harness 决定飞行员此刻能看到哪些仪表、按什么规程操作)。当任务变长(几十轮工具调用、多个子目标),harness 的质量开始和模型本身一样重要。

长程任务的核心困难:随着交互历史不断增长,智能体会丢失对"当前任务状态"的把握——哪些子目标已完成、哪些还没做、哪些证据支持"已完成"的判断,这些信息被淹没在越滚越长的对话历史里。于是出现两个典型病症:一是"幻觉完成",模型嘴上说"已为您处理好了",数据库却一条都没改;二是技能调用错位,存了很多经验技能,但在需要的时候没调用、或在错误的时刻调用了无关技能。

递归自我改进(RSI)为什么难? 理想状态是智能体能把执行失败转化为对未来行为有影响的改进。但现有方法多从"最终成功/失败"这一个比特学习——它只告诉你"出错了",不告诉你该改技能库、改状态跟踪、改调用机制还是改验证器,于是记忆更新往往粗糙而缺乏针对性。改什么、怎么定位该改什么,是本文要解决的核心问题。

二、论文定位和关联工作

论文把自己放进三条谱系的交汇处,并逐一划清边界:

谱系代表工作核心思想与 Recuris 的关键区别
经验记忆/技能Voyager、AWM、ExpeL、Agent Skills、SkillOpt存可复用技能(代码/工作流/洞见)它们关注"存什么",Recuris 关注"何时调用"——由验证状态驱动而非全历史检索
工作记忆StateAct、ReflAct、Magentic-One、StructAgent维护显式任务状态状态更新要么靠固定规则要么靠模型自写,可信度无根基;Recuris 分离"状态提议"与"状态提交",检查器只认工具回执
递归自我改进Gödel machine、Gödel Agent、AlphaEvolve、Memento、EvolveMem改自身代码/工件/记忆改写面越大越不稳;准入靠单一聚合分数,诊断单元≠修补单元;Recuris 递归被限制在记忆控制层内、且按组件归因定点修补

定位结论:Recuris 占据最窄的改写层(记忆本身),但配上最精细的诊断证据(结构化轨迹)——这是它能在"稳定性"与"改进能力"之间站稳的原因。

三、问题定义

具体场景:长程任务中,冻结的 LLM 外面有一个可演化的 harness,如何让它随经验持续变好?

核心洞察:自我改进的瓶颈不在"改进器多聪明",而在故障不可定位。最终结果只给出"失败"一个比特;原始对话轨迹里,一次"该调用技能而没调用"是非事件——轨迹里根本不会出现它的痕迹。所以抽象问题是:如何把 harness 执行过程变成"可归因到组件"的结构化证据,使每次修补都有明确的靶子?

形式化:给定冻结策略 πθ 与工具集 T,任务 x 的执行产生原始轨迹 τ 与结果 y∈{0,1}。Skill Memory 定义为四元组 M_k = (E_k, W_k, ρ_k, C_k)——经验记忆 E(存什么技能)、工作记忆规格 W(状态模式与更新提议)、调用策略 ρ(在哪些执行事件触发检索、用什么键)、检查器集 C(观测是否支持状态变更)。求:一个更新序列 M_k → M_{k+1},使 held-out 任务成功率最大化,且不回退已解任务。 约束:LLM、Meta-Agent、定位/修补/验证程序全部固定——递归只发生在记忆控制层内部。

这个抽象的精妙之处:把"改进智能体"这个开放问题收窄为"在四个明确定义的组件上做有界、有门控的补丁",每一步都可解释、可回滚。

四、问题解法

方法是一个双层循环,共享同一条结构化轨迹作为证据总线。

4.1 任务内:验证式 EM–WM 耦合

类比:EM 像公司的制度手册,WM 像车间的看板。手册再全,工人不知道"现在该查哪一页"也没用;看板记录"这单还没发貨"且只有物流单据确认后才划掉,才保证不漏单。

  • 结构化工作状态 w_t:每个目标条目记录内容、状态、支撑证据、可选阻塞项。目标是 pending/done/blocked 三态。
  • 状态接地的技能调用:调用决策发生在执行事件上而非每任务一次。两种投递器:调用时投递(agent 起草一个改状态的工具调用时触发,检索键=该工具名,且起草的调用不执行、先注入技能再重新起草)用于 τ² 两个域;边界投递(回合边界按状态谓词触发)用于 Terminal-Bench。
  • 证据接地的状态更新:ŵ_{t+1} 由 W 提议,检查器 C 对照工具回执逐条评估,固定内核 K 只提交被支持的变更。调用技能不算完成证据,只有检查器确认的目标才能置 done——这是掐断"幻觉完成"的关键。

4.2 跨任务:有界递归记忆演化

类比:像医院的不良事件复盘会——不是把整个科室推倒重建,而是从结构化病历(轨迹)定位到责任环节(组件),只整改那一环,且整改方案要先通过"老病例不恶化"的审核(验证门)。

  1. 轨迹式故障定位:结构化轨迹 Γ 记录每步 (w_t, E_t, a_t, o_t, ŵ_{t+1}, c_t, w_{t+1}),把动作/观测与触发它的状态、被拒绝的提议关联起来。固定 Meta-Agent 读 Γ,产出诊断 D_k = {(故障 f_j, 归因组件 z_j)},z_j ∈ {E, W, ρ, C}。注意这是修复决策而非因果认定——归因给"最可能通过局部干预修好的组件"。
  2. 组件级修补:每个被归因组件产出一个编辑,其余组件原样拷贝(⊕_Zk 算子)。补丁空间被约束在可解释的组件内变更。
  3. 验证门准入:候选 M⁺ 必须修复源任务且在含锚定任务的 held-out 开发集上不回退,才被接纳;否则记忆保持不变。演化/门控/评测三切分预先固定。
  4. 有界递归:M_{k+1} 改变未来执行→产生新证据→支持下一次更新。底座模型、Meta-Agent、门全部不动。

4.3 全景对比

维度既有经验记忆 harnessRecuris
检索时机从初始指令或全历史一次性/每步检索执行事件触发(起草状态变更调用时)
状态可信度模型自写或固定规则检查器验证工具回执后才提交
更新粒度从结果整体重写记忆归因到组件、只补被归因者
准入标准模型自评或单一聚合分数修复源任务 + 不回退开发集

五、评估指标与实验证据

指标体系:主指标为任务成功率(环境验证器满分才算成功,avg@4);诊断指标拆出 read-action recall(该查的查了吗)与 required-write recall(该改数据库的执行了吗)——两者分离"知道做什么"与"做没做";另有六类失败模式发生率、故障定位准确率、每成功 token 成本。

基准:τ2-Retail(114 任务)/τ2-Airline(50 任务,双控工具对话)、SkillFlow(166 任务 20 族、程序性技能复用、程序化验证)、Terminal-Bench 2.1(87 终端任务)。10 个模型从 3B 开源到前沿。记忆只用部署模型 Doubao-2.0-Pro 的失败演化一次,再原样分发给所有模型。

主结果(表1摘要):

模型×基准agent 单独+RecurisΔ
GPT-5.6 Sol / τ2-Retail58.376.1+17.8†
Claude Opus 5 / τ2-Retail72.487.9+15.6†
Doubao-2.0-Pro / τ2-Retail58.181.4+23.3†
Qwen3.6-27B / SkillFlow42.258.7+16.6†
GPT-OSS-20B / τ2-Retail50.660.8+10.2†
Granite-4.1-3B / τ2-Retail9.723.0+13.4†

35/37 完成的模型-基准对提升;τ2-Retail 按任务长度分四分位,增益随长度扩大(+12.5 → +32.2);六类失败模式下降 20–86%(幻觉完成 ↓86%、零写 episode ↓80%)。

关键消融(τ2-Retail,456 episodes):

变体成功率Δ vs base
Base(无 EM 无 WM)58.1–
仅 EM60.1+2.0(区间含零)
仅 WM82.0+23.9†
模型自控注入(同库全量常驻)65.6+7.5†
EM+WM(Recuris)83.6+25.4†

演化环本身:86 个 held-out 任务上,9 个演化包全部以排零区间超过 M0(+9.01~+17.44);两个独立 Meta-Agent 实现(Claude Code vs DeepSeek Harness)收敛到同一组件族,互换差 −1.45 分,小于仪器噪声带 [−6.98,+7.27];门控使已解任务回退率 9.5% vs 重跑 25.9%。Terminal-Bench 上的适配模式经预算分解后诚实汇报:headline +26.4 主要由重试预算解释,等预算下学习效应 +2.3(方向性),但单任务 16 次 rollout 深检中 15:7 显著(p=0.006)。

六、效果优势的根源解释

对比对象:base agent 曾有效,因为它依赖模型自身在完整历史里找方向;经验记忆方法曾有效,因为技能确实封装了可复用知识。

baseline 的根本局限:三条因果链说明增益从哪来——

链 1:长程失败是执行问题,不是检索问题。 read-action recall 在所有变体、所有长度分位都保持在 88.0–97.9%——没有任何变体在"搞清楚要做什么"上失败。差距全部在 write 路径:Recuris 的 required-write recall 领先 base 26.7 分;base agent 在 42% 需要 write 的 episode 里一条 write 都没执行(Recuris 仅 16%),而四个变体首次正确 write 的中位轮次完全相同——变了的不是"何时动手"而是"动不动手"。WM 的验证状态让"未完成目标"始终可见,直接对治"零写"这一失败模式(↓80%),这是仅 EM(+2.0,区间含零)无法提供的。

链 2:技能价值是调用条件性的。 模型自控变体与 Recuris 携带字节相同的技能库,且放进上下文的技能文本严格更多,却低 18.0 分(65.6 vs 83.6)、每成功多耗 147k vs 101k tokens——甚至比不带任何技能的 WM-only(82.0)还差。机制:全量常驻缺"何时需要"的信号,模型在无关技能文本的干扰下反而更少执行必要 write(61.1% vs 82.4%)。这不是"技能内容不够好",而是"调用控制权必须在 harness 而非模型"。错误复利数据佐证:一旦某条 write 失配,后续 write 失配率在所有配置下超 60%,Recuris 进入该状态最少——在写时刻注入对的技能,防止早期错误污染整个 episode。

链 3:结构化轨迹使不可观测故障可观测。 注入已知故障的受控实验:仅凭结果定位组件的 macro 准确率 13.0%(低于恒答 33.3% 的地板),原始轨迹 37.0%,结构化轨迹 Γ 64.8%——增益集中在"非事件"类故障:调用故障在原始转录里一次都没被指认(0% vs Γ 的 38.9%)。定位准了,修补才有靶子;这也是为什么关键组件随域不同(τ2-Airline 靠 write review 承担 13.5 分、τ2-Retail 靠 status board 承担 17.3 分,双分离),设计期固定分配必然在某处出错,只能从轨迹里读出修复目标。

反事实:去掉递归只剩静态 M0,四目标模型上增益与零不可区分(附录 B);去掉验证门,dev 集会 condemned 两个补丁但 held-out 上伤害并未出现——门"宁枉勿纵"地丢弃噪声而非已证增益。

七、必要知识反推

领域知识层:理解 agent harness 的职责分解(记忆/调用/状态/验证),以及长程任务失败模式分类(幻觉完成、漏写、零写、错误级联……)——没有这个失败分类学,就提不出"故障可归因"的需求。τ2-Bench 的"环境验证器满分才算成功 + read/write 参考动作清单"这类评测设计知识也必不可少:没有 required-write recall 这个指标,“执行问题而非检索问题"的洞察无从表达。

方法论知识层:记忆系统与认知架构文献(工作记忆 vs 经验记忆的分工)、RSI 谱系及其稳定性困境(改写面与稳定性权衡)、组件级信用分配思想(区别于序列级奖励)。归因是"修复决策"而非因果识别——这个方法论自觉(避免过度声明因果)本身是必要知识。

工程知识层:结构化轨迹的记录设计(把 ρ 的触发、C 的裁决作为机制事件写入 Γ);验证门与三切分协议(演化/门控/held-out 互不渗透);配对 task-clustered bootstrap 统计;用"字节相同库"做调用控制权的受控对比;用仪器噪声带(重跑同包的波动)作为解读差异的标尺。

知识融合的关键节点:把"验证状态”(来自 StructAgent 系)与"技能调用"(来自 Agent Skills 系)耦合成一条证据总线——WM 不只是给模型看的看板,更是 ρ 的检索键和 Γ 的定位锚。三个领域各自成熟,融合点在于意识到状态的验证性同时解决了调用的时机问题和故障的可观测性问题——一石二鸟的结构性洞察。

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

  1. 调用条件性 > 内容完备性(信号利用类):同样的知识库,“谁知道何时需要它"比"里面装了什么"更值钱。证据:字节相同库,调用权在 harness 得 83.6、在模型得 65.6,甚至低于无技能 82.0。推广:RAG 系统的检索触发器设计、企业知识库的"场景化推送”、IDE 中的上下文注入时机、教育系统的"按需提示"。
  2. 非事件是最难诊断的故障(可观测性类):做过的事会留痕,没做的事不会。只有把"应该发生什么"显式记录(机制事件),非事件才变得可检。证据:调用故障在原始转录下定位率为 0。推广:分布式系统的缺失告警、安全审计中的"未执行的检查"、流程管理中的漏项检测。
  3. 有界递归优于无界重写(稳定性类):把改写面限制在少数明确定义的组件 + 验证门准入,比自由重写整个系统更稳且同样能持续改进。证据:门控回退率 9.5% vs 25.9%;8 个补丁 +51 技能且冗余不脆弱。推广:自改写代码系统的安全域设计、宪法修订 vs 全民公投、CI/CD 的渐进发布。
  4. 关键组件是域属性,需运行时发现(机制类):同一架构里承担主要增益的组件随域变化(双分离实验),设计期的固定资源分配必然在某处次优。证据:write review 与 status board 在两域上增益完全倒置。推广:组织诊断(瓶颈部门因业务而异)、模型架构搜索、个人学习策略(短板因阶段而异)。
  5. 用仪器噪声带校读差异(方法论类):任何 A/B 差异都应对照"重跑同配置"的固有波动来解读;小于噪声带的差异不构成证据。证据:两个 Meta-Agent 实现互换差 −1.45,落在 [−6.98,+7.27] 内,故"证据池而非诊断器携带改进"。推广:一切实验科学、A/B 测试、绩效评估。