长时间运行应用开发的 Harness 设计
发布日期: 2026年3月24日
作者: Prithvi Rajasekaran,Anthropic Labs 团队成员
Harness 设计是 Agent 编码前沿性能的关键。本文描述了 Anthropic 如何在前端设计和长时间自主软件工程方面将 Claude 推向更远。
背景
在几个月的时间里,作者研究了两个相互关联的问题:生成高质量的前端设计,以及在无人干预的情况下构建完整的应用程序。这项工作源于早期的前端设计技能和长时间编码 Agent Harness 的努力,其中 Prompt 工程和 Harness 设计将 Claude 的性能提升到了基线以上——尽管两者最终都遇到了瓶颈。
为了突破,作者寻求了跨两个不同领域的新型 AI 工程方法:一个由主观品味定义,另一个由可验证的正确性和可用性定义。从生成对抗网络(GAN)中汲取灵感,设计了一个包含生成器和评估器 Agent 的多 Agent 结构。构建可靠的评估器意味着开发可以将主观判断转化为具体、可评分条件的标准。
这些技术随后被应用于长时间自主编码,带来了两个经验:将构建分解为可处理的块,以及使用结构化制品在 Session 之间传递上下文。最终结果是一个三 Agent 架构——规划器、生成器和评估器——在多小时的自主编码 Session 中生成了丰富的全栈应用程序。
为什么朴素实现不够好
先前的工作表明,Harness 设计对长时间 Agent 编码的有效性有重大影响。在早期实验中,初始化 Agent 将产品规格分解为任务列表,编码 Agent 一次实现一个功能,然后在 Session 之间传递制品。更广泛的开发者社区也得出了类似的见解,例如"Ralph Wiggum"方法使用钩子或脚本进行持续迭代循环。
但对于复杂任务,持续存在的问题仍然存在。观察到两种常见的失败模式:
失去连贯性: 模型在冗长任务上随着 Context Window 的填满往往会失去连贯性。一些模型还会表现出"上下文焦虑",在接近它们认为的上下文限制时过早地结束工作。上下文重置——完全清除 Context Window 并使用结构化交接启动新的 Agent——可以解决这两个问题。这与压缩不同,压缩是在原地总结早期对话。虽然压缩保留了连续性,但它不提供全新的开始。在早期测试中,Claude Sonnet 4.5 表现出的上下文焦虑如此强烈,以至于仅靠压缩还不够,使得上下文重置变得必不可少。这解决了核心问题,但增加了编排复杂性、Token 开销和延迟。
自我评估不佳: 当被要求评估自己的工作时,即使质量明显平庸,Agent 也倾向于自信地赞扬它。这在设计等主观任务中尤为明显,因为没有等同于可验证软件测试的二元检查。将执行工作的 Agent 与判断工作的 Agent 分离被证明是一个强有力的杠杆。这种分离不会立即消除宽松性,但调优独立的评估器使其持怀疑态度,远比让生成器对自己的工作持批评态度更容易。一旦存在外部反馈,生成器就有了具体的东西来迭代改进。
前端设计:使主观质量可评分
作者从前端设计开始实验,那里自我评估问题最为明显。没有干预时,Claude 倾向于安全、可预测的布局,技术上功能齐全但视觉上平淡无奇。
两个洞察塑造了 Harness:
虽然美学不能完全简化为分数,但可以通过编码设计原则和偏好的评分标准来改进。与其问"这个设计漂亮吗?",不如问"这符合我们的好设计原则吗?"这给出了具体的评分依据。
通过将前端生成与前端评分分离,反馈循环可以驱动生成器产生更强的输出。
四个评分标准
生成器和评估器 Agent 在它们的提示中都收到了四个评分标准:
- 设计质量: 设计是否感觉像一个连贯的整体而不是部分的集合?颜色、排版、布局、图像和其他细节应该组合在一起创造独特的氛围和身份。
- 原创性: 是否有自定义决策的证据,还是这些是模板布局、库默认值和 AI 生成的模式?人类设计师应该能识别出刻意的创意选择。未修改的现成组件或典型的 AI 模式(如白色卡片上的紫色渐变)在这里会失败。
- 工艺: 技术执行——排版层次、间距一致性、颜色和谐、对比度。是能力检查而非创造力检查。大多数合理的实现都做得不错;失败意味着基本功有问题。
- 功能性: 独立于美学的可用性。用户能否理解界面、找到主要操作并完成任务而无需猜测?
设计质量和原创性被赋予比工艺和功能性更高的权重,因为 Claude 在后两者上默认已经得分不错。标准明确惩罚高度通用的"AI 垃圾"模式,推动模型进行更多美学冒险。
评估器使用带有详细分数分解的少样本示例进行校准,确保判断对齐并减少跨迭代的分数漂移。
反馈循环
循环建立在 Claude Agent SDK 上。生成器 Agent 根据用户提示创建 HTML/CSS/JS 前端。评估器获得 Playwright MCP,让它在评分每个标准并撰写详细评论之前直接与实时页面交互。在实践中,评估器会自己导航页面,截图并仔细研究实现,然后产生评估。
每次生成运行5到15次迭代,每次迭代通常将生成器推向更有特色的方向。因为评估器在主动导航页面而不是对静态截图评分,每个循环都需要真实的挂钟时间。完整运行最长可达四个小时。生成器被指示在每次评估后做出战略决策:如果分数趋势良好则完善当前方向,如果方法不起作用则转向完全不同的美学。
结果
评估器的评估在迭代中提高后趋于平稳,仍有提升空间。一些生成进行增量改进;另一些在迭代之间进行了尖锐的美学转向。
标准的措辞以意想不到的方式引导了生成器。包含"最好的设计是博物馆品质"这样的短语将设计推向了特定的视觉收敛,表明提示语言直接塑造了输出特征。
虽然分数普遍提高,但模式并不总是干净地线性。后期实现作为整体趋于更好,但作者经常看到中间迭代比最后一个更受青睐的情况。实现复杂度往往在各轮之间增加。即使在第一次迭代中,输出也明显优于没有提示的基线,表明标准本身在任何评估器反馈之前就将模型从通用默认值中引导出来了。
在一个值得注意的案例中,关于荷兰艺术博物馆网站的提示,到第九次迭代时模型生成了一个干净的暗色主题着陆页。在第十次循环中,它完全抛弃了这种方法,将网站重新想象为一个空间体验:一个带有棋盘地板的3D房间,用 CSS 透视渲染,艺术品以自由形式悬挂在墙上,通过门廊在画廊房间之间导航,而不是滚动或点击。
扩展到全栈编码
受 GAN 启发的模式被应用于全栈开发。生成器-评估器循环自然映射到软件开发生命周期,其中代码审查和 QA 与设计评估器扮演相同的结构角色。
架构
在原始 Harness 的基础上,创建了一个三 Agent 系统:
规划器: 之前的 Harness 要求用户预先提供详细的规格说明。创建了一个规划器 Agent,它接受简单的1-4句话提示并将其扩展为完整的产品规格。它被提示在范围上要雄心勃勃,并专注于产品上下文和高层技术设计,而不是详细的技术实现。关注点是如果规划器试图指定粒度的技术细节并出错,错误会级联到下游实现。规划器还被要求寻找将 AI 功能编织到产品规格中的机会。
生成器: 早期 Harness 的一次一个功能的方法在这里应用,指示生成器以冲刺方式工作,从规格中一次拿起一个功能。每个冲刺使用 React、Vite、FastAPI 和 SQLite(后来是 PostgreSQL)技术栈实现应用。生成器被指示在每个冲刺结束时自我评估工作,然后交给 QA。它还有 Git 用于版本控制。
评估器: 早期 Harness 的应用通常看起来令人印象深刻但仍有真正的 bug。评估器使用 Playwright MCP 像用户一样点击运行中的应用程序,测试 UI 功能、API 端点和数据库状态。它根据发现的 bug 和基于前端实验建模的标准对每个冲刺进行评分,标准涵盖产品深度、功能、视觉设计和代码质量。每个标准都有硬阈值——如果任何一个低于阈值,冲刺就失败,生成器会得到详细反馈。
在每个冲刺之前,生成器和评估器协商冲刺合同:在编写任何代码之前就"完成"的样子达成一致。这弥合了用户故事和可测试实现之间的差距,因为产品规格是故意高层的。生成器提出它将构建什么以及如何验证成功,评估器审查提案。两者迭代直到达成一致。
通信通过文件处理:一个 Agent 写文件,另一个读取并回复。这使工作忠实于规格,而不会过早地过度指定实现。
使用的模型是 Claude Opus 4.5,由于 Opus 4.5 本身在很大程度上消除了上下文焦虑行为,此 Harness 中去掉了上下文重置。Agent 作为整个构建过程中的一个连续 Session 运行,Claude Agent SDK 的自动压缩处理上下文增长。
运行 Harness
使用了以下提示:
"创建一个2D复古游戏制作器,功能包括关卡编辑器、精灵编辑器、实体行为和可玩测试模式。"
结果比较:
| Harness | 时长 | 成本 |
|---|---|---|
| 单独运行 | 20分钟 | $9 |
| 完整 Harness | 6小时 | $200 |
Harness 贵了20多倍,但输出质量的差异是显而易见的。
单独运行问题: 布局浪费空间,固定高度的面板使大部分视口为空。工作流程僵化,没有引导正确的顺序。最关键的是,实际的游戏坏了——实体出现在屏幕上但没有任何东西响应输入。实体定义和游戏运行时之间的连接坏了。
Harness 运行结果: 规划器将一句话提示扩展为跨十个冲刺的16个功能规格说明。除了核心编辑器和播放模式外,规格还要求精灵动画、行为模板、音效和音乐、AI 辅助的精灵生成和关卡设计,以及带有可分享链接的游戏导出。规划器被授权访问前端设计技能,并用它为应用创建了视觉设计语言。
应用立即显示出更多的打磨。画布使用了完整的视口,面板大小合理,界面具有一致的视觉身份。精灵编辑器更丰富,工具面板更整洁,颜色选择器更好用,缩放控件更实用。因为规划器被要求将 AI 功能编织到规格中,应用包含了内置的 Claude 集成,通过提示生成游戏部件。
最大的差异在播放模式——用户实际上可以移动实体并玩游戏。物理效果有些粗糙(角色与平台重叠),但核心工作了,这是单独运行没有达到的。
评估器性能
通读日志,评估器使实现与规格保持一致。每个冲刺,它都会走一遍冲刺合同的测试标准,通过 Playwright 操作运行中的应用程序,对任何偏离预期行为的地方提交 bug。合同是粒度化的——仅冲刺3就有27个关卡编辑器的标准。
评估器发现的示例包括:矩形填充工具只在拖动开始/结束点放置图块而不是填充区域;删除键处理器需要 selection 和 selectedEntityId 但点击只设置了一个;FastAPI 路由排序问题,其中"reorder"被匹配为整数 frame_id。
让评估器达到这个水平需要付出努力。开箱即用,Claude 是一个糟糕的 QA Agent。在早期运行中,它会识别出合法问题然后说服自己认为问题不大,仍然批准工作。它也倾向于表面测试。调优循环涉及阅读评估器日志,找到判断与作者分歧的例子,并更新 QA 提示来解决这些问题。在评估器合理评分之前需要几轮迭代。
迭代 Harness
第一组结果令人鼓舞但笨重、缓慢且昂贵。合乎逻辑的下一步是在不降低性能的情况下简化。Harness 中的每个组件都编码了关于模型无法独自完成什么的假设,这些假设值得压力测试。
作者第一次尝试彻底简化无法复制原始性能,很难判断哪些部分是承重的。随后采用了更有条理的方法:一次移除一个组件并审查影响。
Opus 4.6 提供了进一步减少复杂性的动力。从发布博客中:该模型"计划更仔细,维持 Agent 任务更久,能在更大的代码库中更可靠地运行,并且有更好的代码审查和调试技能。"
移除冲刺结构
冲刺结构被完全移除。鉴于 Opus 4.6 的改进,模型可能能够在没有这种分解的情况下处理工作。规划器和评估器都被保留了,因为每个都继续增加明显的价值。没有规划器,生成器的范围会缩小,创建的功能较少的应用。
冲刺被移除后,评估器在运行结束时进行单次评估。在 Opus 4.5 上,构建处于生成器独自能做好的边缘,评估器捕获了有意义的问题。在 Opus 4.6 上,边界向外移动。以前需要评估器检查的任务现在通常在生成器独自处理的范围内。但对于仍在能力边缘的部分,评估器继续提供真正的提升。
实际意义:当任务超出当前模型独自可靠完成的范围时,评估器值得其成本。
还添加了提示来改进 Harness 如何为每个应用构建 AI 功能,特别是让生成器构建一个可以通过工具驱动应用功能的适当 Agent。
更新 Harness 的结果
使用以下提示生成数字音频工作站:
"使用 Web Audio API 在浏览器中构建一个功能齐全的 DAW。"
运行耗时约4小时,Token 成本$124。
分解:
| Agent 和阶段 | 时长 | 成本 |
|---|---|---|
| 规划器 | 4.7分钟 | $0.46 |
| 构建(第1轮) | 2小时7分钟 | $71.08 |
| QA(第1轮) | 8.8分钟 | $3.24 |
| 构建(第2轮) | 1小时2分钟 | $36.89 |
| QA(第2轮) | 6.8分钟 | $3.09 |
| 构建(第3轮) | 10.9分钟 | $5.88 |
| QA(第3轮) | 9.6分钟 | $4.06 |
| V2 Harness 总计 | 3小时50分钟 | $124.70 |
生成器连贯运行了两个多小时,不需要 Opus 4.5 所需的冲刺分解。
QA Agent 仍然捕获了真正的差距。在第一轮反馈中,它指出应用看起来令人印象深刻但几个核心 DAW 功能是"仅展示而无交互深度"——片段无法拖动,没有乐器 UI 面板,没有可视化效果编辑器。在第二轮中,它捕获了剩余的差距,包括仅有存根的音频录制、缺少片段调整大小/拆分,以及仅数字的效果可视化。
最终应用拥有功能性音乐制作程序的所有核心部分:在浏览器中运行的工作编排视图、混音器和传输控制。用户能够完全通过提示组合一个短的歌曲片段——Agent 设置节拍和调性,铺设旋律,构建鼓轨道,调整混音器电平,并添加混响。歌曲创作的核心原语都存在,Agent 可以自主驱动它们。
下一步
随着模型的持续改进,它们将能够在更复杂的任务上工作更长时间。在某些情况下,脚手架随时间推移变得不那么重要,开发者可以等待下一个模型。另一方面,更好的模型为超越基线能力实现复杂任务的 Harness 创造了更多空间。
这项工作的关键经验:
- 始终使用你正在构建的模型进行实验,在真实问题上阅读其跟踪记录,并调优其性能
- 对于复杂任务,有时通过分解任务并对每个方面应用专门的 Agent 来获得提升空间
- 当新模型发布时,重新审视 Harness——剥离不再承重的部分,添加新的部分以获得更大的能力
作者坚信"随着模型的进步,有趣的 Harness 组合空间不会缩小。相反,它会移动。"
附录
文章包含了规划器 Agent 为"RetroForge - 2D 复古游戏制作器"生成的示例计划,这是一个基于 Web 的创意工作室,用于设计2D复古风格的视频游戏。计划描述了四个集成的创意模块(基于图块的关卡编辑器、像素艺术精灵编辑器、视觉实体行为系统和即时可玩测试模式),AI 辅助功能由 Claude 贯穿其中。该示例展示了项目仪表板和管理功能,包含详细用户故事,涵盖创建、查看、打开、删除和复制项目,以及指定元数据、画布设置、图块大小配置、调色板选择和关联资产的项目数据模型。