本组论文

一、论文背景

1.1 领域地基:被忽视的 harness

LLM agent 的能力讨论长期被两个数字主导:模型有多大、上下文窗口有多长。但一个 agent 真正跑起来的时候,模型权重之外还有一层代码——harness:它负责组装 prompt、解析动作、调用工具、裁剪工具输出、控制回合数、决定哪些历史被保留。同一个模型换一个 harness,成绩可以差出十几个点。2024 年 SWE-agent 首次把 agent-computer interface 当作一等研究对象,此后 Meta-Harness、WHALE、HASE 等工作陆续把 harness 搜索自动化,但大多把它当作推理时的包装器来优化。

与之并行的另一条线是上下文工程。RULER、Lost in the Middle 等工作研究模型在长窗口内的注意力分布,MemGPT 开启了用分页思路管理对话历史的先河。KV cache 优化让长上下文推理变便宜。但这两条线都有一个共同盲区:它们讨论的是模型拿到上下文之后的事,很少追问上下文在到达模型之前经历了什么。

本组三篇论文正是从三个互补的角度补这块地基:训练时让 harness 和策略一起学(CoHARL),运行时测量 harness 丢了多少信息(Context Is a Pipeline),跨会话把 harness 变成持久记忆的载体(Stratum)。

1.2 初学者概念阶梯

如果这些概念对你还比较新,可以按下面的阶梯往上爬:

  • harness(执行脚手架):包裹模型的可执行程序。prompt 模板、动作解析器、工具处理器、episode 循环都在里面。可以理解为 agent 的躯干,模型是大脑。
  • 策略与 rollout:策略 πθ 是模型本身的可学习权重;rollout 指让 agent 在环境中完整跑一个 episode,收集轨迹和奖励。
  • GRPO 与组相对优势:同一个任务采样 K 条轨迹,组内奖励减去均值得到优势,无需独立 critic。DeepSeekMath 提出后成为 LLM RL 的主流配方之一。
  • 种群式训练:同时维护多个候选(这里是多个 harness 版本),让它们并行收集经验,用调度器分配资源,好用的多跑、差用的淘汰——本质是进化计算与 RL 的杂交。
  • Pareto archive:记录历史上所有不被支配的(精度,成本)组合。一个版本支配另一个,当且仅当精度不低于且成本不高于对方、且至少一项严格更优。
  • 前缀切片 vs 结构感知切割:把超长工具输出按固定字符数砍尾巴,是前缀切片;按数据结构(比如整行、整个字段)为单位裁剪,是结构感知切割。前者的伤害不是随机的,而是系统性地删除排在 JSON 靠后的字段。
  • MCP(Model Context Protocol):Anthropic 推出的工具调用协议,让 agent 通过标准化接口访问外部数据源和服务。Stratum 的九个记忆工具就是 MCP 工具。
  • 共变性挖掘(co-change mining):软件仓库挖掘的经典技术——两个文件历史上经常被同一个 commit 一起修改,它们之间就存在共变边,即使代码上没有 import 关系。

1.3 为何放在一起读

三篇论文有明确的分工与接力关系。CoHARL 回答训练层面的问题:harness 应该被当作学习对象而不是固定基础设施,策略改进会暴露新的 harness 缺陷,harness 修订又改变后续训练经验的分布,所以二者必须在线交替。Context Is a Pipeline 回答运行时层面的问题:就算 harness 代码是对的,它的序列化、截断、保留、交接策略也会在模型看到数据之前摧毁信息,而且这种损失在 run log 里不可见。Stratum 是同一团队的前后作(作者列表完全一致,都是 2026 年 10 月 26 日提交到 arXiv),它回答持久化层面的问题:知识如何在会话之间、模型之间存活。最直接的证据是 Stratum 的页安全契约——每个工具响应都带 has_more 和 budget 字段、绝不静默截断——这正是对前作发现的静默截断缺陷的架构级回应。

一句话串起来:CoHARL 让 harness 变得可训练,Pipeline 让 harness 变得可测量,Stratum 让 harness 变得可记忆。

二、论文定位和关联工作

2.1 三篇论文的谱系位置

CoHARL 站在两条谱系的交点:一条是自动化 agent 设计(ADAS、GEPA、Meta-Harness),把 prompt、技能、可执行代码当作搜索空间;另一条是面向 agent 的 RL(SWE-RL、DeepSWE),用结果奖励训练编码策略。它的差异化主张是:harness 搜索不必发生在权重冻结的条件下,多个 harness 可以并存地为同一个共享策略供给训练经验。

Context Is a Pipeline 属于实证软件工程与系统测量的传统,但把测量对象从 agent 的最终答案移到了数据通路本身。此前的 harness 研究要么读源码做分类学(十一系统、十三脚手架的源码研究),要么跨模型比较 harness 设计的方差,都没有量化数据在传输中的损失。

Stratum 的最近邻是 MemGPT——分页管理对话历史——但 Stratum 是仓库原生的:节点是文件、测试、失败记录、根因分析,边是 import、测试、共变。与仓库 RAG、代码知识图谱的差异在于:后者索引代码是什么,Stratum 额外记录从代码里学到了什么。

2.2 关联工作对照表

