万字长文聊聊Loop Engineering

作者:袖梨 2026-07-20

一、什么是 Loop Engineering

1.1 引爆点:两句话,百万次转发

2026 年 6 月初,AI 编程社区被两句话点燃:

这两句话在 X(Twitter)上获得了超过 500 万次浏览。随后,Google 工程师Addy Osmani发表了一篇博客,将这个概念正式命名为Loop Engineering(循环工程),并给出了清晰的定义框架。开发者Cobus Greyling则推出了开源参考实现loop-engineering(MIT 协议,7K+ Star),将理念变成了可直接落地的工具集。

那么,Loop Engineering 到底是什么?

1.2 核心定义

Loop Engineering是一种系统设计方法论:你不再亲自给 AI Agent 写提示词,而是设计一套自动化循环系统,让系统自己去发现工作、分配任务、验证结果、持久化状态,并在必要时交还给人。

用 Addy Osmani 的话说:

杠杆点已经从"打磨单条 prompt"移到了"设计编排 Agent 的控制系统"。

1.3 AI 工程的四次范式跃迁

过去两年,AI 开发的重心经历了四次清晰的跃迁:

阶段核心问题人的角色典型产物
Prompt Engineering怎么问 AI?提示词工匠精心打磨的 prompt 模板
Context Engineering给 AI 什么信息?上下文组织者AGENTS.md、CLAUDE.md、规则文件
Harness Engineering如何组织 AI 的能力?环境搭建者工具链、MCP 连接器、权限配置
Loop Engineering如何让 AI 持续创造结果?系统架构师自动化循环、状态文件、验证链

每一次跃迁,人的角色都在向上移动:从"操作工"到"监工"再到"架构师"。Loop Engineering 是这条演进路线的当前终点——你不再是那个守在聊天框前不断输入指令的人,你是那个设计自动化循环结构的人。

img_6a5d6e2673c9430.webp

1.4 Agent Loop vs Loop Engineering

很多人把Agent LoopLoop Engineering混为一谈——以为在终端里敲/loop 1d就算"做 loop 工程"了。其实不然:

维度Agent LoopLoop Engineering
本质运行机制 / 产品功能系统设计 / 工程方法论
你在做什么启动一个会重复的 Agent 任务设计发现→执行→验证→交接的完整系统
粒度一次递归目标 + 调度模式、技能、状态 schema、安全策略、成本模型
成功标准"它又在跑了""它跑得对、跑得省、出事能停、人能看懂它干了什么"
典型产物/loop 1d ... 一条命令STATE.md + Skills + Worktree 策略 + Verifier + Checklist

打个比方:Agent Loopwhile (!done) { agent.run(); }——循环语句本身。Loop Engineering像写整个main():输入从哪来、状态存哪、谁写谁验、超时怎么办、日志打哪、什么时候break叫人。

1.5 三层概念关系

参考库的 concepts 文档把几层概念捋得很清楚:

 复制代码Harness = 单次 Agent 运行的环境(工具、权限、规则)
Loop    = Harness + 调度 + 状态 + 验证链
Loop Engineering = 设计并运营上述 Loop 系统的工程实践
概念关注点类比
Agent Harness Engineering一次会话里 Agent 能用什么、知道什么单个工位的工具箱
Agent Loop让 Agent 按节奏反复跑传送带的运转
Loop Engineering整条产线如何发现任务、分工、质检、交接工厂设计与 SOP

img_6a5d6e2673c9a31.webp

二、Loop Engineering 的六大构件

一个能真正"无人值守"跑起来的 Loop,不是一条长 prompt,而是六个部分精密协作的系统。

img_6a5d6e2673c9d32.webp

2.1 Automations / Scheduling(自动化调度)—— 心跳

没有调度,你只有一个一次性的 Agent 运行。调度是 Loop 的心跳。

常见实现方式: /loop(Grok、Claude Code)—— 定时重复执行/schedule  —— 在特定时间点触发

  • GitHub Actions cron —— 团队级定时任务/goal  —— 运行直到可验证条件为真
  • 自定义 harness 调度器

关键属性: 间隔时间、是否立即触发、单次还是重复、是否持久化(重启后仍存活)。

2.2 Worktrees(工作树)—— 安全并行

当两个 Agent 同时编辑同一个文件时,你会得到合并地狱。Git worktree(或等效的隔离检出)给每个 Agent 自己的工作目录——共享历史但不共享工作树。

在 Grok 中:传递isolation: "worktree"给子 Agent。在 Claude Code 中:使用--worktree或专用会话。

清理很重要——Loop 应该在任务完成或移交时删除 worktree。loop-worktreeCLI 使这变得机械化:每次尝试一个 worktree,在 manifest 中跟踪,在拒绝或升级时清理。

2.3 Skills(技能)—— 意图的持久记忆

一个 Skill(通常是SKILL.md+ 可选的脚本/参考文件)编码了:

  • 项目约定
  • "我们不这样做,因为 X 事故"
  • 构建/测试/lint 命令
  • 审查标准
  • 领域知识

没有 Skills,Loop 每次运行都从零开始重新推导一切——这就是Intent Debt(意图债) 。Skills 是偿还意图债的方式:约定写一次,每次运行都读。

2.4 Plugins & Connectors(MCP)—— 连接真实世界

一个只能读文件系统的 Loop 是受限的。连接器让 Loop 能够:

  • 读写 Linear / Jira 工单
  • 发送 Slack / Discord 消息
  • 查询数据库或内部 API
  • 创建 GitHub 分支和 PR
  • 触发部署或 runbook

MCP(Model Context Protocol)已成为通用基板,为一个工具编写的连接器通常可以在另一个工具中工作。

2.5 Sub-agents(子 Agent)—— Maker / Checker 分离

这是可靠 Loop 最重要的结构模式。

写代码的 Agent 是评判自己工作的糟糕法官。第二个 Agent(有时使用更强的模型,总是使用不同的指令)执行验证。

常见分离模式:

  • Explorer → Implementer → Verifier
  • Implementer → Security reviewer
  • Implementer → Test writer + runner

在无人值守的 Loop 中,Verifier 是让你(人类)能够放心走开的关键。

2.6 Memory / State(记忆/状态)—— 跨会话的脊柱

模型在独立的轮次或会话之间没有长期记忆。Loop 必须读写持久化的东西:

  • 仓库中的 STATE.md 或 LOOP-STATE.json
  • Linear 看板或 GitHub Project 的专用区域
  • 小型数据库行

好的状态回答三个问题:

  1. 我们当前在做什么?
  2. 上次我们尝试了什么,结果如何?
  3. 什么在等待人类?

状态文件通常是 Loop 产生的最重要的产物。

2.7 构件组装顺序

