从Harness Engineering到Loop Engineering的演进实践方法论

举报
小马过河R 发表于 2026/09/01 13:45:52 2026/09/01
【摘要】 一句话:**Harness 让 AI 不越界,Loop 让 AI 在界内自己跑完全程。** 这俩是递进关系,不是二选一。

上一篇聊完 Harness Engineering(驾驭工程)之后,很多同学问小马:把 AI 套上"马具"是不是就到头了?其实还差一步——马套好了,但每走一步还得人吆喝一声"驾"。这一篇小马就来聊聊怎么让这匹马自己沿着轨道跑完全程,也就是在 Harness 之上再进一化的 Loop Engineering(循环工程)

引言

在上一篇《Harness Engineering 落地实践方法论》里,小马把 mydemoPro 这个真实业务项目的驾驭工程环境从零搭了一遍——规则、技能包、工作流、Hooks、子 Agent、可观测性,六大要素齐活,AI 在轨道上不乱跑了。

但用了一段时间,小马发现一个新的"体感痛点":流程虽然规范,可每一步都得我推一把。 AI 做完需求评审停下来问我,做完设计又停下来问我,写完代码还问我要不要测……这一连串"确认"里,有相当一部分我其实根本不需要看,纯粹是流程要求我点个头。单人开发、需求又明确的时候,这些等待就是纯摩擦。

于是小马就想:能不能让 AI 自己把整条流水线跑完,只在真正危险的地方(改业务代码、部署、提交)才回来找我?跑错了它自己重来,而不是停在那干等我?

这就是这一篇的主角——Loop Engineering。它不是要推翻 Harness,而是长在 Harness 之上的一层"自动挡"。小马已经在 mydemoPro 上把它跑通了,下面就来聊聊这个"自动挡"是什么、为什么要装、以及具体怎么装。

第一章:什么是 Loop Engineering

1.1 先讲人话

想象你带一个很能干的实习生做事,有两种带法:

带法 A(手动挡):他每做完一步都停下来问你——“这步对吗?”“能下一步吗?”"要提交吗?“你得全程盯着,一句句"可以、继续、好的”。他很安全,但你很累。

带法 B(自动挡):你把任务交给他,他自己一路做下去,只在真正重要的关口(要动线上数据、要花钱、要对外发布)才回来问你一句。做错了他自己重来,而不是卡在那等你。

Loop Engineering,就是把 AI 助手从"带法 A"升级到"带法 B"的一套工程方法。

1.2 定义

用一句正式点的话:

Loop = 让 AI 在一条有护栏的轨道上,自主地循环推进「做事 → 检查 → 修正 → 继续」,只在高风险关口请求人工,失败时能自我修复,而不是每一步都等人。

记住三个关键词,后面反复出现:

  • 自主推进:AI 自己往前走,不用人一步步推。
  • 护栏 / 关口:危险的地方有硬拦截,AI 越不过去。
  • 自我修正:做错了自动重来,不是停下来等。

1.3 Loop 与 Harness 的关系

这一点最关键,也最容易被误解——Loop 不是 Harness 的替代品,而是它的"上一层"

Harness(上一篇) Loop(这一篇)
核心动作 驾驭——给 AI 套上线束,不乱跑 自驱——在线束内让它自己往前跑
解决什么 AI 会不会乱写 AI 每一步都要人推
关系 地基 长在地基上的编排层

一句话:Harness 让 AI 不越界,Loop 让 AI 在界内自己跑完全程。 这俩是递进关系,不是二选一。


第二章:为什么要用 Loop

2.1 它解决的痛点:线性流程的"仪式性等待"

如果你已经建好了 Harness(像上一篇那样),一次典型的任务会长这样:

我:开始吧            → 等我确认
AI:需求理解好了      → 等我确认
AI:方案设计好了      → 等我确认
AI:代码写完了        → 等我确认
AI:要测试吗          → 等我确认
AI:要发布吗          → 等我确认

每个环节 AI 都停下来等一句"好的/继续"。问题是——这里面很多确认是仪式性的,我并不需要真的看,只是流程卡在那要我点头。

Loop 要干掉的就是这些摩擦:

没有 Loop(线性流程) 有了 Loop(自主循环)
谁推进 每一步靠人推 AI 自己推
停顿点 几乎每个环节 只在少数高风险关口
失败了 停下来等人 自动重来,试几次不行才叫人
过程记录 藏在聊天记录里 落盘存档,可查、可恢复

一句话价值:Loop 把"人陪着 AI 走"变成"AI 自己走、人只在关键处出现",在不牺牲安全的前提下,把仪式性等待砍掉。

2.2 一个必须强调的前提

⚠️ Loop 不是让 AI 脱缰。 恰恰相反——只有当你的约束足够可信(危险操作真的拦得住),你才敢放手让它自己跑。

所以这里有个反常识但很重要的结论:Loop 之所以能做得简单,正是因为 Harness 已经足够扎实。 后面第三章会展开。


第三章:做 Loop 的前提——先有"地基",再修"传送带"

这是最容易被忽略、也最重要的一点:

Loop 不是从零开始的,它是长在一套已有约束体系(也就是上一篇的 Harness)之上的。

打个比方:

  • Harness(地基) = 你把每个"零件"(需求评审、写代码、测试、部署……)都造好了、验证过了,还装上了安全阀(危险操作拦得住)。
  • Loop(传送带) = 你加一条传送带,把这些零件按顺序串起来自动流转。

造传送带很简单,难的是先把零件造扎实。 所以做 Loop 之前,先确认你的 Harness 已经具备这三样地基:

地基要素 通俗解释 没有会怎样
① 阶段被切成独立单元 流程能拆成清晰几步,每步有明确"做什么"和"算不算完成" 流程是一坨浆糊,Loop 无从串起
② 约束真正生效(可信) 危险操作有硬拦截,不是靠 AI 自觉 你根本不敢让 AI 自主跑
③ 每步成败可判定 每个阶段有客观通过标准(如测试 0 失败) Loop 无法自动判断前进还是重来

如果这三样还没齐,先别急着做 Loop,回去把 Harness 补扎实——这部分正是上一篇讲的内容。


第四章:Loop 的四个核心要素

有了地基,一个 Loop 由四个部件组成。记住这句话,就记住了整个 Loop:

一个技能包驱动 AI 循环,一个状态机脚本控制流转,一条规则声明红线,而每个阶段的活儿都复用已有能力(引用,不重写)。

拆开看。

4.1 要素一:驱动器(技能包 Skill)——告诉 AI 怎么循环

这是给 AI 读的一份"说明书",核心是一张 「阶段 → 用哪个已有能力」的委派表

阶段 委派给(复用 Harness 已有的)
需求评审 已有的评审能力
方案设计 已有的设计能力
写代码 已有的编码能力
测试 已有的测试能力
部署 已有的部署能力
归档 已有的归档能力

关键点:Loop 不重新实现任何一个阶段,它只负责"到第几步就去调第几个已有能力"。这张表就是 Loop 和 Harness 之间的"缝合线",也是整个 Loop 工程最大的连接点——不是在规则里加逻辑,而是在这张委派表里做引用。

4.2 要素二:状态机(一个脚本)——控制"下一步走哪"

这是一个确定性的小程序(小马在 mydemoPro 里用几百行 Python 就写完了),它不干活,只做两件事:

  • 记账:现在走到第几步、每步结果是啥、重试了几次——全部存到文件里(断电重启也不丢,可恢复)。
  • 裁判:根据"当前在哪步 + 这步结果",确定性地算出下一步该干嘛:
    • 成功 → 前进到下一步
    • 失败 → 回退到能修复的那一步,重来(有次数上限)
    • 遇到关口 → 拦住,等人放行
    • 试太多次 / 循环太久 → 暂停,叫人

严格说,这个脚本就是一个确定性有限状态机(DFSM):给定"当前状态 + 输入",下一状态唯一确定,没有随机性。这也是它能被信任去"裁判" AI 的前提。

这里有两个细节值得单独说说,因为它们是 Loop"能自愈、能恢复"的关键:

① 失败不是终点,而是一条"回边"。 Loop 最有价值的能力就是"失败自己修"。最典型的场景是测试失败——脚本不会停下来等人,而是自动把状态回退到"写代码"那一步,把失败信息回灌给 AI 让它修,修完再测,直到通过或用完重试次数:

写代码(通过)测试(失败,2)
             → 脚本自动回退到"写代码"(第 1/2 次重试)
             → 写代码(修复)测试(通过) → 继续前进

这就把过去"测试挂了 → 人工介入 → 手动重跑"的三步,压缩成了循环内部的一次自动重试。

② 状态落盘,断了能接上。 循环状态不藏在聊天记录里,而是写到文件(一份当前快照 + 一份追加式事件日志)。这样即便进程中断、会话断开,也能凭事件日志"重放"出当前进度接着跑。这一点和 Harness 的"可观测性"一脉相承——过程可查、可审计,不是黑盒。

为什么用脚本而不是让 AI 自己判断下一步?因为脚本是确定的、可测试的、不会"想偏"。AI 负责干活和报告结果,脚本负责裁判和记账,各司其职。用比喻说:AI 是司机,脚本是轨道 + 记录仪 + 闸机。

4.3 要素三:护栏规则(一条 Rule)——划死红线

明文声明哪些是绝对不能越过的红线,交给脚本强制执行。小马在 mydemoPro 里落了四道护栏:

护栏 参考默认值 触发后果
审批关口 写业务代码前 / 部署前 / 提交发布前 未放行则硬拦(退出码拦截),AI 越不过
单循环最大步数 20 超上限 → 暂停,叫人
单阶段最大重试次数 2 重试耗尽 → 暂停,叫人
受保护区 + 主分支保护 依赖库/密钥/版本控制目录、主干分支 禁止修改、禁止自动推送(与已有的 Hook 双保险)

任一护栏触发,循环立即暂停,并输出"为什么停 + 人工该怎么做",绝不闷头往下跑。

其中要特别强调:

  • "发布 / 提交"这类不可逆操作永远不能自动放行,必须人拍板——这是上一篇 Harness 里"Git 提交必须确认"规则的直接延续。
  • 循环上限(步数 + 重试)是防"跑飞"的保命绳:没有它,AI 可能陷入"改了测、测了改"的死循环,或无限往下推。

4.4 要素四:复用已有能力——不重复造轮子

前面反复强调了:每个阶段的实际能力,全部引用 Harness 里已有的。好处是——Harness 的能力升级了,Loop 自动享受,不用改 Loop 一行代码。


第五章:通用实践方法论——六步落地一个 Loop

下面是通用步骤,不限技术栈,每步都给出"产出物",照着做即可。这也是小马在 mydemoPro 上实际走过的路。

5.1 方法论框架

┌───────────────────────────────────────────────────┐
│                Loop Engineering 六步                │
├───────────────────────────────────────────────────┤
│  第 0 步:确认地基(阶段化 + 可信约束 + 可判定验收)  │
│  第 1 步:定义状态机契约(先写文档,不写代码)        │
│  第 2 步:实现状态机脚本(并自测一轮)               │
│  第 3 步:写驱动技能包(给 AI 的说明书 + 委派表)     │
│  第 4 步:写护栏规则(把红线写成明文并登记)          │
│  第 5 步:跑一个真实小任务(先玩具需求验证机制)      │
│  第 6 步:观测与迭代(记录耗时/重试,优化护栏)       │
└───────────────────────────────────────────────────┘

5.2 第 0 步:确认地基

问自己三个问题:流程能拆成清晰阶段吗?危险操作拦得住吗?每步有客观验收标准吗?——三个都"是"才继续。否则回去补 Harness。

5.3 第 1 步:定义状态机契约

先别写代码,先把这些写清楚:

  • 有哪些阶段(状态),顺序是什么。
  • 每步结果类型:成功 / 失败 / 阻塞 / 跳过。
  • 失败回退到哪一步(比如"测试失败退回写代码")。
  • 哪些关口需要审批
  • 护栏参数:最多几步、每步最多重试几次、哪些路径受保护。

产出物:一份"状态机契约"文档,作为唯一权威源。

5.4 第 2 步:实现状态机脚本

按契约写一个小程序,提供几个命令:

loop init   --change <任务名>              # 开一个新循环
loop status                                # 看当前状态
loop advance --phase <阶段> --result <结果>  # 报告某步结果,脚本算下一步
loop gate    --name <关口> --decision <放行/拒绝>  # 记录审批决定
loop reset                                 # 结束