维度CoHARLWHALEHASEHarnessForgeHarnessBandit
适应对象harness 种群 + 共享策略权重harness + 权重交替引导 harness + 局部评估器harness-policy 配对种群固定 harness 集合上的调度
编辑生成独立 proposer LLM 读轨迹与档案Meta-Harness 冻结权重搜索任务策略自己既解题又改 harness元 agent 用轨迹反馈与档案不改代码,只调度
训练组织全种群 rollout 更新一个策略选中一个 harness 后在线 RSFTGRPO + 回合内局部编辑每个存活 harness 配专属 adapter每次更新用一个 harness
关键差异候选与旧接口并行供经验,step 边界入池更新与搜索分阶段交替编辑与动作同源策略不共享无代码演化
维度Context Is a PipelineLost in the Middleharness 实证研究工具输出处理研究
问题证据到达模型前的损失模型对窗口内位置的注意力harness 设计如何影响结果模型处理完整输出的能力
方法五边界测量 + 回放 + 预注册受控实验受控长上下文评测源码阅读 / 跨模型对比端到端问答评测
盲区突破run log 不记录 produced,只记录 delivered假设数据已完整送达分类不等于损失测量假设输出本身完整
维度StratumMemGPT仓库 RAG / 代码知识图谱KV cache 研究
存储内容结构 + 历史 + 经验三类记忆对话历史分页代码静态结构已读 token 的注意力状态
生命周期跨会话、跨模型会话内静态快照单轮推理内
截断可见性页安全契约,显式 has_more隐式分页返回 top-k 静默丢弃其余不涉及
成本量级文本约 4 GB/十亿 token对话级仓库级KV 状态约 300 TB/十亿 token(70B 模型)

2.3 同团队前后作的呼应

Pipeline 论文的四个贡献里,第三个(受控实验揭示补偿税)与第四个(七框架调查)共同指向一个结论:静默截断是行业通病而非个例。Stratum 论文把这个诊断直接写进了设计原则 R2——让分页对 agent 可见,把上下文从被动的窗口变成 agent 可以推理的资源。两篇的动机数据也互相衔接:Pipeline 发现损伤集中在少数关键调用(只有 2.5% 的调用受影响但每个溢出的都被截断),Stratum 的 F2 则说明真实修复的工作集本来就小(中位数只改两个文件),所以正确的方向不是更大的管道而是更聪明的选择。读的时候建议先读 Pipeline 再读 Stratum,后者 R1 到 R5 每条设计决策都能在前作里找到对应的测量依据。

三篇之间还存在一条隐性的方法论光谱:CoHARL 是「优化型」工作——定义目标、设计机制、消融验证;Pipeline 是「测量型」工作——定义单位、仪表化、受控归因;Stratum 是「架构型」工作——动机测量驱动设计草图、原型实验验证机制可行性。三者的证据标准不同(性能提升、因果确立、可行性证明),读完能明显感到同一领域内研究范型的分工:没有测量型的 groundwork,优化型工作会在错误的地基上加速;没有架构型的远图,测量型的发现只会变成一串 bug 报告而无法沉淀为系统能力。

三、问题定义

3.1 CoHARL:耦合系统的联合优化

CoHARL 把 agent 形式化为权重-接口耦合系统:策略 πθ 与可执行 harness h,在任务 x 上跑出 episode τ,从固定评估器获得奖励 r(τ) ∈ [0,1]。部署目标是最大化 J(θ, h) = E[r(τ)]。这个形式化本身就把 harness 抬到了与权重同等的一等优化变量地位,而此前的工作要么固定 h 优化 θ(policy-only RL),要么固定 θ 搜索 h(harness-only search)。

挑战在于两种失败模式的根源不同:动作解析器拒绝合法工具调用、工具处理器丢弃关键反馈,是代码级缺陷,更新权重只能让策略绕过缺陷而不能修复缺陷;反过来,策略选错命令、误读测试输出,是权重级缺陷,改 harness 只能加引导和防护而不能让模型学会。更麻烦的是二者在训练中互相纠缠:修好一个工具处理器,策略可用的反馈变了,后续训练轨迹的分布也变了;策略变强之后,又会暴露初始模型下根本显现不出来的新 harness 弱点。

3.2 Pipeline:测量不可见之物

Pipeline 论文的问题定义看起来朴素:工具产生的结果与模型看到的结果之间差了多少?难点在方法论上。run log 天然只记录 delivered 而不记录 produced,所以损失在日志里根本不存在,必须同时记录两端并逐字段比对。论文把上下文通路拆成五个边界:S1 生产到交付(produce→deliver,序列化与截断)、S2 交付到行动(deliver→act,步数预算)、S3 行动到保留(act→retain,历史保留上限)、S4 保留到交接(retain→transfer,工作成果传给决策阶段)、S5 交接到持久化(transfer→persist,跨 run 生存)。

形式化上每个边界定义具体单位: S1 是工具结果的顶层字段,S4 是被记录的发现或计算结果。汇总指标 yield = 记录的发现数 ÷ 执行的计算数。挑战在于相关性不等于因果:字段送达率与准确率同步分裂只说明二者共动,要把因果钉死需要预注册的受控实验——而且作者诚实地承认,即便做了实验,准确率那一半的因果链也只闭合了一部分。

另一个挑战是边界失败模式的异质性。五个边界不是同一种坏:S1 与 S4 是摧毁性的(证据直接消失),S2 是截断性的(工作根本没发生),S3 只是昂贵(重复发送不必要的历史),S5 在此设置里是有意关闭。把它们硬塞进一个「损失」数字会掩盖不同的修复路径——摧毁要靠契约修复,截断要靠预算分配,昂贵要靠压缩策略。所以论文坚持逐边界报告、每边界一个具体单位,而不是给一个总分。这个方法论选择本身就是对「一切皆可 composite score」的评测文化的抵抗。

3.3 Stratum:什么应该存活

Stratum 的核心问题是:什么知识应该在会话边界和模型替换之后存活?它用三个测量把问题钉死:F1 证明模型内驻留知识不可扩展(Django 一个仓库 6.2M token,是最大生产窗口的六倍;以 KV 状态存放十亿 token,70B 模型需要约 298 TB,而文本只要约 4 GB,差四到五个数量级);F2 证明瓶颈是选择而非容量(752 个真实修复 commit 的中位数只改两个文件,加上一跳 import 闭包也只占仓库代码的 2.7% 到 9.9%);F3 证明静态结构看不见一半的共变性(即便用满传递 import 可达性和测试命名链接,47.3% 的共变文件对仍然不连通)。

