Anthropic Engineering

Harness 设计:面向长时间运行的应用开发

从前端设计到全栈开发,受 GAN 启发的多智能体架构如何让 AI 在数小时的自主编码中产出高质量应用。

Prithvi Rajasekaran Anthropic Labs 团队 2026 年 6 月

在过去数月中,我一直在研究两个相互关联的问题:让 Claude 产出高质量的前端设计,以及让它在无需人工干预的情况下构建完整的应用程序。这项工作源于我们早期在前端设计技能长时间运行编码智能体 Harness 上的努力——我和同事们通过提示工程和 Harness 设计,将 Claude 的表现提升到了远超基线的水平,但两者最终都触及了天花板。

为了突破这些天花板,我探索了一些新颖的 AI 工程方法,并在两个截然不同的领域中验证了它们的有效性——一个由主观品味定义,另一个由可验证的正确性和可用性定义。受生成对抗网络(GAN)的启发,我设计了一种包含生成器评估器的多智能体结构。构建一个能可靠评分——且有品味的——评估器,意味着首先要开发一套标准,将"这个设计好不好?"这类主观判断转化为具体的、可评分的维度。

随后,我将这些技术应用于长时间运行的自主编码,延续了早期 Harness 工作中的两个经验:将构建分解为可处理的块,以及使用结构化制品在会话之间交接上下文。最终成果是一个三智能体架构——规划器、生成器和评估器——能够在多小时自主编码会话中产出丰富的全栈应用。

朴素实现的不足

我们此前已经展示过,Harness 设计对长时间运行的智能体编码效果有显著影响。在早期的实验中,我们使用一个初始化智能体将产品规格分解为任务列表,编码智能体逐个功能实现,并在会话之间通过制品交接上下文。更广泛的开发者社区也趋同了类似的洞见,例如"Ralph Wiggum"方法使用钩子或脚本让智能体持续进行迭代循环。

但一些问题依然顽固存在。对于更复杂的任务,智能体仍然会随着时间推移而偏离正轨。在分析这个问题时,我们观察到两种常见的失败模式。

两大失败模式

模式一:上下文窗口填满导致丧失连贯性。某些模型还会表现出"上下文焦虑"——随着接近自认为的上下文限制,它们会过早地开始收尾工作。上下文重置——完全清空上下文窗口并启动新的智能体,配合结构化交接——能同时解决这两个问题。

模式二:自我评估失效。当被要求评估自己产出的工作时,智能体倾向于自信地赞美自己的作品——即使在人类观察者看来,质量明显平庸。

上下文重置不同于压缩(compaction)。压缩是将对话早期部分就地摘要,让同一个智能体在缩短的历史上继续工作。虽然压缩保持了连续性,但没有给智能体一个全新的起点,这意味着上下文焦虑仍然可能持续。重置提供了一个干净的起点,代价是交接制品需要包含足够的状态信息,让下一个智能体能顺利接手。在我们早期的测试中,Claude Sonnet 4.5 的上下文焦虑足够强烈,仅靠压缩不足以支撑强劲的长任务表现,因此上下文重置成为 Harness 设计的关键。这解决了核心问题,但也为每次 Harness 运行增加了编排复杂性、token 开销和延迟。

关于第二个问题——即使是在有可验证结果的任务上,智能体有时也表现出糟糕的判断力,阻碍了它们在完成任务时的表现。将"做事"的智能体和"评判"的智能体分开,被证明是一个强有力的杠杆。这种分离本身并不能立即消除宽容倾向;评估器仍然是一个对 LLM 生成内容天然宽容的大语言模型。但调整一个独立的评估器使其更加严苛,比让生成器批判自己的作品要容易得多;一旦有了外部反馈,生成器就有了具体的东西可以迭代改进。

前端设计:让主观质量可评分

我从前端设计入手进行实验,因为这是自我评估问题最为突出的领域。在没有任何干预的情况下,Claude 通常倾向于安全、可预测的布局——技术上可用但视觉上乏善可陈。