要点:状态落盘(存 JSON + 追加事件日志,支持中断恢复);关口用返回码硬拦跨平台注意编码(比如 Windows 控制台的字符编码坑,小马就踩过——状态图标 / 在 GBK 控制台直接报错,得强制 UTF-8)。

产出物:一个可独立运行、可测试的状态机脚本。写完先自测一轮(模拟"卡点拦截 + 失败重试 + 跑到结束"),确认逻辑对。

5.5 第 3 步:写驱动技能包

写清楚:每个阶段委派给哪个已有能力、遇到关口怎么问人、拿到脚本输出后怎么行动。

核心纪律:脚本是状态的唯一权威源,AI 必须听脚本的,不许自己算跳转。

5.6 第 4 步:写护栏规则

把红线写成规则文件,并登记进你的规则清单(比如上一篇的 manifest.json)。这一步让"约束"变成明文,团队可见、可审计。

5.7 第 5 步:跑一个真实小任务

挑一个极小的真实需求(比如"加一个返回固定字符串的接口")走完整个循环,验证:

  • 关口是否真的拦住了?(没放行就想写代码,脚本应该报错拦截)
  • 失败是否真的自动回退重试了?
  • 状态是否真的存下来了?

小马的建议:先用玩具需求验证机制,再上真需求。 用最小的变更把整条链路(评审→设计→写码→测试→部署→归档)跑通,确认卡点、回退、存档都如预期,再交给它做有价值的活。

5.8 第 6 步:观测与迭代

把循环的耗时、重试热点、暂停原因记录下来,逐步优化护栏参数和回退策略。这和上一篇 Harness 的"可观测性 + 闭环反馈"是一脉相承的。


第六章:常见误区(避坑)

误区 正解
“Loop 就是让 AI 全自动、不用管了” 错。Loop 是"有护栏的自主",高风险关口仍必须人工放行
“先做 Loop,约束以后再补” 危险。没有可信约束,自主循环 = 放任事故。先有地基
“把状态机逻辑写进 AI 的提示词里” 不稳。状态转移要用确定性脚本,别靠 AI 发挥
“Loop 要重写一套评审/测试/部署” 浪费。复用已有能力,Loop 只做编排
“失败了就让 AI 一直重试” 会死循环。必须设重试上限 + 循环上限,超了叫人
“提交/发布也能自动放行,省事” 高危。不可逆操作永不自动放行

第七章:Loop 在 mydemoPro 上的落地小结

小马在上一篇的 mydemoPro 项目上,按上面的六步实际搭了一套 Loop,交付物很轻量:

组件 体量 作用
状态机脚本 几百行 Python,纯标准库 控制流转 + 记账 + 裁判
驱动技能包 一个 SKILL.md 委派表 + 步骤说明
护栏规则 一个规则文件 声明卡点/护栏

然后用一个"加一个返回固定字符串的接口"的玩具需求,端到端跑通了首个闭环——评审对齐、卡点在写代码前拦住等我放行、测试失败自动回退重试、跳过可选阶段、最后归档,全程按状态机走,一步没跑偏。

为什么这么轻量就搞定了? 因为上一篇把 Harness 的"零件"都造扎实了,Loop 这条"传送带"只是把它们串起来——Loop 的简单,是 Harness 前期投入的一次低成本、高回报的兑现。

7.1 一段自测跑批实录(脱敏)

光说不练假把式。状态机脚本写完,小马先用一轮"含卡点拦截 + 失败重试 + 跳过可选阶段"的批命令自测了一遍,把机制逐条验证。大致长这样(命令已脱敏简化):

# 1. 初始化一个循环
loop init --change selftest --goal "自测"

# 2. 评审、设计通过,正常前进
loop advance --phase review  --result pass
loop advance --phase propose --result pass

# 3. 没放行"写代码"关口就想写代码 → 被脚本硬拦(退出码 2)✔
loop advance --phase apply --result pass
   → BLOCKED: 进入 apply 需要先放行 apply_write 关口

# 4. 放行关口 → 写代码通过 → 测试失败 → 自动回退到写代码(第 1/2 次重试)✔
loop gate    --name apply_write --decision approve
loop advance --phase apply     --result pass
loop advance --phase unit_test --result fail --note "2 处失败"
   → 测试失败,自动回退到 apply 修复(retry 1/2)