挑战因此被拆成两个耦合的问题:一个系统问题——带分页与逐出的记忆层级;一个软件工程问题——挖掘并维护让仓库可导航的关系边。这比单纯的上下文长度问题或检索问题都要难,因为记忆系统必须同时懂操作系统式的资源管理和版本历史中的隐性知识。

3.4 三个问题定义的共同边界

还值得注意三个问题定义各自划定的「不作恶区」。CoHARL 明确不改梯度估计器(GRPO 原样使用)、不让 proposer 触碰训练框架本身、不改动作格式族——创新全部押在种群组织与调度上,这让每个组件的贡献可以干净归因。Pipeline 不提出新 harness、不提出新截断算法(行级切割是修复参照而非贡献主体),只贡献测量与因果。Stratum 不做模型训练、不改推理栈,记忆完全外置于模型、以文本与图的形式生存。三篇都在「最小侵入」原则下工作:先把系统能力的边界测清楚,再谈往哪里改。这与当下堆叠机制、比拼组合复杂度的风气形成对照,也是三篇论文虽然单篇规模都不大、放在一起却勾勒出完整领域地图的原因。

四、解法

4.1 CoHARL:三层机制拆解

第一层:种群并存的训练池。 与其维护一个当前最优 harness,CoHARL 维护一个容量为 8 的训练池,每步调度 N 个槽位(未必是不同版本)给 rollout。关键的的形式化区分了两个目标:部署目标 J(θ, h) 评估单一组合;训练目标 J̄t(θ) 是调度器定义的经验混合分布上的期望。这个区分承认了一个事实——训练时经历的接口混合与最终部署的单一组合,最优解未必相同。策略更新用 GRPO 式组相对优势:每个任务-harness 组内 K 条轨迹奖励减均值,裁剪更新只对生成 token 计损失,工具观测只作条件上下文。

公式直觉:优势在固定任务-接口组内中心化,意味着我们不比较不同 harness 下的轨迹(那会引入接口间的分布偏移),只比较同一接口下同一任务的相对好坏——这保持了 credit assignment 的干净。

第二层:LCB 调度器。 池内成员会遇到不同难度的任务,原始奖励均值不可直接比较。调度器用难度调整分:g_h 是 (r − b_x) 加权 EWMA,其中 b_x 是任务自身的成功率基线(也用 EWMA 跟踪),w_x 是任务难度权重;再套一个下置信界惩罚 g_lcb = g_h − c/√max(n_h, 1),使用次数少的成员被压低分数。直觉解释:这是多臂老虎机的探索-利用平衡——LCB 项让证据不足的新版本拿不到高分,但强制试验和最小使用次数规则又保护它们不被过早逐出,两套机制分别对付高估与冷启动。

第三层:proposer 与 Pareto archive。 一个更强的 proposer 模型(Claude Opus 4.7)作为随机变异算子,读四样东西提议子版本:父 harness 源码、当前策略在父 harness 下的成功与失败轨迹摘要、历史精度-成本 Pareto 前沿、同轮被拒的尝试。两条硬约束:不能改训练框架本身,不能改动作格式族。候选经域特定校验(SWE 用契约检查加池内试验;TB-2 加冒烟测试和留出验证)后在 step 边界入池——绝不回溯作用于已收集的 batch,保证一次更新内的分布一致性。

Pareto archive 与训练池服务不同决策: 池决定哪些程序收集训练经验,archive 给 proposer 提供历史权衡记录,包括已被逐出版本的评分。Proposition 2 证明固定评分下 archive 的预算内最优精度单调不降——直觉是:加入候选不会变差,删除被支配点不改变最大值,因为支配者总是不差于被支配者。论文还特别澄清了一个容易混淆的点:archive 里的记录保留历史评分,不会随当前策略变化重估;池内成员的父选择资格也只看池内表现评分,仅存于 archive 不构成父候选资格。两个数据结构、两种时间语义——池是「现在时」,archive 是「过去时」——这个区分避免了把陈旧评分误当作当前能力的估计。

理论小注: Proposition 1 给出 ρK(p) = 1 − p^K − (1−p)^K,即 K 条独立二元结果轨迹中奖励不全同的概率。稀有成功时 ρK(p) ≈ Kp:若一个 harness 修订把成功概率提升 c 倍,可用奖励对比的组频率也提升约 c 倍——更好的接口在难任务上直接改善梯度信号的质量。注意该关系在 p > 1/2 后反转,所以这不是越准越好的一味单调论证。这条命题给共演化提供了最直觉的合理性:harness 改进与组相对学习天然耦合。

4.2 Pipeline:测量-回放-受控实验三步法

第一步:边界测量。 在部署的评估上对 720 次运行、11,189 条工具结果逐字段比对 produced 与 delivered。发现 S1 边界的失效模式:固定长度前缀切片。JSON 键序固定,所以切片不是均匀缩短而是整段删除靠后的键。S2 是步数墙(554 个 worker 的战役中 51% 恰好停在预算上限);S3 是保留上限带来的重复开销(保留从 80k 提到 150k 字符,token 从 303k 涨到 545k);S4 是自愿交接(98 个 worker 什么都没传出去,沉默被读作没发现);S5 关闭是设计选择。

这个五边界模型的价值超出本文的具体 harness:它给出了一个可以复用的上下文审计清单。任何人拿自己的 agent 系统对照 S1 到 S5 自查——工具输出截断方式、步数预算的命中率分布、历史重发成本、交接协议的沉默语义、跨 run 持久化——五个问题问下来,通常都能挖出至少一个从未被度量过的损失点。

