Loop Engineering —— 循环的设计与自主执行

本文基于"模智空间"PPT《Prompt · Context · Harness · Loop 四大AI工程支柱》的 Loop Engineering 部分内容扩展创作,深入探讨 Agent 循环的设计理念、六大组件与工程实践。


一、什么是 Loop Engineering?

1.1 从"人驱动模型"到"循环驱动模型"

Loop Engineering 代表了一种全新的 AI 工程协作范式。它的核心思想是:不再由人手动反复向 AI 智能体下发指令,转而搭建一套自动化工作循环,由系统自主调度智能体、推进各项任务。

css 复制代码
传统模式:人 → 指令1 → AI执行 → 人检查 → 指令2 → AI执行 → 人检查 → ...
Loop模式:人设计循环 → [循环:感知→推理→行动→观察→判断→继续/停止] → 最终结果

也就是说,过去是人不断驱动智能体;现在开始变成人设计循环,循环驱动智能体

Loop Engineering 不是某一个具体产品的专属功能,而是一种新的工程协作模式------它把 AI 从"一次性工具"变成了"持续运行的自动化系统"。

1.2 Loop 与其他三大工程的关系

在前面的文章中,我们讨论了:

  • Prompt Engineering:解决"怎么问"的问题
  • Context Engineering:解决"让 AI 看到什么"的问题
  • Harness Engineering:解决"AI 在什么环境里工作"的问题

Loop Engineering 解决的是最关键的一步:"AI 做完一步后怎么办?"

它是将前三个工程串联起来的"胶水层"------在 Loop 中,Prompt 定义了每一步的输入格式,Context 提供了每一步的信息支撑,Harness 保障了每一步的安全执行,而 Loop 本身决定了整个流程的节奏、分支和终止条件


二、智能体的内循环与外循环

2.1 智能体的内循环:感知-推理-行动-观察

每个智能体内部都在运行一个标准的控制循环:

markdown 复制代码
        ┌──────────────────────────┐
        │                          │
        ▼                          │
    ┌───────┐   ┌───────┐   ┌───────┐   ┌───────┐
    │ 感知   │ → │ 推理   │ → │ 行动   │ → │ 观察   │
    │Perceive│   │Reason │   │ Act   │   │Observe│
    └───────┘   └───────┘   └───────┘   └───────┘
                                              │
                                              │
                              ┌───────┐        │
                              │ 判断   │ ←─────┘
                              │Decide  │
                              └───┬───┘
                                  │
                    ┌─────────────┼─────────────┐
                    │             │             │
                    ▼             ▼             ▼
                 继续循环      修正重试      终止输出

这个循环有几个关键特性:

连续性:每一步的输出是下一步的输入,形成信息传递链。这意味着循环中的任何一步出现偏差,都可能在后续步骤中被放大。

状态依赖:循环中每一步的决策都依赖于当前状态(包括历史步骤的结果、环境反馈、剩余资源)。状态管理是 Loop Engineering 的核心挑战。

条件分支:循环不是线性的------根据观察结果,可能进入不同的分支(继续、修正、重试、回退、终止)。

2.2 外循环:触发、管控与持久化

Loop Engineering 的核心关注点并非单轮大模型的工具调用细节,而是完整的管控逻辑

关注点 核心问题 工程挑战
触发时机与触发源 什么条件触发循环?定时?事件?手动? 触发条件的设计、防重复触发
执行任务 每个循环周期执行什么任务? 任务拆分、依赖管理
校验规则 如何判断执行结果是否正确? 校验标准的设计、自动化验证
迭代决策 校验通过/失败后如何处理? 重试策略、升级机制、终止条件
状态持久化 如何保存全流程运行状态? 数据结构设计、故障恢复

三、Loop Engineering 的六大组件

把一典型的 Loop 拆分开,就是六个常见的 Agent 系统组成部分:

