🔗 AI Engineering · Deep Dive

AI Harness 工程
让 Agent 稳定运行的约束框架

从 Anthropic 两篇实战文章中提炼:如何用"框架 + 约束"解决 AI Agent 长时运行的核心难题,以及 GAN 启发的三段式 Agent 架构如何将复杂任务从失败推向完成。

原文来源 Anthropic Engineering Blog
发布时间 2025.11.26 & 2026.03.24
作者 Justin Young · Prithvi Rajasekaran
01

概述:为什么需要 Harness?

2025 年是 AI Agent 的元年。但随着任务复杂度提升,一个根本性问题浮出水面:Agent 在跨多个上下文窗口工作时,如何保持一致、持续地推进?

Anthropic 工程团队面对的是一个现实挑战——让 Claude 构建一个完整的 Web 应用(如 claude.ai 克隆版)。即便是最先进的 Opus 4.5 模型,如果只给一句话提示"构建 claude.ai 的克隆",也无法生产出生产级质量的成果。

"想象一个软件项目,工程师分班工作,每个新工程师来接班时对上一班发生的事情毫无记忆。这就是 AI Agent 在多上下文窗口工作时面临的根本挑战。"

— Justin Young,Anthropic(2025.11.26)

这个比喻精准地揭示了问题本质:上下文窗口是有限的,绝大多数复杂项目无法在单一窗口内完成,Agent 需要跨会话"桥接"进度。

💡 核心概念

Harness(约束框架) = 围绕 AI Agent 构建的完整运行环境与制度系统,包括工具接口、沙盒环境、架构约束、自动测试、反馈循环与监控机制,目标是引导并约束 Agent 自主、可靠地完成复杂长周期任务,而无需人类实时介入。

公式:Agent = Model + Harness
模型负责原始推理能力,Harness 负责其他一切。

Anthropic 的两篇工程博客(Nov 2025 & Mar 2026)从不同角度系统性地回答了这个问题。本报告将两篇文章的核心内容完整提炼,并配以分析与实践建议。


02

核心问题:长时 Agent 的失败模式

在系统性实验中,Anthropic 工程师识别出长时运行 Agent 的五大失败模式

❌ 失败模式一:过度野心(Over-Ambition)

Agent 试图一次性完成整个应用,导致在实现过程中耗尽上下文窗口,留下半成品且无文档的功能。下一个 Agent 会话不得不从混乱状态开始猜测发生了什么,浪费大量时间重建基础状态。即使有 Compaction(上下文压缩)功能,也无法完全解决这个问题。

❌ 失败模式二:过早宣布完成(Premature Victory)

项目后期,Agent 看到已经取得了一些进展,便"宣布工作已完成"。这种失败模式在功能已部分实现后尤为常见,Agent 满足于现状而不继续推进。

❌ 失败模式三:上下文焦虑(Context Anxiety)

部分模型(特别是 Claude Sonnet 4.5)会在接近其感知的上下文限制时,开始过早地"收尾"工作。这与 Compaction 不同——Compaction 保持连续性,而上下文焦虑会导致 Agent 在实际限制到来之前就停止有效工作。

❌ 失败模式四:自我评估偏差(Self-Evaluation Bias)

当被要求评估自己产出的工作时,Agent 倾向于自信地称赞工作——即使对人类观察者来说,质量明显低劣。这在主观任务(如设计)中尤为突出,Agent 缺乏"批判自己作品"的能力。

❌ 失败模式五:测试不足(Insufficient Testing)

Agent 倾向于在没有适当测试的情况下将功能标记为"完成"。它会做代码变更,甚至用单元测试或 curl 命令测试,但往往无法识别端到端功能是否真正正常工作。

这五个失败模式共同构成了"为什么单纯给 Agent 一个高层提示无法产出高质量结果"的根本原因。Harness 工程的核心目的就是系统性地解决这些问题。


03