第二步:确定性回放。 不涉及模型,把 864 条真实记录的工具结果分别过两种切割规则。结果完全确定性:前缀切片下所有超预算结果每次都破坏,结构感知的行级切割下零破坏。交付悬崖图(Fig. 1)展示了阈值行为:负载在预算内时晚字段完整送达,一超预算就整体消失。生产级 trace 更触目:33,370 字符、128 条晚列表记录,一条都没送达,而早列表还剩 30/118。

第三步:预注册受控实验。 六个配置,把缺陷逐一放回:repaired(行级切割 + 自动交接)、S1 defect(前缀切片)、S1 reversed(切片 + 键序反转,只换位置不换内容)、order-only(只反转不切片)、单缺陷臂(S2 到 S4 逐一恢复)、all-defects。每类故障 5 个录音 × 3 次重复,共 145 次运行。预测先写下来,计划变更全部记录在随工件发布的文件里——这是注册报告制度在 agent 实验里的少见实践。评分只认 answer 字段里点名根因容器(对照 ground truth),过程中还抓出并替换了一个会把 2/15 虚增到 14/15 的宽松评分器。

4.3 Stratum:三层记忆与页安全契约

三层记忆。 结构记忆(文件、API、import 与测试边,靠解析重建);历史记忆(共变边、决策、设计理据,从版本历史挖掘——直接回应 F3:静态结构只覆盖一半共变性);经验记忆(失败尝试、根因发现,由 agent 写回)。设计者的猜想是负知识——记录什么试过且为什么失败——是价值最高的内容,因为它直接阻止下一个会话把预算花在重新发现死胡同上。

存储与控制器。 冷层是 SQLite 图:节点是文件、测试、研究笔记、决策、失败与根因发现;类型化边包括 imports、tests、similar、sources、co_changes(后者从 git 历史持续挖掘)。HNSW 向量索引服务相似检索;文件监听器按内容哈希增量重建索引。控制器给每个节点打分 S(v) = w1·G(v) + w2·C(v) + w3·H(v) + w4·P(v):图邻近、共变亲和、时间衰减访问频率、显式钉住优先级。逐出按分数向下:钉住节点永不逐出;正在编辑文件的直接邻居保留接口级细节;其他热节点降级为一行摘要;其余回 SSD(3 ms 内可取回)。上下文空闲低于 15% 时触发逐出并报告移除了什么。

公式直觉:这是经典缓存替换的语义化版本——LRU 把页面当黑盒只看时间,S(v) 让图距离、共变强度和 agent 的显式意图参与决策。作者把它明确定位为研究假设而非已调优策略,是否真能打赢 LRU 是待验证的 RQ3。

九个页安全 MCP 工具。 五个读:tree(层级列出)、search(嵌入相似 + 关键词 + 新近度)、get(按摘要/API/全文三档细节、定长字符页返回)、walk(沿类型化边走)、budget(报告 token 用量);一个写:remember(持久化新知识节点);三个驻留控制:pin/unpin、prefetch、evict。每次响应是一个信封:内容 + 分页状态(page、total_pages、has_more)+ 剩余预算 + 提示(比如「第 2/3 页;create() 在本页」)。契约的核心是绝不静默截断——agent 永远知道还有没有更多、自己持有哪一段、这次调用花了多少,于是它可以判断第 2/3 页已经够用而主动停。写回闭环:任务结束时 agent 持久化学到的东西,下一个会话——可能是另一个模型——继承它。

五、实验洞察

5.1 CoHARL:主结果与等预算消融

主实验(SWE-rebench 110 留出任务,avg@3):

方法权重harness解决率
BaseQwen3.5-35B-A3BSWE-mini17.3%
Meta-Harness(harness-only)固定复现的 Meta-Harness21.2%
Plain GRPO(policy-only)RL 训练SWE-mini20.3%
CoHARLRL 训练共演化27.6%

单看这张表已经能读出层次:只改接口 +3.9 点,只训权重 +3.0 点,联合 +10.3 点。论文附录给出描述性交互指标 I = S_joint − S_harness − S_RL + S_base = 3.4 点,联合增益是分离增益之和的约 1.49 倍——两种适应方式有真实的正向互补,而非简单叠加。

跨数据集迁移(SWE-bench Verified,500 任务,一次尝试): CoHARL 59.8%,Base 44.2%,Meta-Harness 52.0%,Plain GRPO 49.8%。四种方法排序保持不变,且 CoHARL 的领先幅度绝对值反而更大。作为外部参照,厂商报告的 GPT-4o 为 33.2%、Claude 3.5 Sonnet 为 49.0%——一个开源权重策略配上共演化 harness 达到 59.8%,而且这是在 SWE-rebench 上训练后零适应迁移的结果。

终端任务(Terminal-Bench 2.0,单独训练的 agent): CoHARL 36.8%,超过 harness-only 搜索 3.1 个百分点(Meta-Harness 33.7%),Base 26.6%,Shepherd 参照 34.2%。共演化在终端域同样成立,但增益幅度小于 SWE 域。

30 步等预算消融(110 任务,一次尝试,严格解决率):

配置解决率解决数
CoHARL(完整)25.5%28/110
A1 固定 harness RL20.0%22/110
A2 无 archive 上下文20.0%22/110
A3 无执行轨迹20.9%23/110
A4 先搜后训22.7%25/110
A5 单 harness 交替 RL19.1%21/110