scss 复制代码
┌─────────────────────────────────────────────────────────┐
│                      Loop Engineering                     │
│                                                           │
│  ┌──────────┐  ┌──────────┐  ┌──────────┐               │
│  │ 自动化机制 │  │ Worktree │  │  Skill   │               │
│  │ (心跳)    │  │ (并行隔离) │  │ (知识沉淀) │               │
│  └──────────┘  └──────────┘  └──────────┘               │
│                                                           │
│  ┌──────────┐  ┌──────────┐  ┌──────────┐               │
│  │ MCP连接器 │  │Sub-Agent │  │  Memory  │               │
│  │ (连接枢纽) │  │ (执行验证) │  │ (持久记忆) │               │
│  └──────────┘  └──────────┘  └──────────┘               │
└─────────────────────────────────────────────────────────┘

3.1 自动化机制:持续运行的心跳

一个 Loop 之所以叫 Loop,不是因为它执行了一次任务,而是因为它会持续运行。自动化机制就是这个循环的"心跳"。

自动化机制的几种形态

定时触发(Cron-based)

  • 每天定时运行代码审查、日报生成、数据同步
  • 适用于周期性任务,节奏固定

事件驱动(Event-driven)

  • 收到新 PR 时自动触发代码审查
  • 监控告警触发时自动进行故障排查
  • 适用于响应式任务,节奏由外部事件决定

条件触发(Condition-based)

  • 当任务队列积压超过阈值时启动处理
  • 当测试覆盖率下降到阈值以下时触发优化
  • 适用于需要动态判断的场景

设计自动化机制的关键考量

  1. 防重复:同一事件不应触发多个相同循环实例
  2. 幂等性:同一个循环执行多次,结果应一致
  3. 超时控制:设置最大执行时间,防止循环无限运行
  4. 优雅降级:当触发条件不满足时,不应崩溃,而是跳过或延迟

3.2 Worktree:并行协作的隔离机制

Worktree 是解决多智能体并行工作冲突的核心机制。当多个 AI Agent 同时处理同一个项目时,最常见的问题就是文件覆盖、代码冲突。

Worktree 的工作原理

基于同一个 Git 仓库,创建多个独立的工作目录和分支。每个 Agent 在自己的 Worktree 中工作,编辑操作完全隔离、互不干扰。

yaml 复制代码
主仓库 (main)
├── Worktree 1 (Agent A: 实现功能 X)
│   ├── branch: feature/x
│   └── 独立工作目录
├── Worktree 2 (Agent B: 修复 Bug Y)
│   ├── branch: fix/y
│   └── 独立工作目录
└── Worktree 3 (Agent C: 重构模块 Z)
    ├── branch: refactor/z
    └── 独立工作目录

核心价值

  1. 完全隔离:不同 Agent 的修改互不影响,无需担心文件锁或覆盖
  2. 并行高效:多个 Agent 可以同时工作,不互相阻塞
  3. 原生合并:基于 Git 的分支合并机制,冲突解决有成熟的工具支持
  4. 可追溯:每个 Agent 的修改历史独立记录,便于审计

与传统并行开发的对比

方式 隔离性 冲突处理 适用场景
同一分支 文件锁/手动合并 简单任务
不同分支 Git 合并 传统开发
Worktree 最好 独立工作目录+Git合并 多 Agent 协作

3.3 Skill:知识沉淀的底座

在传统 AI 使用中,每次开启新会话都是空白状态,需要重复告知项目规范、构建流程、特殊禁忌。一旦信息缺失,AI 就会凭主观猜测补全逻辑,产生大量偏差。

Skill 机制的核心思想:将项目核心知识、编码规范、流程步骤、历史踩坑经验,统一写入结构化的 Skill 定义文件中,一次性配置完成后,AI 循环任务可以自动读取复用。

一个典型的 Skill 定义

markdown 复制代码
# Skill: code-review

## 触发条件
- 当有新的 Pull Request 提交时
- 当用户请求代码审查时

## 审查规范
- 遵循项目 ESLint 配置
- 函数不超过 50 行
- 必须包含单元测试
- 禁止使用 any 类型