解决方案一:初始化 + 编码双层 Agent 架构

针对长时运行的多上下文窗口问题,Justin Young 和 Anthropic 工程团队设计了双层 Agent 架构

🚀
Initializer Agent
初始化 Agent
仅运行一次
📁
Environment Setup
init.sh
feature_list.json
git commit
⚙️
Coding Agent ×N
循环运行
每次处理一个功能
Clean State
Git 提交
进度更新
可合并代码

Initializer Agent(初始化 Agent)

第一个会话使用专门的 Prompt,要求模型建立初始环境基础设施:

🛠️

init.sh 脚本

可重复运行开发环境的脚本,让后续每个 Coding Agent 无需重新摸索如何启动应用。

📝

claude-progress.txt

记录每个 Agent 所做工作的日志文件,作为会话间的"接班记录",让新 Agent 快速上手。

📋

feature_list.json

基于用户提示生成的 200+ 功能需求列表(claude.ai 克隆案例),每个功能初始标记为"failing"。

📦

初始 Git Commit

建立基线状态,为后续代码变更提供可回滚的起点,支持从错误中恢复。

Coding Agent(编码 Agent)

每个后续会话遵循标准化启动协议:

每个 Coding Agent 的典型会话启动序列
[Assistant] 我将先定位方向,了解项目当前状态。
[Tool Use] <bash - pwd>                        # 确认工作目录
[Tool Use] <read - claude-progress.txt>        # 读取进度日志
[Tool Use] <read - feature_list.json>          # 读取功能列表

[Assistant] 让我查看最近的 git 历史。
[Tool Use] <bash - git log --oneline -20>

[Assistant] 运行 init.sh 重启开发服务器。
<启动开发服务器>

[Assistant] 现在验证基础功能是否仍然正常。
<测试基础功能>

[Assistant] 当前状态良好。选择优先级最高的未完成功能开始开发。
<开始单个功能的实现>

"关键洞察是找到一种方式,让 Agent 在新的上下文窗口启动时能快速理解工作状态——这通过 claude-progress.txt 文件和 git 历史共同实现。这些实践的灵感来自高效软件工程师每天的日常工作。"

— Justin Young,Anthropic

"干净状态"的定义

每个 Coding Agent 会话结束时,必须将环境留在"干净状态"——即适合合并到主分支的代码状态:无重大 Bug、代码整洁且文档完善、开发者可以立即开始开发新功能而无需清理其他遗留问题。


04

环境管理:四大关键组件

Harness 中的环境管理是让多会话 Agent 协调工作的核心机制。以下是四个关键组件及其设计逻辑:

1. 功能列表(Feature List)

为解决 Agent "一次性完成"或"过早宣布完成"的问题,Initializer Agent 被要求生成一份结构化 JSON 功能需求文件。在 claude.ai 克隆案例中,这意味着 200+ 个功能点,例如:

feature_list.json 示例
{
  "category": "functional",
  "description": "新建对话按钮创建一个全新会话",
  "steps": [
    "导航到主界面",
    "点击'新建对话'按钮",
    "验证新对话已创建",
    "检查对话区域显示欢迎状态",
    "验证对话出现在侧边栏中"
  ],
  "passes": false
}

所有功能初始标记为 passes: false,Coding Agent 被明确指示只能通过改变 passes 字段来更新文件。Anthropic 使用了强措辞的指令:

"删除或编辑测试是不可接受的,因为这可能导致功能缺失或存在 Bug。"

— Anthropic Harness Prompt 中的强约束指令

使用 JSON 而非 Markdown 的原因:模型相比 Markdown 文件,不太可能对 JSON 文件进行不当修改或覆盖。

2. 增量进度(Incremental Progress)

Coding Agent 每次只处理一个功能。这种增量方式对于解决"一次性完成"的倾向至关重要。工作流程如下:

1️⃣

选择单一功能

从功能列表中选择优先级最高的未完成功能,专注于此。