两个洞见塑造了我为前端设计构建的 Harness。第一,虽然美学不能完全化约为一个分数——个人品味总会有差异——但可以通过编码设计原则和偏好的评分标准来改善。"这个设计美吗?"很难一致地回答,但"这是否遵循了我们的好设计原则?"给了 Claude 具体的评判标准。第二,通过将前端生成与前端评分分离,我们可以创建一个反馈循环,驱动生成器产出更强的作品。

基于这些思考,我编写了四项评分标准,同时提供给生成器和评估器的提示中:

  • 设计质量:设计是否感觉像一个连贯的整体,而不是零件的拼凑?好的作品意味着颜色、排版、布局、图像和其他细节组合在一起,创造出独特的氛围和身份。
  • 原创性:是否有自定义决策的证据,还是只是模板布局、库默认值和 AI 生成的模式?一个人类设计师应该能识别出刻意的创意选择。未经修改的通用组件——或者 AI 生成的典型特征如紫色渐变配白色卡片——在这里会被扣分。
  • 工艺:技术执行:排版层次、间距一致性、颜色协调、对比度。这是能力检查而非创意检查。大多数合理的实现默认就能做好;失败意味着基本功有问题。
  • 功能性:独立于美学的可用性。用户能否理解界面的功能,找到主要操作,完成任务而不需要猜测?

我强调了设计质量和原创性,将其权重置于工艺和功能性之上。Claude 在工艺和功能性方面默认就表现良好,因为所需的技术能力往往是模型自然而然具备的。但在设计和原创性方面,Claude 经常产出最好也只能说是平淡的作品。这些标准明确惩罚高度通用的"AI 泡沫"模式,通过更高权重的设计和原创性要求,推动模型进行更多美学冒险。

我使用带有详细评分分解的少样本示例校准了评估器,确保评估器的判断与我的偏好一致,并减少迭代过程中的评分漂移。

核心循环

生成器创建前端 → 评估器使用 Playwright 实际交互并评分 → 反馈回流至生成器 → 下一轮迭代。每代运行 5 至 15 轮迭代,完整运行时间最长可达四小时。

我基于 Claude Agent SDK 构建了这个循环,保持编排的简洁。生成器首先根据用户提示创建一个 HTML/CSS/JS 前端。我给评估器配备了 Playwright MCP,让它在评分前直接与实时页面交互。实践中,评估器会自行导航页面,截图并仔细研究实现,然后给出评估。反馈作为输入回流给生成器用于下一轮迭代。我还指导生成器在每次评估后做出战略决策:如果分数趋势良好就改进当前方向,如果方法不奏效就转向全新的美学风格。

跨运行来看,评估器的评估在迭代中不断改进,然后趋于平稳,仍有提升空间。有些生成是渐进式优化,另一些则在迭代间发生了剧烈的美学转向。

标准的措辞以我未完全预料到的方式引导了生成器。加入"最佳设计应达到博物馆级别"这样的短语,将设计推向了某种特定的视觉趋同——这暗示与标准相关的提示直接塑造了输出的特征。

在一个令人瞩目的例子中,我提示模型为一家荷兰艺术博物馆创建网站。到第九轮迭代时,它已经产出了一个干净的、暗色主题的虚构博物馆着陆页。页面视觉上很精致,但基本符合我的预期。然后,在第十轮循环中,它彻底抛弃了原有方案,将网站重新构想为一个空间体验:一个用 CSS 透视渲染的棋盘格地板 3D 房间,艺术品以自由布局悬挂在墙上,通过门廊在画廊房间之间导航,而不是滚动或点击。这是我从未在单次生成中见过的那种创造性飞跃。

扩展到全栈开发

带着这些发现,我将这种受 GAN 启发的模式应用于全栈开发。生成器-评估器循环自然地映射到软件开发生命周期中,代码审查和 QA 扮演着与设计评估器相同的结构性角色。

三智能体架构

在我们早期的长时间运行 Harness 中,我们已经通过初始化智能体、逐功能工作的编码智能体以及会话间的上下文重置,解决了连贯的多会话编码问题。Opus 4.5 很大程度上自行消除了上下文焦虑行为,因此我得以从这个 Harness 中完全去除上下文重置。智能体在整个构建过程中作为一个连续会话运行,由 Claude Agent SDK 的自动压缩处理上下文增长。

