文章

【Anthropic】长期自主编程的 Harness 架构设计

  1. 长期运行应用的两个瓶颈
  2. 前端设计:将主观品质转化为可评分标准
  3. 三层架构:全栈编码的扩展
    1. Planner(规划者)
    2. Generator(生成者)
    3. Evaluator(评估者)
    4. 首版 harness:视频游戏制作工具
    5. 迭代简化:向 Opus 4.6 演进
    6. 简化后的 harness:数字音乐工作站
  4. 展望与教训
  5. 核心思想

原文:Harness design for long-running application development

长期运行应用的两个瓶颈

在追求更强长期自主编程能力的过程中,Anthropic 遇到了两个持续存在的问题,这些问题在单纯的 prompt 工程和上下文管理中难以解决。

首先是上下文填充导致的连贯性丧失。当任务足够长时,模型会丧失全局连贯性。更关键的是,Claude Sonnet 4.5 展现出”上下文焦虑”——当接近模型认为的上下文上限时,会提前收尾。上下文重置(完全清空上下文,创建新 agent 接力)相比上下文压缩(原地总结早期对话)更有效,因为压缩仍保留了焦虑的种子,重置给了全新的工作空间。但代价是增加了编排复杂度、token 开销和延迟。

其次是自我评估的乐观偏差。当被要求评估自己的工作时,模型倾向于过度肯定,即使质量从人类视角看明显平庸。这在设计这类没有二元检验的主观任务中尤其明显。但即使在有可验证结果的任务上,模型的自我评估也会削弱性能。将生成和评估的角色分离,把对手方的质量控制外包给独立 agent,证明是强有力的杠杆。虽然独立评估器仍然是 LLM,天生对 LLM 输出宽松,但调校一个独立评估器变得高度可控,而让生成器自我批评则困难得多。

前端设计:将主观品质转化为可评分标准

这项实验从前端设计开始,因为自我评估问题在这里最为明显。基线 Claude 倾向于安全可预测的布局——技术上可用,但视觉上平庸。

作者设计了一套包含设计品质、原创性、工艺、功能性四个维度的评分标准:

  • 设计品质:色彩、排版、布局、意象是否形成整体的、有明确气质的视觉身份,还是零散的部分?
  • 原创性:有无定制决策还是模板库存?能否识别出人类设计师的故意选择,而不是”AI 风味”的典型标记(如紫色渐变+白卡)?
  • 工艺:排版层级、间距一致性、色彩和谐、对比度——基础执行的干净程度。Claude 默认表现良好。
  • 功能性:用户能否理解界面意图、找到主操作、完成任务。

作者有意淡化工艺和功能性的权重,因为 Claude 本身就能胜任,而重点施压于设计品质和原创性——正是 Claude 经常沦为平庸的两个维度。

生成器和评估器都知道这四项标准。评估器使用 Playwright MCP 与实时页面交互——不是看静态截图,而是主动导航、截屏、深入研究实现。在每次迭代后,生成器做战略决策:保持当前方向还是彻底改变美学。整个循环运行 5-15 次,因为交互性测试耗时(完整运行可达 4 小时)。

关键观察

  • 评分不总是单调改进,但后期实现整体更好;有些中间迭代反而最优。
  • 评分标准的措辞直接塑形输出——诸如”最好的设计是博物馆级质量”这类措辞导致了视觉趋同。
  • 即使第一次迭代,仅凭标准和相关措辞,输出质量已明显优于无 prompt baseline。
  • 一个案例:生成荷兰艺术博物馆网站,到第九轮还是常规深色主题,第十轮突然重想象为 3D 空间——棋盘地板、墙上自由挂画、房间导航——这种创意飞跃是单轮生成难以达成的。

三层架构:全栈编码的扩展

作者将生成-评估反馈回路应用于全栈开发,映射到软件开发生命周期(代码审查和 QA 的结构角色)。基于早期长期运行 harness 的教训,新架构由三个 agent 组成:

Planner(规划者)

早期 harness 需要用户提供详细 spec。新版本自动化了这一步。Planner 接收 1-4 句简述,展开为完整产品规格——强调雄心勃勃的范围,专注产品背景和高层技术设计而非细粒度实现。这是有意为之:如果 planner 过度指定细节而出错,错误会级联到下游实现。约束于可交付物、让下游 agent 自行找路更智慧。Planner 还被指示在规格中穿插 AI 特性。

Generator(生成者)

采用 sprint-by-feature 模式,一次一个特性从规格中推进。每轮使用 React/Vite/FastAPI/SQLite 栈,自我评估后移交 QA。具有 git 版本控制。

Evaluator(评估者)

用 Playwright MCP 像真实用户那样点击应用——测试 UI、API、数据库。根据发现的 bug 和一套改自前端实验的标准来评分:产品深度、功能性、视觉设计、代码质量。每项标准有硬阈值,任一失败则 sprint 失败并反馈详情。

关键创新:Generator 和 Evaluator 在编码前协商 sprint contract——确定”完成”的定义。这弥补高层用户故事和可测试实现的鸿沟。文件充当通信信道:一个 agent 写文件,另一个读文件并响应——保持工作忠于规格而无过度指定。

首版 harness:视频游戏制作工具

实验对象:2D 复古游戏制作工具。

Harness 类型时间成本
单 agent20 分钟$9
完整 harness6 小时$200

单 agent 版在界面上看似合理,但实际操作时问题浮现:布局浪费空间,工作流僵硬,指引不足,最关键的是核心游戏功能完全破损——实体出现但不响应输入,代码中生成到运行时的接线断裂无迹象。

