Agent 部署上线后,你怎么知道它变好了还是变糟了?
传统做法:收集一个带标注的验证集,跑一遍,看分数。但真实场景里,这个验证集从哪来?未来的任务分布和过去完全不同,标注成本又高得离谱。你不可能每部署一个 Agent 就先找人类标几百个样本。
微软亚洲研究院和港城大的人想了一个很脏但有效的办法:让 Agent 自己看自己过去的失败,自己教自己改。
不需要标注。不需要验证集。不需要外部评分。只需要 Agent 运行过的历史轨迹——那些它已经忘了的、过去做错的、或者模棱两可的任务记录。
这就是 RHO(Retrospective Harness Optimization),回顾式 Harness 优化。在 SWE-Bench Pro 上,单次优化就把通过率从 59% 提升到 78%——19 个百分点的绝对提升,而且完全没有任何 ground-truth 标签。
一、为什么"无标注"是核心痛点
现有 Agent 优化方法几乎都离不开标注数据:
- Prompt 优化:需要人工标注的 good/bad example
- 记忆库增强:需要验证集判断哪些经验值得保留
- 技能库进化:需要评分器判断技能改进的方向
- 元学习(Meta-Harness):需要完整的验证集进行多轮迭代
但部署场景的现实是:
- 未来的任务分布未知——你今天标注的验证集,明天可能完全不 relevant
- 标注成本极高——SWE-Bench 级别的任务需要专业工程师评审
- 反馈延迟——等人类打完分,Agent 已经在新任务上跑了几百轮了
RHO 的假设是:Agent 自己运行产生的轨迹,本身就是信号源。 成功和失败的模式都藏在那些未标注的日志里,关键是怎么把它们"提炼"出来。
二、RHO 的三步式 Pipeline:从垃圾堆里淘金
RHO 不是简单地把所有历史轨迹喂给模型说"你总结一下"。它有一个精心设计的三步流程,每一步都在解决一个具体的工程问题。
第一步:核心集选择(DPP-Greedy)——不要平均用力
假设 Agent 过去一年跑了 10 万个任务。你不可能全部重跑一遍——计算成本爆炸,而且大多数任务都是 boring 的重复。
RHO 的做法:用 DPP(Determinantal Point Process) 从中选出 10 个最具代表性的任务。选择标准同时满足两个看似矛盾的要求:
- 难度高:包含丰富失败信号,有东西可学
- 多样性:覆盖不同失败模式,避免信号重复
具体实现:用 LLM 给每条轨迹打一个 abstract fingerprint(抽象指纹),不是"这个任务在 repo X 里改了文件 Y",而是"这是一个跨文件重构,难点在于保持多个独立演化模块间的共享不变量一致"。然后禁止任何具体名称(仓库名、函数名、框架名),强制只用抽象结构词汇(invariant, precedence, boundary, propagation, ordering 等)。
这个 fingerprint 被嵌入为向量,DPP 核函数构造为:
其中 \(e^{r_i}\) 是难度权重,\(S\) 是余弦相似度矩阵。参数 θ 控制难度和多样性的平衡:
- θ=1:纯难度排序(任务类型单一,容易扎堆)
- θ=0:纯多样性(可能错过关键困难区域)
- θ=0.7:难度主导,多样性约束(最优)
消融实验显示:DPP(θ=0.7)在 SWE-Bench Pro 上达到 78%,而纯难度(62%)和纯多样性(58%)都差很远。可视化也验证了 DPP 在困难区域保持了分散性——既覆盖各种失败模式,又不浪费计算在简单任务上。
第二步:分组 Rollout ——自己和自己打架
对选出的 10 个核心任务,每个重跑 3 次,生成 30 条并行轨迹。然后用两种自诊断信号分析:
信号一:Self-Validation(轨迹内自验证)
Agent 检查每条轨迹是否"准确且高效"完成任务。利用模型的自知之明(knowledge-aware refusal 能力),标记:
- 错误的工具调用
- 错误假设
- 过早停止
输出是 JSON 格式的诊断:"missed information, misleading evidence..."
信号二:Self-Consistency(轨迹间自一致性)
分析同一任务的 3 条轨迹之间是否一致。低自一致性意味着高不确定性——这个任务 Agent 自己都不确定该怎么做。识别关键分歧:
- 发散的计划
- 不同的工具序列
- 矛盾的最终答案
两种信号合并成诊断指令集合 \(I_t\),每个附带 severity 分数(0.0-1.0),作为下游优化的软注意力权重。
消融实验很清晰地说明了两种信号的分工:
- 去掉 self-consistency:SWE-Bench Pro 从 78% 暴跌到 56%(-22%)。代码任务需要跨轨迹验证正确性,不一致性是最强的信号。
- 去掉 self-validation:SWE-Bench Pro 从 78% 降到 70%(-8%)。自知之明能 catch 到一些明显的错误,但不如一致性检验重要。
- 两种都去掉(只用原始轨迹):78% → 60%(-18%)。显式诊断 >> 原始日志。
第三步:Best-of-N 候选选择 ——自己给自己打分
用诊断指令集合生成 N=3 个候选 harness。然后让 Agent 自己在核心任务上跑一遍,用成对自偏好排序选出最优版本。
具体做法:每个候选 harness 和原始 harness 在相同任务上 PK,Agent 给出 \([-10, +10]\) 的整数评分。+10 是"从不可接受到优秀",0 是"差不多",-10 是"严重退化"。
关键设计:接受门槛是严格正(> 0),不是非负(≥ 0)。 论文的解释很直白:"Breaking ties in favor of change would inflate regression risk for no expected gain."(平局时偏向改变,会增加退化风险,没有预期收益)。
这体现了 RHO 的保守哲学:宁可不改,也别改糟。
三、核心结果:59% → 78%,而且一次就够
与无反馈基线对比
| 方法 | 类型 | SWE-Bench Pro | Terminal-Bench 2 | GAIA-2 |
|---|---|---|---|---|
| Vanilla Codex | 无 | 59% | 71% | 29% |
| Dynamic Cheatsheet | 技能库 | 62% (+3%) | 73% (+2%) | 30% (+1%) |
| ReasoningBank | 记忆库 | 61% (+2%) | 73% (+2%) | 28% (-1%) |
| Sleep-time Compute | 记忆库 | 64% (+5%) | 73% (+2%) | 32% (+3%) |
| RHO | 完整 harness | 78% (+19%) | 76% (+5%) | 37% (+8%) |
RHO 在 SWE-Bench Pro 上的 +19% 是碾压级的。其他方法只优化记忆库或技能库,最多 +5%。RHO 优化的是完整 harness(工具 + 提示 + 技能 + 工作流),所以改造的是 Agent 的整体行为模式。
与验证集驱动方法对比
| 方法 | 需要标注 | 计算量 | SWE-Bench Pro |
|---|---|---|---|
| RHO | ❌ 无 | 103 (1.0×) | 78% |
| Meta-Harness (1轮) | ✅ 需要 | 41 (0.4×) | 62% |
| Meta-Harness (10轮) | ✅ 需要 | 320 (3.1×) | 80% |
同计算预算下(单轮),RHO 远超 Meta-Harness(78% vs 62%)。Meta-Harness 需要 3 倍计算 + 标注数据 才达到相近性能(80%)。这意味着 RHO 在效率和实用性上同时赢了。
四、Agent 的行为真的变了:不是调参,是改习惯
RHO 最有趣的地方不是分数提升,而是它改变了 Agent 的行为模式。这不是一个"把 prompt 调得更乖"的优化,而是让 Agent 学会了不同的工作习惯。
在 SWE-Bench Pro 上:
- Verify(验证) 动作增加 61%——Agent 学会了自己检查答案
- Navigate(导航) 动作减少 13%——不再无头苍蝇一样到处翻文件
在 Terminal-Bench 2 上:
- Navigate(导航) 增加 27%——命令行任务里多探索是对的
- Edit(编辑) 减少 44%——少乱改,先想清楚
在 GAIA-2 上:
- Execute(执行) 增加 25%——知识任务里多动手验证
- Edit(编辑) 减少 17%——同样,少瞎改
这些行为变化是领域相关的——不是一套通用模板套所有场景,而是 RHO 根据每个领域的失败模式,针对性地调整策略。这才是"harness 优化"和"prompt 调参"的本质区别。
五、长程任务上的持续增益
RHO 的性能提升集中在长程任务上。短步骤的任务本来就能做对,优化空间小。但长步骤任务(比如需要 20+ 步的软件工程任务)里,RHO 的优势非常明显。
这说明 RHO 解决的是长程推理中的系统性错误——不是"某一步做错了",而是"整个工作流有结构性缺陷"。比如总是忘记验证、总是过早停止、总是在相似类型的任务上犯同样的错误。
六、为什么这篇论文重要
-
它解决了真实部署的痛点:标注验证集在真实场景里几乎不可行。RHO 证明了你不需要它。
-
单次优化,不需要迭代:Meta-Harness 需要 10 轮迭代才能达到相近效果。RHO 一轮就够。这意味着你可以在 Agent 空闲时跑一次优化,而不是占用训练时间持续迭代。
-
优化的是完整 harness,不是局部:记忆库增强和技能库进化只能改局部。RHO 可以改工具、改 prompt、改工作流——改的是 Agent 的整体行为模式。
-
保守的部署哲学:严格正的接受门槛(>0)、禁止任务特定的硬编码修复、优先处理高严重度且重复出现的失败。这些设计不是为了最大化分数,是为了最小化退化风险——在真实生产环境里,"别改糟"比"改更好"更重要。
-
自监督的通用性:不需要人工设计奖励函数,不需要领域特定的评分器。只要有历史轨迹,任何领域的 Agent 都能用。
七、局限与边界
论文没有回避问题:
- 计算成本:RHO 需要重跑核心任务(k×G 次)和候选评估(N×k 次)。虽然比 Meta-Harness 的 10 轮迭代便宜,但也不是免费的。
- 依赖历史轨迹的质量:如果历史轨迹全是垃圾,RHO 也无能为力。需要 Agent 至少能完成一部分任务,才能从中学习失败模式。
- 不自知的错误:如果 Agent 的自验证能力不够强(比如某些幻觉它自己发现不了),诊断信号会有偏差。
- 抽象 fingerprint 的质量:DPP 的效果依赖于 LLM 生成的抽象描述是否准确。如果描述偏了,核心集选择也会偏。
但即便如此,RHO 的实用价值是明确的:在标注成本为零的情况下,用一次回顾性优化,把 Agent 的核心能力提升 19 个百分点。 这在生产环境里是几乎不可能拒绝的 ROI。
论文:Evolving Agents in the Dark: Retrospective Harness Optimization via Self-Preference. Wenbo Pan et al., Microsoft Research Asia & City University of Hong Kong. arXiv:2606.05922.
#Agent #自我改进 #无监督优化 #SWE-Bench #微软研究院 #RHO #自偏好 #harness优化 #软件工程 #论文解读
讨论回复
0 条回复还没有人回复,快来发表你的看法吧!
推荐
智谱 GLM-5 已上线
我正在智谱大模型开放平台 BigModel.cn 上打造 AI 应用,智谱新一代旗舰模型 GLM-5 已上线,在推理、代码、智能体综合能力达到开源模型 SOTA 水平。