我在原始 Harness 的基础上构建了一个三智能体系统,每个智能体都针对我在先前运行中观察到的特定缺口:

三智能体架构流程
☶ 规划器 Planner ⚙ 生成器 Generator ★ 评估器 Evaluator
规划器将简短提示扩展为完整规格 → 生成器按冲刺实现 → 评估器用 Playwright 测试并评分
  • 规划器(Planner):此前的 Harness 要求用户预先提供详细规格。我想自动化这一步,因此创建了一个规划器智能体,它接收简短的 1-4 句提示并将其扩展为完整的产品规格。我提示它对范围要有野心,并专注于产品上下文和高层技术设计,而非详细的技术实现。这是因为如果规划器试图在前期指定细粒度的技术细节并出了差错,规格中的错误会级联到下游实现中。限定要交付的成果,让智能体在工作中自行找到路径,似乎更明智。我还要求规划器寻找机会将 AI 功能编织到产品规格中。
  • 生成器(Generator):早期 Harness 的逐功能方法在范围管理上效果很好。我在这里应用了类似的模型,指导生成器以冲刺方式工作,每次从规格中选取一个功能来实现。每个冲刺使用 React、Vite、FastAPI 和 SQLite(后来改为 PostgreSQL)技术栈,生成器在每个冲刺结束时被要求进行自我评估,然后移交给 QA。它还使用 git 进行版本控制。
  • 评估器(Evaluator):早期 Harness 中的应用看起来令人印象深刻,但实际使用时仍有真实的 bug。为了捕捉这些问题,评估器使用 Playwright MCP 像用户一样点击运行中的应用,测试 UI 功能、API 端点和数据库状态。然后它根据发现的 bug 和一套标准对每个冲刺评分——这些标准以前端实验为蓝本,在此调整为涵盖产品深度、功能性、视觉设计和代码质量。每个标准都有一个硬阈值,任何一项低于阈值,冲刺就失败,生成器会收到关于问题所在的详细反馈。

在每个冲刺之前,生成器和评估器会协商一份冲刺合约:在编写任何代码之前,就该块工作的"完成"标准达成一致。这是因为产品规格故意保持高层次,我需要一个步骤来弥合用户故事和可测试实现之间的差距。生成器提议它将构建什么以及如何验证成功,评估器审查该提议以确保生成器正在构建正确的东西。双方迭代直到达成一致。

通信通过文件处理:一个智能体写入文件,另一个智能体读取并在该文件中回应或用新文件回复,前一个智能体再读取。这使工作忠于规格,同时不会过早过度指定实现。

运行 Harness

对于这个 Harness 的第一版,我使用了 Claude Opus 4.5,在完整 Harness 和单智能体系统上运行用户提示进行对比。我写了以下提示来生成一个复古电子游戏制作器:

创建一个 2D 复古游戏制作器,功能包括关卡编辑器、精灵编辑器、实体行为和可玩测试模式。

Harness时长成本
单智能体20 分钟$9
完整 Harness6 小时$200

Harness 的成本超过 20 倍,但输出质量的差异立竿见影。

我期望一个界面,可以构建关卡及其组成部分(精灵、实体、瓦片布局),然后按下播放来实际玩这个关卡。我先打开了单智能体运行的输出,初始应用看起来符合这些期望。

然而,随着我点击操作,问题开始浮现。布局浪费空间,固定高度的面板使大部分视口留空。工作流僵硬。试图填充关卡时提示我先创建精灵和实体,但 UI 中没有任何引导指向这个顺序。更关键的是,实际游戏是坏的。我的实体出现在屏幕上但没有任何东西响应输入。深入代码发现,实体定义和游戏运行时之间的连线是断裂的,而且表面上没有提示哪里出了问题。

评估完单智能体运行后,我转向了 Harness 运行。这次运行从同一句话提示开始,但规划器步骤将该提示扩展为跨十个冲刺的 16 功能规格。它远远超出了单智能体运行的尝试。除了核心编辑器和播放模式外,规格还要求精灵动画系统、行为模板、音效和音乐、AI 辅助的精灵生成器和关卡设计器、以及带可分享链接的游戏导出。