完整 harness 版从同一句描述出发,Planner 展开为 16 功能规格分 10 个 sprint。除了编辑器和播放模式,还涵盖动画系统、行为模板、音效、AI 精灵生成器、关卡生成器、可分享导出。Planner 还被给予前端设计技能来创建视觉语言。

结果:界面立即显示更多精致度,全视口画布、合理的面板尺寸、一致的视觉身份。虽然工作流仍有摩擦,但这被归为基础模型的产品直觉限制而非 harness 失败。最关键的:游戏实际可玩——实体响应输入。虽然有物理粗糙点(重叠),但核心工作,相比单版的完全破损是天地之别。

Evaluator 日志表明每一 sprint 都有测试约束和故障发现。例表:

约束评估器发现
矩形填充工具允许拖拽填充区域失败 — 仅在拖动起点/终点放置瓷砖,fillRectangle 未正确在 mouseUp 触发
用户可选择删除实体生成点失败 — Delete 处理器需要 selectionselectedEntityId 都设置,但仅点击设置后者。应为 OR 条件
用户可通过 API 重排动画帧失败 — PUT /frames/reorder 路由定义在 /{frame_id} 后,FastAPI 将 ‘reorder’ 匹配为整数返回 422

开箱即用 Claude 作为 QA agent 表现糟糕——识别合法问题后又自我说服问题不大、仍批准工作。也倾向于浅层测试。作者需要多轮调教循环,读评估日志找偏差、更新 QA prompt,才让评估器达到合理水准。即使如此,harness 输出仍显示模型 QA 能力的极限:微妙布局问题、直觉上不适的交互、深层特性中的隐藏 bug(因未被充分验证)。但相比单版的根本性功能缺陷,改进显而易见。

迭代简化:向 Opus 4.6 演进

第一版 harness 鼓舞人心但笨重、缓慢、昂贵。核心思想是:harness 中的每一部分都编码了对模型能力的一项假设,这些假设值得压力测试。随着模型改进,假设会过时。

作者的策略是逐个移除组件,观察影响。同时 Opus 4.6 发布,进一步激励简化。4.6 的改进(更精密规划、更长自主任务、更大代码库支持、更好的代码审查/调试、长上下文检索)恰好补位了早期 harness 的脚手架。

移除 sprint 构造:Planner 和 Evaluator 保留(价值明确),但 sprint 本身被移除。4.6 无需逐 sprint 分解即可连贯处理工作。Evaluator 从逐 sprint 改为末尾单轮通过。这改变了 evaluator 的负载承载度——4.5 时任务处于边界,评估器捕捉有意义的问题;4.6 时边界外移,无需评估的任务变成不必要开销。但边界附近的任务,evaluator 仍有实际价值。

结论:Evaluator 不是固定决策而是成本-收益的阈值——当任务超出当前模型单独可靠完成的范围时才值得。

简化后的 harness:数字音乐工作站

实验对象:全功能浏览器 DAW。总耗时 ~4 小时,$124。Builder 独立运行超 2 小时无 sprint 分解。

Agent & 阶段耗时成本
Planner4.7 min$0.46
Build 轮 12 hr 7 min$71.08
QA 轮 18.8 min$3.24
Build 轮 21 hr 2 min$36.89
QA 轮 26.8 min$3.09
Build 轮 310.9 min$5.88
QA 轮 39.6 min$4.06
合计3 hr 50 min$124.70

QA 仍捕捉实质性缺口——第一轮指出”功能完整性”失败:剪辑无法在时间线拖动/移动、无乐器面板、无可视化效果编辑。第二轮指出音频录制是桩代码、剪辑边缘拖拽和剪辑分割未实现、效果可视化缺失。

最终 DAW 有工作中的编排视图、混音器、浏览器内运输控制。通过 prompt 完全构建短歌片段:agent 设置节奏/调性、编排旋律、鼓轨、调混音器电平、添加混响。核心编程原语存在且 agent 可自主驱动工具完成端到端生产。”不完全音准,但在进步。”

展望与教训

模型持续改进意味着能处理更长、更复杂任务。某些情况下,围绕模型的脚手架随时间变得更不重要,开发者等待下个模型让问题自解。但反面是,模型越强,harness 能达成的有趣组合空间不会缩小,只是移动了。

关键教训

  1. 始终针对你的构建目标的模型进行实验,读真实问题上的迹象,调校性能。
  2. 在复杂任务上,分解任务并为问题各方面应用专门 agent 通常有空间。
  3. 新模型到来时,重审 harness,剥离不再负载承载的部分,添加新部分以实现之前不可能的能力。

最终信念:随着模型改进,有趣 harness 组合的空间不会缩小,而是转移。AI 工程师的有趣工作是不断找到下一个新颖组合。

核心思想

这篇文章的核心洞察在于:分离角色是比上下文管理更根本的解决方案。不是通过让一个模型更努力地自我批评或自我优化,而是把生成和评估的职能拆开,让两个 agent 以对抗式但协作的方式推进。这个模式源于 GAN,在设计(主观性)和编码(客观性)两个完全不同的领域都证明了有效。

更深层的启示是:harness 的每个部分都是对模型能力的一项赌注,这些赌注会随模型演进而过时。关键不是设计一个”完美”的 harness,而是建立一个可持续的心态——定期审视、压力测试每项假设、准备在模型升级时调整。这比具体的技术细节(sprint、评估标准)更有生命力。

模型能力提升的另一面是任务的复杂边界不断扩张。不是某天所有问题都变简单了,而是简单的问题聚集在后退,复杂的新问题涌现在前方。AI 工程师的价值正是在这个移动的边界上,找到下一个有效的、既利用模型进步又承认其限制的架构。

本文由作者按照 CC BY 4.0 进行授权