2️⃣

实现 + 测试

实现功能并端到端测试验证,确认真正可用。

3️⃣

Git 提交

用描述性提交信息提交代码,支持回滚错误变更,恢复工作状态。

4️⃣

更新进度文件

将本次工作摘要写入 claude-progress.txt,为下一个 Agent 接班。

3. 端到端测试(Testing)

这是解决"测试不足"失败模式的关键。实验发现,最有效的方式是明确提示 Claude 使用浏览器自动化工具,像真实用户一样进行测试:

🖥️
Claude 通过 Puppeteer MCP 服务器测试 claude.ai 克隆版时截取的截图
图1:浏览器自动化测试截图 — Claude 通过 Puppeteer MCP 服务器对 claude.ai 克隆版进行端到端测试,截取的实际测试过程截图。这种方式让 Claude 能够识别和修复从代码层面无法明显发现的 Bug。
来源:Anthropic Engineering,"Effective harnesses for long-running agents"

测试结果:

✅ 提供浏览器自动化测试工具后的效果

性能显著提升。Agent 能够识别并修复从代码层面无法明显发现的 Bug,特别是涉及用户交互的端到端功能验证。

⚠️ 仍存在的局限性

Claude 的视觉识别存在限制,例如无法通过 Puppeteer MCP 看到浏览器原生的 alert 弹窗,依赖这类弹窗的功能往往仍有 Bug。

4. 失败模式对照表

问题 Initializer Agent 行为 Coding Agent 行为
Agent 过早宣布整个项目完成 建立功能列表文件:基于规格生成包含端到端功能描述的结构化 JSON 会话开始时读取功能列表,选择单一功能开始工作
Agent 留下存在 Bug 或未记录进度的环境 创建初始 Git 仓库和进度记录文件 读取进度文件和 git 日志;对开发服务器运行基础测试;会话结束时提交 git 并更新进度
Agent 过早将功能标记为完成 建立功能列表文件 自验证所有功能,仅在仔细测试后将功能标记为"通过"
Agent 需要花时间弄清楚如何运行应用 编写可运行开发服务器的 init.sh 脚本 会话开始时读取 init.sh

05

解决方案二:GAN 启发的生成器-评估器循环

Prithvi Rajasekaran(Anthropic Labs 团队成员)在解决前端设计质量问题时,从生成对抗网络(GAN)中获得灵感,设计了一套突破性的多 Agent 结构。

"我设计了一个包含生成器和评估器 Agent 的多 Agent 结构,灵感来自生成对抗网络(GAN)。构建一个能可靠地、有品味地给输出打分的评估器,意味着首先要开发一套能将'这个设计好吗?'等主观判断转化为具体可评分条件的标准。"

— Prithvi Rajasekaran,Anthropic Labs(2026.03.24)

GAN 类比

🎨

Generator(生成器)

负责生成输出——前端设计、代码实现。专注于"创作"而非评判。

🔍

Evaluator(评估器)

负责评估输出质量,提供具体、可操作的改进反馈。设计为"怀疑论者"。

为什么分离生成与评估?

核心问题:LLM 天生对 LLM 生成的内容持宽容态度。让同一个 Agent 评判自己的工作,结果往往是自我称赞。

💡 关键洞察

将执行工作的 Agent 与评判它的 Agent 分离,是解决自我评估偏差的强力杠杆。分离本身不能立即消除宽容性——评估器也是 LLM,天生倾向于对 LLM 输出宽松。但将一个独立的评估器调整为"持怀疑态度",比让生成器批评自己的工作要可行得多。

前端设计的四维评分标准

Rajasekaran 为前端生成器和评估器设计了四个评分维度:

核心权重

🎯 设计质量(Design Quality)

设计是否感觉像一个整体,而非各部分的堆砌?强烈的色彩、字体、布局、图像组合是否创造了独特的气质和身份认同?