一个最小可行 Loop 通常从以下开始:

 复制代码调度 + 一个 Skill(分诊)+ 状态文件

然后逐步添加:

  • 当你开始做修改时 → 添加 Worktree 隔离
  • 当 Loop 自主行动时 → 添加子 Agent 验证
  • 当你想让它驱动工单和 PR 时 → 添加连接器

最好的 Loop 是每个新构件只在前一个版本证明了其价值(和失败模式)后才添加的。

三、LangChain 视角:四层 Loop 模型

如果说 Addy Osmani 的六大构件回答了"Loop 由什么组成",那么 LangChain 团队在《The Art of Loop Engineering》中提出的四层 Loop 模型则回答了"Loop 如何层层叠加、持续进化"。Swyx 将这种层层叠加的艺术称为 Loopcraft——"the art of stacking loops"。

这四层 Loop 不是并列关系,而是自底向上、逐层增强的堆叠结构。每一层都建立在下一层之上,外层 Loop 可以"伸手进去"修改内层 Loop 的配置。

img_6a5d6e2673c9f33.webp

3.1 Loop 1:Agent 循环 —— 最基础的"模型调用工具"

这是所有 Agent 的起点:给 LLM 上下文,让它调用工具,循环直到任务完成。

 复制代码from langchain.agents import create_agent# 最基础的 Agent Loop:模型 + 工具 = 能行动的 Agent
agent = create_agent(
    model="claude-sonnet-4-20250514",
    tools=[read_file, write_docs, open_pr],
    system_prompt="你是一个文档助手,负责改进项目文档。"
)# 一次调用,Agent 内部自动循环调用工具直到完成
result = agent.invoke({
    "messages": [{"role": "user", "content": "更新 README 中的安装说明"}]
})

这就是 LangChain create_agent 给的东西。选一个模型,接入工具,你就有了一个能工作的 Agent Loop。以 LangChain 内部的文档 Agent 为例:它接收文档改进请求 → 模型规划并起草修改 → 用工具 clone 仓库、读写文件、打开 PR。

但问题也很明显:  Agent 的产出不一定正确或一致。它可能在第一次尝试时就出错,而你没有机制去发现。

3.2 Loop 2:验证循环 —— "写完不算完,验过才算"

当一致性很重要时,在 Agent Loop 外面包一层验证循环:检查输出,不合格就带着反馈重试。

 复制代码from langchain.agents import create_agent
from deepagents.middleware import RubricMiddleware# RubricMiddleware 实现验证循环:
# Agent 产出 → Grader 按评分标准检查 → 不合格就带反馈重试
agent = create_agent(
    model="claude-sonnet-4-20250514",
    tools=[read_file, write_docs, open_pr],
    middleware=[
        RubricMiddleware(
            rubric="""
            1. 所有链接必须可解析
            2. 所有 CI 检查必须通过
            3. diff 范围不能超出请求的修改
            """,
            max_retries=3# 最多重试 3 次
        )
    ]
)

验证循环的核心是 Grader(评分器) ——它按评分标准检查 Agent 的输出。Grader 可以是确定性的(如运行测试、检查链接),也可以是 Agentic 的(LLM-as-a-Judge,用另一个模型来评判)。

对于文档 Agent:Grader 在每次尝试后运行测试,检查所有链接是否可解析、CI 是否通过、diff 是否在请求范围内。这些错误类型不需要人工审查就能自动捕获。

代价:  验证循环增加了延迟和每次运行的成本。但当质量比速度更重要时——大多数生产场景都是如此——这个代价是值得的。

3.3 Loop 3:事件驱动循环 —— "Agent 不再是你手动调用的东西"

前两层 Loop 自动化了"做"和"验",但 Agent 仍然需要你手动触发。事件驱动循环把 Agent 接入你的生态系统——一个新文档到达、一个定时器触发、一个 webhook 到来——Agent 自动运行。

 复制代码from langsmith import deployment# LangSmith Deployment 支持 cron 和 webhook 触发
# 将 Agent 部署为持续运行的后台服务
deployment.serve(
    agent=agent,
    triggers=[
        # Cron 触发:每天早上 9 点运行
        deployment.CronTrigger(schedule="0 9 * * *"),
        # Webhook 触发:Slack 消息到达时运行
        deployment.WebhookTrigger(
            source="slack",
            channel="#docs-plz"
        )
    ]
)

LangChain 的文档 Agent 就是通过 Fleet(无代码 Agent 构建器)的 channels 和 schedules 来实现事件驱动:每当 #docs-plz Slack 频道有消息,就触发文档 Agent 运行。

关键转变:  Agent 不再是你手动调用的东西——它是持续运行在更大系统中的组件。这也是 OpenClaw 中 "heartbeats" 概念的精髓:把你的 Agent 变成一个始终在线、主动出击的助手。

3.4 Loop 4:爬山循环 —— "自动化改进本身"

前三层 Loop 自动化了工作。第四层——也是最重要的一层——自动化了改进

 复制代码from langsmith import Engine# LangSmith Engine 分析生产 Trace,自动改进 Harness 配置
engine = Engine(
    agent=agent,
    analysis_prompt="""
    分析最近的 Agent 运行 Trace,找出:
    1. 哪些 prompt 导致了低质量输出?
    2. 哪些工具调用经常失败?
    3. Grader 的评分标准是否需要调整?
    """,
    auto_improve=True  # 自动应用改进
)# Engine 持续监控,发现问题自动提交改进 PR
engine.monitor()

每一次 Agent 运行都会产生 Trace:模型做了什么、调用了哪些工具、Grader 给了什么反馈。这些 Trace 包含关于"什么有效、什么无效"的高价值信号。爬山循环运行一个分析 Agent 来处理这些 Trace,用发现来重写 Harness 配置——包括 prompt 调整、工具配置优化、Grader 标准改进。

关键动作:  返回箭头不只是回到顶层——它伸手进去直接更新 Agent Loop。外层 Loop 的每一次循环都让内层 Loop 更有效。

对于更进一步的团队,爬山循环还可以:

  • 对使用开源模型的团队,将 Trace 结果作为 RL 微调的训练信号
  • 改进辅助上下文(记忆、检索到的 Skills)
  • 自动 A/B 测试不同的 prompt 策略

3.5 四层 Loop 总览

Loop做什么影响LangChain 原语
1. Agent 循环模型反复调用工具直到任务完成自动化工作create_agent
2. 验证循环Agent 产出按评分标准检查,不合格带反馈重试确保质量和正确性RubricMiddleware
3. 事件驱动循环事件触发 Agent 运行,更新真实系统规模化自动工作LangSmith Deployment (cron/webhook) 或 Fleet channels
4. 爬山循环生产 Trace 喂给分析 Agent,改进 Harness 配置Harness 持续改进LangSmith Engine

