概述

本文由Kief Morris撰写,发表于Martin Fowler的网站,探讨了在生成式AI时代人类工程师应该如何定位自己与AI Agent的关系。文章提出了一个核心框架:人类应该处于"on the loop"(在循环之上),而非"in the loop"(在循环之中)或完全脱离循环。作者区分了"Why Loop"(从想法到软件的战略循环)和"How Loop"(构建产物的执行循环),并提出了"Harness Engineering"(驾驭工程)的概念——通过构建规范和检查机制,让Agent能够自我纠正,最终形成持续改进的"Agentic Flywheel"(Agent飞轮)。


详细内容

核心概念:三种人机协作模式

模式对比

模式英文表述人类角色Agent角色适用场景
在循环之中In the loop手动审查每个输出辅助生成高风险、关键系统
在循环之上On the loop管理流程和规范自主执行大多数开发工作
脱离循环Out of the loop完全不参与全权负责低风险、标准化任务
氛围编程Vibe coding描述意图完全自主原型、个人项目

可视化理解

In the Loop(在循环之中):
人类 → Agent → 输出 → [人类审查] → 使用
              ↑_______________|

On the Loop(在循环之上):
人类制定规范 → Agent执行 → 自动检查 → 通过/反馈
      ↑________________________________|

Out of the Loop(脱离循环):
人类设定目标 → [Agent全权处理] → 结果

Vibe Coding(氛围编程):
人类描述氛围 → Agent生成 → 即时反馈 → 迭代

Why Loop vs How Loop

两个层次的循环

Why Loop(为什么循环)——战略层:

  • 起点:业务需求、用户问题、市场机会
  • 终点:可工作的软件解决方案
  • 核心问题:"我们为什么要构建这个?"
  • 关键决策:功能范围、架构方向、技术选型

How Loop(如何循环)——执行层:

  • 起点:确定要构建的功能
  • 终点:具体的代码产物
  • 核心问题:"我们如何构建这个?"
  • 关键决策:实现细节、代码结构、算法选择

传统开发 vs AI辅助开发

传统开发:

  • 人类同时主导Why Loop和How Loop
  • 从需求到代码的转换完全由人类完成
  • 迭代速度受限于人类编码速度

AI辅助开发:

  • 人类主导Why Loop(战略决策)
  • Agent主导How Loop(执行实现)
  • 人类通过规范和检查来"驾驭"Agent

氛围编程(Vibe Coding)的局限

什么是Vibe Coding

"氛围编程"是指人类通过描述"氛围"或"感觉"来让AI生成代码,而不关注具体实现细节。

典型场景:

  • "给我做一个复古风格的任务管理应用"
  • "让这个页面感觉更现代、更流畅"
  • "添加一些有趣的动画效果"

为什么不适合专业开发

氛围编程专业开发需求
关注感觉和外观需要精确的功能实现
迭代基于视觉反馈需要满足严格的业务逻辑
个人项目适用团队协作需要一致性
快速原型长期维护需要可预测性

核心问题

氛围编程将How Loop完全交给Agent,但:

  • 缺乏可重复性
  • 难以调试和维护
  • 无法保证质量一致性
  • 不适合团队协作

Harness Engineering:驾驭工程

核心理念

Harness Engineering(驾驭工程)是指构建规范和检查机制,使Agent能够在How Loop中自我纠正。

关键要素

1. 规范(Specifications)

明确告诉Agent应该做什么:

  • 功能需求文档
  • API契约定义
  • 架构约束
  • 编码规范

示例:

## 用户认证模块规范

### 功能要求
- 支持邮箱/密码登录
- 密码必须加密存储(bcrypt)
- 登录失败3次后锁定账户15分钟

### 技术约束
- 使用JWT进行会话管理
- Token有效期24小时
- 刷新Token有效期7天

### 安全要求
- 所有密码传输必须使用HTTPS
- 实现CSRF保护
- 记录所有登录尝试日志

2. 检查(Checks)

验证Agent的输出是否符合规范:

  • 自动化测试
  • 静态代码分析
  • 安全扫描
  • 性能基准测试

检查层次:

Level 1: 语法检查(编译/解析)
Level 2: 风格检查(Linting)
Level 3: 单元测试
Level 4: 集成测试
Level 5: 安全扫描
Level 6: 性能测试
Level 7: 人工审查(关键变更)

3. 反馈循环

当检查失败时,Agent应该能够:

  • 理解失败原因
  • 自动修复问题
  • 重新提交验证

Agentic Flywheel:Agent飞轮

概念定义

Agentic Flywheel 是一个自我强化的系统,其中Agent不仅执行代码,还改进自己的工作流程。

飞轮运转机制

        ┌─────────────────────────────────────┐
        │                                     │
        ▼                                     │
┌───────────────┐    ┌───────────────┐    ┌──────────┐
│ 人类定义规范   │───▶│ Agent执行代码  │───▶│ 自动检查  │
└───────────────┘    └───────────────┘    └────┬─────┘
                                               │
                    ┌──────────────────────────┘
                    │
                    ▼
        ┌───────────────────┐
        │ 检查通过?         │
        └─────────┬─────────┘
                  │
        ┌─────────┴─────────┐
        │                   │
        ▼                   ▼
┌───────────────┐    ┌───────────────┐
│ 部署/交付      │    │ Agent自我纠正  │
└───────────────┘    └───────┬───────┘
                             │
                             └──────────────┐
                                             │
        ┌────────────────────────────────────┘
        │
        ▼