核心权重

✨ 独创性(Originality)

是否有自定义决策的痕迹,还是模板布局、库默认值和 AI 生成的通用模式?是否存在"AI 糟粕"(紫色渐变配白色卡片等典型模式)?

基础权重

🔧 工艺(Craft)

技术执行:字体层级、间距一致性、色彩和谐、对比度。这是能力检验而非创意检验,大多数实现默认就做得不错。

基础权重

🖱️ 功能性(Functionality)

独立于美学的可用性。用户能理解界面的功能、找到主要操作、在不猜测的情况下完成任务吗?

设计质量和独创性权重更高,因为 Claude 在工艺和功能上默认表现良好,而在设计品味和创意上最薄弱。

评估器调校过程

Rajasekaran 使用少样本(few-shot)示例配合详细评分分解来校准评估器,确保其判断与自己的偏好对齐,并减少跨迭代的评分漂移。

一个令人惊叹的迭代案例

"在一个值得注意的例子中,我提示模型为一家荷兰艺术博物馆创建网站。到第九次迭代时,它产出了一个干净的深色主题着陆页。页面视觉精良,但基本符合预期。然后,在第十次循环时,它彻底推翻了思路,将网站重新想象为一种空间体验:一个用 CSS 透视渲染的 3D 房间,带有棋盘格地板,艺术品自由挂在墙上,用门道式导航代替滚动或点击在展厅之间切换。这是我以前从未见过的、来自单次生成的创意飞跃。"

— Prithvi Rajasekaran,Anthropic Labs

这个案例揭示了迭代循环的涌现效应:经过足够多轮的生成-评估-反馈,模型会突破常规,产生意想不到的创意解决方案。

🔬 实验发现

即使在第一次迭代中,输出也明显优于没有任何 Prompt 的基线,这表明标准和相关语言本身就在引导模型远离通用默认值,甚至在评估器反馈导致进一步改进之前。标准措辞中包含"最好的设计具有博物馆级品质"这样的短语,会将设计推向特定的视觉收敛方向。


06

三段式 Agent 架构:Planner · Generator · Evaluator

将 GAN 启发的方法应用到全栈开发后,Rajasekaran 构建了三段式 Agent 架构,每个 Agent 解决前一代 Harness 中观察到的特定缺口:

🗺️
Planner
规划师
1-4句话 → 完整产品规格
Generator
生成器
按 Sprint 实现功能
🔬
Evaluator
评估器
Playwright 自动化测试
📤
Final Output
完整功能的
全栈应用

Planner(规划师)

解决了之前 Harness 要求用户提供详细规格的问题。Planner 接收一个简短的 1-4 句话提示,将其扩展为完整的产品规格。

🎯

聚焦产品语境

着重产品背景和高层技术设计,而非详细技术实现——避免过早规格化导致的错误级联。

🤖

主动融入 AI 特性

被提示寻找将 AI 功能编织进产品规格的机会,让每个应用都自带智能交互能力。

Generator(生成器)

沿用"一次一功能"的方法,以 Sprint 为单位工作,每个 Sprint 实现一个功能特性。

Evaluator(评估器)

解决了之前 Harness 中"应用看起来不错但实际有真实 Bug"的问题。

✅ 评估器的工作方式

使用 Playwright MCP 像真实用户一样点击运行中的应用,测试 UI 功能、API 端点和数据库状态,然后根据发现的 Bug 和多维度标准对每个 Sprint 打分。每个标准都有硬性门槛,任何一项低于门槛,Sprint 就判定失败,生成器会收到关于出错原因的详细反馈。

Sprint 合同(Sprint Contract)

每个 Sprint 开始前,Generator 和 Evaluator 先协商一份"Sprint 合同"——在任何代码编写之前,先就"什么叫做完成"达成共识。

