Self-Harness: Harnesses That Improve Themselves

基本信息


研究摘要

在大型语言模型(Large Language Model, LLM)驱动的智能体(agent)系统中,模型的表现不仅取决于其基座模型的能力,还深受围绕它的"harness"——即系统提示词、工具集、运行时机制、验证规则和编排逻辑等非参数化脚手架——的影响。同一个基座模型在不同的 harness 下可以展现出截然不同的执行效果,这一事实早已为 ReAct、SWE-agent、Claude Code 等框架的实践所证实。然而,现有的 harness 设计几乎完全依赖人类专家的手工工程,这种范式在模型种类日益繁多、迭代速度不断加快的今天,已经显现出严重的可扩展性瓶颈。不同模型具有独特的行为模式、工具使用习惯和错误倾向,为每一个新模型手工调优 harness 不仅成本高昂,而且难以跟上模型更新的节奏。

正是在这一背景下,上海人工智能实验室的研究团队提出了 Self-Harness 这一全新范式。Self-Harness 的核心思想颇为大胆:让 LLM-based agent 自己改进它所运行的 harness,无需依赖人类工程师,也不需要更强外部模型的指导。作者将这一思想操作化为一个三阶段的迭代闭环:Weakness Mining(弱点挖掘)通过聚类执行轨迹中的失败模式,识别出模型特定的反复出现的问题;Harness Proposal(harness 提案)让同一个固定模型基于这些失败证据生成多样化且最小化的 harness 修改方案;Proposal Validation(提案验证)则通过回归测试确保只有那些在保留集上不会导致性能退化的修改才会被采纳。这种设计使得 harness 的改进成为一个有迹可循、可测试、可回滚的实证状态转移过程,而非依赖外部优化器的黑箱搜索。

在 Terminal-Bench-2.0 基准测试上,Self-Harness 在三个来自不同模型家族的基座模型——MiniMax M2.5、Qwen3.5-35B-A3B 和 GLM-5——上均取得了显著的性能提升。特别是在 held-out 测试集上,MiniMax M2.5 的通过率从 40.5% 提升至 61.9%(相对提升 53%),Qwen3.5 从 23.8% 提升至 38.1%(相对提升 60%),而 GLM-5 从 42.9% 提升至 57.1%(相对提升 33%)。更值得注意的是,定性分析表明 Self-Harness 并非简单地添加通用指令或让提示词变长,而是针对不同模型的具体弱点生成了高度定制化的 harness 修改,例如为 MiniMax M2.5 添加了早期创建输出文件的机制,为 Qwen3.5 引入了依赖预检查和错误恢复中间件,为 GLM-5 则强化了环境变量在 shell 会话间的持久性。这些结果有力地说明,Self-Harness 确实能够将模型特定的弱点转化为具体的、可执行的 harness 层干预,为迈向真正自我演化的智能体系统提供了一条切实可行的技术路径。

理论框架

Self-Harness 的理论根基深深植根于两个相互交织的研究传统:自我改进系统(self-improving systems)的研究和 harness 工程的实践反思。从自我改进的谱系来看,这一工作延续了从 Reflexion 的口头反馈积累、STOP 的递归代码生成改进,到 The AI Scientist 和 Darwin-Gödel Machine 等更宏大的开放式自我演化系统的思想脉络。然而,Self-Harness 与这些前作存在本质区别:它改进的对象不是记忆、上下文或生成的程序,而是智能体运行的 harness 本身——一个声明式的、可配置的、非参数的协议层。这一选择具有深刻的理论意义,因为它将改进的焦点从模型的内部状态转向了模型与环境交互的接口规范,从而在保持模型权重固定的前提下,实现了行为层面的系统性提升。

作者对 harness 概念进行了形式化定义,这一形式化为整个方法提供了清晰的理论边界。给定一个固定的语言模型 M 和一个 harness h,执行过程可以形式化地描述为:对于任务实例 x,运行 Mh 下产生执行轨迹 τ 和输出 y,评估器 E(x,τ,y) 映射为行为结果(如通过/失败)。在这个框架中,ME 始终保持固定,而 h 是唯一的优化对象。Self-Harness 因此操作于一个 harness 谱系 h0,h1,,其中每一次转移对应于对执行协议的有限编辑,而非模型权重的更新。这种设计将 harness 改进问题从一个黑箱搜索问题转化为了一个结构化、可解释的状态转移问题。

