自动 harness 在线上部署越跑越烂?这篇论文把"进化"和"适应"两个损失彻底拆开了
核心摘要
这篇论文盯上了一个让做 Agent 系统的人都熟悉的尴尬:你拿 A-Evolve、GEPA、Meta-Harness 这类自动 harness 框架,在固定 benchmark 上把 prompt、技能、工具调到极致,bench 分数好看得不行;可一旦丢到真实业务的开放任务流里——任务源源不断进来、类型五花八门、分布还在漂——系统就开始抽风:技能从 12 个膨胀到 34 个、prompt 从 2KB 涨到 68KB,准确率早早冲到顶后一路掉头。作者把这种现象正式定义为部署制度(deployment regime)下的开放任务流问题,并给出了一个干净的损失分解:总遗憾 = 进化损失 \(L_{\text{evo}}\) + 适应损失 \(L_{\text{adapt}}\)。前者是进化器本身的天花板(再怎么进化都摸不到),后者是"你必须在看到任务前提交 harness"这件事本身带来的——只能靠 solve-time 路由去缩小。配套提出的 Adaptive Auto-Harness (AAH) 用三件武器对应三种损失:有状态多智能体 evolver、harness 树(git 分支做路由)、人类在环钩子。在 PolyBench 上做到 80.9% 准确率(A-Evolve 才 18.4%),CTF-Dojo 涨到 50.2%,FutureX 47.3%。这篇的真正价值不在"我又涨了多少分",而在它第一次把"线上 Agent 系统部署"这件事说清楚了——而且用一个极其干净的理论分解告诉你:哪些问题该靠"更强的进化",哪些问题再怎么进化也没用、必须靠"延迟决策"。
arXiv: 2606.01770 | 标题: Adaptive Auto-Harness: Sustained Self-Improvement for Agentic System Deployment on Open-Ended Task Streams | v2: 2026-06-03
一个让人不舒服的现象:A-Evolve 跑着跑着自己崩了
我先讲个画面。你在 Polymarket 上跑一个预测市场的 Agent,用 A-Evolve 这种"看反馈→改 prompt→加技能→再跑"的标准自动 harness 流程,每周扫一批新市场。第一周表现挺好,第二周还行,第三周开始你发现:
- 技能库从 12 个变成了 34 个,里头一堆早期任务上有用、现在压根用不到的逻辑分支;
- 系统 prompt 从 2KB 滚到 68KB,agent 看到的 context 里塞满了"早期任务的特殊 case 处理";
- 准确率没有继续涨,反而往下掉。

图1:A-Evolve 在 Polymarket 上跑出来的"过进化"曲线。x 轴是处理过的任务数,左纵轴是 prompt 长度和技能数(两条都是单调上升),右纵轴是 cumulative win rate。技能/prompt 一直在涨,准确率却越跑越拉胯——这就是开放任务流给单 harness evolver 的当头一棒。
说实话这个现象我之前在调一个客服 Agent 的时候碰到过。你以为模型在"持续学习",其实它是在对早期 batch 的尾部 case 过拟合——后来的新任务一来,evolver 还在拼命修补旧分布的边缘案例,prompt 越来越长、推理路径越来越绕,新任务该掉的还是掉。
这不是工程实现 bug,而是范式 bug。固定 benchmark 上"一次评测、一次进化"的范式,从一开始就没有给"任务流"留位置。
三个让单 harness 必死的部署维度
作者把"线上"和"benchmark"的差距形式化为三个维度,命名为 D1/D2/D3:
| 维度 | 名称 | 具体表现 | 单 harness evolver 为什么死 |
|---|---|---|---|
| D1 | 无界流 (unbounded streams) | 任务一直来,没有"评测结束"的时间点 | evolver 拿不到稳定的"全集"做规划,只能贪心改 |
| D2 | 任务异质性 (task heterogeneity) | 同一个流里混着政治预测、体育、金融、加密多种任务 | 一个 harness 必须同时讨好所有类型,最后哪个都不擅长 |
| D3 | 分布非平稳 (distribution drift) | 早期是政治选举,后期是体育赛事、币圈事件 | 早期优化的 prompt/技能在后期过期,但 evolver 不知道该删 |