Sprint 合同流程
1. Generator 提议将要构建什么,以及如何验证成功
2. Evaluator 审查提议,确保 Generator 要构建正确的东西
3. 双方迭代直到达成协议
4. Generator 基于商定的合同进行构建
5. Evaluator 用 Playwright 测试是否符合合同
6. 通过 → 进入下一 Sprint;失败 → Generator 获得详细反馈并修复

"通信通过文件处理:一个 Agent 写入文件,另一个读取并在同一文件中响应,或用新文件回复,前一个 Agent 再读取。这保持了工作与规格的一致性,同时不会过早过度规格化实现细节。"

— Prithvi Rajasekaran,Anthropic Labs

07

实战案例:复古游戏制作器对比实验

为验证 Harness 的实际价值,Rajasekaran 用以下提示同时运行了单 Agent 和完整 Harness:

测试提示
创建一个 2D 复古游戏制作器,功能包括关卡编辑器、精灵编辑器、实体行为和可玩的测试模式。
20×
Harness 更贵($9 vs $200)
16
Planner 扩展的功能特性数
10
完整 Harness 的 Sprint 数量
❌ 单 Agent(20分钟 / $9)
  • 布局浪费空间,固定高度面板占据大量视窗
  • 工作流程僵硬,无引导序列
  • 游戏本身损坏:实体出现在屏幕上,但没有任何响应输入
  • 实体定义与游戏运行时之间的连接在代码中断裂,无任何表面提示
  • 核心功能失败:游戏根本无法玩
✅ 完整 Harness(6小时 / $200)
  • 画布使用完整视窗,面板尺寸合理
  • 一致的视觉身份,贯穿规格中的设计方向
  • 更丰富的精灵编辑器:更清晰的工具面板、更好的颜色选择器、更易用的缩放控制
  • 内置 Claude AI 集成,可通过提示生成游戏各部分
  • 超出原始提示的附加功能:精灵动画系统、行为模板、音效和音乐、AI 辅助游戏导出
  • 核心功能成功:可以移动实体并玩游戏

截图对比:界面与体验差异

🎮
单 Agent 运行结果 - 左图:开始界面 · 中图:精灵编辑器 · 右图:无法玩的游戏界面
图2:单 Agent(Solo Run)的三个主要界面 — 开始界面(空旷且浪费空间)、精灵编辑器(功能有限)、游戏模式(实体出现但无法响应输入,游戏无法运行)。
来源:Anthropic Engineering,"Harness design for long-running application development"
🚀
完整 Harness 运行结果 - 开始界面 · 精灵编辑器 · AI生成关卡 · AI生成关卡细节 · 可玩游戏
图3:完整 Harness 的五个主要界面 — 精良的开始界面(创建新游戏)、更丰富的精灵编辑器、内置 AI 功能(通过提示生成关卡)、AI 生成关卡细节、以及可实际游玩的游戏。核心差异:物理引擎正常工作,实体响应输入,游戏真实可玩。
来源:Anthropic Engineering,"Harness design for long-running application development"

评估器找到的 Bug 示例

合同标准 评估器发现
矩形填充工具允许点击拖动填充瓦片区域 FAIL 工具仅在拖动起点/终点放置瓦片,而非填充区域。fillRectangle 函数存在但在 mouseUp 时未被正确触发。
用户可选择并删除已放置的实体生成点 FAIL LevelEditor.tsx:892 的删除键处理程序要求同时设置 selection 和 selectedEntityId,但点击实体只设置 selectedEntityId。条件应改为 selection || (selectedEntityId && activeLayer === 'entity')。
用户可通过 API 重新排序动画帧 FAIL PUT /frames/reorder 路由在 /{frame_id} 路由后定义。FastAPI 将 'reorder' 作为整数 frame_id 匹配,返回 422:"无法将字符串解析为整数"。

这些评估器发现的 Bug 极为具体且可操作,体现了结构化评估标准的真实价值——不是模糊的"看起来有问题",而是精确定位到文件、行号和错误原因。