# 5. 修复后通过 → 放行部署 → 跳过可选阶段 → 放行提交 → 归档 → 完成
loop advance --phase apply     --result pass
loop advance --phase unit_test --result pass
loop gate    --name deploy     --decision approve
loop advance --phase verify    --result skip
loop gate    --name commit_push --decision approve
loop advance --phase archive   --result pass
   → LOOP DONE:整条闭环走通

四个关键行为一次验证到位:卡点强制拦截、失败自动回退重试、可选阶段跳过、跑到 DONE先用这种"手工喂结果"的方式验证状态机本身,再交给 AI 真正驱动——这样出了问题好定位是脚本的锅还是 AI 的锅。

7.2 几个刻意的设计取舍

小马落地时踩过、也想清楚了几个点,分享给你少走弯路:

  • 脚本是权威源,AI 不许自己算跳转:所有前进/回退/暂停都由脚本说了算,AI 只按脚本输出行动。这是避免"AI 自作主张跳过失败阶段"的关键。
  • 提交/发布关口永不自动放行:不可逆动作必须人拍板,哪怕测试全绿。
  • 部署关口可"条件预放行":当测试全部通过时,可以由规则自动放行部署关口,少一次仪式性确认;但部署这个动作本身仍在关口体系内可控。
  • 跨平台编码坑:状态图标(/)在 Windows 的 GBK 控制台会直接报错,脚本启动时得强制把输出设成 UTF-8。这类跨平台小坑,和当年 Hook 从 Bash 改 Python 是同一类教训。

7.3 老实交代:已知边界

Loop 不是银弹,小马目前这版还有几处没做完,一并说清楚:

  • 审批还是同步的:关口放行目前是"当面点头",多人协作场景需要改成异步审批(比如消息待办),否则没人响应就卡住。
  • 自愈还比较浅:失败目前只做"回退重试",还没做到"把失败根因自动固化成一条新规则"——那是闭环反馈的下一步。
  • 观测面板还没接 Loop 视图:循环耗时、重试热点这些数据已经落盘了,但还没在仪表盘上画出来。

把边界摊开讲,是因为 Loop 本来就是"一边实践一边进化"的东西——先跑通最小闭环,再逐步补齐,这本身就符合上一篇讲的"闭环反馈"精神。

7.4 后续路线

规划中的演进:

Phase 0~1(已完成):状态机 + 编排器 + 技能包 + 护栏  ← 本次
        ↓
Phase 2:自动反馈回路 —— 失败根因固化为规则/记忆
        ↓
Phase 3:企微异步审批 —— 卡点放行改为异步待办,无人值守
        ↓
Phase 4:仪表盘 Loop 视图 —— 循环次数/收敛率/重试热点可视化

总结

有同学可能又要问了:讲了这么多,Loop 到底难不难?小马的答案是——Loop 本身不难,难的是它下面的 Harness。 只要你上一篇的驾驭工程搭扎实了(阶段清晰、约束可信、验收可判定),加一层 Loop 往往就是"临门一脚"。

再浓缩成三句话给你带走:

  • 什么是 Loop:让 AI 在有护栏的轨道上自主循环推进,只在高风险关口找人,失败能自愈。
  • 为什么用 Loop:砍掉线性流程里大量仪式性等待,让 AI 自己跑完全程——前提是约束已经可信。
  • 怎么做 Loop:先确认地基,再搭四件套(技能包驱动 + 状态机脚本 + 护栏规则 + 复用已有能力),六步落地。

最后送一句小马自己很喜欢的心法:

Harness 让 AI 不越界,Loop 让 AI 在界内自己跑完全程;脚本给它轨道,Skill 给它路线,规则给它红线。

跟上一篇一样,Loop 目前也没有什么官方标准框架,都是一边实践一边进化的。理解了概念,完全可以借助 AI 一步步把自己的 Loop 环境搭起来——挑个最小的任务,照着六步跑一遍,你就迈出第一步了。

不懂的、想交流的,还是老规矩,可以联系小马哈。这算是上一篇《Harness Engineering 落地实践方法论》的续写第二篇,建议两篇结合着看。

【版权声明】本文为华为云社区用户原创内容,未经允许不得转载,如需转载请自行联系原作者进行授权。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。