在失败分析的理论层面,Self-Harness 引入了 verifier-grounded failure signature(验证器引导的失败签名)概念,这是其区别于简单错误聚类的关键。每个失败记录 ri 的失败签名定义为三元组 ϕ(ri)=(ci,qi,mi),其中 ci 表示验证器层面的终端失败原因,qi 表示相关 agent 行为的因果状态,mi 则表示轨迹中暴露出的可复用行为机制。这种分层归因避免了将表面症状与深层机制混为一谈:两个运行可能共享相同的验证器结果(如超时或缺少产物),但由于背后的 agent 行为不同,它们可能需要完全不同的 harness 修改。聚类基于签名的精确匹配进行,确保了每个簇内的失败在理论上确实可能通过同一 harness 层干预来解决。

从更广泛的哲学视角来看,Self-Harness 体现了 Bergson 所说的"持续自我创造"(creating oneself endlessly)的技术类比。传统的人工智能系统是从外部被设计和修改的,而 Self-Harness 探索的是一种内部化的改进循环:系统不仅被外部力量改变,而且能够持续地"从自身出发创造自身"。这种从外部工程到内部演化的范式转换,可能预示着智能体系统设计的一个根本性转折点。然而,作者也清醒地认识到这一框架的理论边界:它研究的是有限 harness 编辑在固定基准下的改进,而非开放式的自我演化;被采纳的编辑仍然可能反映基准特定的失败模式;整个协议的质量依赖于验证器输出和轨迹记录的质量。

技术架构

Self-Harness 的技术实现围绕一个精心设计的迭代闭环展开,该闭环将行为证据 systematically 转化为 harness 更新。整个系统的架构可以从三个核心阶段来理解:Weakness Mining、Harness Proposal 和 Proposal Validation,它们共同构成了一个从证据收集到修改生成再到质量把关的完整 pipeline。

Weakness Mining 阶段的核心任务是将原始执行轨迹转化为结构化的失败证据。在每一轮迭代 t 中,固定模型 M 在当前 harness ht 下运行于 held-in 数据集 Din 上,产生输出 yi 和执行轨迹 τi。评估器 E 为每个任务分配结果 zi{pass,fail},形成轨迹记录集 Rt={ri}i=1|Din|。系统专注于失败记录子集 Ft={riRtzi=fail},并通过前述的三元组失败签名对它们进行聚类。每个簇 Cϕ 包含具有相同失败签名的记录,系统为每个簇构建结构化失败模式,包含簇大小、代表性任务实例、共享轨迹症状、验证器证据和推断的行为机制。这些簇按支持度和可操作性排序,最终汇集成一个证据包 Bt。关键的设计决策在于,Bt 不直接规定 harness 修改,而是将验证器层面的失败与 agent 层面的机制分离开来,使得后续的提案阶段可以针对具体的、可复用的弱点进行干预,而非粗粒度地"修补"超时或断言失败等表面现象。

Harness Proposal 阶段将证据包转化为候选修改。这里的一个关键创新在于,提案者不是外部优化器,而是同一个固定模型 M 在当前 harness ht 下被调用为"提案者"角色。系统为 M 提供一个受限制的提案上下文:当前 harness 的可编辑面、验证器引导的失败模式、应保留的通过行为记录,以及先前尝试编辑的历史。这种设计使得提案者接触到的是结构化的跨案例证据,而非原始执行日志,从而鼓励其推理可复用的失败机制而非个别任务失败。Self-Harness 采用并行提案生成策略,模型同时生成 K 个互不相同的提案包 Pt={(Δj,aj)}j=1K,其中每个编辑 Δj 将当前 harness 映射为候选 harness ht(j)=Δj(ht),而 aj 是一个审计记录,描述目标失败模式、编辑的 harness 面、预期行为效果和回归风险。每个提案必须满足两个约束:一是必须扎根于一个主要失败机制并映射到具体的可编辑面;二是候选之间必须具有实质性差异,不能仅仅是同一集群、同一面或同一机制的不同措辞表达。

Proposal Validation 阶段是确保修改质量的守门机制。每个候选 harness ht(j) 都被视为一个新的 harness 变体,在相同的评估协议下进行测试。系统在 held-in 数据集 Din 和 held-out 数据集 Dho 上同时评估当前 harness 和候选 harness,计算 split-wise 改进量:

Δin(j)=Pin(ht(j))Pin(ht)Δho(j)=Pho(ht(j))Pho(ht)

一个候选被接受当且仅当满足以下保守的推广准则:

Δin(j)0,Δho(j)0,max(Δin(j),Δho(j))>0

这一规则确保只有当候选在至少一个数据集上提升性能且在另一个数据集上不退化时才会被采纳。即使候选的总通过数增加,如果一个 split 的提升是以另一个 split 的退化为代价,该候选仍会被拒绝。当评估存在随机性时,系统重复候选评估并将同一规则应用于聚合后的通过数。如果一轮中有多个兼容候选满足规则,它们的编辑会被合并到下一轮 harness 中;被拒绝的候选则被记录但不改变活跃 harness。此外,验证还拒绝那些不修改任何可编辑面或在获得有效评估结果前执行失败的提案。

实验评估

Self-Harness 的实验设计体现了对因果推断的严谨追求:通过固定模型后端、工具集、预算、基准环境和评估器,仅允许 harness 变化,从而将观察到的性能改进严格归因于 harness 层的修改。实验在 Terminal-Bench-2.0 上进行,这是一个包含 89 个容器化终端任务的多轮智能体基准测试,涵盖产物管理、命令使用、验证行为和执行错误恢复等方面。由于多模态任务需要初始 harness 不支持的模态特定输入处理,这些任务被排除在外,最终在一个固定的 64 案例子集上进行评估,以减少外部因素引入的噪声。

实验涉及三个来自不同模型家族的基座模型:MiniMax M2.5、Qwen3.5-35B-A3B 和 GLM-5。所有比较均为 within-model 比较,即解码配置、预算、工具集、基准环境和评估器保持不变。初始 harness 基于 DeepAgent SDK 构建,但有意保持最小化:仅包含一个简短的 benchmark-facing 系统提示词和默认的文件系统与 shell 工具。Self-Harness 只能修改配置 DeepAgent 如何实例化和控制的 harness 定义文件中的声明式配置点,如指令、工具、验证指导等。

主要结果如表 1 所示。在所有三个模型后端上,被采纳的 harness 均在 held-in 和 held-out 两个数据集上提升或保持了通过率(Pass %)。

模型 Split 初始 Harness Self-Harness 绝对提升 相对提升
MiniMax M2.5 held-in 43.0% 50.0% +7.0 pp +16%
MiniMax M2.5 held-out 40.5% 61.9% +21.4 pp +53%
Qwen3.5-35B-A3B held-in 15.1% 36.0% +20.9 pp +138%
Qwen3.5-35B-A3B held-out 23.8% 38.1% +14.3 pp +60%
GLM-5 held-in 47.7% 57.0% +9.3 pp +20%
GLM-5 held-out 42.9% 57.1% +14.2 pp +33%

这些结果表明 harness 层编辑可以在保持所有其他因素固定的前提下产生可测量的改进。尤为重要的是,所有三个后端在 held-out 数据集上均取得了提升,且没有任何被推广的 harness 导致任一 split 的退化。这有力支持了 Self-Harness 的核心设计目标:提案编辑应针对可复用的执行机制而非案例特定的失败,而回归门控应防止在一个 split 上的改进以牺牲另一个 split 为代价。

对 harness 演化轨迹的进一步分析揭示了 Self-Harness 的工作方式并非通过大量均匀成功的提案实现平滑改进,而是通过少量经过验证门控的编辑达到最终 harness。以 MiniMax M2.5 为例,harness 从 42.2% 的通过率提升至 53.9%,其保留的编辑针对了缺少必需产物、schema 无效的工具内容和停滞的工具使用循环,最终生成的 harness 鼓励 agent 更早创建所需输出、更谨慎地处理结构化工具内容,并在长时间工具交互后重定向执行。Qwen3.5 的演化则更为戏剧性:从 20.3% 开始,经过 20 轮迭代达到 36.7%,其采纳的编辑强调产物检查、缺失产物恢复、重试纪律和工具错误触发的中间件。GLM-5 的改进从 46.1% 到 57.0%,编辑聚焦于持久环境变化、有界分段操作和从探索到实现的过渡。三个运行共同揭示了一个主题——产物可靠性,但每个模型通过不同的具体机制来实现这一主题,这表明 Self-Harness 确实能够捕获不同模型的特定失败模式并生成针对性的改进方案。