08

Harness 迭代:精简 vs 增强

"Harness 中的每个组件都编码了关于模型无法独立完成某事的假设,这些假设值得压力测试——既因为它们可能是错误的,也因为随着模型改进,这些假设会迅速过时。《构建有效 Agent》将其底层思路框架为'找到最简单的解决方案,只在需要时增加复杂性'——这是一个在任何维护 Agent Harness 的人身上都持续出现的模式。"

— Prithvi Rajasekaran,Anthropic Labs

随着 Opus 4.6 的发布,Rajasekaran 对 Harness 进行了系统性精简实验:

移除 Sprint 构造

Sprint 结构帮助将工作分解为模型可以连贯工作的块。鉴于 Opus 4.6 的改进,有充分理由相信模型可以原生处理这项工作。

"[Opus 4.6] 规划更仔细,能长时间持续进行代理任务,在更大的代码库中更可靠地运行,并且有更好的代码审查和调试技能来捕捉自己的错误。它在长上下文检索方面也大幅改进。这些都是 Harness 一直在补充的能力。"

— Anthropic Opus 4.6 发布博客

保留:Planner

没有 Planner,生成器的规模明显偏小:给定原始提示,它会直接开始构建而不先规格化工作,最终创建的应用比 Planner 的功能更少。

保留:Evaluator

每个 Sprint 结束时的评估改为整个运行结束后的单次评估。在模型能力边界内的任务,评估器持续提供价值。

Evaluator 价值的动态性

💡 重要发现

评估器的价值不是固定的"是/否"决策。当任务超出当前模型可靠独立完成的范围时,它才值得付出代价。

在 Opus 4.5 中,构建任务处于生成器能力的边界——评估器在整个构建过程中捕捉了有意义的问题。在 Opus 4.6 中,模型的原始能力提升了,边界外移。曾经需要评估器检查才能连贯实现的任务,现在往往在生成器能力范围内,评估器对这些任务变成了不必要的开销。但对于仍处于能力边界的部分,评估器继续带来真实提升。

随模型进化的 Harness 哲学

📊

持续实验

始终对正在构建的模型进行实验,读取其在实际问题上的追踪记录,调整性能以达到期望结果。

✂️

新模型到来时重审

新模型发布时,重新审查 Harness,剥离不再对性能起关键作用的部分,添加新的部分以实现之前不可能的更强能力。


09

DAW 实战:从一行提示到完整音乐软件

用精简后的 Harness(移除 Sprint 构造,保留 Planner + Evaluator)测试数字音频工作站(DAW)生成:

测试提示(一行)
使用 Web Audio API 在浏览器中构建一个功能完整的 DAW。
3h50m
总运行时长
$124.70
总 Token 费用
3轮
QA 评估轮次
Agent & 阶段 时长 费用
Planner 4.7 分钟 $0.46
Build(第1轮) 2小时7分钟 $71.08
QA(第1轮) 8.8 分钟 $3.24
Build(第2轮) 1小时2分钟 $36.89
QA(第2轮) 6.8 分钟 $3.09
Build(第3轮) 10.9 分钟 $5.88
QA(第3轮) 9.6 分钟 $4.06

生成器在没有 Sprint 分解的情况下连贯运行了超过 2 小时,这展示了 Opus 4.6 的长时连贯能力。

评估器在三轮中捕捉的关键问题

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

— Evaluator Agent 第1轮反馈

"剩余差距:- 音频录制仍只是存根(按钮切换但无麦克风捕获)- 未实现边缘拖动调整片段大小和片段分割 - 效果可视化是数字滑块,不是图形化的(无 EQ 曲线)"

— Evaluator Agent 第2轮反馈

最终结果:一个包含完整核心功能的可用音乐制作程序——工作中的编排视图、调音台和传输控制在浏览器中运行。AI Agent 能够设置节奏和调性、铺设旋律、构建鼓点、调整调音台电平、添加混响,并生成一个简短的歌曲片段。