┌─────────────────────────────────────┐
│ 流程改进:Agent学习失败模式,        │
│ 更新内部策略以避免重复错误           │
└─────────────────────────────────────┘

飞轮的三个阶段

阶段1:执行(Execution)

  • Agent根据规范生成代码
  • 自动化检查验证输出
  • 人类监督但不介入每个细节

阶段2:纠正(Correction)

  • 当检查失败时,Agent自动修复
  • 学习失败模式
  • 更新生成策略

阶段3:进化(Evolution)

  • Agent分析常见失败模式
  • 建议改进规范或检查
  • 优化整个工作流程

实践建议

对于个人开发者

1. 从规范开始

  • 不要直接让Agent写代码
  • 先花时间明确需求和约束
  • 将规范作为与Agent的"契约"

2. 建立检查清单

  • 为每个项目定义最低质量标准
  • 使用自动化工具执行检查
  • 逐步增加检查覆盖率

3. 保持人类判断

  • 在关键决策点保留人类审查
  • 不盲目接受Agent的所有输出
  • 定期回顾和优化规范

对于团队

1. 标准化规范格式

  • 建立团队级的规范模板
  • 使用结构化格式(如YAML frontmatter)
  • 版本控制规范文档

2. 共享检查配置

  • 统一的Lint规则
  • 共享的测试框架和基准
  • 团队级的安全检查清单

3. 建立反馈机制

  • 记录Agent的常见错误
  • 更新规范以避免重复问题
  • 分享有效的Prompt模式

对于组织

1. 投资于工具链

  • 自动化检查基础设施
  • Agent友好的CI/CD流程
  • 规范管理和版本控制工具

2. 培养Harness Engineering能力

  • 培训工程师编写有效规范
  • 建立检查即代码(Checks as Code)的文化
  • 奖励规范和检查的贡献

3. 渐进式采用

  • 从低风险项目开始
  • 逐步扩大Agent自主范围
  • 持续评估和调整策略

与其他方法的对比

vs 传统软件开发

维度传统开发Harness Engineering
人类角色编码+审查规范+监督
迭代速度慢(人类编码)快(Agent编码)
一致性依赖个人习惯依赖规范执行
可扩展性受限于团队规模可自动化扩展

vs 完全自动化(Out of the Loop)

维度完全自动化On the Loop
人类参与规范和监督
适用场景标准化任务复杂创新工作
风险高(无监督)可控(有检查)
灵活性

vs 氛围编程(Vibe Coding)

维度Vibe CodingHarness Engineering
规范明确性模糊精确
质量保证有检查机制
可维护性
适用场景原型/个人项目生产系统

核心洞察

人类的独特价值

在Agentic时代,人类工程师的价值不在于编写代码,而在于:

  1. 问题定义:识别真正需要解决的问题
  2. 价值判断:决定什么是重要的,什么是可以妥协的
  3. 系统设计:定义架构和接口
  4. 质量把控:建立和维护质量标准
  5. 持续改进:优化整个开发流程

Agent的独特价值

Agent在以下方面超越人类:

  1. 执行速度:快速生成大量代码
  2. 知识广度:掌握多种语言和框架
  3. 不知疲倦:可以持续迭代和修正
  4. 一致性:严格遵循规范(如果规范清晰)
  5. 模式识别:从大量失败中学习

协作的本质

"最好的结果来自于人类和Agent各自发挥所长,通过明确的规范和检查机制形成协作。"

这不是人类 vs Agent,而是:

  • 人类负责战略(Why)
  • Agent负责执行(How)
  • 规范负责对齐(Alignment)
  • 检查负责质量保证(Quality)

观点存疑

  1. "On the Loop"是否过于理想化?

    • 实践中,定义完美的规范可能比直接写代码更难
    • 规范的维护成本可能很高,特别是在需求频繁变化的项目中
    • 需要验证这种模式的实际效率是否真的高于传统方法
  2. 检查机制的全面性存疑

    • 自动化检查能否真正捕获所有重要问题?
    • 某些质量问题(如代码可读性、架构合理性)可能难以自动化检查
    • 过度依赖检查可能导致"检查通过但质量低下"的情况
  3. 对Agent自我纠正能力的假设

    • 当前Agent在理解复杂错误和自动修复方面的能力有限
    • "Agentic Flywheel"的自我进化能力可能被过度夸大
    • 需要更多实际案例来验证这一概念的可行性
  4. 忽视了团队协作的复杂性

    • 文章主要关注个人与Agent的协作
    • 在多团队成员、多Agent的场景下,规范和检查的协调更加复杂
    • 冲突解决和责任归属问题未被充分讨论
  5. 规范编写的技能要求

    • 编写有效的规范本身就是一种高级技能
    • 可能需要比编码更强的抽象和沟通能力
    • 团队中的初级工程师可能难以胜任这一角色
  6. 与现有开发流程的整合

    • 如何将Harness Engineering融入现有的敏捷/Scrum流程?
    • 估算、规划、回顾等传统活动如何调整?
    • 需要更多关于组织变革管理的指导
  7. Agent能力的快速发展

    • 如果Agent能力继续快速提升,"On the Loop"的边界可能需要不断调整
    • 今天的"需要人类监督"的任务,明天可能完全自动化
    • 这种动态变化给策略制定带来挑战

Tags

#AIAgent #软件工程 #人机协作 #开发流程 #AgenticWorkflow #规范驱动开发 #自动化测试 #代码质量 #团队管理 #未来工作