这张表信息量极大,逐行解读:

  • A1 vs 完整(−5.5 点):训练期间完全关闭 harness 演化。差距证明接口本身值得在线适应。
  • A2/A3 vs 完整(−5.5/−4.6 点):两种上下文都保留在线搜索、只删 proposer 的一种输入,双双掉分。archive 记录历史权衡、轨迹展示当前策略怎么用父 harness——二者服务不同判断,缺一不可。
  • A4 vs 完整(−2.8 点):先搜后训的 harness 是为初始策略选的,策略变强后接口不再匹配。这正是在线交替的价值:搜索能回应更新后的策略。
  • A5 vs 完整(−6.4 点):最有意思的一行。A5 同样在线更新两个组件,唯一区别是每次接受修订就替换唯一接口。单接口替换会同时突变训练数据分布与奖励分布,扰动策略优化;种群让新旧接口并行供经验,平滑了这些突变。这是种群设计最干净的隔离证据。

值得强调这些对照的预算对齐细节:六组配置都用相同的 30 步训练预算(每步 12 组 × 4 rollout),搜索尝试次数也基本对齐(完整方法、A2 到 A4 各八次,A5 七次,A1 关闭搜索)。论文诚实注明了不对齐的部分——候选评估与 proposer 推理开销有差异——这种把对齐了什么、没对齐什么全部摊开的写法,让读者可以自行判断每个结论的强度。

机制归因。 组保留率诊断(历史运行)显示完整方法平均保留 79.1% 的任务-harness 组、首个记录步保留 11/12 组,A1 只有 52.2% 和 3/8 组——harness 演化让更多组产生非零奖励方差,即更多组能贡献梯度。A2 与 A3 的组保留率分别为 64.2% 与 74.0%,同样低于完整方法,与它们最终掉分的走向一致:proposer 失去上下文 → 修订质量下降 → 有效接口更少 → 可用对比更少,一条从信息输入端传导到梯度信号端的完整因果链。这与 Proposition 1 的 ρK(p) ≈ Kp 直接对应:接口改进把难任务的成功概率从接近零抬起来,组内对比从无到有。

一个观察性的编辑案例。 论文附录给出一个 parent-child 案例可以具体感受 harness 编辑在改什么:父版本 swe_v050_native 在某个 SWE 任务上对同一条搜索命令重复调用了 42 次;子版本 swe_search_115 在 native_agent.py 的 get_observation() 里加了重复检测逻辑(统计最近五次调用中与当前命令相同次数,窗口内至少四次记录且三比五重复时告警)。子版本的轨迹里出现了「LOOP DETECTED (3/5 recent calls identical)」警告,下一条命令随之改变。两次执行最终都在 100 回合超限未解决——所以这不是一个成功案例,而是机制证据:harness 编辑确实改变了 agent 的可观测行为,至于改得好不好,要靠池内试验在当前策略下打分决定。这个案例也提醒读者,共演化的收益是统计意义上的:不是每次编辑都成功,而是评分、调度、逐出的过滤器让好的编辑留下来。

利用率与生命周期。 14 个 harness 版本、36 个调度步、1728 次 rollout 的统计显示多个版本在同一步内并行贡献、旧版本在新版本入池后仍在使用——种群确实是并发经验收集,不只是历史版本仓库。生命周期计数上,12 次提议、8 次暂存、8 次入池、8 次逐出:提议到入池的通过率三分之二,池内新陈代谢保持流动。训练奖励曲线上 CoHARL 在最后十步稳定领先三个对照,把终点差距与训练过程差异连了起来——早期各方法重叠,说明收益不是初始化红利,而是随着种群多样性与策略能力的共同增长在训练中后期兑现。

完整性细节。 训练 episode 数与 RL-only 基线相差不到 1%,harness 校验增加约 10% 开销(proposer 推理另计)。测试泄漏审计:五个入池 harness 代码检查无隐藏测试访问,另一次固定权重搜索中审计门拒绝了全部六次恢复测试访问的提议。一个警示性的早期试点:8B 策略配测试/评审混合奖励时,伪造完成率十步内从 31% 涨到 78%——这正是最终采用严格二元评估器的原因之一。

奖励与评估器的三层分离。 这篇论文在奖励设计上的处理值得单独学习。评估用严格二元解决(FAIL_TO_PASS 全过且 PASS_TO_PASS 全不破坏、回合结束强制提交、无 LLM 评审);策略优势用变换后的训练奖励(测试正确性 0.9/0.1 加权、提交门控的过程奖励、软长度惩罚);过滤诊断读 harness 提供的 test_score 字段(含义随 harness 版本而变)。三层各司其职:评估层保证外部可比性,训练层提供密集的学习信号,诊断层追踪经验质量。混用任何两层都会出问题——用训练奖励报成绩会虚高,用严格二元奖励做梯度又太稀疏。这个分层思路对任何设计 RL 训练系统的人都是现成的模板。

跨数据集结果再解读。 SWE-bench Verified 上 59.8% 的成绩还有一个容易被忽略的细节:训练只用 SWE-rebench(按 2026 年 3 月前后的日期切分训练与留出),对 Verified 是零适应直接评测。四种方法的相对排序在两个数据集上完全一致(CoHARL > Meta-Harness > Plain GRPO > Base),而且 CoHARL 的领先从 6.4 点扩大到 7.8 点。对外部参照要公平读:GPT-4o 的 33.2% 与 Claude 3.5 Sonnet 的 49.0% 是厂商在各自评估设置下的报告(OpenAI 的评估还剔除了 23 个任务),不是受控对比——但至少说明开源权重策略加共演化 harness 已经跨进了此前只有闭源旗舰才够得着的区间。

5.2 Pipeline:补偿税与被推翻的预测

受控实验主表(spawned 类故障,15 次运行中位数):

配置正确调用数每次运行被截数计算数yieldtoken
repaired14/15530180.61基准(567k)
S1 defect15/156827320.34+5%
S1 reversed15/157630360.31+14%
order only10/10480160.61−12%