LangChain 团队的核心观点:  Loop 1 和 Loop 2 我们已经思考了很久。但重点应该转向 Loop 3 和 Loop 4——把 Agent 嵌入你的生态系统,让它们根据你的标准持续改进。这才是价值复利产生的地方。

Satya Nadella 对此有一个精辟的总结:"那些早期构建学习循环的公司——人类判断力和 token 资本共同复利——将建立起难以复制的优势。"

3.6 四层模型与六大构件的关系

LangChain 的四层模型和 Addy Osmani 的六大构件是互补视角,而非竞争关系:

六大构件在四层模型中的位置
Scheduling(调度)Loop 3 的核心——cron/webhook 触发
Worktrees(工作树)Loop 1/2 的隔离基础——并行安全
Skills(技能)Loop 1 的上下文注入 + Loop 4 的优化目标
MCP Connectors(连接器)Loop 1 的工具层 + Loop 3 的事件源
Sub-agents(子 Agent)Loop 2 的 Maker/Checker 分离
State/Memory(状态)跨所有 Loop 的持久化脊柱

简单来说:六大构件是"零件清单",四层模型是"组装说明书"。

四、如何设计一个 Loop

4.1 Loop 的解剖结构

一个完整的 Loop 运行周期包含以下阶段:

img_6a5d6e2673ca234.webp

4.2 自主级别:L0 → L1 → L2 → L3

Loop Engineering 强调分阶段放权,绝不一步到位。完整的自主级别从 L0 草稿开始:

级别描述
L0 DraftLoop 设计文档 + 手动触发,验证流程正确性
L1 Report Only分诊 → 写入状态,不自动执行任何操作
L2 Assisted小型自动修复 + Verifier 验证
L3 Unattended无需人工监控,自主运行

L0 Draft 是大多数团队忽略的起点:  你先写一份 LOOP.md 设计文档,手动运行每个步骤,确认分诊逻辑、状态读写、升级触发都符合预期。L0 阶段不涉及任何自动化——你在验证"这个 Loop 的设计本身是否正确"。

关键原则:永远不要在新模式的生产仓库上跳过 L1。  从 L0 到 L3,每一级都必须在前一级稳定运行后才推进。

img_6a5d6e2673ca435.webp

4.3 Loop 设计的前提

在启用生产 Loop 之前,必须通过以下 10 个维度的检查:

1. 目的与范围

  • 单一明确目标——一句话:这个 Loop 完成什么?
  • 明确的非目标——这个 Loop ** 不会** 做什么?
  • 监控范围——哪些仓库、分支、PR 或工单?
  • 分阶段上线——先只报告,再小步行动?

2. 调度

  • 选择节奏——间隔匹配紧急程度
  • 是否立即触发——启动时运行,还是等待间隔?
  • 持久化——如果需要,是否在会话/工具重启后存活?
  • 自我清理——监控列表为空时 scheduler_delete

3. Skills

  • 分诊 Skill 存在,输出格式紧凑
  • 操作 Skill(minimal-fix 等)匹配项目约定
  • Skill 描述无聊且具体(良好的自动触发)

4. Maker / Checker 分离

  • Implementer 和 Verifier 是分离的(Agent、模型或指令)
  • Implementer 不能 标记自己的工作为"完成"
  • Verifier 在隔离环境(worktree)中运行测试后才批准

5. 状态 / 记忆

  • 状态文件或看板 schema 已文档化
  • Loop 每次运行开始时读取先前状态
  • Loop 写入结果、时间戳、最后操作
  • 每次运行清理已解决/已合并/已关闭的项目

6. 人工交接

  • 升级触发器明确(最大尝试次数、风险路径、模糊性)
  • 路径黑名单——auth、payments、secrets、infra
  • 通知规则——仅在需要人类行动时 ping

7. 连接器(MCP)

  • 连接器最小权限(读 vs 写)
  • Loop 可以打开/更新 PR 或工单(如果行动),而不仅仅是建议
  • Bot 身份在 PR 评论上清晰可见

8. 成本与限制

  • Token 预算已估算loop-budget.md 包含每日上限和终止开关loop-run-log.md 用于追加式运行历史
  • 每个项目每次运行的最大迭代次数
  • 每天最大自动 PR 数

9. 可观测性

  • 记录每次运行:开始时间、发现项目、采取行动、升级
  • 成功指标已选择
  • 团队可以在不阅读聊天日志的情况下检查状态文件

10. 安全

  • 没有明确允许列表的情况下不自动合并
  • 密钥/env 文件在黑名单中
  • Flake 处理——不要仅用重试来"修复"间歇性测试

4.4 Loop 设计的栏栅

如果 Loop 如果中断,在继续之前停止并修复,参考样例:

  • 同一个 PR 有超过 3 次自动修复尝试但没有进展
  • Verifier 和 Implementer 是同一个 Agent 会话
  • 没有状态文件——Loop 每次运行都失忆
  • 每次运行都通知,无论是否有发现
  • 自动合并启用但没有路径允许列表

4.5 Loop 设计的反模式

以下反模式是设计阶段就必须避免的错误——它们不是运行时故障,而是架构层面的根本缺陷。启用无人值守 Loop 之前,逐条自查:

#反模式为什么致命正确做法
1同一个 Agent 实现并验证自己写的代码自己检查,等于没检查。模型会无意识地偏向自己的实现Implementer 和 Verifier 必须是不同 Agent、不同模型或不同指令
2没有 Early Exit监控列表为空时仍然全量扫描,每天烧掉数百万 token 无用功空列表在 ~3-5k token 内退出,不要"以防万一"多跑一遍
3状态文件形同虚设写了状态但下次运行不读,或者状态 schema 不清晰,等于每次从零开始状态文件必须文档化 schema,每次运行开头强制读取上次状态
4无分支允许列表的自动合并Loop 可以直接合并到main,一旦出错直接污染主干自动合并必须配置分支和路径双重允许列表
5用重试"修复" Flake 测试间歇性失败测试被重试掩盖,真正的 bug 被埋藏Flake 测试应标记为@flake 并排除,或升级给人类处理
6每次运行都发通知团队很快学会忽略 Loop 消息,真正需要关注时也错过只在需要人类行动时 ping——"发现 3 个高优 Issue"比"运行完成"有价值
7无 Token 预算上限一个失控的 Loop 可以在 48 小时内烧掉 800 万 token设置每日 token 上限,80% 时切换为报告模式,100% 时终止
8Verifier 与 Implementer 共享会话上下文污染——Verifier 看到了 Implementer 的推理过程,丧失独立性Verifier 必须在全新会话/worktree 中运行,只看代码 diff
9无限修复循环同一个 Issue 反复修复失败,Loop 永不停止每项最多 3 次尝试,超过后自动升级给人类
10跳过 L1 直接上 L3从"只报告"直接跳到"自动合并",中间没有任何验证必须经历 L0→L1→L2→L3,每一级稳定 1-2 周才推进