图2:开放任务流的三个维度。这张图我建议任何在做 Agent 线上系统的人都贴墙上——它给出了一个非常干净的"为什么 benchmark 高分上不了线上"的解释。
读到这里我有个直觉判断:D1 和 D3 其实可以用更聪明的 evolver 部分缓解(比如显式做老化、做 context decay),但 D2 异质性是单 harness 范式的根本死点——它意味着"最优 harness"本身就不该是一个,而是一个集合。这也是后面 harness tree 思路的源头。
全文最值钱的一段:把损失拆成"进化损失"和"适应损失"
如果让我只挑这篇论文最值钱的一个贡献,我会选这个分解。它太干净了,干净到我觉得这应该写进所有 Agent 系统设计的入门教材。
定义一个 oracle harness \(\varphi^*(x_t)\):在看到任务 \(x_t\) 后才提交的、最优的 harness。把你的真实 harness \(\varphi\) 跟它的 gap 做拆解:
其中:
- 进化损失 \(L_{\text{evo}}(\Phi)\):进化器类别 \(\Phi\) 的能力上限。哪怕你把进化跑到无穷次,这部分也消不掉。它代表的是"evolver 本身能做的事的边界"——比如 evolver 没法访问外部 API、没法装新工具、没法自己写底层 infra,那这些事就永远做不了。
- 适应损失 \(L_{\text{adapt}}(\varphi)\):源于"你必须在看到任务之前提交一个固定 harness"这件事本身。哪怕给你一个完美 evolver、让它跑无穷次,只要你要交一份"通用 harness"对所有任务,这部分损失就在。
这个拆解之所以值钱,是因为它把"该往哪个方向投精力"说明白了:
- 你的瓶颈如果是 \(L_{\text{evo}}\),再怎么 solve-time 路由都没用——你要做的是给 evolver 更强的能力(多 agent、更大上下文、更多工具);
- 你的瓶颈如果是 \(L_{\text{adapt}}\),再怎么砸算力进化也没用——你要做的是把"提交时机"往后挪,看到任务再决定用哪个 harness(也就是路由)。
我之前在做某个对话系统的时候,团队曾经为了"系统 prompt 该不该针对每类客户单独写"吵过半天。当时如果有这个分解,结论会非常清楚:那是典型的 \(L_{\text{adapt}}\),再怎么改通用 prompt 都白搭。
AAH 的三件武器
有了损失分解,方案就顺理成章了。AAH 用三件互补的东西打这两个损失:
| 损失 | 武器 | 干什么 |
|---|---|---|
| \(L_{\text{evo}}\) | 多 agent evolver + 跨周期持久状态 | 把 evolver 的能力天花板抬高 |
| \(L_{\text{adapt}}\) | harness 树 (git 分支) + solve-time 路由 | 把"选择 harness"延迟到见到任务之后 |
| 残余的 \(L_{\text{evo}}\) | 人类在环钩子 | 当 evolver 撞上"模型/系统能力之外"的硬墙时,让人补一刀 |

