# Humans and Agents in Software Engineering Loops

> 原文链接：https://martinfowler.com/articles/exploring-gen-ai/humans-and-agents.html
> 作者/来源：Kief Morris / Thoughtworks (Martin Fowler's blog)
> 阅读日期：2026-04-02

## 一句话总结
软件开发中人与 agent 的协作应采用"Humans On the Loop"模式——人类不是逐行审查代码（in the loop），也不是完全放手（outside the loop），而是专注于定义和改进控制 agent 行为的 harness（规范、质量检查、工作流指导）。

## 核心论点

Kief Morris 提出了一个简洁有力的框架来理解软件开发：两个相互关联的反馈循环。**"Why Loop"** 关注将想法转化为可运行软件——这是人类真正关心的结果。**"How Loop"** 处理实现这些结果所需的中间产物（代码、测试、基础设施、文档）。AI agent 的引入根本性地改变了这两个循环之间的动态。

基于这个框架，Morris 描述了三种人机协作模式：

**Humans Outside the Loop（"Vibe Coding"）**：人类只管 why loop，agent 处理所有技术实现。这对厌倦了过度工程的开发者有吸引力，但 Morris 警告"设计良好、结构清晰的代码库具有外部重要性"——agent 理解质量要求时才能更快地产出代码，所以这种模式长期可能反而低效。

**Humans Inside the Loop**：人类成为守门人，逐行检查 agent 生成的代码。虽然保持了质量监督，但造成瓶颈——"agent 生成代码的速度远快于人类手动检查的速度"。

**Humans On the Loop（推荐模式）**：人类不是直接管理输出，而是定义和改进 **harness**——控制 how loop 的规范、质量检查和工作流指导。关键区分：当对结果不满意时，"in the loop"方法直接修复产物，"on the loop"方法改进生成产物的系统。

Morris 还提出了一个前瞻性的演进方向——**Agentic Flywheel**（agent 飞轮）：agent 基于测试结果、性能指标和生产数据自行改进 harness。人类从交互式审查逐步过渡到自动化审批系统，在适当层面保持治理。

## 关键概念
- **Why Loop vs How Loop**：目标循环（为什么做）与实现循环（怎么做）的区分，AI agent 主要革新的是 how loop
- **Humans On the Loop**：人类不直接参与代码生产，而是专注于改进 harness——即控制 agent 行为的规范和约束系统
- **Harness（挽具/控制系统）**：规范、质量检查、工作流指导的总称，是人类影响 agent 行为的主要杠杆
- **Agentic Flywheel（Agent 飞轮）**：agent 不仅执行任务，还自动改进控制自身行为的 harness，形成自我改进的正反馈循环
- **审查瓶颈（Review Bottleneck）**：当人类逐行审查 agent 输出时，人类成为系统中的速率限制因素

## 实践建议
1. 将精力从"审查每一行代码"转移到"改进 harness"——写更好的规范、测试、质量检查和工作流指导
2. 当对 agent 输出不满意时，优先考虑"如何改进 harness 来避免这类问题"而非"直接修复这段代码"
3. 不要完全放手（vibe coding），因为代码库内部质量的退化最终会拖慢 agent 自身的产出效率
4. 建立分层的审查机制：自动化检查处理大部分质量保障，人类只在高层面做决策性审查
5. 逐步将 harness 改进的建议权授予 agent，但保留人类的最终审批权——随信任建立逐步放权
6. 关注 harness 的关键组件：`CLAUDE.md`/`AGENTS.md`、测试套件、linter 规则、CI/CD 质量门禁

## 独到观点
Morris 最重要的贡献是将军事/自动化领域的"on the loop"概念引入软件工程。这个框架解决了当前行业争论中的一个核心矛盾：如何在保持质量控制的同时不成为 agent 效率的瓶颈？答案是提升抽象层级——从控制产物升级为控制生产系统。Agentic Flywheel 的构想则更进一步，指出了一个可能的未来：agent 不仅是执行者，还是 harness 的共同演化者。

## 与其他文章的关联
- 与 **Writing a Good CLAUDE.md**（#15）直接相关：`CLAUDE.md` 是 harness 的核心组件，本文为 #15 中的具体建议提供了理论框架——改进 `CLAUDE.md` 就是"on the loop"的实践
- 与 **Fowler Quality with Agents**（#20）互补：#20 中发现的代码质量问题应该通过改进 harness 来系统性解决，而非逐个修复
- 与 **Claude Code Sandboxing**（#16）关联：sandboxing 是 harness 的安全组件，通过定义安全边界来控制 agent 行为
- 与 **HumanLayer Backpressure**（#13）关联：backpressure 策略是 harness 的一部分，体现了"on the loop"思想——改进工具输出管理系统而非让 agent 自行处理
- 与 **OpenHands Prompt Injection**（#19）相关：安全防护中的"确认模式"是"in the loop"的典型例子，其"审批疲劳"问题正说明了为什么需要更系统性的"on the loop"方案
- 与 **Fowler Anchoring to Reference**（#21）互补：参考应用是 harness 的重要组件
- 与 **Fowler SDD Tools**（#24）同属系统性方法论：都关注如何构建控制 agent 行为的系统