最重要的反模式是 #1 和 #8——它们本质上说的是同一件事:独立性是验证的前提。一个看过实现过程的验证者,无论多强,都已经丧失了独立判断的能力。

4.6 Loop 设计的事故响应流程

当 Loop 在生产中出事(例如自动合并了错误代码、烧爆了预算、修改了不该碰的文件),按以下四步流程处理:

img_6a5d6e2673ca636.webp

第 1 步:立即停止

执行 loop-pause-all(全局暂停所有 Loop)或 scheduler_delete(删除特定 Loop 的调度任务)。这不是"建议暂停"——是立刻、马上、现在停止。

第 2 步:根因分析

不要急于修复。先问三个问题:

  1. 哪个安全机制本该阻止这件事但没生效?
  2. 这个 Loop 在哪个级别运行?是否跳级了?
  3. 状态文件和运行日志说了什么?

第 3 步:修复并降级

修好根因后,不要恢复原级别。将 Loop 降级至少一级:

  • L3 出事 → 降回 L2,人工闸门重新启用
  • L2 出事 → 降回 L1,只报告不行动
  • L1 出事 → 回到 L0,重新审视设计

第 4 步:记录教训

在 stories/ 目录下写一份诚实的事后复盘,格式参考 why-we-killed-ci-sweeper.md。这份文档的价值不在于"我们学到了什么"——而在于下一个团队不需要再踩同样的坑

五、Loop 模式设计

img_6a5d6e2673ca837.webp

5.1 Daily Triage(每日分诊)

目标:  每天早上(或活跃时段)获得优先排序的、可操作的待办事项图景——无需手动检查 CI、issues、PR 和聊天。

典型周期:  调度触发 → 分诊 Skill 摄入 CI 失败(24h)、开放 issues/工单、最近提交、先前 STATE.md → 高优先级项目追加到状态并建议下一步行动 → 清理已解决项目 → 记录运行后复盘。

最佳入门 Loop。  先跑 1-2 周只报告模式,测量分诊准确率后再启用 L2。

5.2 PR Babysitter(PR 保姆)

目标:  减少人类在 PR 审查、CI、rebase 和合并上花费的时间,同时保持人类在判断席位上。

典型周期:  发现团队开放的 PR → 对每个 PR 运行分诊 → CI 红了就生成修复 → 有审查评论就提出最小补丁 → 准备就绪就标记"ready to merge" → 模糊或高风险就升级给人。

5.3 CI Sweeper(CI 清扫者)

目标:  快速响应 main 或活跃分支上的 CI 失败——诊断、提出最小修复,无法自信解决时升级。

关键安全措施:  分类 flake vs 真实回归 vs 基础设施;flake 不自动修复;同一失败最多 3 次尝试后升级;loop-guard熔断器防止无限循环。

5.3.1 真实失败案例:Why We Killed Our CI Sweeper

loop-engineering 记录了一次真实事故——这正是 CI Sweeper 被标记为"L2 谨慎模式"的原因:

维度详情
触发条件loop 5m 在 main 分支红色期间运行,恰逢 flaky 迁移分支
损失48h 烧掉 ~800 万 token;11 个 PR 中 3 个是症状修复,1 个破坏生产配置(人工拦截)
根因 1没有 L1 阶段——直接跳到自动修复
根因 2Verifier 与 Implementer 在同一会话(一半的运行)
根因 3没有分支允许列表——扫到了已知 CI 红色的 feature 分支
根因 4没有每日预算——调度器从不暂停
事后处理删除所有调度任务 → 切换为 main 失败事件驱动 → 先只报告 1 周 → Verifier 独立子 Agent → 每日 200 万 token 上限 → 分支允许列表仅 main

教训提炼:  这个案例暴露了 Loop Engineering 中最危险的认知偏差——"自动化 = 安全" 。实际上,自动化程度越高,需要的安全机制越严格。CI Sweeper 的模式文档之所以存在,正是因为有人付出了真金白银的代价。

记住: L2 不是 L1 的升级版,而是 L1 加上安全网之后的谨慎延伸。

5.4 Dependency Sweeper(依赖清扫者)

目标:  自动化补丁和低风险 CVE 依赖更新,减少"依赖过期焦虑"。

典型周期:  调度触发(建议每周一次,非高峰时段)→ 扫描 package.json / requirements.txt / Cargo.toml → 过滤:仅补丁版本 + 低风险 CVE → 对每个候选依赖创建独立 Worktree → 运行 npm update / pip install --upgrade → 执行测试套件 → 测试通过则创建 PR,失败则记录原因并跳过。

关键安全措施:

  • 前 30 天仅补丁 + 低风险 CVE——主版本和黑名单包(如 authcrypto 相关)需要人工闸门
  • 每个依赖独立 PR——避免一个 PR 改 20 个包导致无法定位回归
  • 锁定文件变更必须可审查——如果 package-lock.json diff 超过 500 行,升级给人类
  • 不碰 peer dependency——这类变更几乎总是需要人工判断

为什么从补丁开始:  补丁版本更新是最"无聊"的工作——收益明确(修 bug、堵漏洞),风险极低(SemVer 保证向后兼容)。让 Loop 处理无聊的事,人类处理需要判断的事。

5.5 Changelog Drafter(变更日志起草者)

目标:  从合并的 PR 和提交自动生成发布说明草稿,消除"发布前赶写 changelog"的痛苦。

典型周期:  调度触发(建议每次发布前,或每周五下午)→ 拉取自上次发布以来的所有合并 PR → 按标签分类(bugfeaturebreakingdocsdeps)→ 提取 PR 标题和描述中的关键信息 → 按分类生成 Markdown 草稿 → 标注需要人工补充的部分(如"这个 breaking change 的迁移指南需要你写")。

关键设计决策:

  • 只起草,不发布——最终版本永远由人类编辑和签署
  • 标注置信度——对每个条目标注"自动提取"或"需要人工确认"
  • 关联 Issue——自动链接相关的 Issue 编号,方便读者追溯
  • 与 Post-Merge Cleanup 配合——Cleanup 清理代码,Drafter 记录变更,两者是天然搭档

低风险、高价值。  这是最适合作为第二个 Loop 的模式——在 Daily Triage 稳定后,Changelog Drafter 几乎零风险,但能显著减少发布摩擦。

5.6 Post-Merge Cleanup(合并后清理)

目标:  识别合并后可以清理的内容——死代码、过时注释、TODO 债务、未使用的导入。