## 审查流程
1. 检查代码风格是否符合规范
2. 检查是否有明显的逻辑错误
3. 检查是否有安全漏洞
4. 检查测试覆盖率
5. 输出审查报告

## 输出格式
- 使用 Markdown 格式
- 每个问题标注严重程度(Critical/Major/Minor)
- 给出具体的修改建议和代码示例

Skill 的价值

  • 知识固化:将隐性知识(老员工的编码习惯)转化为显性规则(Skill 文件)
  • 一致性保障:所有 Agent 遵循同一套规范,输出风格一致
  • 降低沟通成本:不再需要每次重复告知项目规范
  • 持续积累:新的经验和规范可以持续追加到 Skill 中

3.4 插件和连接器:连接的枢纽

如果一个 Loop 只能读写本地文件,它的能力其实很有限。真正有价值的 Loop,必须能连接实际使用的工具。

MCP(Model Context Protocol) 是当前最主流的标准化连接方案。它定义了:

  • 工具发现:Agent 如何知道有哪些工具可用
  • 工具调用:Agent 如何调用工具
  • 结果返回:工具如何返回结果给 Agent
  • 资源访问:Agent 如何访问外部资源(文件、数据库、API)

MCP 的典型应用场景

arduino 复制代码
Agent Loop
    │
    ├── MCP Server: GitHub
    │   ├── 读取 PR 信息
    │   ├── 提交代码审查意见
    │   └── 创建 Issue
    │
    ├── MCP Server: Database
    │   ├── 查询数据
    │   └── 执行迁移
    │
    ├── MCP Server: Slack
    │   ├── 发送通知
    │   └── 读取消息
    │
    └── MCP Server: File System
        ├── 读写文件
        └── 搜索代码

连接器设计的核心原则

  1. 标准化接口:所有工具遵循统一的接口规范,降低集成成本
  2. 安全隔离:每个连接器有独立的权限范围
  3. 错误处理:连接器应优雅处理网络故障、超时、权限不足等异常
  4. 可观测:所有工具调用都有日志记录,便于追踪和调试

3.5 Sub-Agent:执行与验证分离

AI 普遍存在"自审盲区"------执行任务的 AI 很难发现自己写出的漏洞和逻辑问题。正如一个人很难完全客观地评审自己的作品。

Sub-Agent 的核心思想:通过拆分智能体角色,实现执行与验证的分离,避免单一智能体既当"运动员"又当"裁判"带来的自我评估偏差。

典型的 Sub-Agent 分工模式

vbnet 复制代码
主 Agent(协调者)
    │
    ├── Sub-Agent: 编码工程师
    │   ├── 职责:根据需求编写代码
    │   └── 输出:代码文件 + 实现说明
    │
    ├── Sub-Agent: 代码审查员
    │   ├── 职责:审查编码工程师的代码
    │   └── 输出:审查报告 + 修改建议
    │
    ├── Sub-Agent: 测试工程师
    │   ├── 职责:编写和执行测试用例
    │   └── 输出:测试报告 + 覆盖率数据
    │
    └── Sub-Agent: 安全审计员
        ├── 职责:检查安全漏洞
        └── 输出:安全审计报告

交叉验证的价值

  • 编码工程师可能忽略的边界条件,测试工程师会覆盖
  • 测试工程师可能遗漏的安全性题,安全审计员会检查
  • 代码审查员可能没注意的性能问题,测试工程师的基准测试会发现

设计 Sub-Agent 的关键考量

  1. 角色边界清晰:每个 Sub-Agent 的职责范围明确,不重叠
  2. 信息隔离:Sub-Agent 之间不应共享"偏见"------审查员不应该知道编码工程师的"自评"
  3. 结果汇总:主 Agent 需要汇总各 Sub-Agent 的反馈,做出最终决策
  4. 冲突处理:当不同 Sub-Agent 的意见冲突时,需要明确的决策机制

3.6 Memory:外部持久化记忆

AI 模型每次重启、每次循环结束后都会清空上下文记忆(无状态)。Memory 组件是应对这一"失忆"问题的核心机制。