图3:系统全景。左边是多 agent evolver(Analyze→Research→Build→Verify 四阶段),中间是 harness tree(main + crypto/binary 等专用分支,以 git 仓库存储),右边是 solve-time 的路由 agent。注意人类钩子是在 Analyze 和 Research 阶段插入的——后面会看到这个位置选得很关键。
武器一:多 agent evolver(针对 \(L_{\text{evo}}\))
单 agent evolver 的问题不是"思考能力不够",而是单 context 窗口被反馈/轨迹/旧 prompt 挤爆了。AAH 把进化拆成四个阶段,每个阶段是独立 agent、独立上下文预算:
- Analyze:读 batch 轨迹,更新 task board(按"高优先级失败"排序);
- Research:3 个并行研究者各自探索假设、记录测试结果;
- Build:把验证过的改进真的写进 harness;
- Verify:跑 test suite 确认改进没退化。
跨周期之间,整个 workspace(task board、research log、architecture doc、test suite)作为 git 仓库持久化保留。这意味着第 N 周期的 agent 能看到第 1 周期的失败分析、第 5 周期的研究记录——评估只在任务真正解决后才暴露 ground truth,避免信息泄露。
武器二:harness tree + solve-time 路由(针对 \(L_{\text{adapt}}\))
这是我个人最喜欢的设计。harness 不是一棵单链,而是一棵 git 分支树:
main (通用 harness)
├── branch/crypto-classical (加密任务专用)
├── branch/binary-reversing (二进制逆向专用)
├── branch/finance-tech (金融&科技预测专用)
└── ...
每条分支有自己的 workspace meta,记录这条分支适合什么类型的任务、上次跑出来什么结果。任务来了之后:
- Router agent 读所有分支的 meta + 当前任务上下文;
- 选一条最匹配的分支;
- Solver checkout 该分支、执行任务。
这个设计的妙处在于:它用 git 这套已经存在的、健壮的版本机制做"多 harness 共存 + 选择",而不是发明新的存储/检索系统。工程上几乎没有成本。
武器三:人类在环钩子
两个钩子点:
- Task board 引导:人类审完 task board,可以加条目、调优先级、塞领域知识;
- Research 阶段协助:当 research agent 撞上需要人类的硬墙(auth wall、付费 API、闭源数据),实时弹给人。
注意这里的设计哲学:人类不是来"教 agent 怎么思考"的,是来"补能力之外的洞"的。这跟很多"human-in-the-loop"的产品设计完全不同——后者经常变成"让人帮 agent 做决策",最后人累死、agent 也没真的学到。
实验:到底涨了多少?
三个 stream,三个不同领域:
| Benchmark | 任务数 | 时间跨度 | 领域 |
|---|---|---|---|
| PolyBench | 5,075 | 2026.02.06–22 | 预测市场(Polymarket) |
| CTF-Dojo | 261 | 2011–2024 | 安全竞赛(CTF challenges) |
| FutureX | 503 | 2026.01–04 | 事件预测 |
主结果(节选关键行):
| 方法 | PolyBench Acc / Profit | CTF-Dojo Pass@1 | FutureX Pass@1 |
|---|---|---|---|
| 无进化 Sonnet baseline | 22.2% / +1.7% | 37.2% | 31.0% |
| A-Evolve | 18.4% / +7.2% | 45.2% | 47.5% |
| Meta-Harness | 50.8% / +320% | 41.0% | 29.4% |
| AAH 多 agent 变体 | 79.8% / +351% | 47.9% | 49.5% |
| AAH 完整系统 | 80.9% / +330% | 50.2% | 47.3% |
PolyBench 上,A-Evolve 居然比"什么都不进化的 Sonnet baseline"还低 4 个点(18.4% vs 22.2%)——这正是开篇那张过进化曲线的直接证据:乱进化反而是负收益。AAH 把同样的"进化范式"做对,从 18.4% 拉到 80.9%,差不多是 4.4 倍。
CTF-Dojo 是另一个有意思的切片。这个 benchmark 的瓶颈是"payload handling 基础设施"——也就是 evolver 能不能给自己装一套处理二进制 payload 的工具。在最大挑战文件这个维度上,单 agent 变体从 81.8% 跌到 30.4%(任务难度上升),多 agent 变体从 90.9% 跌到 39.1%——多 agent 在难任务上稳定保住 9 个点的优势。这正是 \(L_{\text{evo}}\) 被压缩的直接表现:单 agent 撞墙的地方,多 agent 还能再爬一段。
FutureX 上完整系统反而比纯多 agent 变体低 2 个点(47.3% vs 49.5%),这点作者也没遮掩。我的理解是:FutureX 的事件预测任务高度依赖"网络检索访问",加 router 反倒把一些本来就该走 main 的任务路由错了。这其实暴露了 router 的一个潜在风险——当任务异质性不强时,多分支 + router 可能反而引入额外的 routing 噪声。
消融:哪件武器贡献了多少
多 agent evolver 的消融(图6)

图6:在 PolyBench/CTF-Dojo/FutureX 三个 benchmark 上分别砍掉一项做消融。最右一列是把多 agent 砍成单 agent,CWR 从 44.3 掉到 20.3(PolyBench),跌幅最猛。
关键数字:
- 完整 → 单 agent:PolyBench CWR 20.3 → 44.3(涨 118%);CTF-Dojo +5pp;FutureX +6pp
- 去掉时间揭示反馈:主要伤 PolyBench(这里结果延迟解决,泄露 label 等于直接作弊)
- 去掉跨周期 memory:三个 benchmark 全面下滑——memory 是最重要的一块
跨周期 memory 这个结论我比较意外。我原本以为多 agent 拆分本身才是关键,但消融告诉我:拆分给 agent 一个干净的上下文是必要条件,但真正让 evolver 越跑越强的是它能记住自己之前试过什么、什么 work、什么不 work。这件事其实很 obvious——我们做 RL 训练的时候不也强调 replay buffer 吗——但在 prompt-based evolver 里居然要做消融才能确认它的重要性,挺值得反思的。
Solve-time 路由的消融(图7)
这个消融才是真正能验证"\(L_{\text{adapt}}\) 是否存在"的关键实验。设四个条件:
- Oracle:每个任务用最佳分支(事后选)
- Adapt:AAH 的真实路由(事前选)
- Naive:永远走 main 分支(无路由)
- Worst:每个任务用最差分支(下界)

图7:Oracle/Adapt/Naive/Worst 四个条件在三个 benchmark 上的对比。Oracle - Naive 的 gap 直接告诉你"延迟决策"能拿到多少分。
实测的 \(L_{\text{adapt}}\)(Oracle − Naive):
- CTF-Dojo:55.0% − 17.5% = +37.5pp(巨大!这个 benchmark 异质性极强)
- PolyBench (CWR):+12.0% − 3.2% = +8.8pp
- FutureX:46.6% − 39.7% = +6.9pp(最小)
CTF-Dojo 上 37.5 个点的 gap 很能说明问题:当任务异质性强、且不同任务真的需要根本不同的工具/方法时,单一 harness 即使被无限优化也吃不到这部分潜在收益。这就是适应损失存在的实证。
而 AAH 的 Adapt 条件能从 17.5% 拉到 35.0%(CTF-Dojo),相当于吃掉了 17.5pp / 37.5pp ≈ 47% 的适应损失。剩下的 53% 是 router 自身的判断错误造成的——这给后续工作留了明确的优化方向:把 router 做强。
人类在环(图9)