典型周期:  调度触发(建议非高峰时段,如凌晨 2 点)→ 扫描最近合并的 PR 涉及的文件 → 检测模式:被注释掉的代码块、TODO / FIXME 标记、未使用的导入、重复代码片段 → 对每个发现生成清理建议 → 创建单个"清理 PR"(而非每个发现一个 PR)。

关键安全措施:

  • 非高峰时段运行——避免与活跃开发冲突
  • 最低紧急程度——清理 PR 永远不阻塞任何东西
  • 仅限最近合并的文件——不扫描整个代码库(范围过大容易引入回归)
  • 不碰测试文件——测试中的"死代码"可能是故意保留的边界用例
  • 单个清理 PR——方便一次性审查和合并,避免 PR 洪水

为什么需要这个模式:  代码库的熵增是必然的。每次合并都在增加复杂度——临时代码变成永久代码、注释过时、TODO 永远不做。Post-Merge Cleanup 是对抗熵增的自动化手段。

5.7 Issue Triage(Issue 分诊)

目标:  自动分类新 Issue——标记重复、建议优先级、路由到正确的团队。仅建议,不自动关闭。

典型周期:  Webhook 触发(新 Issue 创建时)→ 读取 Issue 标题和正文 → 与已有 Issue 做相似度匹配(检测重复)→ 按模板检查信息完整性(是否有复现步骤、环境信息、期望行为)→ 建议标签(bug / feature / question / duplicate)和优先级 → 如果信息不足,生成友好的追问评论 → 将分诊结果写入 STATE.md。

关键设计决策:

  • 只建议,不执行——标签和关闭操作由人类确认
  • 重复检测用相似度而非精确匹配——避免漏掉换了一种说法描述的同一个 bug
  • 信息不足时追问而非关闭——"请补充复现步骤"比"信息不足已关闭"友好得多
  • 路由建议基于历史数据——分析过去 3 个月每个标签的实际处理人,而非静态的 CODEOWNERS

与 Daily Triage 的关系:  Issue Triage 是事件驱动的"实时分诊",Daily Triage 是定时驱动的"全局分诊"。两者互补——Issue Triage 保证新 Issue 不被遗漏,Daily Triage 保证全局视角不被丢失。

5.8 模式选择与 LangChain 映射

上面七个模式覆盖了软件工程中最常见的自动化场景。选择哪个模式取决于你的痛点风险承受能力——而不是"哪个模式更酷"。

选择指南:

你的痛点推荐模式起始级别为什么从这个级别开始
"每天早上不知道项目什么状态"Daily TriageL1零风险,纯信息输出
"PR 审查太花时间"PR BabysitterL1 → L2先看 Agent 的建议质量,再开自动修复
"CI 经常红,没人及时看"CI SweeperL1 → L2必须从 L1 开始——参考 5.3.1 事故案例
"依赖更新总是忘记"Dependency SweeperL2 仅补丁补丁更新风险极低,适合直接 L2
"发布说明写起来很痛苦"Changelog DrafterL1零风险,纯文本生成
"代码库越来越乱"Post-Merge CleanupL1先看清理建议是否合理
"Issue 积压严重"Issue TriageL1只建议不执行,零风险

模式与 LangChain 四层模型的映射:

每个模式都可以用 LangChain 原语实现,映射关系如下:

模式核心 Loop 层LangChain 关键原语说明
Daily TriageLoop 1 + Loop 3create_agent + CronTriggerAgent 执行分诊,cron 定时触发
PR BabysitterLoop 1 + Loop 2create_agent + RubricMiddlewareAgent 修复 + Grader 验证
CI SweeperLoop 1 + Loop 2 + Loop 3create_agent + RubricMiddleware + WebhookTriggerCI 事件触发,修复后验证
Dependency SweeperLoop 1 + Loop 3create_agent + CronTrigger定时检查 + 自动补丁 PR
Changelog DrafterLoop 1 + Loop 3create_agent + CronTrigger定时生成发布说明草稿
Post-Merge CleanupLoop 1 + Loop 3create_agent + CronTrigger非高峰定时清理
Issue TriageLoop 1 + Loop 3create_agent + WebhookTriggerIssue 事件触发分诊

进阶实践:  当所有模式都稳定运行后,引入 Loop 4(LangSmith Engine)对所有模式的生产 Trace 进行统一分析。Engine 能发现跨模式的改进机会——例如 CI Sweeper 和 PR Babysitter 在重复修复同一类问题时,Engine 可以建议合并或调整分工。这就是"爬山循环"的真正价值:不是改进单个 Loop,而是优化整个 Loop 生态。

5.9 模式背后的设计原则

七个模式看似各不相同,但背后共享着五条设计原则。理解这些原则,你就能设计自己的模式,而不只是复制别人的。

原则一:从 L1 开始,永远从 L1 开始。  这不是保守,是工程纪律。L1 让你在零风险下验证 Agent 的判断质量。Daily Triage 跑两周只报告,你就能知道它的分诊准确率。CI Sweeper 的事故正是因为跳过了这一步。L1 不是"功能不完整",而是"安全网就位前的必要观察期"。

原则二:Maker/Checker 分离不是可选项。  七个模式中,凡是涉及代码修改的(PR Babysitter、CI Sweeper、Dependency Sweeper、Post-Merge Cleanup),都要求 Implementer 和 Verifier 是独立子 Agent。这不是过度设计——CI Sweeper 事故中,一半的运行 Verifier 和 Implementer 在同一会话,导致"自己验证自己"的盲区。AI 不能给自己的代码打分。

原则三:范围越小,信任越高。  Dependency Sweeper 只做补丁更新(范围极小)→ 可以直接 L2。CI Sweeper 要诊断任意 CI 失败(范围极大)→ 必须从 L1 开始。这不是双标,是风险与范围的匹配。设计模式时,先问"这个 Loop 的 blast radius 有多大",再决定自主级别。

原则四:事件驱动优于定时轮询——但有前提。  Issue Triage 用 Webhook 触发(事件驱动),比定时扫描更及时且更省 token。但 CI Sweeper 的事故正是因为定时轮询 (loop 5m) 在错误的时间反复触发。事件驱动的前提是:你明确知道"什么事件值得响应"。如果不确定,先用定时 + L1 观察。

原则五:每个模式都要回答"什么时候升级给人类"。  这不是"如果出问题了怎么办"的兜底方案,而是模式设计的核心约束。PR Babysitter 的升级条件是"情况模糊或高风险",CI Sweeper 是"3 次尝试失败",Dependency Sweeper 是"主版本或黑名单包"。没有明确定义升级条件的 Loop,不是一个完整的 Loop。

六、示例代码(LangChain)