案例研究

为了深入理解被采纳的 harness 编辑如何具体改变 agent 的行为,作者提供了详细的 before-after 轨迹对比。以 MiniMax M2.5 在 Terminal-Bench-2.0 的 count-dataset-tokens 任务上的案例为例,初始 harness 下的 agent 在找到相关的元数据配置后,继续进行漫长的数据集探索,最终因超时而未能创建所需的答案产物。这种"探索过度而执行不足"的行为模式正是 Weakness Mining 阶段识别出的主要失败机制之一。在被采纳的 harness 修改后,agent 的行为发生了根本性转变:它首先识别出元数据支持的数据子集,计算所需的 token 总数,然后立即写入答案文件并在停止前读取验证。这一变化直接源于 harness 中对 bootstrap 指令的修改——从"识别最小的相关编辑面"变为"识别所需的输出产物并尽早创建初始版本",以及对运行时策略的启用——限制总工具消息数,鼓励 agent 在长时间工具交互后重定向而非继续开放式探索。

Qwen3.5 在 extract-elf 任务上的案例则展示了另一类失败恢复机制的价值。在初始 harness 下,agent 创建了所需的提取脚本,但随后陷入反复的覆盖和编辑文件失败中,在停止前甚至删除了目标文件 /app/extract.js,导致验证器因缺少必需产物而判定失败。这一轨迹暴露了几个交织的失败机制:重复无效操作、错误恢复不当和产物管理混乱。在被采纳的 harness 中,一个工具错误触发的系统提示词(middleware guard)被引入:当工具调用失败时,系统会重定向 agent 关注缺失的产物,促使其重新创建提取器、修复解析逻辑、写入输出文件,并对生成的 JSON 结果进行有针对性的验证,最终确保必需文件在验证器检查时存在。这一中间件机制不仅修复了该特定任务,而且作为一种通用策略被保留在 harness 中,用于处理类似的工具错误场景。

GLM-5 在 build-pov-ray 任务上的案例进一步说明了模型特定适配的重要性。初始 harness 下的 agent 将大量预算消耗在漫长的外部下载上,之后面对反复失败的完整性检查却选择直接终结。被采纳的 harness 修改引入了多个协同机制:首先,它要求 agent 使安装的工具或路径变化在 shell 会话间持久化,并验证环境修改后的工具可访问性;其次,它添加了一个验证阶段约束——如果 agent 已经长时间探索但未产生所需产物,应当转向实现和测试解决方案。修改后的轨迹显示,agent 在发现外部下载超时证据后切换策略,提前检查替代来源,修复失败的渲染检查,然后才最终确认。这些案例共同说明,Self-Harness 的改进不是通过增加通用指令或让提示词变长来实现的,而是通过引入针对性的工作流变化,使 agent 的行为与诊断出的失败机制对齐。

综合价值与局限

Self-Harness 在理论层面提供了一个关于智能体系统自我改进的新视角。传统上,智能体的能力提升要么通过改进基座模型(训练更大的模型、更好的对齐),要么通过人类工程师手工优化 harness(设计更好的提示词、工具、工作流)。Self-Harness 开辟了第三条路径:让智能体在保持模型固定的前提下,自主地、基于实证地改进其运行环境。这一思路的理论意义在于,它将 harness 工程从一个纯粹的人类设计活动转变为一个可由智能体自身参与的、有迹可循的演化过程。这对于理解智能体的自主性边界具有重要启示:自主性不仅体现在执行任务的能力上,还体现在塑造自身运行条件的能力上。

在实践层面,Self-Harness 的最大优势在于其模型特定适配能力。实验清楚地表明,不同模型从不同的 harness 修改中获益:MiniMax M2.5 需要更早的产物创建和工具使用边界,Qwen3.5 需要依赖预检查和错误恢复中间件,GLM-5 则需要环境持久性和从探索到实现的过渡引导。这种差异化改进是通过系统化的失败分析和回归测试实现的,而非人类工程师基于直觉的试错。此外,整个改进过程是可审计的:每个 harness 变体的修改内容、动机证据、评估结果和采纳/拒绝决策都被记录下来,形成了一条清晰的 harness 谱系。这种透明性对于在高风险场景中部署自我改进系统至关重要。