Memory 的核心功能

  • 记录历史状态:已完成的工作、当前进度、待办事项
  • 记录错误经验:哪些方法尝试过但失败了,失败原因是什么
  • 记录决策逻辑:为什么选择方案 A 而不是方案 B
  • 支撑断点恢复:任务中断后,可以从 Memory 中恢复状态继续执行

Memory 的存储结构示例

json 复制代码
{
  "task_id": "build-api-service-2024",
  "status": "in_progress",
  "created_at": "2024-06-15T10:00:00Z",
  "updated_at": "2024-06-15T14:30:00Z",
  "goal": "构建用户管理 REST API",
  "completed_steps": [
    {
      "step": "设计数据模型",
      "status": "completed",
      "result": "已创建 User 模型的 Prisma Schema",
      "artifacts": ["prisma/schema.prisma"]
    },
    {
      "step": "实现 CRUD 接口",
      "status": "completed",
      "result": "已实现 GET/POST/PUT/DELETE 接口",
      "artifacts": ["src/routes/users.ts"]
    }
  ],
  "current_step": {
    "step": "编写单元测试",
    "status": "in_progress",
    "progress": "已完成 60%"
  },
  "pending_steps": [
    "添加认证中间件",
    "编写 API 文档"
  ],
  "error_log": [
    {
      "step": "实现 CRUD 接口",
      "error": "TypeError: Cannot read property 'id' of undefined",
      "resolution": "添加了空值检查",
      "timestamp": "2024-06-15T12:00:00Z"
    }
  ]
}

Memory 的设计原则

  1. 结构化存储:使用 JSON、YAML 等结构化格式,便于 Agent 解析和更新
  2. 增量更新:只更新变化的部分,而不是整体重写
  3. 版本控制:关键状态变更应保留历史版本,支持回滚
  4. 磁盘持久化:写入磁盘而非仅依赖内存,确保重启后不丢失

四、Loop Engineering 的工程实践

4.1 循环设计模式

在实际工程中,Loop 通常采用以下几种设计模式:

顺序循环(Sequential Loop)

复制代码
步骤1 → 步骤2 → 步骤3 → ... → 步骤N → 完成

适用于步骤明确、依赖关系清晰的线性任务。

自适应循环(Adaptive Loop)

erlang 复制代码
步骤1 → 检查 → 通过?→ 步骤2 → 检查 → 失败?→ 重试步骤2 → 检查 → 通过?→ 步骤3 → ...

适用于需要根据中间结果动态调整的任务。

分层循环(Hierarchical Loop)

复制代码
主循环(协调层)
├── 子循环1(执行层)
├── 子循环2(验证层)
└── 子循环3(修正层)

适用于复杂任务,需要多层级的协调与控制。

并行循环(Parallel Loop)

css 复制代码
主循环
├── 并行任务A → 结果A
├── 并行任务B → 结果B
└── 并行任务C → 结果C
         ↓
      汇总结果

适用于可以并行的子任务,提高执行效率。

4.2 循环的终止条件设计

Loop 必须设计明确的终止条件,否则可能陷入无限循环。常见的终止条件包括:

终止条件 说明 示例
成功终止 任务目标达成 测试全部通过
最大步数终止 防止无限循环 最多执行 50 步
超时终止 防止长时间运行 超过 30 分钟
成本终止 防止资源耗尽 Token 消耗超过预算
质量阈值终止 即使未完美,达到可接受水平 覆盖率 > 80%
人工干预终止 无法自动决策时 需要人工确认的决策点

推荐实践:组合使用多种终止条件,形成"安全网":

markdown 复制代码
终止条件优先级:
1. 成功终止(最高优先级,正常退出)
2. 人工干预终止(遇到无法自动决策的情况)
3. 成本终止(防止资源浪费)
4. 超时终止(防止无限等待)
5. 最大步数终止(最后的兜底保护)

4.3 循环的监控与调试

Loop 的运行比单次 AI 调用更难调试------因为问题可能出在循环的任何一步。