图9:100 个 FutureX 任务上的切片分析。绿色条是有人类钩子的版本相对纯自动版本的提升。最左两类提升 0–5pp,金融&科技切片直接 +20pp。
按任务切片的提升:
- 宽泛多市场问题:0pp
- 宽泛搜索依赖问题:+5pp
- 直接命中的金融&科技切片:+20pp
- 相邻西方专业问题:+15pp
结论很硬:人类引导只在"agent 缺外部信号"的地方有用——比如 agent 没法访问的付费金融 API、新的网络源。在 agent 本身能搜到的宽泛问题上,人类的"通用建议"约等于零贡献。
这条结论我觉得对工程实践的启示比方法论本身更直接:你团队里那个一直追着 agent 提"建议"的产品经理,大概率是在做无效功。真正有效的人类干预是补能力的洞,不是补思考的洞。
我的判断
这篇值不值得读
值得,而且建议精读。但不是为了它的方法(方法本身在工程上其实并不算特别新——多 agent、git 分支、人类钩子,这些零件你都见过),而是为了它对问题的形式化。
具体来说:
- \(L_{\text{evo}} + L_{\text{adapt}}\) 的损失分解会成为接下来一段时间内 Agent 系统设计的标准语言。它给出了一个非常干净的"该怎么投精力"的判据:先想清楚你的瓶颈在哪一项,再决定是堆 evolver 还是堆 router。
- 三个部署维度(无界、异质、漂移)的命名虽然朴素,但值得收藏。下次有人说"我们 Agent 上线效果掉了",你可以直接拿这三维去对号入座。
- "人类只补能力洞"的实证对产品设计的指导意义比方法本身大。
几个我觉得它没说透的地方
第一,router 的训练/演化论文几乎没讲。它假设 router agent 能读 workspace meta 后做对决策——但 router 自己也是一个 LLM agent,它会犯错,它的错误在 FutureX 上让完整系统反而比纯多 agent 差。这个问题作者直接当成"future work"打发了,我觉得这是这套系统未来最大的优化空间。
第二,\(L_{\text{evo}}\) 和 \(L_{\text{adapt}}\) 的可分性其实是一个挺强的假设。论文做拆解时基本默认了"evolver 类别 \(\Phi\) 不影响 oracle harness 的存在性",但实际上你的 evolver 能做的事会改变 harness 树的形态、进而改变 router 的最优策略——两者并不真的独立。这个数学细节作者没展开。
第三,benchmark 里 CTF-Dojo 这种工程类强、异质性强的任务最 favor AAH 的设计。FutureX 那种本身就高度搜索依赖、异质性弱的任务,AAH 完整系统反而不如纯多 agent 变体。我会担心:如果你的真实业务场景更像 FutureX 而不是 CTF-Dojo,AAH 完整套件可能并不是最优选择,单纯升级 evolver 就够了。
工程启发
如果你正在或将要部署一个长期运行的 Agent 系统,这篇至少可以指导你做三件事:
- 不要只看 benchmark 分数。在你的真实任务流上跑 4–6 周,看技能/prompt 是不是膨胀、看准确率有没有先涨后跌的曲线。出现就是 \(L_{\text{evo}}\) 已经被打满 + 进化器还在过拟合早期 batch 的尾部。
- 如果你的任务异质性强,先做 routing,再做 evolver 升级。CTF-Dojo 上 router 给了 17.5pp 的真实增益,这比你再把 evolver 升级一轮更划算。
- 人类资源用在"补能力洞"上。把"哪些任务需要人类提供 API/数据"列出来,做成 hook;不要把人类时间花在"建议 prompt 怎么改"上。
一句话收尾
这篇论文最厉害的不是它做了什么——而是它把"自动 harness 系统线上部署"这件事第一次说清楚了:你的 Agent 在线上掉点,不一定是模型不行、也不一定是 evolver 不行,可能是你根本不该追求"一个 harness 打天下"。 \(L_{\text{evo}}\) 和 \(L_{\text{adapt}}\) 的拆解会让接下来一年里的 Agent 系统论文都好读很多。
觉得有启发的话,欢迎点赞、在看、转发。跟进最新 AI 前沿,关注我
参考链接:
- arXiv: https://arxiv.org/abs/2606.01770