下面用 LangChain 生态来实现 Loop Engineering 的核心模式。LangChain 提供了从基础 Agent Loop 到事件驱动、验证循环、爬山循环的完整原语,让我们可以直接在框架层面构建 Loop,而不需要从零写调度器和状态管理。

6.1 项目结构

 复制代码my-loop-project/
├── agent.py                # Agent 定义与配置
├── tools/
│   ├── github_tools.py     # GitHub PR/Issue 工具
│   └── ci_tools.py         # CI 状态查询工具
├── skills/
│   ├── triage.md           # 分诊 Skill(Markdown 格式)
│   └── minimal_fix.md      # 最小修复 Skill
├── middleware/
│   └── rubric.py           # 验证评分标准
├── deployment.py           # 事件驱动部署配置
└── engine_config.py        # 爬山循环(Engine)配置

6.2 Loop 1:Agent 循环 —— create_agent

最基础的 Agent Loop:模型 + 工具 + 系统提示词。

 复制代码# agent.py
from langchain.agents import create_agent
from langchain.chat_models import init_chat_model# 初始化模型
model = init_chat_model("claude-sonnet-4-20250514")# 定义工具
from tools.github_tools import (
    list_open_prs, get_pr_details, create_pr, add_pr_comment,
    get_ci_status, get_recent_commits
)# 创建 Agent —— 这就是 Loop 1
agent = create_agent(
    model=model,
    tools=[
        list_open_prs,      # 列出开放 PR
        get_pr_details,     # 获取 PR 详情
        get_ci_status,      # 查询 CI 状态
        get_recent_commits, # 获取最近提交
        create_pr,          # 创建 PR
        add_pr_comment,     # 添加 PR 评论
    ],
    system_prompt="""你是一个 PR 保姆 Agent。
每天早上检查所有开放 PR 的状态:
1. 如果 CI 失败,分析原因并提出修复建议
2. 如果有未回复的审查评论,生成最小补丁
3. 如果一切就绪,标记为 ready-to-merge
4. 如果情况模糊或高风险,升级给人类
"""
)# 单次调用
result = agent.invoke({
    "messages": [{"role": "user", "content": "检查所有开放 PR 的状态"}]
})

6.3 Loop 2:验证循环 —— RubricMiddleware

在 Agent Loop 外面包一层验证:产出 → 评分 → 不合格就带反馈重试。

 复制代码# middleware/rubric.py
from deepagents.middleware import RubricMiddleware# 定义评分标准
pr_review_rubric = RubricMiddleware(
    rubric="""
    对 Agent 的每次 PR 修复产出,按以下标准评分(每项 0-10 分):    1. 正确性(权重 40%):修复是否真正解决了 CI 失败或审查意见?
       - 10 分:修复精确针对问题,不引入新错误
       - 0 分:修复与问题无关,或引入了新问题    2. 最小性(权重 30%):diff 是否尽可能小?
       - 10 分:只改了必要的行,无无关变更
       - 0 分:重构了无关模块,或改了超过 10 个文件    3. 安全性(权重 30%):是否触及了黑名单路径?
       - 10 分:未触及 auth/、payments/、secrets/ 等敏感路径
       - 0 分:触及了黑名单路径 → 立即升级    总分低于 7 分 → 带反馈重试
    触及黑名单 → 不重试,直接升级给人类
    """,
    max_retries=3,  # 最多重试 3 次
    on_max_retries="escalate"# 超过重试次数后升级
)# 将验证中间件挂载到 Agent
agent_with_verification = create_agent(
    model=model,
    tools=[list_open_prs, get_pr_details, get_ci_status,
           create_pr, add_pr_comment, get_recent_commits],
    middleware=[pr_review_rubric],
    system_prompt="你是一个 PR 保姆 Agent..."
)

6.4 Loop 3:事件驱动循环 —— LangSmith Deployment

把 Agent 部署为持续运行的后台服务,通过 cron 或 webhook 触发。

 复制代码# deployment.py
from langsmith import deployment# 部署 Agent,配置触发方式
deployment.serve(
    agent=agent_with_verification,
    name="pr-babysitter",
    triggers=[
        # Cron 触发:每 15 分钟检查一次 PR 状态
        deployment.CronTrigger(
            schedule="*/15 * * * *",
            input_template="检查所有开放 PR 的状态"
        ),
        # Webhook 触发:当有新 PR 或 CI 状态变更时立即响应
        deployment.WebhookTrigger(
            source="github",
            events=["pull_request.opened", "check_run.completed"]
        ),
    ],
    # 运行时配置
    runtime={
        "max_concurrency": 3,       # 最多 3 个并发运行
        "timeout_seconds": 600,     # 单次运行超时 10 分钟
        "error_policy": "escalate", # 出错时升级给人类
    }
)

6.5 Loop 4:爬山循环 —— LangSmith Engine

分析生产 Trace,自动改进 Harness 配置。

 复制代码# engine_config.py
from langsmith import Engine# Engine 持续分析 Agent 运行 Trace,自动改进
engine = Engine(
    agent=agent_with_verification,
    analysis_prompt="""
    分析最近 100 次 Agent 运行的 Trace,找出改进点:    1. Prompt 问题:
       - 哪些系统提示词导致了低质量输出?
       - Agent 是否经常误解某些指令?    2. 工具问题:
       - 哪些工具调用经常失败或超时?
       - 工具描述是否准确?    3. Grader 问题:
       - 评分标准是否过于宽松/严格?
       - 是否有"通过验证但实际有问题"的案例?    4. 模式问题:
       - 哪些类型的 PR 修复成功率最低?
       - 是否有反复出现的失败模式?    对每个发现的问题,提出具体的改进建议。
    """,
    auto_improve=True,  # 自动应用非破坏性改进
    improvement_policy={
        "prompt_tweaks": "auto",       # prompt 微调自动应用
        "tool_config": "auto",         # 工具配置自动应用
        "rubric_changes": "review",    # 评分标准变更需人工审查
        "model_switch": "review",      # 模型切换需人工审查
    },
    schedule="0 2 * * 1",  # 每周一凌晨 2 点运行分析
)# 启动 Engine 监控
engine.monitor()

6.6 Human-in-the-Loop:人工介入点

LangChain 将 Human-in-the-Loop 作为一等公民,在每一层 Loop 都可以插入人工审查:

 复制代码from langchain.agents import create_agent
from deepagents.middleware import HumanInTheLoopMiddlewareagent_with_human = create_agent(
    model=model,
    tools=[create_pr, add_pr_comment, merge_pr],
    middleware=[
        # 在敏感操作前要求人工确认
        HumanInTheLoopMiddleware(
            require_approval_for=[
                "merge_pr",           # 合并 PR 必须人工确认
                "create_pr",         # 创建 PR 前人工确认(可选)
            ],
            auto_approve_for=[
                "add_pr_comment",    # 添加评论自动通过
            ],
            approval_timeout_hours=24,  # 24 小时未响应则自动拒绝
        ),
        pr_review_rubric,
    ],
    system_prompt="你是一个 PR 保姆 Agent..."
)