关键监控指标

  • 循环次数:每个任务平均循环多少轮?是否存在异常多的重试?
  • 步数分布:大部分时间花在哪一步?是否存在瓶颈?
  • 终止原因分布:正常终止 vs 异常终止的比例?
  • 成功率:按任务类型统计成功率
  • 成本分布:Token 消耗按任务类型和步骤分布

调试技巧

  1. 记录每一步的完整输入输出:包括中间推理过程,便于回溯
  2. 可视化执行链路:使用工具(如 LangSmith)可视化循环的执行过程
  3. 设置断点:在关键步骤设置人工确认点,暂停循环等待审查
  4. 回放机制:基于记录的状态文件,回放循环的执行过程

五、Loop Engineering 与其他三大工程的关系

四大工程不是孤立的,而是一个有机整体:

vbnet 复制代码
                    ┌──────────────────┐
                    │  Loop Engineering │
                    │  "做完一步后怎么办" │
                    └────────┬─────────┘
                             │ 编排与调度
            ┌────────────────┼────────────────┐
            │                │                │
   ┌────────▼────────┐ ┌────▼──────┐ ┌───────▼────────┐
   │Prompt Engineering│ │  Context  │ │   Harness      │
   │   "怎么问"        │ │Engineering│ │  Engineering   │
   │                  │ │ "看什么"   │ │  "怎么安全执行" │
   └─────────────────┘ └──────────┘ └────────────────┘

在 Loop 的每一次迭代中:

  • Prompt 定义了当前步骤的输入格式和任务指令
  • Context 提供了当前步骤所需的信息(知识库、历史状态、工具结果)
  • Harness 保障了当前步骤的安全执行(权限校验、沙箱隔离、错误处理)
  • Loop 决定了下一步做什么(继续、修正、重试、终止)

六、总结

Loop Engineering 代表了 AI 工程从"工具"到"系统"的范式跃迁。它的核心价值在于:

  1. 从被动到主动:AI 不再等待人类指令,而是自主推进任务
  2. 从单次到持续:从一次性的问答,到持续运行的自动化循环
  3. 从人到循环:人设计循环,循环驱动智能体,人从执行者变为设计者

六大组件构成了 Loop 的完整架构:

组件 角色 一句话概括
自动化机制 心跳 让循环持续运行
Worktree 隔离 让多 Agent 并行不冲突
Skill 知识 让经验可沉淀复用
MCP 连接器 枢纽 让循环连接真实世界
Sub-Agent 分工 让执行与验证分离
Memory 记忆 让循环拥有持久状态

Loop Engineering 的终极目标是构建一个自驱动、自修正、自完善的 AI 工作系统------它不仅能执行任务,还能在循环中持续学习、持续优化、持续进化。


上一篇:Harness Engineering ------ 系统的安全护栏


(全文完)

本文是"AI 工程四大支柱"系列的第四篇。本系列基于"模智空间"的 PPT 内容扩展创作,补充了技术细节、行业实践与工程思考,旨在为 AI 工程化实践提供系统性的参考框架。

相关推荐
米小虾1 小时前
Harness Engineering —— 系统的安全护栏
人工智能·agent
火山引擎开发者社区1 小时前
积分当钱花,火山引擎开发者激励计划首月消费双倍回馈
人工智能
aqi002 小时前
15天学会AI应用开发(十)把文本嵌入模型换成国产模型
人工智能·python·ai编程
MobotStone2 小时前
为什么在AI时代,“好奇心”成了最值钱的能力?
人工智能
武子康3 小时前
调查研究-200 llama.cpp b9754:一次很小但很关键的 Agent 工具调用修复
人工智能·agent·llama
Ralph_Salar3 小时前
从0到1搭建AI智能支付风控助手Stage1-RAG知识库升级 — 元数据让检索更精准
人工智能
武子康4 小时前
调查研究-199 MCP Zero-Touch OAuth:为什么它是 MCP 进入企业生产的关键门槛?
人工智能·agent·mcp