大家好,我是你们的博主。最近在跟进自主软件开发这个方向时,发现了一个很值得关注的新框架——Harness-of-Harness。这个框架的核心在于“多日自主软件开发”和“持续改进”,这两个词放在一起,意味着AI编程不再是单次生成片段,而是有能力在长时间、多任务、多轮迭代中稳定工作。今天这篇文章,我会围绕Harness-of-Harness的概念、架构逻辑、与现有方案的差异、核心机制拆解、实践思路以及未来挑战展开,完整梳理它对自主软件开发范式的影响。无论你是研究AI Agent的开发者,还是对智能编程工具感兴趣的工程师,相信这篇文章都能给你带来一些新的思考。
1. 背景与核心概念
1.1 为什么需要 Harness-of-Harness?
在聊Harness-of-Harness之前,我们先回顾一下当前AI辅助软件开发的现状。早期的GitHub Copilot、通义灵码这类工具,核心能力是“单点补全”:你在IDE里写了一个函数开头,它帮你补全后面的逻辑。后来出现了以ChatGPT、Claude为代表的对话式编程,模型可以在多轮对话中理解需求并生成整个文件,甚至给出修改建议。再到2023年以后,AutoGPT、MetaGPT、ChatDev等项目将“AI参与软件开发”推向了更高的层次——它们不再是简单地回答问题,而是尝试将任务拆解、逐步执行、循环验证,形成一套完整的自动化流程。
但是,这些已有的方案存在一个明显的瓶颈:它们绝大多数是“单轮会话”或“短周期任务”。你给模型一个复杂需求,它在一次会话中完成若干步操作后,生成一个结果,然后结束。如果这个过程中出现bug、需求变更、环境问题,或者需要增加新功能,模型很难在后续的会话中继续改进同一个项目。每一次独立对话就像一次“孤军奋战”,没有对之前决策的记忆回溯,也没有对全项目状态的理解。
Harness-of-Harness正是为了解决这个问题而提出的。它的名字本身也很有意思——“Harness”原意是“驾驭、控制”,在这里可以理解为一种“工作框架”或“约束系统”。两个Harness叠加,说明这个框架的“控制层”是复合的、多层级的。核心思路是:不仅让AI执行软件开发任务,还让它在一个长期运行的环境中持续工作、反复测试、自我修正、逐步完善代码,直到整个项目达到预期目标。
1.2 Harness-of-Harness 是什么?
从概念上讲,Harness-of-Harness(简称HoH)是一种面向“多日自主软件开发”的Agent框架设计范式。它通过外部控制循环(outer harness)和内部任务循环(inner harness)的双层结构,让AI能够在一个项目上持续运行数天,期间不断学习、改进、验证,并最终产出可运行的软件系统。
这里的“外部控制循环”负责整体规划、状态跟踪、质量评估和任务调度;“内部任务循环”则负责具体编码、测试、修复、重构等子任务。两层循环结合,形成了“规划→执行→验证→优化→再规划”的闭环链路。和传统单次生成任务不同,HoH强调的不是“生成结果”,而是“持续改进结果”。
1.3 持续改进的含义
“持续改进”是HoH框架的另一个关键词。传统软件开发有持续集成、持续交付(CI/CD),它们强调的是代码提交后的自动化构建、测试和部署流程。而HoH中的持续改进是指在AI开发Agent的运行周期内,反复让模型审视自己生成的代码,通过静态分析、单元测试、同行评审模拟、用户反馈注入等方式,发现问题、修正问题、优化设计。这种改进不是一次性的,而是多轮次的,并且每一轮的改进结果都会被记录下来,作为后续决策的参考。
1.4 常见应用场景
那么HoH适合用在哪里?从目前的研究方向和应用前景来看,主要有以下几类:
首先是复杂项目原型开发。比如从零搭建一个含前后端、数据库、认证逻辑的Web应用,HoH可以连续运行多个周期,逐步完善功能,而不是一次性生成一份“看起来完整但跑不起来”的代码。
其次是企业内部代码库的持续维护。对于已有项目,HoH可以接收Issue、Bug描述或者Feature Request,自动定位相关代码模块,完成修改,然后跑测试,如果失败就继续修,直到全绿。
第三是自动化测试生成与修复。HoH在持续改进过程中,可以不断生成测试、执行测试、分析覆盖率、修复被测试出来的问题,形成一个自动化的测试闭环。
第四是教学与研究。在软件工程教育中,HoH可以用来自动评估学生项目的完整性和规范性,也可以用于软件工程自动化研究的实验平台,测试不同模型、不同策略在长周期任务中的表现。
2. 核心架构:双层 Harness 的拆解
2.1 Outer Harness:外部控制层
Outer Harness是HoH的最外层控制逻辑,负责整个软件开发项目的生命周期管理。它更像是一个“项目经理”的角色,主要职能包括:
- 维护全局任务状态:当前项目处于哪个阶段、哪些模块已完成、哪些任务待处理、哪些任务存在阻塞。
- 规划任务列表:根据项目需求和当前进度,动态拆解下一步要执行的任务。
- 质量评估与门禁:在子任务完成后,通过测试、构建、静态扫描等手段评估产出结果,判断是否可以进入下一阶段。
- 状态回滚与重试:如果子任务执行失败,Outer Harness会根据失败原因决定是重试、重新规划还是人工介入。
外层控制的一个重要特点是“长期记忆”。它需要在多日的运行周期中记住之前做过什么决策、为什么这么决策、遇到了哪些坑。所以Outer Harness通常会维护一个持久化的状态存储,比如数据库、Git提交历史、任务清单文件等。
2.2 Inner Harness:内部执行层
Inner Harness是完成具体开发任务的执行层。它接收Outer Harness分配的子任务,比如“修复用户登录模块的token过期问题”,然后进行代码分析、修改、测试、提交。它包含:
- 代码编辑工具:直接修改项目文件。
- 命令执行工具:运行测试、构建、lint等。
- 信息检索工具:检索项目结构、读取相关文档、搜索历史提交记录。
Inner Harness的核心目标是高效地完成单个任务,同时尽可能减少对外层的依赖。因为它会频繁执行,所以速度和资源控制是关键。
2.3 双层之间的交互流程
整个过程可以大致描述为:
- Outer Harness接收项目需求,初始化项目状态,生成初始任务列表。
- 按优先级取出一个任务,交给Inner Harness执行。
- Inner Harness调用大模型、代码工具、Shell命令等尝试完成任务。
- Inner Harness将执行结果、日志、代码diff返回给Outer Harness。
- Outer Harness验证结果:跑测试、检查质量、对比需求。
- 如果通过,更新项目状态,取下一个任务;如果失败,分析失败原因,调整任务描述后再次执行,或者标记为需要人工介入。
- 整个项目达到停止条件(如全部测试通过、需求覆盖完整)后,Outer Harness生成最终交付报告。
这种双层结构与传统Agent的“ReAct循环”相比,增加了更明确的质量门禁和长期记忆管理,更适合软件工程这种高复杂度、长周期、强约束的任务场景。
3. 为什么不只是“用大模型写代码”?
3.1 大模型写代码的短板
现在用大模型写代码已经非常普遍,但它有几个本质短板:
一是上下文窗口有限。即使模型支持128K甚至200K上下文,面对一个真实的中大型项目仍然不够。模型无法记住每一个文件的每一个细节,容易出现“拆东墙补西墙”的情况。
二是缺乏验证能力。大模型生成的代码可能在语法上正确,但逻辑上有bug,或者依赖版本不对,或者存在安全隐患。让它自己生成、自己运行、自己检查,这是传统提示工程很难做到的。
三是缺少长期目标感。常规对话中,模型只会针对当前问题回答,不会主动规划整个项目的后续步骤。即使你告诉它“这是一个项目”,它在对话超长之后也会遗忘早期目标。
3.2 Harness-of-Harness 如何补足短板
HoH的思路是把“大模型写代码”升级成一个“带质量反馈的闭环系统”。在这个闭环中:
- 长任务通过Outer Harness被切分成短任务;
- 短任务通过Inner Harness被执行;
- 每个短任务的结果通过自动测试被验证;
- 验证失败的结论被输入给下一轮改进;
- 项目级状态被持续记录和更新。
这样一来,大模型的角色从“唯一决策者”变成了“执行引擎”,而真正掌控项目的是围绕它构建的Harness体系。即便模型偶尔犯错,外层控制系统也能在验证环节发现并纠正,不让错误累积到最终交付结果中。
3.3 HoH 与 AutoGPT、MetaGPT 的区别
很多人会把HoH和AutoGPT、MetaGPT放一起比较。它们确实都属于多智能体或Agent自动化的范畴,但侧重点有明显差异:
AutoGPT更偏向通用任务自动化,给一个目标,它自行拆解步骤并执行,适用于很多非软件工程场景,但它对代码工程的约束性、测试门禁、长期记忆管理相对薄弱。
MetaGPT强调“软件公司”的流程模拟,定义了产品经理、架构师、工程师、测试等角色,通过角色协作生成文档和代码。它更关注“角色分工”和“文档产出”,但从工程角度看,它的自动化验证和持续改进机制仍然偏弱。
Harness-of-Harness最大的不同在于它把“工程化管理”作为框架的第一原则:任务队列、状态管理、质量评估、失败重试、长期记忆这些机制都被显式建模,并且强调多日运行的稳定性。它不是“模拟一个软件公司”,而是“构建一个真正能长时间写代码的自动化系统”。
4. 核心机制拆解:基于规则的奖励模型与持续改进
4.1 基于规则的奖励模型
HoH中一个非常关键的设计是“基于规则的奖励模型”(Rule-based Reward Model)。这个概念与强化学习中的奖励模型类似,但HoH中的规则并不是抽象的数学函数,而是工程上可计算、可检查的硬性标准。比如:
- 代码是否能通过预定义的单元测试;
- 项目是否能成功构建;
- 代码规范检查(lint)是否通过;
- 关键路径是否达到指定测试覆盖率;
- 是否引入了已知安全漏洞。
你可以把它理解成一套“机器可判断的验收标准”。Inner Harness每次完成代码修改后,系统就会运行这些规则,得到一个奖励分数或通过/失败信号,然后根据这个信号决定下一步行为。相比依赖大模型自己判断“我改得好不好”,基于规则的验证更客观、更稳定,也更接近真实软件开发中的CI门禁。
4.2 多轮迭代与代码改进闭环
在HoH中,一次任务通常不会只跑一轮就结束。它会先进行初始实现,然后:
- 运行单元测试,发现失败用例;
- 分析失败原因,定位到具体代码位置;
- 修改代码,修复问题;
- 重新运行测试,确认修复是否有效;
- 如果还有失败,继续循环;
- 如果没有失败,再执行更严格的质量检查,比如覆盖率是否达标、是否有重复代码、是否需要重构。
这个闭环就是“持续改进”的微观体现。在传统开发模式中,这个闭环是靠开发者和CI系统互相配合完成的;在HoH中,它被设计成完全自动化的流程。
4.3 探索-利用平衡与错误记忆
在多日开发中,AI会面对大量可选方案。比如一个功能可以用不同算法实现,一个bug有多种修复路径。HoH需要平衡“利用已知可行方案”和“探索新方案”的关系,避免过早陷入局部最优。
同时,HoH还会维护“错误记忆”。也就是说,如果之前某次修改导致测试失败,这个失败经验会被记录下来。当模型再次遇到类似任务时,Outer Harness会把历史失败信息注入上下文中,提醒模型不要重复同样的错误。这有点像软件工程里的“复盘机制”,只不过它是自动化的、结构化的。
5. 从“单次任务”到“多日开发”:实践路径
5.1 搭建基础环境
如果你想亲身体验HoH思想的实践,不需要一上来就复现论文中的整套系统。可以先从搭建一个“最小可行版本”开始。建议环境如下:
- 操作系统:Linux(Ubuntu 22.04以上)或macOS;
- 编程语言:Python 3.10+;
- 大模型API:OpenAI、Anthropic或本地部署的DeepSeek等;
- 代码仓库:Git;
- 自动化工具:pytest、flake8、pre-commit;
- 数据库(可选):SQLite或PostgreSQL,用来存储项目状态和任务历史。
需要说明的是:这里不涉及具体模型版本,因为不同时间模型能力差异很大,你可以根据自己的实际情况选择。重点在于“把大模型的生成能力接入到有验证的工程回路中”。
5.2 一个简化的HoH流程示例
假设我们要开发一个“待办事项管理API”。HoH的最小闭环可以写成这样一个伪流程:
# 文件路径:hoh_simplified.py # 这个示例演示 HoH 的核心思想: # 规划 -> 生成 -> 验证 -> 修复 -> 记录,循环执行 import subprocess import json import os class SimpleTask: def __init__(self, task_id, description, test_file): self.task_id = task_id self.description = description self.test_file = test_file self.attempts = 0 def run_validation(self): """运行测试文件,返回是否通过""" result = subprocess.run( ["pytest", self.test_file, "-v"], capture_output=True, text=True ) return result.returncode == 0, result.stdout + result.stderr class HOHCore: def __init__(self, initial_tasks): self.tasks = initial_tasks self.history = [] def call_generate_model(self, prompt): """ 调用大模型生成代码。 实际项目中请替换为 OpenAI / Claude / 本地模型等接口。 这里用占位符表示,调用时你也可以直接输出测试代码。 """ # 假设我们通过某些SDK调用模型 # response = openai.ChatCompletion.create(...) # return response.choices[0].message.content return "# 这里是由模型生成的代码" def execute_task(self, task: SimpleTask): """执行一个任务的完整闭环""" task.attempts += 1 # 1. 构建 prompt,让模型生成代码修复方案 prompt = ( f"请完成以下任务:{task.description}\n" f"相关测试文件:{task.test_file}\n" "请直接输出修复后的完整代码。" ) generated_code = self.call_generate_model(prompt) # 2. 将生成的代码写入目标文件(示意) target_file = f"todo_api_{task.task_id}.py" with open(target_file, "w", encoding="utf-8") as fp: fp.write(generated_code) # 3. 验证结果 passed, log = task.run_validation() self.history.append({ "task_id": task.task_id, "attempts": task.attempts, "passed": passed, "log": log[:500] }) # 4. 如果失败,可以在这里继续调用模型修复(简化为最多3次) while not passed and task.attempts < 3: task.attempts += 1 repair_prompt = ( f"测试日志如下:{log[-2000:]}\n" "请修复代码以通过测试,直接输出完整代码。" ) generated_code = self.call_generate_model(repair_prompt) with open(target_file, "w", encoding="utf-8") as fp: fp.write(generated_code) passed, log = task.run_validation() return passed, log def run_all(self): results = [] for task in self.tasks: passed, log = self.execute_task(task) results.append({"task_id": task.task_id, "passed": passed}) return results if __name__ == "__main__": # 初始化任务列表 initial_tasks = [ SimpleTask( task_id=1, description="创建一个基于Flask的待办事项API,支持增删改查", test_file="test_todo_api.py" ) ] core = HOHCore(initial_tasks) final_results = core.run_all() print(json.dumps(final_results, ensure_ascii=False, indent=2))上面这段代码是一个非常粗略的示意,并不建议直接用于生产环境,但它展示了HoH的一个核心循环:规划任务、生成代码、运行验证、失败修复、记录结果。在实际系统中,Outer Harness的任务规划会更复杂,Inner Harness的调用工具也更多样。
5.3 推进到多日运行的关键点
如果要在真实项目中跑多日,你需要额外解决几个问题:
一是任务的可恢复性。系统需要能够在任意时刻暂停并恢复,比如深夜任务跑了一半断电,第二天能接着未完成的任务继续跑。这需要把状态持久化到磁盘或数据库。
二是大模型API费用控制。多日运行意味着大量的模型调用,必须有budget管理和调用频控。三层结构里,keep prompt尽量短,上下文尽量精简,优先复用已有结果。
三是工具集的安全隔离。AI自主修改代码本身有风险,不能让它随意执行危险命令。建议将所有执行命令限制在Docker容器或沙箱环境内,并设置权限白名单。
四是人工审核接入点。持续自主不意味着完全无人参与,关键节点(比如数据库变更、依赖升级、架构重构)仍然需要人工审批。HoH框架应当预留这样的“human-in-the-loop”入口。
6. 核心差异:Harness-of-Harness 带来的技术启发
6.1 重新定义“AI写代码”
HoH的意义在于,它把AI从“代码生成器”变成了“软件工程执行体”。过去我们问“AI能写好代码吗”,现在应该问“AI能在约束条件下持续交付可运行的软件吗”。在HoH的框架里,代码生成只是最底层的一环,真正重要的是它和质量门禁、状态管理、错误回溯、引入新功能等机制的协同。
6.2 对开发工具链的影响
可以预见,HoH的理念会影响未来的开发工具链设计。IDE插件不再只是一个补全助手,而可能演变为一个“项目级长期协作者”。它阅读你的代码库、理解项目历史、自动生成任务清单、执行修改、运行测试、提交代码,甚至根据CI反馈继续修复,直到绿线亮起。这个闭环比今天任何一个智能编码助手都更接近“虚拟工程师”的定位。
6.3 对软件工程教育的影响
HoH还有很强的教学价值。软件工程课程中的“项目设计、编码、测试、重构”等环节,可以被复用到自动评估和反馈系统中。学生提交一个项目后,系统可以自动判断它是否满足功能要求、代码质量是否达标、测试是否完备,并在多轮迭代后给出改进建议。这有助于学生在大型项目开发中养成“验证驱动”的习惯。
7. 技术挑战与未来展望
7.1 当前面临的主要挑战
虽然HoH的框架很有吸引力,但它落地的难度也不小。
首先是“长周期稳定性”问题。多日运行意味着模型会输出海量代码、执行大量操作。任何一个环节的错误累积都可能让整个任务崩溃。解决这个问题需要非常完善的异常捕获、日志记录、状态重置机制。
其次是大模型的幻觉问题。模型在修改代码时,可能“自以为”某个功能是正确实现,但实际运行结果却不符合预期。Hop中的规则验证可以减少这种情况,但无法完全杜绝。
第三是自动化验证的覆盖面有限。HoH依赖“基于规则的奖励模型”,但现实项目的需求往往难以全部转成可运行的测试。如果某些需求没有被测试覆盖,AI可能会在“测试通过”的情况下做出错误实现。这需要引入需求追踪、人工验收、行为仿真等更丰富的验证手段。
第四是安全与合规问题。让AI自主运行数天,按代码仓库、生产环境中的操作风险非常高。权限控制、审计日志、操作白名单、异常熔断机制都必须在设计阶段就纳入考量。
7.2 未来发展方向
HoH的演进方向可能包括:
- 更强大的状态表示:将项目代码、Git历史、模拟运行记录统一编码,让模型可以从全局视角理解项目。
- 多智能体分工协作:在Outer Harness下挂载多个Inner Harness,分别负责前端、后端、测试等,形成更强的并行开发能力。
- 自学习奖励规则:奖励模型不再只依靠硬编码规则,而是能从历史项目数据中学习哪些代码模式更容易带来成功,从而制定更动态的质量标准。
- 跨项目记忆:多个项目跑完后,系统能沉淀一套“开发经验库”,在新项目中复用过往的成功策略。
8. 高频问题与最佳实践建议
8.1 常见问题清单
| 问题现象 | 常见原因 | 解决思路 |
|---|---|---|
| 同一个bug反复修不好 | 模型缺少对失败历史的理解提示 | 将前几次失败的具体原因注入Prompt |
| 生成代码能跑但逻辑不符合需求 | 验证规则只覆盖了“能不能跑” | 增加功能级验收测试和业务场景测试 |
| 多日运行后状态越来越乱 | 缺少状态持久化和任务优先级管理 | 引入数据库存储任务状态,设计好启动/恢复逻辑 |
| 调用API费用过高 | 每轮都使用大上下文重发项目全量信息 | 缓存历史结果,只发送diff和相关文件摘要 |
| 自主修改代码破坏了其他模块 | 缺少变更影响分析 | 修改前读取依赖关系,运行受影响模块的测试 |
| 无法判断是否应该交给人工 | 质量门禁没有明确分级 | 设定三级门禁:自动通过、需人工复核、强制终止 |
8.2 工程实践建议
如果你准备在自己的项目里实验HoH思想,建议按下面几个原则来:
第一,从“窄而深”的场景开始。不要一开始就让AI去开发一个“电商全栈项目”。先让它在单个模块上运行闭环:生成、测试、修复、再测试,稳定之后再扩展任务范围。
第二,测试先行。你要给AI清晰的验收标准,没有自动化测试,HoH就是无源之水。先把CI系统搭好,再考虑让AI进入开发环节。
第三,保持人工监督。尤其是在数据库操作、外网请求、生产配置变更等高风险任务上,设置强制审批点。
第四,做好日志与审计。每一轮AI的决策、Prompt、代码diff、测试结果都要记录,这样你才能复盘整个开发过程,找到瓶颈并进行针对性优化。
第五,控制上下文长度。多日运行期间,不要让模型每次都“重读全文”。合理做法是让外层维护一个结构化状态文件,比如:
{ "project": "todo-api", "current_stage": "feature/user-auth", "completed_tasks": ["init-project", "todo-crud", "database-schema"], "pending_tasks": ["user-login", "jwt-auth", "api-docs"], "known_issues": [ "test_login.py fails when token expired" ] }这样Inner Harness每次只需要拿到当前任务和最少量的上下文,效率和准确性都会高很多。
9. 总结:从“会写代码”走向“会做工程”
Harness-of-Harness不是一个步行可用的“AI工具下载链接”,而是一种关于如何构造自主软件开发Agent的设计哲学。它的核心贡献在于把“大模型代码生成”和“工程化质量循环”融合成了一个可持续运行的系统结构。对于开发者而言,了解HoH有助于你重新理解AI在软件研发中的角色:它不只是一个“代码生成器”,而是一个“可以被约束、被验证、被持续改进的工程执行者”。
如果你对自主软件开发、智能体框架设计、AI工程化落地感兴趣,HoH是一个值得深入研究的切入点。建议下一步可以继续关注:
- 大模型Agent的长期记忆与状态管理机制;
- 自动化测试生成与失败定位的技术进展;
- 多Agent协作下的任务调度与冲突消解;
- 基于代码仓库级验证的奖励建模方法。
如果你正在酝酿自己的Agent项目,不妨试试“双层Harness”的思路:外层管项目、内层管实施,用规则验证保证质量。哪怕第一次跑通的时间比“一次性生成”更长,结果的可控性和可维护性也会完全不一样。
好了,这篇关于Harness-of-Harness的技术拆解就到这里。希望它对你理解自主软件开发的新范式有所帮助。如果你实际搭建了类似的闭环系统,或者遇到了有意思的问题,欢迎在评论区交流。