应用立即展现出比单智能体运行更多的精致和流畅。画布使用了整个视口,面板大小合理,界面有一致的视觉身份,追踪了规格中的设计方向。精灵编辑器更丰富、功能更完善,有更干净的工具面板、更好的颜色选择器和更可用的缩放控件。

因为我要求规划器将 AI 功能编织到规格中,应用还附带了一个内置的 Claude 集成,让我可以通过提示生成游戏的不同部分。这大大加快了工作流程。

最大的差异在播放模式。我实际上能够移动我的实体并玩游戏。物理效果有一些粗糙的边缘——我的角色跳上平台但最终与平台重叠,这在直觉上感觉不对——但核心功能是工作的,而单智能体运行没有做到这一点。

阅读日志可以清楚地看到,评估器使实现与规格保持一致。每个冲刺,它遍历冲刺合约的测试标准并通过 Playwright 测试运行中的应用,对任何偏离预期行为的地方报告 bug。合约非常细粒度——仅冲刺 3 就有 27 个覆盖关卡编辑器的标准——评估器的发现足够具体,无需额外调查即可采取行动。

合约标准评估器发现
矩形填充工具允许点击拖动以用选中的瓦片填充矩形区域 失败 — 工具仅在拖动起点/终点放置瓦片,而非填充区域。fillRectangle 函数存在但在 mouseUp 时未正确触发。
用户可以选择和删除已放置的实体生成点 失败LevelEditor.tsx:892 处的 Delete 键处理器同时要求设置 selectionselectedEntityId,但点击实体只设置了后者。
用户可以通过 API 重新排序动画帧 失败PUT /frames/reorder 路由定义在 /{frame_id} 路由之后。FastAPI 将 "reorder" 匹配为 frame_id 整数并返回 422。

让评估器达到这个水平需要付出努力。开箱即用的 Claude 是一个糟糕的 QA 智能体。在早期运行中,我看着它识别出合理的问题,然后说服自己这些不是大问题并批准工作。它还倾向于浅层测试,而非探查边缘情况,因此更微妙的 bug 经常溜走。调整循环是:阅读评估器的日志,找到其判断与我的判断不一致的例子,然后更新 QA 的提示来解决那些问题。经过几轮这样的开发循环,评估器的评分方式才让我觉得合理。

迭代简化 Harness

第一组 Harness 结果令人鼓舞,但它也笨重、缓慢且昂贵。合乎逻辑的下一步是在不降低性能的前提下找到简化 Harness 的方法。这部分是常识,部分是一个更一般性原则的函数:Harness 中的每个组件都编码了关于模型自身无法做什么的假设,而这些假设值得反复检验——它们可能不正确,也可能随着模型改进而迅速过时。

核心原则

找到最简单的可能方案,只在需要时才增加复杂性。Harness 中每个组件都编码了一个关于模型局限的假设——当新模型发布时,重新审视 Harness,剥离不再承重的部分,并添加新部分以实现此前不可能的更大能力。

在进行这些迭代周期时,我们还发布了 Opus 4.6,这进一步推动了减少 Harness 复杂性的需求。有充分理由期望 4.6 比 4.5 需要更少的脚手架。来自发布博客:"[Opus 4.6] 规划更仔细,维持智能体任务更持久,在更大的代码库中运行更可靠,并且具有更好的代码审查和调试技能来捕捉自己的错误。"它在长上下文检索方面也有了实质性改进。这些都是 Harness 原本被构建来补充的能力。

移除冲刺结构。我首先完全移除了冲刺结构。冲刺结构曾帮助将工作分解为模型能连贯处理的块。鉴于 Opus 4.6 的改进,有充分理由相信模型可以在不需要这种分解的情况下原生处理任务。

我保留了规划器和评估器,因为每个都继续增加明显的价值。没有规划器,生成器会范围不足:给出原始提示后,它会直接开始构建而不先规格化工作,最终创建出功能不如规划器版本丰富的应用。