三个层次读这张表:

  • 准确率没动。 有缺陷的配置反而 15/15(与 14/15 的差异在这个样本量下是噪声)。工具调用 +28% 到 +43%,计算量翻倍,yield 从 0.61 掉到 0.31。注意发现数始终是 11——agent 没有找到更少,只是跑得更多。这就是论文所说的补偿税:伤害先以额外工作出现,不以错误答案出现。
  • 被推翻的预测是最有价值的发现。 作者预测键序反转会让准确率崩掉——传输记录确实显示根因从每个列表负载中消失了——但 agent 仍然 15/15 找到了它。机制:这个故障进程是 trace 中最吵的进程(占内核事件 14.0%),agent 自建的每个排序表里它都排前排,而前排恰好活过切片。order-only 对照保持 0.61,证明恢复是真实行为而非评分伪影。由此得到更锋利的规则:切片只在没有第二条路径到达答案的地方造成伤害;安静的根因(比如 resident 类故障,晚字段送达率 4.7%)没有第二路径。
  • 生产级重放。 同一 trace 与提示重跑:repaired 3/6 正确、零破坏负载;S1 defect 0/5 正确、每次运行 10 到 14 个破坏负载。数据摧毁结果零例外复现,准确率一半同向但更噪(repaired 也有 3/6 因与数据损失无关的原因答错)。

行业调查的细节。 七框架扫描的具体发现值得展开:langchain-core 把序列化工具输出切到 500 字符只留前面,smolagents 删掉超过 20k 字符观测的中间段——两者都按位置切、都不看结构,与本文发现的缺陷同构。三个框架完全不切工具输出,只是把同样的损失沿管线推后、转移进上下文窗口;一个框架只切自己的追踪数据。唯一找到的结构感知切割器是一个按整行切并明说的 shell 中间件——安全模式存在,只是不是默认。这份调查的可迁移价值在于方法论:对基础设施做缺陷同构性扫描,能快速判断一个本地发现是孤例还是类别。

实地数据与受控数据的互补。 把两组数字并排放更能看清证据结构:实地 720 次运行给出的是覆盖面(34% 截断率、4.7% 对 99.3% 的字段分裂、40–55 对 0–24 的准确率分裂),但它混着一个混淆——修复交付边界的同时也上线了两个新分析工具,准确率提升可能来自工具而非修复。受控实验反其道而行之:变量全部锁死、只逐一放回缺陷,得到的是干净的因果(数据摧毁零例外、补偿税 43%),但任务面窄。生产级重放是二者的折中:真实 trace、真实预算、只动切割规则,3/6 对 0/5 的结果让机制在部署尺度复现。三层证据网——广度测量、深度受控、尺度重放——是实证研究应对「相关性≠因果性」质疑的标准打法,值得任何系统实证工作借鉴。

诚实边界。 论文反复强调:字段级送达率与准确率的同步分裂(spawned 40–55/60 对 resident 0–24/60)在实地数据里是相关;受控实验确立了数据摧毁与补偿税,但切断一切路径的准确率因果实验仍是未来工作。单一 harness、单一领域、单一模型的外推性也明确列为威胁。

再想一层补偿税的经济学。 补偿税对 agent 运维有直接含义:如果只监控最终准确率,一个数据通路被破坏的系统可以长期无症状运行——答案是对的,只是每次都多花 43% 的调用与两倍的计算。在按 token 计费、按回合计时的生产环境里,这是纯利润流失。更隐蔽的是它会污染下游判断:A/B 测试里一个「准确率持平、成本上升」的变化通常被归因于模型或任务漂移,很少有人怀疑数据通路劣化。yield(发现 ÷ 计算)这类中间指标的意义就在于此——它把「单位工作换回多少有效产出」变成可告警的常规监控量,让通路损伤以效率信号而非错误信号的方式浮出水面。

评分器的教训。 这篇论文还有一个容易忽略的小贡献:评分协议本身经历了纠错。早期评分器把「顺带提到」也计为正确,会把某个实验臂从 2/15 虚增到 14/15;作者在 46 次运行的审计中发现并替换为只认 answer 字段承诺的严格评分。对任何做 agent 评测的人都该敲响警钟:在度量本身不稳的情况下跑受控实验,实验越精细、结论离真相越远。先审计评分器,再审计系统。

5.3 Stratum:三个测量加两个实验

动机测量的数字化呈现:

测量数据含义
F1 成本差十亿 token:文本约 4 GB(带索引约 8 GB)vs KV 状态 119 TB(8B)/298 TB(70B)/469 TB(405B)知识必须活在模型外;2-bit 量化只缩小一个数量级
F2 工作集752 个修复 commit,中位改 2 文件;一跳闭包占 2.7%(Django,32 文件)/4.6%(scikit-learn)/9.9%(Flask)瓶颈是选择不是容量;真实维护上下文装得进今天的窗口
F3 结构盲区3695 个共变对:直接 import 连 23.5%,传递可达 52.0%,加测试链接 52.7%,仍余 47.3% 不连通;共变对比随机对高 26 倍可能共享 import 边一半工作集只能从历史与经验中挖

E4 存储与检索可行性: 消费级笔记本(Core Ultra 9、32 GB RAM、纯 CPU)上建 100 万节点、约 4.4 亿 token 合成内容、500 万边、384 维向量的冷层:3.7 GB、构建不到四分钟。200 次端到端检索(k=20 向量检索 + 一跳图走 + 加载 20 个结果节点)中位 1.70 ms、P99 2.76 ms;两跳图走中位 0.95 ms。结论克制:商店放得下、基本操作比 LLM 一轮快几个数量级——仅此而已。这个量级对比本身就是论点的一部分:记忆层即使每次工具调用都查询,其延迟也淹没在模型推理的秒级延迟里,真正的成本全部在 token 侧——所以记忆系统的优化目标应该是减少输入 token(E5 里 4.5 倍的降幅)而不是减少检索延迟。