🎵
浏览器内完整 DAW 演示视频 - 从提示生成的完整音乐制作软件
图4:完整 Harness 生成的 DAW(数字音频工作站) — 完整的编排视图、调音台界面、传输控制和 AI Agent 驱动的音乐创作功能。AI 可通过工具调用自主设置节奏调性、铺设旋律和鼓点。该应用远非专业级音乐制作程序,但核心原语完整存在且功能可用。
来源:Anthropic Engineering,"Harness design for long-running application development"

10

关键洞察与应用指南

对 AI 工程师的实践建议

🔬

持续实验与调优

对正在构建的模型进行实验,读取其在真实问题上的运行追踪,调整性能以达到期望结果。勿假设某个组件是否有效——要验证。

🔀

分离生成与评估

任何需要质量判断的任务,都应将执行者与评判者分离。调整独立评估器为"怀疑论者",比让生成器批评自身更可行。

📋

结构化状态传递

使用文件系统作为 Agent 间的通信媒介,通过 JSON 功能列表、进度文件、Git 历史共同维护可追踪的状态,支持中断恢复。

📏

可量化的主观标准

"这个设计好吗?"难以回答,"这个设计是否遵循了以下原则?"则可以评分。将主观判断转化为具体可评分的标准,是提升质量的关键。

🪶

从最简单开始

从最简单的解决方案开始,只在需要时增加复杂性。每个 Harness 组件都应有明确存在理由——它解决了模型不能独立完成的什么问题?

🔄

随模型更新 Harness

新模型发布时重新审视 Harness 的每个组件。移除不再负载关键性能的部分,添加新部分以实现之前模型能力边界之外的目标。

📝

Agent 软件工程实践

增量提交、进度日志、测试驱动——人类软件工程师的日常实践,同样适用于 AI Agent 的 Harness 设计。"向人类工程师学习"是核心思路。

🌐

端到端测试 > 单元测试

明确提示 Agent 使用浏览器自动化工具做端到端测试,效果远优于仅用 curl 或单元测试。像真实用户一样使用产品,才能发现真正的问题。

未来研究方向

🔭 开放问题(来自 Anthropic 原文)

1. 单 Agent vs 多 Agent 架构:目前仍不清楚在多个上下文中,单一通用编码 Agent 还是多 Agent 架构(专门的测试 Agent、QA Agent、代码清理 Agent)的表现更好。

2. 领域泛化:当前实验主要针对全栈 Web 应用开发。这些发现能否应用于科学研究、金融建模等其他需要长时代理任务的领域?

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


11

总结

Anthropic 这两篇工程博客共同描绘了一幅清晰的 Harness 工程图景:

🏗️

核心架构公式

Agent = Model + Harness
模型提供推理能力,Harness 提供一切其他:状态管理、进度追踪、质量保证、错误恢复。

两代 Harness 进化

第一代:初始化 + 编码双层架构,解决多上下文窗口的状态延续问题。第二代:GAN 启发的三段式(Planner + Generator + Evaluator),解决质量判断和规格扩展问题。

从这两篇文章中可以看到,AI 工程的核心挑战已经从"如何让模型更聪明"转向"如何设计更好的约束框架"。即便是最强的模型,在没有适当 Harness 的情况下,也无法可靠地完成真正复杂的长时任务。

对于想在实践中应用 Harness 工程的团队,核心建议是:先明确失败模式,再设计最简解法,然后随模型迭代不断精简。不要为了复杂而复杂,但也不要低估结构对 Agent 行为的塑造力。

"从这项工作中,我的信念是,有趣的 Harness 组合空间不会随着模型改进而收缩。相反,它会移动,AI 工程师的有趣工作就是不断找到下一个新颖组合。"

— Prithvi Rajasekaran,Anthropic Labs(2026.03.24)

📖 来源与参考