Meta-Harness: End-to-End Optimization of Model Harnesses
用 coding agent 自动搜索、修改、评估 LLM 应用 harness,把人工 harness engineering 转化为可执行的代码空间优化问题。
1. 论文基本信息
| 论文标题 | Meta-Harness: End-to-End Optimization of Model Harnesses |
|---|---|
| 作者 | Yoonho Lee, Roshen Nair, Qizheng Zhang, Kangwook Lee, Omar Khattab, Chelsea Finn |
| 机构 | Stanford, KRAFTON, MIT |
| 版本 | arXiv:2603.28052v1,2026 年 3 月 30 日 |
| 项目与代码 | 项目页:https://yoonholee.com/meta-harness/;artifact:https://github.com/stanford-iris-lab/meta-harness-tbench2-artifact |
| 汇报人 | 待填写 |
本文提出 Meta-Harness:一个用 coding agent 自动搜索、修改、评估 LLM 应用 harness 的外循环系统。论文的核心判断是,LLM 系统效果不只取决于模型权重,也取决于外层代码如何存储信息、检索信息、组织 prompt、控制工具调用和 agent loop。过去这些 harness 大多靠人手工调,Meta-Harness 则把 harness engineering 转化为“在代码空间中搜索更优 harness”的问题。
2. 提纲 / 背景
2.1 Harness 为什么重要
论文中的 harness 指包在固定 LLM 外面的代码系统。它决定模型每一步看到什么、哪些历史被存储、如何检索上下文、如何调用工具、何时停止、如何更新状态。换句话说,harness 不是模型本身,但它直接影响模型能不能把能力稳定发挥出来。
作者引用的背景判断是:在同一个 benchmark 上,只改变模型外层 harness,就可能造成 6 倍性能差距。这说明很多 agent 失败不是模型参数单独造成的,而是外部运行系统没有把信息、工具和反馈组织好。
2.2 传统 harness engineering 的问题
传统做法主要靠人工:研究者或工程师看失败轨迹,猜测是哪段 prompt、memory、retrieval、tool loop 或状态更新出问题,然后手动改代码。这个过程有效但慢,而且很依赖人的经验。
已有的 prompt optimization / text optimization 方法也不完全适合这个问题。它们通常只给优化器一个标量分数、短文本反馈、固定摘要或最近几个候选。对普通 prompt 也许够用,但对 harness 不够,因为 harness 的错误常常跨越很多步:一个早期的存储或检索策略,可能在很多轮之后才导致失败。
2.3 本文定位
既然 harness 对性能这么关键,能不能让另一个 agent 自动改 harness,而不是继续由人手工调?
这篇论文可以看成前面 Agent Harness Survey 中“自动化 harness engineering”方向的具体实证工作。Survey 给出 harness 领域的架构图和问题地图;Meta-Harness 则进一步把自动优化做成一个可运行系统。
Agent Harness Survey
回答 harness 是什么、有哪些组件和挑战,提供领域地图。
AutoHarness
让模型为具体环境合成 action legality / policy 代码,更偏规则和策略代码。
Meta-Harness
让 coding agent 自动搜索整个 harness code,包括上下文、检索和 agent loop。
3. 研究问题与目标
如何用一个外层 agent 自动搜索任务特定 harness,使固定底层模型在目标任务分布上取得更高 reward 或更好的 accuracy / pass rate?
论文的目标包括:证明 harness 可以作为独立优化对象;证明完整历史日志和 execution traces 比压缩摘要更适合 harness search;在文本分类、数学推理和 agentic coding 三个任务域验证;并展示自动发现的 harness 是可读、可检查、可迁移的代码策略。
4. 核心方法 / 模型
4.1 方法总览:用一个 harness 优化另一个 harness
Meta-Harness 本身也是一个 harness,只不过它包裹的不是普通任务模型,而是一个用于改代码的 proposer agent。它的外循环很简单:提出候选 harness、评估候选、保存日志、再基于历史日志提出下一个候选。
4.2 形式化目标
论文把 harness 看成一个有状态程序。给定固定模型 M、任务分布 X、任务样本 x,harness H 会构造 prompt、接收模型输出、更新状态,并产生一条 rollout trajectory tau。任务奖励函数 r(tau, x) 评价这条轨迹。
H* = arg max_H E_{x ~ X, tau ~ p_M(H, x)} r(tau, x)
如果有多个目标,比如准确率和上下文成本,就不强行合成一个分数,而是用 Pareto frontier 保留非支配候选。这个形式化把“调 prompt / 调 memory / 调 retrieval / 调 agent loop”统一成了一个优化问题。
4.3 外循环算法
输入:任务集 X,固定 LLM M,proposer P,迭代次数 N
初始化:若干有效 harness H_0,空文件系统 D
for 每个初始 harness:
在任务集上评估
把源码、分数、执行轨迹写入 D
for t = 1 ... N:
proposer P 查询文件系统 D
P 读取历史源码、分数、失败轨迹和日志
P 提出一个或多个新 harness
对每个通过接口校验的新 harness:
运行评估
把新源码、分数、执行轨迹写入 D
返回:所有候选中的 Pareto frontier
这里的关键设计是:外循环本身不规定 parent-selection、mutation、crossover 或固定反思模板。proposer 可以自由查看任意历史候选,自己判断应该基于哪个候选改、改局部逻辑还是重写整个程序。
4.4 为什么要用文件系统,而不是把历史塞进 prompt
Meta-Harness 的核心不是“上下文更长”,而是“历史经验可被选择性访问”。一次 harness 评估可能产生上百万甚至千万 token 的日志,不可能全部塞进一个 prompt。作者让 proposer 通过 grep、cat 等开发者工具按需查看文件。
论文在 TerminalBench-2 搜索日志中统计,proposer 每轮中位数读取 82 个文件,其中约 41% 是历史 harness 源码,40% 是执行轨迹。这说明它确实在使用外部历史,而不是只做局部随机改动。
4.5 关键实现细节
本文实验中的 harness 通常是单文件 Python 程序,修改任务相关的 prompting、retrieval、memory 和 orchestration 逻辑。proposer 使用 Claude Code + Opus-4.6。底层被优化的模型 M 在不同任务中不同,但始终冻结。
proposer 只看 search set 结果,不看 test set。每个 search run 通常评估约 60 个 harness,运行 20 轮左右。这个设置说明 Meta-Harness 更接近“自动工程搜索”,不是训练底层模型,也不是用测试集直接调参。
4.6 发现的文本分类 harness
在线文本分类任务中,Meta-Harness 发现了一组 memory-based harness。它们都维护过去标注样本的记忆,但使用不同方式构造当前 query 的上下文。
4.7 发现的数学检索 harness
数学推理任务中,Meta-Harness 没有简单地“多检索几个例题”,而是发现了一个按题型路由的 BM25 检索策略。
4.8 发现的 TerminalBench-2 harness
TerminalBench-2 中,Meta-Harness 基于 Terminus-KIRA 做搜索,最终发现的有效改动非常朴素:在 agent loop 开始前先收集环境快照,并把它注入初始 prompt。
/app 目录内容、可用语言和版本、包管理器、内存等。这个 bootstrap 不改变模型能力,但减少 agent 开局 2 到 4 轮探索环境的成本。对于依赖特定工具、库或文件结构的长程终端任务,这种节省可能直接影响 pass / fail。5. 实验结果与分析
5.1 在线文本分类主结果
文本分类实验沿用在线学习式设置:模型一个个接收标注样本,更新 memory,再在 held-out test set 上预测。使用的数据集包括 LawBench、Symptom2Disease 和 USPTO-50k。底层分类模型是 GPT-OSS-120B。
5.2 为什么 raw traces 重要
作者做了一个关键消融:proposer 能看到的信息越完整,search 效果越好。
5.3 OOD 文本分类泛化
作者还在 9 个搜索期间没见过的文本分类数据集上测试发现的 harness。Meta-Harness 平均准确率 73.1,高于 ACE 的 70.2 和 few-shot baselines。这个结果说明发现的策略不只是记住三个 search dataset 的局部模式,至少在同类文本分类任务上有一定泛化。
5.4 检索增强数学推理
数学任务使用 50 万以上已解题语料作为 retrieval corpus,在 250 道 Olympiad-difficulty search set 上搜索检索 harness,再在 200 道未见过的 IMO-level 问题上评估。搜索时用 GPT-OSS-20B 选择 harness,最终同一个检索 harness 在 5 个 held-out models 上评估。
5.5 TerminalBench-2 agentic coding
TerminalBench-2 包含 89 个长程终端任务。论文以 Terminus 2 和 Terminus-KIRA 作为初始强 baseline,在同一个 benchmark 上做 search 和 final evaluation,并额外做人工检查和 regex 审计,排查 task-specific string leakage。
5.6 实验结论汇总
| 问题 | 证据 | 结论 |
|---|---|---|
| 自动搜索 harness 是否有效 | 文本分类 48.6,高于 ACE 40.9 / MCE 40.0 | 在 context-management 类任务上有效 |
| 完整日志是否必要 | raw traces 消融 50.0 median,分数/摘要只有约 34-35 | 轨迹细节是核心信号 |
| 数学检索是否能被优化 | IMO-level 平均 +4.7 points over no retriever | 检索策略需要按题型设计 |
| Agent coding 是否受益 | Haiku 4.5 上 37.6,高于 Goose 35.5 | harness 小改动也可能影响长程任务 |
| 结论是否完全泛化 | TerminalBench 同集 search/eval,proposer 只测 Claude Code Opus-4.6 | 泛化范围仍需更严格验证 |
6. 总结
本文的贡献可以概括为四点。
第一,提出 Meta-Harness:用 coding agent 自动优化 harness code,把 harness engineering 从人工经验过程转成可执行的外循环搜索。
第二,强调完整历史经验的重要性。不同于只看分数、短摘要或最近候选的文本优化器,Meta-Harness 把所有源码、分数和执行轨迹放进文件系统,让 proposer 自己选择性读取。
第三,在三个不同任务域验证了这个思路:在线文本分类、检索增强数学推理和 TerminalBench-2 agentic coding。结果显示,自动发现的 harness 可以超过多种手写 baseline 或固定优化方法。
第四,发现的 harness 是可读代码,而不是不可解释参数。文本分类中能看到 draft verification、label primer、contrastive pairs;数学中能看到题型路由和 per-route 检索策略;TerminalBench 中能看到环境 bootstrap。这让人可以检查、复用和批判这些策略。
当 coding agent 足够强时,agent 系统外层的 prompt、memory、retrieval、tool loop 和环境 bootstrap 都可以成为自动搜索对象。改进 LLM agent 不一定只靠更强模型,也可以靠自动改“模型外面的运行程序”。
7. 个人思考与展望
7.1 优点
Meta-Harness 的优点是问题抓得准。当前 LLM agent 的很多性能差异确实来自 harness,而不是模型权重本身。把 harness 当成可优化代码对象,比只说“prompt engineering 很重要”更具体,也更容易实验验证。
第二个优点是反馈通道设计合理。文件系统不是一个炫技设计,而是很贴合 coding agent 的工作方式:读文件、搜日志、比较版本、改代码、跑评估。相比把所有历史压成一个 prompt,这种方式更接近真实软件工程调试。
第三个优点是结果有可解释性。尤其是 TerminalBench 的 environment bootstrap,虽然简单,但很符合长程 agent 任务的实际瓶颈:模型经常先花几轮查环境,导致预算被浪费。自动搜索能发现这种小但有效的工程改动,说明方法不只是在调 prompt 文案。
7.2 局限性
依赖强 proposer
论文主要使用 Claude Code + Opus-4.6。如果换成弱 coding agent,是否还能稳定搜索出好 harness,需要额外验证。
评估成本不低
每次候选 harness 都要跑任务评估。它更适合高价值、可重复使用的 harness,而不是每个小任务临时跑一遍。
泛化证据有限
TerminalBench 不是严格 held-out;更强结论需要独立任务、独立模型和跨 benchmark 验证。
此外,自动 harness search 仍然需要人工设定边界。人要定义任务接口、评价函数、初始 harness、可修改文件范围和安全约束。它不是完全自动科研,而是把人最费时间的反复调试环节交给 agent。
7.3 和前两篇的关系
7.4 可追问的问题
- 如果 proposer 换成不同模型,Meta-Harness 的收益曲线会怎样变化?
- 能不能把多个任务上发现的 harness 抽象成 reusable harness library?
- 文件系统历史会不会越来越大,导致 proposer 检索和判断成本上升?
- 如何防止 proposer 学到 benchmark-specific hack,而不是真正可泛化的 harness pattern?
- 未来是否可以 co-evolve harness 和 model weights,让外部策略和内部能力一起优化?
总体来看,这篇值得重点读。它不是单纯提出一个 agent 框架,而是把“harness 影响模型性能”这件事变成了可搜索、可评估、可复用的工程优化问题。它的结论还不能证明 harness search 可以替代所有人工设计,但已经足够说明:在强 coding agent 出现之后,自动 harness engineering 会成为一个很现实的研究方向。