GAN 风格 Harness 技能¶
灵感来源于 Anthropic 的《面向长时间运行应用开发的 Harness 设计》(2026 年 3 月 24 日)
一个将生成与评估分离的多智能体 harness,通过对抗性反馈循环将质量提升到远超单个智能体所能达到的水平。
核心洞察¶
当被要求评估自己的工作时,智能体是病态的乐观主义者——它们赞美平庸的输出,并说服自己不去理会真正的问题。但设计一个独立的评估者并使其极其严格,远比教会生成者自我批评要容易得多。
这与 GAN(生成对抗网络)的运行机制相同:生成者产出,评估者批评,反馈驱动下一轮迭代。
适用场景¶
- 从一行提示词构建完整应用
- 需要高视觉质量的前端设计任务
- 需要可用功能而不仅仅是代码的全栈项目
- 任何无法接受"AI 垃圾"美学的任务
- 你愿意投入 50-200 美元以获得生产级质量输出的项目
不适用场景¶
- 快速单文件修复(使用常规
claude -p) - 预算紧张的任务(<$10)
- 简单重构(改用 de-sloppify 模式)
- 已有明确规格和测试的任务(使用 TDD 工作流)
架构¶
┌─────────────┐
│ PLANNER │
│ (Sonnet) │
└──────┬──────┘
│ Product Spec
│ (features, sprints, design direction)
▼
┌────────────────────────┐
│ │
│ GENERATOR-EVALUATOR │
│ FEEDBACK LOOP │
│ │
│ ┌──────────┐ │
│ │GENERATOR │--build-->│──┐
│ │ (Sonnet) │ │ │
│ └────▲─────┘ │ │
│ │ │ │ live app
│ feedback │ │
│ │ │ │
│ ┌────┴─────┐ │ │
│ │EVALUATOR │<-test----│──┘
│ │ (Sonnet) │ │
│ │+Playwright│ │
│ └──────────┘ │
│ │
│ 5-15 iterations │
└────────────────────────┘
三个智能体¶
1. 规划者智能体¶
角色: 产品经理——将简短提示词扩展为完整的产品规格。
关键行为: - 接受一行提示词,产出一份包含 16 个功能、多 sprint 的规格说明 - 定义用户故事、技术需求和视觉设计方向 - 刻意雄心勃勃——保守的规划只会带来平庸的结果 - 产出评估者后续将使用的评估标准
模型: 默认使用 Sonnet;可通过 GAN_PLANNER_MODEL=opus 提升以获得更深入的规格扩展
2. 生成者智能体¶
角色: 开发者——根据规格实现功能。
关键行为: - 以结构化 sprint 方式工作(或使用较新模型时采用连续模式) - 在编写代码之前与评估者协商"sprint 契约" - 使用全栈工具:React、FastAPI/Express、数据库、CSS - 使用 git 管理迭代之间的版本控制 - 阅读评估者反馈并将其融入下一轮迭代
模型: 默认使用 Sonnet;可通过 GAN_GENERATOR_MODEL=opus 提升以获得最强的编码能力
3. 评估者智能体¶
角色: QA 工程师——测试正在运行的应用,而不仅仅是代码。
关键行为: - 使用 Playwright MCP 与正在运行的应用交互 - 逐一点击功能、填写表单、测试 API 端点 - 依据四项标准评分(可配置): 1. 设计质量——它是否像一个连贯的整体? 2. 原创性——是自定义决策还是模板/AI 模式? 3. 工艺——排版、间距、动画、微交互? 4. 功能性——所有功能是否真的可用? - 返回包含评分和具体问题的结构化反馈 - 被设计为极其严格——从不赞美平庸之作
模型: 默认使用 Sonnet;可通过 GAN_EVALUATOR_MODEL=opus 提升以获得更强的判断力与工具使用能力
评估标准¶
默认的四项标准,每项按 1-10 分评分:
## Evaluation Rubric
### Design Quality (weight: 0.3)
- 1-3: Generic, template-like, "AI slop" aesthetics
- 4-6: Competent but unremarkable, follows conventions
- 7-8: Distinctive, cohesive visual identity
- 9-10: Could pass for a professional designer's work
### Originality (weight: 0.2)
- 1-3: Default colors, stock layouts, no personality
- 4-6: Some custom choices, mostly standard patterns
- 7-8: Clear creative vision, unique approach
- 9-10: Surprising, delightful, genuinely novel
### Craft (weight: 0.3)
- 1-3: Broken layouts, missing states, no animations
- 4-6: Works but feels rough, inconsistent spacing
- 7-8: Polished, smooth transitions, responsive
- 9-10: Pixel-perfect, delightful micro-interactions
### Functionality (weight: 0.2)
- 1-3: Core features broken or missing
- 4-6: Happy path works, edge cases fail
- 7-8: All features work, good error handling
- 9-10: Bulletproof, handles every edge case
评分¶
- 加权得分 = (标准得分 × 权重)之和
- 通过阈值 = 7.0(可配置)
- 最大迭代次数 = 15(可配置,通常 5-15 次即可)
使用方法¶
通过命令使用¶
# Full three-agent harness
/project:gan-build "Build a project management app with Kanban boards, team collaboration, and dark mode"
# With custom config
/project:gan-build "Build a recipe sharing platform" --max-iterations 10 --pass-threshold 7.5
# Frontend design mode (generator + evaluator only, no planner)
/project:gan-design "Create a landing page for a crypto portfolio tracker"
通过 Shell 脚本¶
# Basic usage
./scripts/gan-harness.sh "Build a music streaming dashboard"
# With options
GAN_MAX_ITERATIONS=10 \
GAN_PASS_THRESHOLD=7.5 \
GAN_EVAL_CRITERIA="functionality,performance,security" \
./scripts/gan-harness.sh "Build a REST API for task management"
通过 Claude Code(手动)¶
# Step 1: Plan
claude -p --model sonnet "You are a Product Planner. Read PLANNER_PROMPT.md. Expand this brief into a full product spec: 'Build a Kanban board app'. Write spec to spec.md"
# Step 2: Generate (iteration 1)
claude -p --model sonnet "You are a Generator. Read spec.md. Implement Sprint 1. Start the dev server on port 3000."
# Step 3: Evaluate (iteration 1)
claude -p --model sonnet --allowedTools "Read,Bash,mcp__playwright__*" "You are an Evaluator. Read EVALUATOR_PROMPT.md. Test the live app at http://localhost:3000. Score against the rubric. Write feedback to feedback-001.md"
# Step 4: Generate (iteration 2 — reads feedback)
claude -p --model sonnet "You are a Generator. Read spec.md and feedback-001.md. Address all issues. Improve the scores."
# Repeat steps 3-4 until pass threshold met
跨模型能力的演进¶
该框架应随着模型能力的提升而简化。参照 Anthropic 的演进历程:
阶段一——较弱模型(Sonnet 级)¶
- 需要完整的 Sprint 分解
- 在 Sprint 之间重置上下文(避免上下文焦虑)
- 至少 2 个智能体:初始化器 + 编码智能体
- 重度脚手架用于弥补模型能力的局限
阶段二——较强模型(Opus 4.5 级)¶
- 完整的 3 智能体框架:规划器 + 生成器 + 评估器
- 在每个实现阶段之前定义 Sprint 契约
- 对复杂应用进行 10 个 Sprint 的分解
- 上下文重置仍然有用,但不再那么关键
阶段三——前沿模型(Opus 4.6 级)¶
- 简化的框架:单次规划,持续生成
- 评估缩减为单次最终检查(模型更聪明)
- 无需 Sprint 结构
- 自动压缩处理上下文增长
关键原则: 框架中的每个组件都编码了一个假设:模型无法独自完成的事。当模型改进时,重新验证这些假设。剥离那些不再需要的东西。
配置¶
环境变量¶
| 变量 | 默认值 | 描述 |
|---|---|---|
GAN_MAX_ITERATIONS |
15 |
生成器与评估器的最大循环次数 |
GAN_PASS_THRESHOLD |
7.0 |
通过的加权分数(1-10) |
GAN_PLANNER_MODEL |
sonnet |
规划智能体使用的模型 |
GAN_GENERATOR_MODEL |
sonnet |
生成智能体使用的模型 |
GAN_EVALUATOR_MODEL |
sonnet |
评估智能体使用的模型 |
GAN_EVAL_CRITERIA |
design,originality,craft,functionality |
逗号分隔的评估标准 |
GAN_DEV_SERVER_PORT |
3000 |
实时应用使用的端口 |
GAN_DEV_SERVER_CMD |
npm run dev |
启动开发服务器的命令 |
GAN_PROJECT_DIR |
. |
项目工作目录 |
GAN_SKIP_PLANNER |
false |
跳过规划器,直接使用规格说明 |
GAN_EVAL_MODE |
playwright |
playwright、screenshot 或 code-only |
评估模式¶
| 模式 | 工具 | 适用场景 |
|---|---|---|
playwright |
Browser MCP + 实时交互 | 带 UI 的全栈应用 |
screenshot |
截图 + 视觉分析 | 静态站点、纯设计 |
code-only |
测试 + 代码检查 + 构建 | API、库、CLI 工具 |
反模式¶
-
评估器过于宽松 — 如果评估器在第 1 次迭代时放行所有内容,则说明你的评分标准过于宽松。收紧评分标准,并为常见的 AI 模式添加明确的扣分项。
-
生成器忽略反馈 — 确保反馈以文件形式传递,而不是内联。生成器应在每次迭代开始时读取
feedback-NNN.md。 -
无限循环 — 始终设置
GAN_MAX_ITERATIONS。如果生成器在 3 次迭代后仍无法突破分数平台期,请停止并标记为需要人工审查。 -
评估器测试流于表面 — 评估器必须使用 Playwright 与实时应用交互,而不是仅仅截图。点击按钮、填写表单、测试错误状态。
-
评估器自夸其修复 — 绝不能让评估器先提出修复建议,再评估这些修复。评估器只负责批评;生成器负责修复。
-
上下文耗尽 — 对于长时间会话,请使用 Claude Agent SDK 的自动压缩功能,或在主要阶段之间重置上下文。
结果:预期效果¶
基于 Anthropic 已发布的结果:
| 指标 | 单一智能体 | GAN 框架 | 改进幅度 |
|---|---|---|---|
| 时间 | 20 分钟 | 4-6 小时 | 长 12-18 倍 |
| 成本 | $9 | $125-200 | 高 14-22 倍 |
| 质量 | 勉强可用 | 生产就绪 | 质变 |
| 核心功能 | 不可用 | 全部正常 | 不适用 |
| 设计 | 千篇一律的 AI 产物 | 独特而精致 | 不适用 |
权衡显而易见: 约 20 倍的时间和成本,换来输出质量的质的飞跃。这适用于质量至关重要的项目。
参考资料¶
- Anthropic:长时间运行应用的 Harness 设计 — Prithvi Rajasekaran 的原始论文
- Epsilla:GAN 风格的智能体循环 — 架构解构
- Martin Fowler:Harness 工程 — 更广泛的行业背景
- OpenAI:Harness 工程 — OpenAI 的并行工作
本页原文 Markdown:在 AtomGit 查看·内容源自开源项目 ev/ECC