151 lines
6.8 KiB
Markdown
151 lines
6.8 KiB
Markdown
---
|
||
title: "长运行应用的 Harness 设计"
|
||
type: practice
|
||
confidence: medium
|
||
source: "Harness design for long-running application development"
|
||
raw_sources:
|
||
- path: raw/Harness design for long-running application development.md
|
||
hash: "sha256:11521f67787364afef5e0589784cf49987d8d8b0926d5b393406993626b5fb1f"
|
||
tags:
|
||
- "实践指南"
|
||
- "Harness工程"
|
||
- "多智能体"
|
||
last_updated: 2026-04-11
|
||
---
|
||
|
||
# 长运行应用的 Harness 设计
|
||
|
||
## 页面定位
|
||
本页是 Anthropic 长运行应用 Harness 设计的实践案例页:上下文管理、生命周期与自主任务支持。负责该案例的问题与方案;通用 Harness 定义见 [[Harness-Engineering|Harness 工程]] 核心页。
|
||
|
||
本文基于 Anthropic 团队的实践经验,探讨如何设计有效的 Harness 来支持长运行、自主的应用开发任务。
|
||
|
||
## 核心问题
|
||
|
||
在长运行 Agent 任务中,简单的实现通常会遇到两个持续存在的问题:
|
||
|
||
### 1. 上下文窗口填充导致的连贯性丧失
|
||
|
||
随着任务进行,模型往往会在冗长任务上失去连贯性。一些模型还表现出"**上下文焦虑**"——当它们接近认为的上下文限制时,会过早地结束工作。
|
||
|
||
**解决方案对比**:
|
||
- **压缩 (Compaction)**:总结对话的早期部分,使同一个 Agent 可以在缩短的历史上继续。保留了连续性,但没有给 Agent 一个干净的状态。
|
||
- **上下文重置 (Context Reset)**:完全清除上下文窗口并启动一个新的 Agent,结合结构化移交来携带前一个 Agent 的状态和下一步。提供了干净的状态,但增加了编排复杂性、令牌开销和延迟。
|
||
|
||
### 2. 自我评估问题
|
||
|
||
当被要求评估自己产生的工作时,Agent 往往会自信地赞扬工作——即使在人类观察者看来质量明显一般。对于像设计这样的主观任务,这个问题尤其明显。
|
||
|
||
**解决方案**:将执行工作的 Agent 与评判工作的 Agent 分离。调整独立的评估器使其持怀疑态度,比让生成器批评自己的工作要容易得多。
|
||
|
||
## 前端设计:使主观质量可评分
|
||
|
||
受生成对抗网络 (GANs) 的启发,设计了一个带有**生成器**和**评估器** Agent 的多 Agent 结构。
|
||
|
||
### 四个评分标准
|
||
|
||
1. **设计质量**:设计感觉像是一个连贯的整体而不是部分的集合吗?
|
||
2. **原创性**:有自定义决策的证据吗,还是模板布局、库默认值和 AI 生成的模式?
|
||
3. **工艺**:技术执行:排版层次结构、间距一致性、色彩和谐、对比度。
|
||
4. **功能性**:独立于美学的可用性。
|
||
|
||
### 评估器校准
|
||
|
||
使用带有详细分数分解的少样本示例来校准评估器,确保评估器的判断与人类偏好一致,并减少迭代之间的分数漂移。
|
||
|
||
### 迭代循环
|
||
|
||
1. 生成器 Agent 首先根据用户提示创建 HTML/CSS/JS 前端
|
||
2. 评估器使用 Playwright MCP 与实时页面交互
|
||
3. 评估器对每个标准进行评分并编写详细的批评
|
||
4. 反馈流回生成器作为下一次迭代的输入
|
||
5. 每次生成运行 5 到 15 次迭代
|
||
|
||
## 扩展到全栈编码
|
||
|
||
将这种 GAN 启发的模式应用于全栈开发,生成器-评估器循环自然地映射到软件开发生命周期。
|
||
|
||
### 三 Agent 架构
|
||
|
||
**Planner (规划器)**:
|
||
- 将简单的 1-4 句提示扩展为完整的产品规范
|
||
- 被提示要对范围保持雄心勃勃
|
||
- 专注于产品上下文和高级技术设计,而不是详细的技术实现
|
||
- 寻找机会将 AI 功能编织到产品规范中
|
||
|
||
**Generator (生成器)**:
|
||
- 一次从规范中提取一个功能
|
||
- 每个冲刺使用 React、Vite、FastAPI 和 SQLite 堆栈实现应用
|
||
- 被指示在每个冲刺结束时自我评估其工作,然后移交给 QA
|
||
- 有 git 用于版本控制
|
||
|
||
**Evaluator (评估器)**:
|
||
- 使用 Playwright MCP 像用户一样点击运行中的应用
|
||
- 测试 UI 功能、API 端点和数据库状态
|
||
- 根据发现的 bug 和一组标准对每个冲刺进行评分
|
||
- 每个标准都有硬阈值,如果任何一个低于它,冲刺就失败
|
||
|
||
### 冲刺契约
|
||
|
||
在每个冲刺之前,生成器和评估器协商一个**冲刺契约**:在编写任何代码之前,就该工作块的"完成"是什么样子达成一致。
|
||
|
||
## 结果对比
|
||
|
||
### 复古游戏制作器示例
|
||
|
||
| Harness | 时长 | 成本 | 结果 |
|
||
|---------|------|------|------|
|
||
| 单独 Agent | 20 分钟 | $9 | 界面看起来符合预期,但实际游戏坏了,实体不响应输入 |
|
||
| 完整 Harness | 6 小时 | $200 | 16 个功能规范,分布在十个冲刺中,包含精灵动画系统、行为模板、音效和音乐、AI 辅助的精灵生成器和关卡设计器,以及可分享链接的游戏导出 |
|
||
|
||
### 关键发现
|
||
|
||
- 单独运行的输出最初看起来令人印象深刻,但深入研究后问题开始出现
|
||
- Harness 运行的应用立即显示出比单独运行更多的打磨和流畅性
|
||
- 评估器使实现与规范保持一致,契约是细粒度的,评估器的发现足够具体,可以采取行动
|
||
|
||
## 简化 Harness
|
||
|
||
随着模型的改进,值得重新检查 Harness,剥离不再对性能有负载作用的部分,并添加新部分以实现以前不可能的更大能力。
|
||
|
||
### Opus 4.6 的改进
|
||
|
||
- 更仔细地规划
|
||
- 更长时间地维持 Agent 任务
|
||
- 可以在更大的代码库中更可靠地操作
|
||
- 具有更好的代码审查和调试技能来发现自己的错误
|
||
- 长上下文检索方面有了实质性改进
|
||
|
||
### 移除冲刺结构
|
||
|
||
保持规划器和评估器,因为每个都继续增加明显的价值。将评估器移动到运行结束时的单次通过,而不是每个冲刺评分。
|
||
|
||
### DAW 示例结果
|
||
|
||
使用更新的 Harness 生成数字音频工作站 (DAW):
|
||
|
||
| Agent & Phase | 时长 | 成本 |
|
||
|---------------|------|------|
|
||
| Planner | 4.7 分钟 | $0.46 |
|
||
| Build (Round 1) | 2 小时 7 分钟 | $71.08 |
|
||
| QA (Round 1) | 8.8 分钟 | $3.24 |
|
||
| Build (Round 2) | 1 小时 2 分钟 | $36.89 |
|
||
| QA (Round 2) | 6.8 分钟 | $3.09 |
|
||
| Build (Round 3) | 10.9 分钟 | $5.88 |
|
||
| QA (Round 3) | 9.6 分钟 | $4.06 |
|
||
| **总计 V2 Harness** | **3 小时 50 分钟** | **$124.70** |
|
||
|
||
## 经验教训
|
||
|
||
1. **实验**:与你正在构建的模型一起实验,阅读其在现实问题上的轨迹,并调整其性能以实现你想要的结果
|
||
2. **分解**:在处理更复杂的任务时,有时可以通过分解任务并将专门的 Agent 应用于问题的每个方面来获得提升
|
||
3. **重新检查**:当新模型落地时,通常很好的做法是重新检查 Harness,剥离不再对性能有负载作用的部分,并添加新部分以实现以前不可能的更大能力
|
||
|
||
> 随着模型的改进,有趣的 Harness 组合空间不会缩小。相反,它会移动,而 AI 工程师的有趣工作是继续找到下一个新颖的组合。
|
||
|
||
## 相关研究
|
||
|
||
- [[Harness-Engineering|Harness 工程]]
|
||
- [[Externalization-in-LLM-Agents|LLM Agent 中的外部化]]
|
||
- [[Skill-Systems|技能系统]]
|