6.7 完整示例:Daily Triage Loop

将以上组件组装成一个完整的 Daily Triage Loop:

 复制代码# daily_triage.py —— 完整的 Daily Triage Loop
from langchain.agents import create_agent
from langchain.chat_models import init_chat_model
from deepagents.middleware import RubricMiddleware
from langsmith import deploymentmodel = init_chat_model("claude-sonnet-4-20250514")# 分诊 Agent:只读、只报告、不修改
triage_agent = create_agent(
    model=model,
    tools=[
        get_ci_status,
        list_open_prs,
        get_recent_commits,
        list_open_issues,
    ],
    system_prompt="""你是 Daily Triage Agent。
每天早上扫描项目状态:
1. 检查 CI 状态(过去 24 小时的失败)
2. 列出所有开放 PR 及其状态
3. 检查是否有过期依赖
4. 将发现写入 STATE.md规则:
- 只报告,不自动执行任何操作
- 高优先级项目标记为需要人工关注
- 已解决的项目从 STATE.md 中清理
""",
    middleware=[
        RubricMiddleware(
            rubric="""
            分诊结果必须:
            1. 每个发现都有明确的优先级(high/medium/low)
            2. 每个发现都有建议的下一步行动
            3. 不遗漏任何 CI 失败或超过 3 天未活动的 PR
            """,
            max_retries=2
        )
    ]
)# 部署为每天早上 9 点运行
deployment.serve(
    agent=triage_agent,
    name="daily-triage",
    triggers=[
        deployment.CronTrigger(
            schedule="0 9 * * 1-5",  # 工作日早上 9 点
            input_template="执行每日分诊,扫描 CI、PR、Issues 和依赖状态"
        )
    ]
)

七、Loop Engineering 进阶

7.1 成本管理

Token 成本是 Loop Engineering 最现实的约束。一个设计不当的 Loop 可能在一天内烧掉数百万 token。

成本估算公式

 复制代码每日 Token ≈ 每次运行 Token × 每天运行次数 × (1 + 子 Agent 倍数)
因素影响
节奏(Cadence)线性乘数(5 分钟 vs 1 天 = 288× 运行次数/天)
每次运行的子 Agent 数每个 = 完整模型 + 工具往返
上下文大小大型仓库 + 完整 CI 日志 = 昂贵的分诊
Verifier 模型Verifier 上使用更强的模型 = 值得(无人值守时)

成本控制最佳实践

分诊先行:  先用廉价的分诊扫描(~5k token),只有发现可操作项目时才启动子 AgentEarly Exit:  监控列表为空时在 ~3-5k token 内退出预算上限: loop-budget.md 设置每日 token 上限,超限自动暂停熔断器:  同一项目超过 3 次尝试自动升级,防止无限修复循环非高峰降速:  夜间和周末使用更慢的节奏

减速 / 暂停 / 杀死:三档应急标准

成本控制不只是"省钱"——当 Loop 行为异常时,你需要明确的应急标准。以下是生产级 Loop 的三档响应:

档位触发条件执行动作恢复方式
减速单次运行 token 超预算 50%,或连续 2 次运行无进展节奏降为原来的 1/2,切换到更便宜的模型做分诊下一轮运行恢复正常即自动升速
暂停日 token 达到预算 80%,或loop-pause-all 被激活当前轮完成后退出,调度器标记为 paused人工执行loop-resume 恢复
杀死日 token 达到预算 100%,或检测到危险路径修改立即终止当前运行,不等待完成人工根因分析后重新从 L0 开始

loop-pause-all 是全局紧急开关——执行后所有 Loop 在当前轮结束后立即退出。它不是"建议暂停",而是硬性终止。配合 loop-constraints.md 中的 If loop-pause-all is active, exit immediately 规则,确保即使调度器来不及取消,Loop 自身也会主动退出。

7.2 状态同步

当多个 Loop 或人类同时修改状态时,会出现漂移。Codex CLI 的 state 子命令可以检测 STATE.md 和 LOOP.md 之间的不一致:

 复制代码# 检查状态一致性
codex state diff --state STATE.md --loop LOOP.md# 自动修复可安全合并的冲突
codex state sync --state STATE.md --loop LOOP.md --auto-resolve

状态设计原则:

  • 一个模式一个状态文件,或清晰分隔的区域
  • 每次运行必须清理已关闭/已合并的项目
  • 人类覆盖必须记录在状态中
  • 状态文件是 Loop 最重要的产物——它应该是团队可以不读聊天日志就能理解的

7.3 上下文管理(loop-context)

Codex CLI 内置了状态化记忆管理和长运行熔断器,通过 context 子命令实现:

 复制代码# 注入历史状态到当前运行上下文
codex context inject --state STATE.md --since "24h"# 修剪过时条目,防止状态文件无限增长
codex context prune --state STATE.md --older-than "7d"# 检测同一失败的重复尝试,触发升级
codex context guard --state STATE.md --max-retries 3

它解决三个问题:

1. 上下文注入:  在每次运行开始时注入相关的历史状态2. 上下文修剪:  清理过时条目,防止状态文件无限增长3. 熔断器:  检测同一失败的重复尝试,触发升级

7.4 Worktree 管理(loop-worktree)

Codex CLI 通过 worktree 子命令管理每次修复尝试的隔离 git worktree:

 复制代码# 创建隔离 worktree
codex worktree create --run-id <id> --pattern <p># 锁定路径(防止多 Loop 冲突)
codex worktree lock --paths <globs> --owner <pattern># 解锁
codex worktree unlock --owner <pattern># 清理已完成或已放弃的 worktree
codex worktree cleanup --older-than "1h"

关键原则:  一次尝试一个 worktree,在 manifest 中跟踪,拒绝或升级时清理。

7.5 Goal Engineering(目标工程)

Goal Engineering 是 Loop Engineering 的伴侣概念。如果说 Loop 负责"发现和持续",Goal 负责"聚焦和完成":

Goal 是一个可验证的停止条件——Agent 持续迭代直到条件满足:

 复制代码/goal All tests on main pass and lint is clean
/goal Keep working on this PR until CI is green and no blocking comments remain

Goal 使用新鲜模型来判断停止条件是否满足——这是 Maker/Checker 思想的另一种应用。

7.6 Loop-Gate(循环闸门)

Codex CLI 的 gate 子命令从 gate.yaml 机械执行路径黑名单和自动合并允许列表:

 复制代码# 检查是否可以自动合并