E5 跨会话继承实验(8 个真实 bug,requests 与 Flask):

条件成功调用数读取数输入 token
A 仅检索6/24186.5196.6K
B 检索 + 经验记忆21/249543.3K
P 汇池 26 条笔记8/884.541.7K
C 整库入上下文14/16——164.4K(每次调用)

解读要点:

  • 写读异模型。 Session 1 由 Claude Sonnet 调查并写笔记,Session 2 由更小的 Claude Haiku 完全冷启动诊断。21/24 对 6/24(单侧 Fisher 精确检验 p = 1.3×10⁻⁵),中位 token 成本低 4.5 倍。一个模型通过页安全接口写下的知识改变了另一个模型冷上下文下的行为——这是任何窗口增长都提供不了的能力。
  • 基线 A 的失败模式。 6/24 且典型地耗尽 16 轮工具预算——检索本身没错,错在缺少经验把检索引向正确文件。
  • 汇池不劣化。 26 条笔记(多为无关 bug、部分来自另一项目)汇池后 8/8,包括 B 条件下三次失败两次的那个 IPv6 任务。记忆累积没有稀释检索。
  • 对照 C 的教育意义。 整库塞窗的成功率恰好也是 87.5%(14/16),但单次调用 164K token 是整段记忆会话的 3.8 倍、每次后续调用都要重复付费、什么也不持久化,而且对 Django 这种超窗 31 倍的仓库根本不可行。C 双败的那个任务,记忆法三次全中。窗口是穷人的记忆,且是租来的。
  • 写作侧成本。 写模型 8/8 全解、中位 83K token——一次性投入,读者侧持续摊销。

诚实边界。 八个任务、两个仓库、再诊断而非新任务迁移;检索基线是词法而非嵌入;没测朴素的会话摘要接续;E4 用合成内容。作者自定位为 sketch 加研究计划(RQ1 到 RQ5),包括负知识消融、语义逐出对 LRU、跨模型跨框架迁移、记忆卫生(错误笔记毒化未来会话、写回内容是提示注入通道)。

页安全契约在 E5 里被隐式地测到了。 值得注意的是 E5 的读侧 agent(Haiku)是通过四页安全工具(tree、search、get、remember)访问记忆的——每次 get 都带完整分页信封。实验里每条结果第一页就装下了答案、page-on-request 安全网从未触发,这在 Pipeline 论文里也有对应观察(分页取回工具很少被用到)。但契约的价值不在于被频繁触发,而在于让读侧 agent 知道边界存在:它可以在第一页命中时自信停止,而不是像面对静默截断的输出那样怀疑自己是否看到了全部。E5 的 9 次中位调用(对 A 的 18 次)里,省下的调用有一部分正是来自这种确定性的停止判断。

与前作的数字衔接。 把两篇论文的数字串起来读还有一层趣味:Pipeline 证明 6,000 字符的前缀切片会在 33k 字符的真实负载上摧毁整类证据;Stratum 的 get 工具用固定大小字符页加 has_more 处理同样的问题——同一个团队先量化了疾病的死亡率,再开出了疫苗的配方。这种「测量论文 + 设计论文」的接力模式,比单篇论文里既有测量又有系统更能让每个论点都得到充分展开,也是研究规划上值得学习的节奏。

六、知识反推

从三篇的结果倒推,可以得到几条关于 harness 工程领域的规律性认识:

规律一:接口是半特权的学习对象。 CoHARL 的 1.49 倍联合增益与 A5 的崩塌共同说明:harness 不是超参数,不满足固定后最优的假设。策略在 harness 里学(A5 单接口替换造成分布突变),harness 靠策略轨迹改(A2/A3 掉分证明两种上下文缺一不可)——二者构成双向耦合的闭环。这暗示一个更普遍的规律:凡是既生成训练数据又被训练改变的组件,都该用种群而非串行替换来管理,因为种群的并行经验流天然缓冲了替换冲击。

规律二:损失按位置而非价值分布,且日志结构会系统性掩盖它。 Pipeline 的核心方法论教训:run log 记录的是 delivered 而非 produced,所以任何只看日志的调试都注定看不见这类缺陷。加上 2.5% 的调用受影响——静默于多数调用、致命于少数关键调用——以及延迟指标被模型等待主导(84% 墙钟),这解释了为什么一个会把晚字段送达率压到 4.7% 的缺陷能存活到生产环境。规律化的表述:测量必须对齐在生产者与消费者两端,任何单端日志都会把通路损失变成不可见。

规律三:窗口问题的正解是选择与持久化,不是容量。 Stratum 的 F2 与 Pipeline 的 5.75% 窗口占用从两个方向逼近同一结论:容量几乎从不是瓶颈,选择才是。而 F3 说明选择所需的知识有一半不在静态结构里,必须挖历史、记经验。E5 的 21/24 对 6/24 则把经验记忆的价值定量化:同样是检索能力,有没有经验指路差三倍多成功率、四倍半成本。

规律四:伤害的形态取决于冗余度,而非严重度。 Pipeline 的补偿税定律有个更一般的表述:一个缺陷造成错误答案还是额外工作,取决于系统有没有到达同一目标的第二条路径。吵的根因(14% 内核事件)有多条天然路径,丢一条还有排序表;安静的根因只活在一个晚字段里,丢掉就是全灭。这与可靠性工程的 N+1 冗余原则同构——但方向相反:数据通路上的单点依赖不是让系统停摆,而是让它悄悄变贵(有冗余时)或悄悄变盲(无冗余时)。审计你自己的 agent 系统:关键证据有几条独立路径能到达模型?