然而,Self-Harness 也存在明显的局限。首先,它目前研究的是固定基准下的有限 harness 编辑,而非开放式的自我改进。被采纳的编辑可能仍然反映基准特定的失败模式,这意味着如果换到不同的任务领域,当前 harness 的优势可能无法直接迁移。其次,整个协议严重依赖于验证器输出和轨迹记录的质量。如果评估器本身存在缺陷——例如,验证器可能错误地将正确的行为判定为失败,或者无法提供有意义的失败原因——那么 Weakness Mining 阶段生成的证据包就会存在系统性偏差,进而导致提案阶段生成无效甚至有害的修改。第三,当前的接受准则仅基于通过率的非退化性,对于更高风险的 harness 变化(如涉及权限策略或安全边界的修改),这一准则可能过于宽松。此外,虽然实验展示了显著的性能提升,但绝对通过率仍然不高(即使在最佳情况下也低于 62%),说明 harness 改进只是智能体能力提升的一个方面,模型本身的能力瓶颈仍然是根本性的限制因素。

延伸阅读与思考

Self-Harness 的研究与多个重要工作领域紧密相连。在自我改进智能体的谱系中,Reflexion(Shinn et al., 2023)通过口头反馈的积累实现了跨尝试的学习,Agentic Context Engineering(Zhang et al., 2026)通过演化上下文改善了后续模型调用,而 STOP(Zelikman et al., 2024)则研究了代码生成的递归自我改进。这些方法的共同点在于,它们改进的对象通常是响应策略、记忆或上下文,而非声明式的 harness 状态。与之形成对比的是外部优化器路线:Automated Design of Agentic Systems(Hu et al., 2025)将智能体设计视为一个可搜索的空间,Meta-Harness(Lee et al., 2026)直接使用源代码、分数和轨迹优化 harness 代码。Self-Harness 的独特贡献在于将改进过程内部化到被评估的智能体本身,同时保持 harness 修改的有界性和可审计性。

在更广泛的科学发现和自我演化系统领域,The AI Scientist(Lu et al., 2024)、AlphaEvolve(Novikov et al., 2025)、Gödel Agent(Yin et al., 2025)和 Darwin-Gödel Machine(Zhang et al., 2025)等作品探索了更宏大的开放式研究、算法设计和能力扩展循环。Self-Harness 可以被视为这一谱系中的一个受控变体:它研究的是一个更狭窄但更有约束的场景——同一个固定模型能否在当前 harness 下提出对自身未来行为治理协议的有限修改。

从未来研究方向来看,有几个值得深入探索的问题。首先,Self-Harness 的框架是否可以扩展到更复杂、更开放的执行环境,而非局限于容器化的终端任务?在真实世界的软件工程、科学研究和多模态交互场景中,验证器的构建和失败签名的设计将面临更大的挑战。其次,当前的接受准则相对简单(通过率的非退化性),是否可以引入更丰富的评估维度,如安全性、效率、可解释性等,以实现更全面的 harness 质量把关?第三,Self-Harness 的迭代循环是否可以与人类工程师的反馈相结合,形成一种人机协同的 harness 演化模式?人类专家可能在识别深层设计问题和验证高层次行为约束方面发挥不可替代的作用。最后,一个更深层的哲学问题是:如果 harness 可以自我改进,那么这种改进的边界在哪里?是否存在某种"harness 不动点",使得进一步修改不再带来有意义的提升?理解这一边界对于构建可持续自我演化的智能体系统至关重要。

个人而言,这篇论文最令人深思的方面在于它提出了一种关于智能体自主性的新理解。传统上,我们倾向于将自主性等同于在复杂环境中完成任务的能力。但 Self-Harness 提示我们,真正的自主性可能还包括对自身运行条件的反思和改进能力——一种"元自主性"。如果我们将智能体比作一个生物体,那么 harness 就是它的"生态位",而 Self-Harness 则是在探索生物体如何主动塑造自己的生态位。这一视角为智能体系统的长期演化提供了一个富有想象力的框架,也为理解人工智能与自我创造之间的关系开辟了一条新的思考路径。


笔记创建时间: 2026-06-24
阅读方式: L2 深度阅读


Topics:

Powered by Forestry.md