codex gate check --action auto-merge --paths <f1,f2,...># 检查路径是否在黑名单中
codex gate check --action deny --paths <f1,f2,...>

退出码约定:

  • 0 — 通过,可以继续
  • 2 — 升级给人类

这与 codex context guard 使用相同的约定,因此控制脚本可以链式调用两者。

Loop Constraints(约束机制)

loop-constraints.md 是比 gate.yaml 更高层的安全机制——它是自然语言编写的硬性规则,Loop 在每次运行开始时逐字读取并遵守。与 gate.yaml 的机械路径检查互补,loop-constraints 覆盖的是"意图层面"的约束。

典型的 loop-constraints.md 包含五个维度的规则:

维度示例规则为什么需要
Push & Merge永远不自动合并到 main;先创建草稿 PR防止未经审查的代码进入主干
Paths永不编辑 .env、auth/、payments/、secrets/保护敏感配置和凭据
Code每次修复前先跑测试;永不禁用测试来让 CI 变绿;每次运行最多 3 次尝试防止虚假修复和无限循环
Communication做之前先告诉我;未经批准不关闭 Issue/PR保持人类对关键决策的控制权
Budgettoken 达到 80% 日上限时切换为只报告;loop-pause-all 激活时立即退出成本兜底

约束是绑定的(binding) ——Agent 必须遵守。它们不像系统提示词那样可以被"灵活理解",而是作为硬性检查写入 Loop 的运行流程。配合 Codex CLI 的 context guard 机械执行(记录每次尝试到 loop-ledger.json,重试前运行 codex context guard --check),约束从"建议"变成了"不可绕过的护栏"。

7.7 多 Loop 协调

在一个仓库中运行多个 Loop 是正常的。没有边界地运行它们就是 Loop 互相打架的方式。

核心原则

1. 一个分支一个所有者 —— 每小时最多一个 Loop 可以修改一个分支

2. 分离状态文件 —— STATE.md 用于分诊;模式特定文件用于操作 Loop

3. 分诊报告,操作 Loop 执行 —— L1 的 Daily Triage 从不与 CI Sweeper 修复竞争

4. 共享黑名单 —— 将相同的路径黑名单复制到每个 LOOP.md

5. 聚合 token 预算 —— 所有 Loop 共享一个预算上限

冲突优先级

img_6a5d6e2673cab38.webp

7.8 必须正视的三笔"债"

Intent Debt(意图债)

每个 session Agent 都是"冷启动"。团队约定、构建命令、"我们从不那样做"——若不写进 Skills /AGENTS.md,每轮 loop 都在重新猜。Skills 是偿还意图债的方式。

Comprehension Debt(理解债)

Loop 越快,仓库里"你写过但没读过"的代码越多。Loop 交付了,不代表你理解了。更快的 Loop 运送更多你没写过的代码——理解债增长,除非你阅读 Loop 做了什么。

Cognitive Surrender(认知投降)

最危险的用法:把 Loop 当成逃避思考的按钮。Addy Osmani 警告:

同一个 Loop 设计,可以加速真工程师,也可以加速"只会按 Go 的人"——区别在你有没有把判断力编码进 Skills 和 Verifier。

7.9 十大常见失败模式

1. 无限修复循环:  同一 PR 被自动修复 5+ 次,永不收敛。缓解:硬上限 3 次 → 升级给人

2. 状态腐烂:  STATE.md 引用已合并的 PR、已关闭的工单。缓解:每次运行清理

3. Verifier 表演:  Verifier "批准"但 CI 测试失败。缓解:Verifier 必须运行测试并报告输出

4. 通知疲劳:  每 5 分钟 ping 一次;团队静音机器人。缓解:仅在需要人类决策时通知

5. Token 燃烧:  账单飙升;Loop 在空或嘈杂的分诊上运行完整子 Agent 链。缓解:廉价分诊先行

6. 越界:  Loop 重构无关模块。缓解:路径黑名单 + "最小可能 diff"

7. 理解债螺旋:  速度上升,但没人能解释最近的变更。缓解:非平凡 PR 强制人类审查

8. 认知投降:  "Loop 会处理"——对正确性或设计没有意见。缓解:每个模式中明确的人工闸门

9. 并行冲突:  两个子 Agent 编辑相同文件。缓解:worktree 隔离 + 状态锁

10. 升级失败:  Loop 卡在重试中;人类从未被通知。缓解:连接器在升级时 ping

八、与未来展望

img_6a5d6e2673cad39.webp

趋势一:从"写代码"到"设计系统"

工程师的角色正在从"代码生产者"转变为"系统设计者"。未来的高级工程师不是写得最多的人,而是设计出最好的 Loop 系统的人。Boris Cherny 的实践已经证明了这一点——他同时管理 15+ 个并行 Agent 实例,专注于代码审查和方向把控。

趋势二:Loop 即代码(Loop as Code)

就像 Infrastructure as Code 改变了运维,Loop as Code 将改变软件开发。Loop 配置(LOOP.md、gate.yaml、loop-constraints.md)将成为项目的标准组成部分,就像 CI 配置一样。

趋势三:多 Agent 编排标准化

MCP(Model Context Protocol)正在成为 Agent 间通信的通用基板。未来,不同厂商的 Agent 将能够通过标准化协议协作——一个 Claude Code Agent 做分诊,一个 Codex Agent 做修复,一个 Gemini Agent 做验证。

趋势四:Goal Engineering 与 Loop Engineering 融合

Loop 负责"发现和持续",Goal 负责"聚焦和完成"。两者的融合将产生更强大的自主开发系统——Loop 发现需要做的事情,Goal 确保每件事做到位。

趋势五:安全与治理成为一等公民

随着 Loop 从 L1 走向 L3,安全机制将从"最佳实践"变为"硬性要求"。路径黑名单、自动合并允许列表、MCP 权限最小化、人工闸门——这些将成为任何生产 Loop 的标配。

趋势六:成本优化自动化

未来的 Loop 系统将内置智能成本管理——根据预算自动调整节奏、在低价值任务上使用更便宜的模型、在关键验证上使用更强的模型。Token 预算将从静态配置变为动态优化。

趋势七:从个人工具到团队基础设施

Loop Engineering 目前主要是个人实践(Boris 的 15 个并行 Agent),但正在快速演变为团队基础设施。共享的 Skills 库、团队级状态看板、跨项目的 Loop 模式——这些将成为工程组织的标准配置。

参考

  1. addyosmani.com/blog/loop-e…
  2. www.langchain.com/blog/the-ar…
  3. www.oreilly.com/radar/loop-…
  4. github.com/alchaincyf/…
  5. github.com/cobusgreyli…

相关文章

精彩推荐