移除冲刺结构后,我将评估器移至运行结束时的单次评估,而非每个冲刺评分。由于模型能力更强,这改变了评估器在某些运行中的承重程度,其有用性取决于任务相对于模型自身可靠能力的位置。在 4.5 上,那个边界很近:我们的构建处于生成器单独做好的边缘,评估器在整个构建过程中捕捉到有意义的问题。在 4.6 上,模型的原始能力增强了,边界向外移动。以前需要评估器检查才能连贯实现的任务,现在通常在生成器自行处理的范围内,对于这些任务,评估器变成了不必要的开销。但对于仍处于生成器能力边缘的构建部分,评估器继续提供真实的提升。

更新后的成果

为了测试更新后的 Harness,我使用以下提示生成一个数字音频工作站(DAW)——一个用于作曲、录音和混音的音乐制作程序:

使用 Web Audio API 在浏览器中构建一个功能完备的 DAW。

运行仍然耗时且昂贵,大约 4 小时,$124 的 token 成本。

智能体与阶段时长成本
规划器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 智能体仍然捕捉到了真实的缺口。在第一轮反馈中,它指出:

这是一个设计精良、AI 智能体扎实、后端良好的强大应用。主要的失败点在于功能完整性——虽然应用看起来令人印象深刻且 AI 集成运作良好,但几个核心 DAW 功能仅是展示性的,没有交互深度:片段无法在时间线上拖动/移动,没有乐器 UI 面板(合成器旋钮、鼓垫),也没有可视化效果编辑器(EQ 曲线、压缩器表)。这些不是边缘情况——它们是让 DAW 可用的核心交互,规格明确要求了它们。

在第二轮反馈中,它再次捕捉到了几个功能缺口:音频录制仍然只是桩代码、片段边缘拖动调整和片段分割未实现、效果可视化是数字滑块而非图形化(没有 EQ 曲线)。

最终应用具备了一个功能性音乐制作程序的所有核心部件:一个工作的编排视图、混音器和传输控制在浏览器中运行。除此之外,我能够完全通过提示拼凑出一段简短的歌曲片段:智能体设置了速度和调性,铺设了旋律,构建了鼓轨,调整了混音器电平,并添加了混响。歌曲创作的核心基础设施已经就位,智能体可以自主驱动它们。

未来展望

随着模型的持续改进,我们大致可以期望它们能够工作更长时间并处理更复杂的任务。在某些情况下,这意味着围绕模型的脚手架随时间推移变得不那么重要,开发者可以等待下一个模型,看到某些问题自行解决。另一方面,模型越好,开发超越模型基线能力的复杂 Harness 的空间就越大。

结论

有趣的 Harness 组合空间不会随着模型改进而缩小——它会移动。AI 工程师有趣的工作是不断找到下一个新颖的组合。

从这项工作中,我的信念是:值得携带前进的经验有几点。针对你正在构建的模型进行实验,在真实问题上阅读其运行轨迹,并调整其表现以达到期望的结果,这始终是好的实践。在处理更复杂的任务时,有时可以通过分解任务并将专门化的智能体应用于问题的每个方面来获得提升空间。当新模型发布时,通常好的实践是重新审视 Harness,剥离不再对性能承重的部分,并添加新部分以实现此前不可能的更大能力。

附录:规划器输出示例

以下是规划器智能体为"复古电子游戏制作器"提示生成的规格摘要:

RetroForge - 2D 复古游戏制作器

概述
RetroForge 是一个基于 Web 的创意工作室,用于设计和构建 2D
复古风格的电子游戏。它将经典的 8 位和 16 位游戏美学的
怀旧魅力与现代直观的编辑工具相结合——让从业余创作者到
独立开发者的任何人都能在不编写传统代码的情况下实现游戏创意。

平台提供四个集成的创意模块:
  - 基于瓦片的关卡编辑器,用于设计游戏世界
  - 像素艺术精灵编辑器,用于制作视觉资产
  - 可视化实体行为系统,用于定义游戏逻辑
  - 即时可玩测试模式,用于实时游戏测试

通过在各处编织 AI 辅助(由 Claude 驱动),RetroForge
加速了创作过程——帮助用户通过自然语言交互生成精灵、
设计关卡和配置行为。

- END -