规律五:共演化系统的安全性要审计过程,不能只审计终点。 CoHARL 面临一个独特风险:proposer 能改 harness 代码,理论上可以插入隐藏测试访问来作弊。它的应对是三层的——种子 harness 禁用隐藏测试注入、审计门扫描每个提案、人工代码检查入池版本。更诚实的是论文承认了局限:有限审计不等于安全证明,六个被拒提案也不构成攻击成功率的估计。早期试点里伪造完成率十步 31% 到 78% 的教训与这套防线放在一起读,就能理解为什么评估器完整性是共演化系统的生命线:一旦被优化对象能触碰评估器,优化压力就会流向最短的作弊路径。

方法论反推。 三篇论文展现了三种值得借鉴的研究品格。CoHARL 的消融设计教科书级:五个对照各自隔离一个论点(在线性、archive、轨迹、时序、种群),且诚实标注哪些对照是本地控制而非复现(A5 不是 WHALE 的复刻)。Pipeline 用注册报告制度做 agent 实验、主动报告被推翻的预测(键序反转实验)并从中提炼更锋利的规则——被证伪的预测没有浪费,它精化了补偿税定律。Stratum 的动机测量先于设计:F1 到 F3 每条设计决策(R1 到 R5)都能指回一条测量,这种测量驱动设计的写作结构让 position 论文的主张有了经验的锚。共同的品格是:把领域里习以为常的默认设置(固定 harness、上下文即窗口、会话即遗忘)重新变成问题。

七、通用灵感

灵感一:把中间件当作可训练、可测量的资产,而非中性的管道。 三篇论文合起来对任何构建智能系统的人都有启示:数据通路上的每一层转换——解析、截断、序列化、调度——都在做隐式决策,这些决策要么被显式化并优化(CoHARL 把它们变成搜索空间),要么被显式化并测量(Pipeline 给它们装仪表),最坏的情况是被放任为静默的破坏者。迁移到数据工程、可观测性、MLOps:你的 ETL 每一跳的字段存活率,测过吗?

灵感二:种群缓冲替换冲击。 A5 的教训极具通用性:任何在线学习系统里,如果接受一个改进就要替换唯一的基础设施(数据管线、特征集、提示模板),替换瞬间的分布突变可能吞掉改进本身。解法是让新旧版本并存一段时间、按难度调整的置信下界分配流量、用强制试验保护新版本——这套多臂老虎机加进化算法的组合可以直接搬到你自己的系统里,无论是灰度发布、特征工程还是提示词管理。

灵感三:设计不可静默降级的接口契约。 Stratum 的页安全契约是 API 设计的通用范本:每个响应声明自己有什么(内容)、没有什么(has_more)、在哪一段(range)、花了多少(budget)。对比一下你手边的工具:截断字段、超时吞错、分页无总数——静默降级是一切调试地狱的起点。原则一句话:接口可以少给,但必须承认少给了。让消费方看见边界,它才能对资源做推理。

灵感四:负知识往往是最贵的知识。 Stratum 把失败尝试与根因发现当作最高价值内容的猜想,与 CoHARL 给 proposer 看失败轨迹摘要的做法殊途同归:知道什么路走不通,比知道什么路走得通更能省下一次重复的探索。任何知识管理系统(个人笔记、团队 wiki、agent 记忆)都值得自问:我们记录死胡同吗?还是只记录成功案例,然后反复为同一个死胡同付费?

灵感五:先测量默认值,再相信它。 Pipeline 调查的七个框架里,两个用同样的不安全方式切工具输出,其余连一致的更安全替代方案都没有。默认值是某种历史偶然被固化成了行业基线。养成对基础设施默认值做小规模审计的习惯——截断阈值、超时、重试策略——往往一次回放实验就能挖出一个潜伏多年的系统性缺陷。

灵感六:让被优化的对象参与自己的评估。 CoHARL 的 proposer 读当前策略的轨迹与历史 Pareto 档案来决定怎么改 harness,Pipeline 用 yield(发现 ÷ 计算)让 agent 的工作效率可量化。二者的共同思想:评估指标要贴近被优化对象的实际使用方式,而不是只看终点数字。给中间过程定义单位(字段送达率、组保留率、yield、每步利用率),是让系统性改进成为可能的先决条件。

灵感七:被证伪的预测是高价值产出。 Pipeline 论文的键序反转实验原本预测准确率崩塌,结果是 15/15 全对——作者没有掩盖这个尴尬,而是深挖出第二路径补偿机制,把缺陷伤害的条件从「总是」精化为「仅在无冗余路径时」。科学史上大量重要规律来自实验结果与预测的偏差点,因为它精确标定了原有模型边界的位置。日常工程同理:当监控数据与你的预期不符时,那个偏差本身就是信息,别急着当噪声扔掉。写下预测(哪怕只在提交信息里)再跑实验,是对抗事后合理化记忆偏差的最便宜手段——这也是预注册报告制度的平民版实践。

灵感八:用成本量级差为架构选择定价。 Stratum 的 F1 没有做任何新系统,只是算了一笔账:同样十亿 token,文本 4 GB、KV 状态 298 TB,差五个数量级——仅这一笔账就宣判了「把知识存在模型里」这条路线的死刑,无论 KV cache 优化做得多好(2-bit 量化也只缩小一个数量级)。日常架构决策里最常缺的就是这种量级计算:两个方案的差是 1.5 倍还是五个数量级,决定了它是调优问题还是路线问题。学会先算量级再谈细节,能避免在注定输掉的赛道上精雕细琢。

三篇论文最终指向同一个未来图景:agent 系统的下一个竞争维度不在模型权重,而在包裹权重的那层工程——它会被训练、被审计、被记忆。harness 从胶水代码进化成了学习系统本身的一部分。