Loop Engineering:从提示词工程师到 AI 系统架构师

Loop Engineering:从提示词工程师到 AI 系统架构师

AI 编程的第三次革命:不再"一问一答"地指挥 Agent,而是设计一个能自己发现问题、执行、检查、记录、继续的闭环系统。人的位置后退一层,从执行者变成调度者。

一、从写提示词到设计循环

两年来,与编码 Agent 协作的杠杆一直在提示词上:更好的提示词、更好的上下文、更好的一次性输出。

但用久了会发现一个瓶颈:真正花时间的不是第一句提示词,而是后面一长串重复动作。发现问题、拆任务、并行处理、检查、记录进度、决定继续还是交给人------这些动作每天都在重复发生。

\[Clippings/提示词工程已死,Loop Engineering来了!.md] 记录了 Claude Code 负责人 Boris Cherny 的说法:「我的工作就是写循环。」谷歌云 AI 总监 Addy Osmani 的结论更直接:想把这东西真用明白,比过去写提示词还难。

核心转变:以前是"怎么写一句好提示词",现在是"怎么把一串反复发生的动作,设计成一个能自己转起来的 loop"。提示词降级为零件,真正决定结果的是那个 loop。

三次革命的演进

\[Clippings/Loop Engineering 实践指南:在 Code Buddy 中构建自主循环系统.md] 将 AI 编程的历史分为三个阶段:
#mermaid-svg-EdBskZ6DrYplLsjO{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-EdBskZ6DrYplLsjO .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-EdBskZ6DrYplLsjO .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-EdBskZ6DrYplLsjO .error-icon{fill:#552222;}#mermaid-svg-EdBskZ6DrYplLsjO .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-EdBskZ6DrYplLsjO .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-EdBskZ6DrYplLsjO .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-EdBskZ6DrYplLsjO .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-EdBskZ6DrYplLsjO .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-EdBskZ6DrYplLsjO .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-EdBskZ6DrYplLsjO .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-EdBskZ6DrYplLsjO .marker{fill:#333333;stroke:#333333;}#mermaid-svg-EdBskZ6DrYplLsjO .marker.cross{stroke:#333333;}#mermaid-svg-EdBskZ6DrYplLsjO svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-EdBskZ6DrYplLsjO p{margin:0;}#mermaid-svg-EdBskZ6DrYplLsjO .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-EdBskZ6DrYplLsjO .cluster-label text{fill:#333;}#mermaid-svg-EdBskZ6DrYplLsjO .cluster-label span{color:#333;}#mermaid-svg-EdBskZ6DrYplLsjO .cluster-label span p{background-color:transparent;}#mermaid-svg-EdBskZ6DrYplLsjO .label text,#mermaid-svg-EdBskZ6DrYplLsjO span{fill:#333;color:#333;}#mermaid-svg-EdBskZ6DrYplLsjO .node rect,#mermaid-svg-EdBskZ6DrYplLsjO .node circle,#mermaid-svg-EdBskZ6DrYplLsjO .node ellipse,#mermaid-svg-EdBskZ6DrYplLsjO .node polygon,#mermaid-svg-EdBskZ6DrYplLsjO .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-EdBskZ6DrYplLsjO .rough-node .label text,#mermaid-svg-EdBskZ6DrYplLsjO .node .label text,#mermaid-svg-EdBskZ6DrYplLsjO .image-shape .label,#mermaid-svg-EdBskZ6DrYplLsjO .icon-shape .label{text-anchor:middle;}#mermaid-svg-EdBskZ6DrYplLsjO .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-EdBskZ6DrYplLsjO .rough-node .label,#mermaid-svg-EdBskZ6DrYplLsjO .node .label,#mermaid-svg-EdBskZ6DrYplLsjO .image-shape .label,#mermaid-svg-EdBskZ6DrYplLsjO .icon-shape .label{text-align:center;}#mermaid-svg-EdBskZ6DrYplLsjO .node.clickable{cursor:pointer;}#mermaid-svg-EdBskZ6DrYplLsjO .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-EdBskZ6DrYplLsjO .arrowheadPath{fill:#333333;}#mermaid-svg-EdBskZ6DrYplLsjO .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-EdBskZ6DrYplLsjO .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-EdBskZ6DrYplLsjO .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-EdBskZ6DrYplLsjO .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-EdBskZ6DrYplLsjO .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-EdBskZ6DrYplLsjO .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-EdBskZ6DrYplLsjO .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-EdBskZ6DrYplLsjO .cluster text{fill:#333;}#mermaid-svg-EdBskZ6DrYplLsjO .cluster span{color:#333;}#mermaid-svg-EdBskZ6DrYplLsjO div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-EdBskZ6DrYplLsjO .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-EdBskZ6DrYplLsjO rect.text{fill:none;stroke-width:0;}#mermaid-svg-EdBskZ6DrYplLsjO .icon-shape,#mermaid-svg-EdBskZ6DrYplLsjO .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-EdBskZ6DrYplLsjO .icon-shape p,#mermaid-svg-EdBskZ6DrYplLsjO .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-EdBskZ6DrYplLsjO .icon-shape .label rect,#mermaid-svg-EdBskZ6DrYplLsjO .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-EdBskZ6DrYplLsjO .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-EdBskZ6DrYplLsjO .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-EdBskZ6DrYplLsjO :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 第一次革命
第二次革命
角色: 提示词工程师
角色: AI 协作者
角色: AI 系统架构师
Prompt Engineering

📝 怎么问

单次交互优化
Context Engineering

  • ReAct

🔧 怎么做

单任务推理-行动循环
Loop Engineering

🏗️ 怎么管

跨任务编排验证状态管理

二、Loop Engineering 到底是什么

用一句话讲:不再亲自一轮一轮指挥 Agent,而是把"发现问题 → 执行 → 检查 → 记录 → 继续下一步"做成一个能自动运转的闭环系统。

一个真正能用的 loop 至少做到:能自己启动、知道去哪找信息、做完一轮知道怎么检查结果、失败了知道要不要重试、每轮知道把进展记到哪、知道什么时候该停下来交给人。

\[Clippings/提示词工程已死,Loop Engineering来了!.md] 中 Addy 把它拆成"五个积木 + 一个记忆机制",\[Clippings/重磅!Loop Engineering 实操手册公开.md] 中 Codez 也拆成五个构件,本质相同:

要素 作用 为什么重要
调度/心跳 定时、事件触发,或跑到目标完成才停 没有心跳就没有循环
工作树 git 为每个 Agent 创建独立工作目录 并行开发零冲突
技能/Skills 固化项目知识,避免每次冷启动 知识复用,降低 token 消耗
连接器/MCP 打通 issue 系统、CI、数据库等真实工具链 AI 必须能感知和操作真实世界
子智能体 执行的归执行,验收的归验收,对抗验证 避免同一模型自我检查的盲区
状态文件/记忆 跨会话进度记录,支持断点续跑 模型会忘,但仓库不会忘

六要素之间不是孤立的------它们组成一个完整的闭环:
#mermaid-svg-atIT88jMahllDyJe{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-atIT88jMahllDyJe .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-atIT88jMahllDyJe .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-atIT88jMahllDyJe .error-icon{fill:#552222;}#mermaid-svg-atIT88jMahllDyJe .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-atIT88jMahllDyJe .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-atIT88jMahllDyJe .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-atIT88jMahllDyJe .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-atIT88jMahllDyJe .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-atIT88jMahllDyJe .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-atIT88jMahllDyJe .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-atIT88jMahllDyJe .marker{fill:#333333;stroke:#333333;}#mermaid-svg-atIT88jMahllDyJe .marker.cross{stroke:#333333;}#mermaid-svg-atIT88jMahllDyJe svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-atIT88jMahllDyJe p{margin:0;}#mermaid-svg-atIT88jMahllDyJe .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-atIT88jMahllDyJe .cluster-label text{fill:#333;}#mermaid-svg-atIT88jMahllDyJe .cluster-label span{color:#333;}#mermaid-svg-atIT88jMahllDyJe .cluster-label span p{background-color:transparent;}#mermaid-svg-atIT88jMahllDyJe .label text,#mermaid-svg-atIT88jMahllDyJe span{fill:#333;color:#333;}#mermaid-svg-atIT88jMahllDyJe .node rect,#mermaid-svg-atIT88jMahllDyJe .node circle,#mermaid-svg-atIT88jMahllDyJe .node ellipse,#mermaid-svg-atIT88jMahllDyJe .node polygon,#mermaid-svg-atIT88jMahllDyJe .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-atIT88jMahllDyJe .rough-node .label text,#mermaid-svg-atIT88jMahllDyJe .node .label text,#mermaid-svg-atIT88jMahllDyJe .image-shape .label,#mermaid-svg-atIT88jMahllDyJe .icon-shape .label{text-anchor:middle;}#mermaid-svg-atIT88jMahllDyJe .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-atIT88jMahllDyJe .rough-node .label,#mermaid-svg-atIT88jMahllDyJe .node .label,#mermaid-svg-atIT88jMahllDyJe .image-shape .label,#mermaid-svg-atIT88jMahllDyJe .icon-shape .label{text-align:center;}#mermaid-svg-atIT88jMahllDyJe .node.clickable{cursor:pointer;}#mermaid-svg-atIT88jMahllDyJe .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-atIT88jMahllDyJe .arrowheadPath{fill:#333333;}#mermaid-svg-atIT88jMahllDyJe .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-atIT88jMahllDyJe .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-atIT88jMahllDyJe .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-atIT88jMahllDyJe .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-atIT88jMahllDyJe .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-atIT88jMahllDyJe .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-atIT88jMahllDyJe .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-atIT88jMahllDyJe .cluster text{fill:#333;}#mermaid-svg-atIT88jMahllDyJe .cluster span{color:#333;}#mermaid-svg-atIT88jMahllDyJe div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-atIT88jMahllDyJe .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-atIT88jMahllDyJe rect.text{fill:none;stroke-width:0;}#mermaid-svg-atIT88jMahllDyJe .icon-shape,#mermaid-svg-atIT88jMahllDyJe .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-atIT88jMahllDyJe .icon-shape p,#mermaid-svg-atIT88jMahllDyJe .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-atIT88jMahllDyJe .icon-shape .label rect,#mermaid-svg-atIT88jMahllDyJe .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-atIT88jMahllDyJe .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-atIT88jMahllDyJe .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-atIT88jMahllDyJe :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 1. 唤醒
2. 加载
3. 接入
4. 调度
5. 记录
6. 下一轮
⏰ 调度/心跳

定时触发 | 事件触发 | 条件驱动
🌲 工作树

git worktree

每 Agent 独立空间
📋 Skills

固化项目知识

避免冷启动
🔌 连接器 MCP

GitHub | Jira | CI

Slack | Sentry
🤖 子智能体

执行者 ≠ 评审者

对抗验证
📝 状态文件

跨会话记忆

断点续跑

双层循环模型

\[Clippings/Loop Engineering 实践指南:在 Code Buddy 中构建自主循环系统.md] 详细解释了 Loop Engineering 与 ReAct 的关系:
#mermaid-svg-E74VK9xVnFk9U9Hx{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-E74VK9xVnFk9U9Hx .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-E74VK9xVnFk9U9Hx .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-E74VK9xVnFk9U9Hx .error-icon{fill:#552222;}#mermaid-svg-E74VK9xVnFk9U9Hx .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-E74VK9xVnFk9U9Hx .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-E74VK9xVnFk9U9Hx .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-E74VK9xVnFk9U9Hx .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-E74VK9xVnFk9U9Hx .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-E74VK9xVnFk9U9Hx .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-E74VK9xVnFk9U9Hx .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-E74VK9xVnFk9U9Hx .marker{fill:#333333;stroke:#333333;}#mermaid-svg-E74VK9xVnFk9U9Hx .marker.cross{stroke:#333333;}#mermaid-svg-E74VK9xVnFk9U9Hx svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-E74VK9xVnFk9U9Hx p{margin:0;}#mermaid-svg-E74VK9xVnFk9U9Hx .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-E74VK9xVnFk9U9Hx .cluster-label text{fill:#333;}#mermaid-svg-E74VK9xVnFk9U9Hx .cluster-label span{color:#333;}#mermaid-svg-E74VK9xVnFk9U9Hx .cluster-label span p{background-color:transparent;}#mermaid-svg-E74VK9xVnFk9U9Hx .label text,#mermaid-svg-E74VK9xVnFk9U9Hx span{fill:#333;color:#333;}#mermaid-svg-E74VK9xVnFk9U9Hx .node rect,#mermaid-svg-E74VK9xVnFk9U9Hx .node circle,#mermaid-svg-E74VK9xVnFk9U9Hx .node ellipse,#mermaid-svg-E74VK9xVnFk9U9Hx .node polygon,#mermaid-svg-E74VK9xVnFk9U9Hx .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-E74VK9xVnFk9U9Hx .rough-node .label text,#mermaid-svg-E74VK9xVnFk9U9Hx .node .label text,#mermaid-svg-E74VK9xVnFk9U9Hx .image-shape .label,#mermaid-svg-E74VK9xVnFk9U9Hx .icon-shape .label{text-anchor:middle;}#mermaid-svg-E74VK9xVnFk9U9Hx .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-E74VK9xVnFk9U9Hx .rough-node .label,#mermaid-svg-E74VK9xVnFk9U9Hx .node .label,#mermaid-svg-E74VK9xVnFk9U9Hx .image-shape .label,#mermaid-svg-E74VK9xVnFk9U9Hx .icon-shape .label{text-align:center;}#mermaid-svg-E74VK9xVnFk9U9Hx .node.clickable{cursor:pointer;}#mermaid-svg-E74VK9xVnFk9U9Hx .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-E74VK9xVnFk9U9Hx .arrowheadPath{fill:#333333;}#mermaid-svg-E74VK9xVnFk9U9Hx .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-E74VK9xVnFk9U9Hx .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-E74VK9xVnFk9U9Hx .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-E74VK9xVnFk9U9Hx .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-E74VK9xVnFk9U9Hx .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-E74VK9xVnFk9U9Hx .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-E74VK9xVnFk9U9Hx .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-E74VK9xVnFk9U9Hx .cluster text{fill:#333;}#mermaid-svg-E74VK9xVnFk9U9Hx .cluster span{color:#333;}#mermaid-svg-E74VK9xVnFk9U9Hx div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-E74VK9xVnFk9U9Hx .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-E74VK9xVnFk9U9Hx rect.text{fill:none;stroke-width:0;}#mermaid-svg-E74VK9xVnFk9U9Hx .icon-shape,#mermaid-svg-E74VK9xVnFk9U9Hx .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-E74VK9xVnFk9U9Hx .icon-shape p,#mermaid-svg-E74VK9xVnFk9U9Hx .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-E74VK9xVnFk9U9Hx .icon-shape .label rect,#mermaid-svg-E74VK9xVnFk9U9Hx .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-E74VK9xVnFk9U9Hx .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-E74VK9xVnFk9U9Hx .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-E74VK9xVnFk9U9Hx :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 分配子任务
分配子任务
返回结果
返回结果
Inner Loop --- ReAct(Agent 2)
感知
推理
规划
行动
观察
Inner Loop --- ReAct(Agent 1)
感知
推理
规划
行动
观察
Outer Loop --- 编排层(Loop Engineering)
目标拆解
任务分配
结果汇总
再计划

  • Inner Loop = ReAct(单 Agent 的"思考→行动→观察")
  • Outer Loop = Loop Engineering(多 Agent 的编排、验证、状态管理)

关键差异:

维度 ReAct Loop Engineering
关注层次 单次任务执行 跨任务编排与调度
状态管理 依赖上下文窗口内记忆 状态外置到文件/数据库
停止条件 模型自己判断"做完了" 独立评估器验证可度量条件
验证机制 自我检查(同一模型) 对抗验证(不同模型/独立评估器)
并行能力 单 Agent 串行 多 Agent 并行 + 工作树隔离
运行周期 单次对话 可持续数小时甚至数天

类比:ReAct 是砌墙工人的工作方式,Loop Engineering 是项目经理的工作方式。

三、Loop Engineering 的核心架构

五阶段循环机制

\[Clippings/Loop Engineering 实践指南:在 Code Buddy 中构建自主循环系统.md] 定义了标准闭环:

阶段 说明 关键设计
Discover 读取 CI 失败、issue、代码审查等信号 输入源要结构化、可订阅
Plan 分解目标为具体步骤 温度适中,避免过早收敛
Execute 执行代码编辑与工具调用 工具调用要幂等、可回滚
Verify 通过测试、lint、类型检查等验证 标准必须客观、可机器判定
Iterate 失败则自动修复重试,成功则进入下一任务 状态持久化,支持断点续跑

#mermaid-svg-lqOWv0IoMBtHszBo{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-lqOWv0IoMBtHszBo .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-lqOWv0IoMBtHszBo .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-lqOWv0IoMBtHszBo .error-icon{fill:#552222;}#mermaid-svg-lqOWv0IoMBtHszBo .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-lqOWv0IoMBtHszBo .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-lqOWv0IoMBtHszBo .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-lqOWv0IoMBtHszBo .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-lqOWv0IoMBtHszBo .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-lqOWv0IoMBtHszBo .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-lqOWv0IoMBtHszBo .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-lqOWv0IoMBtHszBo .marker{fill:#333333;stroke:#333333;}#mermaid-svg-lqOWv0IoMBtHszBo .marker.cross{stroke:#333333;}#mermaid-svg-lqOWv0IoMBtHszBo svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-lqOWv0IoMBtHszBo p{margin:0;}#mermaid-svg-lqOWv0IoMBtHszBo .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-lqOWv0IoMBtHszBo .cluster-label text{fill:#333;}#mermaid-svg-lqOWv0IoMBtHszBo .cluster-label span{color:#333;}#mermaid-svg-lqOWv0IoMBtHszBo .cluster-label span p{background-color:transparent;}#mermaid-svg-lqOWv0IoMBtHszBo .label text,#mermaid-svg-lqOWv0IoMBtHszBo span{fill:#333;color:#333;}#mermaid-svg-lqOWv0IoMBtHszBo .node rect,#mermaid-svg-lqOWv0IoMBtHszBo .node circle,#mermaid-svg-lqOWv0IoMBtHszBo .node ellipse,#mermaid-svg-lqOWv0IoMBtHszBo .node polygon,#mermaid-svg-lqOWv0IoMBtHszBo .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-lqOWv0IoMBtHszBo .rough-node .label text,#mermaid-svg-lqOWv0IoMBtHszBo .node .label text,#mermaid-svg-lqOWv0IoMBtHszBo .image-shape .label,#mermaid-svg-lqOWv0IoMBtHszBo .icon-shape .label{text-anchor:middle;}#mermaid-svg-lqOWv0IoMBtHszBo .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-lqOWv0IoMBtHszBo .rough-node .label,#mermaid-svg-lqOWv0IoMBtHszBo .node .label,#mermaid-svg-lqOWv0IoMBtHszBo .image-shape .label,#mermaid-svg-lqOWv0IoMBtHszBo .icon-shape .label{text-align:center;}#mermaid-svg-lqOWv0IoMBtHszBo .node.clickable{cursor:pointer;}#mermaid-svg-lqOWv0IoMBtHszBo .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-lqOWv0IoMBtHszBo .arrowheadPath{fill:#333333;}#mermaid-svg-lqOWv0IoMBtHszBo .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-lqOWv0IoMBtHszBo .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-lqOWv0IoMBtHszBo .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-lqOWv0IoMBtHszBo .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-lqOWv0IoMBtHszBo .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-lqOWv0IoMBtHszBo .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-lqOWv0IoMBtHszBo .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-lqOWv0IoMBtHszBo .cluster text{fill:#333;}#mermaid-svg-lqOWv0IoMBtHszBo .cluster span{color:#333;}#mermaid-svg-lqOWv0IoMBtHszBo div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-lqOWv0IoMBtHszBo .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-lqOWv0IoMBtHszBo rect.text{fill:none;stroke-width:0;}#mermaid-svg-lqOWv0IoMBtHszBo .icon-shape,#mermaid-svg-lqOWv0IoMBtHszBo .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-lqOWv0IoMBtHszBo .icon-shape p,#mermaid-svg-lqOWv0IoMBtHszBo .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-lqOWv0IoMBtHszBo .icon-shape .label rect,#mermaid-svg-lqOWv0IoMBtHszBo .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-lqOWv0IoMBtHszBo .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-lqOWv0IoMBtHszBo .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-lqOWv0IoMBtHszBo :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} ❌ 未通过
✅ 通过
🔍 Discover

读取信号

CI失败/新issue/代码审查
📋 Plan

分解步骤

温度适中避免过早收敛
⚡ Execute

执行编辑

工具幂等可回滚
✅ Verify

客观验证

测试/lint/构建
🔄 Iterate

失败修复

断点续跑重试

状态外置哲学

核心设计原则:所有状态存储在外部系统,而非模型的上下文窗口。 每次循环迭代从全新上下文开始,基于持久化内容工作。这解决了模型遗忘、信息漂移与上下文压缩三个根本问题。

\[Clippings/重磅!Loop Engineering 实操手册公开.md] 中的状态文件示例:

复制代码
# Loop state · ci-triage
## 上次运行 2026-06-09 03:30 UTC
7 个失败已分类,3 个草拟修复,4 个上报
## 进行中
- claude/fix-auth-token-refresh --- 本地测试通过,等 CI
## 今日完成
- claude/bump-axios-1.7.4 → 已合并
## 上报给人
- src/billing/refund.ts --- 根因不明

四、动手前的四个问题

\[Clippings/重磅!Loop Engineering 实操手册公开.md] 强调:loop 不是免费的。它烧 token、要花时间搭建、出问题还得 debug。先问自己:

  1. 任务重复吗? 一次性的活,好 prompt 更快更省
  2. 有东西能自动判定"干砸了"吗? 测试、类型检查、linter、构建脚本,至少一个
  3. token 预算扛得住浪费吗? loop 无论有没有产出都在烧 token
  4. Agent 能跑自己写的代码吗? 需要有日志、能复现、看得到哪里崩

附加题:你打算 review 它产出的代码吗? 不打算,就别建 loop。

适合上手的:有强测试套件的团队、CI 失败分类、依赖升级、lint-and-fix、issue 转 PR 草稿。不适合的:消费级套餐个人开发、测试覆盖不足的代码库、瓶颈在 review 而非打字速度的团队。

五、构建最小可行 Loop

\[Clippings/重磅!Loop Engineering 实操手册公开.md] 的路径:不让建"全能系统",先建能用的最小版。

顺序极其重要:

  1. 先让一次手动运行稳定 → 2. 做成 skill → 3. 包成 loop → 4. 再去调度

最小 loop 四件套:

  • 一个 automation:按节奏触发,按明确条件停
  • 一个 skill:存下项目背景,省得每轮重讲
  • 一个状态文件:记下做完了什么、下一步
  • 一个硬闸门:自动拒绝坏活的测试/类型检查/构建

六、三种翻车模式和一个安全问题

\[Clippings/重磅!Loop Engineering 实操手册公开.md] 记录了 loop 跑起来后的典型失败:

  1. 假装干完了(Ralph Wiggum 循环):Agent 提前发"完成"信号,活干一半就退。根因:没有硬闸门。
  2. 理解债务:loop 越快交付你没写过的代码,"仓库里有什么"和"你理解什么"的差距越大。
  3. 认知投降:慢慢不再自己判断,loop 返回啥就收啥。

安全红线:无人值守的 loop = 无人值守的攻击面。 生成代码未审就上线、Skill 是注入入口(社区 17022 个 skill 中有 520 个泄露凭证)、凭证泄露进日志、权限蔓延。

七、14 步路线图

\[Clippings/重磅!Loop Engineering 实操手册公开.md] 的完整清单:
#mermaid-svg-2C4qrX0I1GuYqGsx{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-2C4qrX0I1GuYqGsx .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-2C4qrX0I1GuYqGsx .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-2C4qrX0I1GuYqGsx .error-icon{fill:#552222;}#mermaid-svg-2C4qrX0I1GuYqGsx .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-2C4qrX0I1GuYqGsx .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-2C4qrX0I1GuYqGsx .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-2C4qrX0I1GuYqGsx .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-2C4qrX0I1GuYqGsx .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-2C4qrX0I1GuYqGsx .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-2C4qrX0I1GuYqGsx .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-2C4qrX0I1GuYqGsx .marker{fill:#333333;stroke:#333333;}#mermaid-svg-2C4qrX0I1GuYqGsx .marker.cross{stroke:#333333;}#mermaid-svg-2C4qrX0I1GuYqGsx svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-2C4qrX0I1GuYqGsx p{margin:0;}#mermaid-svg-2C4qrX0I1GuYqGsx .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-2C4qrX0I1GuYqGsx .cluster-label text{fill:#333;}#mermaid-svg-2C4qrX0I1GuYqGsx .cluster-label span{color:#333;}#mermaid-svg-2C4qrX0I1GuYqGsx .cluster-label span p{background-color:transparent;}#mermaid-svg-2C4qrX0I1GuYqGsx .label text,#mermaid-svg-2C4qrX0I1GuYqGsx span{fill:#333;color:#333;}#mermaid-svg-2C4qrX0I1GuYqGsx .node rect,#mermaid-svg-2C4qrX0I1GuYqGsx .node circle,#mermaid-svg-2C4qrX0I1GuYqGsx .node ellipse,#mermaid-svg-2C4qrX0I1GuYqGsx .node polygon,#mermaid-svg-2C4qrX0I1GuYqGsx .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-2C4qrX0I1GuYqGsx .rough-node .label text,#mermaid-svg-2C4qrX0I1GuYqGsx .node .label text,#mermaid-svg-2C4qrX0I1GuYqGsx .image-shape .label,#mermaid-svg-2C4qrX0I1GuYqGsx .icon-shape .label{text-anchor:middle;}#mermaid-svg-2C4qrX0I1GuYqGsx .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-2C4qrX0I1GuYqGsx .rough-node .label,#mermaid-svg-2C4qrX0I1GuYqGsx .node .label,#mermaid-svg-2C4qrX0I1GuYqGsx .image-shape .label,#mermaid-svg-2C4qrX0I1GuYqGsx .icon-shape .label{text-align:center;}#mermaid-svg-2C4qrX0I1GuYqGsx .node.clickable{cursor:pointer;}#mermaid-svg-2C4qrX0I1GuYqGsx .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-2C4qrX0I1GuYqGsx .arrowheadPath{fill:#333333;}#mermaid-svg-2C4qrX0I1GuYqGsx .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-2C4qrX0I1GuYqGsx .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-2C4qrX0I1GuYqGsx .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-2C4qrX0I1GuYqGsx .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-2C4qrX0I1GuYqGsx .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-2C4qrX0I1GuYqGsx .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-2C4qrX0I1GuYqGsx .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-2C4qrX0I1GuYqGsx .cluster text{fill:#333;}#mermaid-svg-2C4qrX0I1GuYqGsx .cluster span{color:#333;}#mermaid-svg-2C4qrX0I1GuYqGsx div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-2C4qrX0I1GuYqGsx .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-2C4qrX0I1GuYqGsx rect.text{fill:none;stroke-width:0;}#mermaid-svg-2C4qrX0I1GuYqGsx .icon-shape,#mermaid-svg-2C4qrX0I1GuYqGsx .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-2C4qrX0I1GuYqGsx .icon-shape p,#mermaid-svg-2C4qrX0I1GuYqGsx .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-2C4qrX0I1GuYqGsx .icon-shape .label rect,#mermaid-svg-2C4qrX0I1GuYqGsx .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-2C4qrX0I1GuYqGsx .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-2C4qrX0I1GuYqGsx .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-2C4qrX0I1GuYqGsx :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 🛡️ 第三阶段:守护(1步)
⑭ 盯成本·读diff·设权限

接受率 < 50% = 亏本
🏗️ 第二阶段:搭建(8步)
⑥ 手动运行稳定
⑦ 沉淀Skill
⑧ 加状态文件
⑨ 设硬闸门
⑩ 配Automation
⑪ 上Worktree
⑫ 接Connectors
⑬ 拆Sub-agents
🔍 第一阶段:想清楚(5步)
① 确认任务重复
② 有自动判定标准
③ Token预算扛得住
④ Agent能跑自己代码
⑤ 打算Review产出

八、Code Buddy 中的具体实现

\[Clippings/Loop Engineering 实践指南:在 Code Buddy 中构建自主循环系统.md] 以腾讯 CodeBuddy 为例展示实现:

/goal --- 条件驱动的持续工作

复制代码
/goal all tests in test/auth pass and npm run build exits 0

写好条件的三个要素:可度量的终态、可证明的验证方式、不可破坏的约束。加上兜底:or stop after 30 turns。评估器用独立小模型判断,天然形成对抗验证。

/loop --- 时间驱动的循环

复制代码
/loop 3m 检查一下流水线是否跑完
/loop 30m 帮我运行一次单元测试

适合监控巡检,时间间隔触发,会话级,3 天自动过期。

Team 模式 --- 对抗验证

规划者/执行者/评审者三角分工,不同模型不同指令------写代码的人最好别自己给自己 review。
#mermaid-svg-VN27uBjsxw0MIykX{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-VN27uBjsxw0MIykX .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-VN27uBjsxw0MIykX .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-VN27uBjsxw0MIykX .error-icon{fill:#552222;}#mermaid-svg-VN27uBjsxw0MIykX .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-VN27uBjsxw0MIykX .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-VN27uBjsxw0MIykX .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-VN27uBjsxw0MIykX .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-VN27uBjsxw0MIykX .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-VN27uBjsxw0MIykX .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-VN27uBjsxw0MIykX .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-VN27uBjsxw0MIykX .marker{fill:#333333;stroke:#333333;}#mermaid-svg-VN27uBjsxw0MIykX .marker.cross{stroke:#333333;}#mermaid-svg-VN27uBjsxw0MIykX svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-VN27uBjsxw0MIykX p{margin:0;}#mermaid-svg-VN27uBjsxw0MIykX .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-VN27uBjsxw0MIykX .cluster-label text{fill:#333;}#mermaid-svg-VN27uBjsxw0MIykX .cluster-label span{color:#333;}#mermaid-svg-VN27uBjsxw0MIykX .cluster-label span p{background-color:transparent;}#mermaid-svg-VN27uBjsxw0MIykX .label text,#mermaid-svg-VN27uBjsxw0MIykX span{fill:#333;color:#333;}#mermaid-svg-VN27uBjsxw0MIykX .node rect,#mermaid-svg-VN27uBjsxw0MIykX .node circle,#mermaid-svg-VN27uBjsxw0MIykX .node ellipse,#mermaid-svg-VN27uBjsxw0MIykX .node polygon,#mermaid-svg-VN27uBjsxw0MIykX .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-VN27uBjsxw0MIykX .rough-node .label text,#mermaid-svg-VN27uBjsxw0MIykX .node .label text,#mermaid-svg-VN27uBjsxw0MIykX .image-shape .label,#mermaid-svg-VN27uBjsxw0MIykX .icon-shape .label{text-anchor:middle;}#mermaid-svg-VN27uBjsxw0MIykX .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-VN27uBjsxw0MIykX .rough-node .label,#mermaid-svg-VN27uBjsxw0MIykX .node .label,#mermaid-svg-VN27uBjsxw0MIykX .image-shape .label,#mermaid-svg-VN27uBjsxw0MIykX .icon-shape .label{text-align:center;}#mermaid-svg-VN27uBjsxw0MIykX .node.clickable{cursor:pointer;}#mermaid-svg-VN27uBjsxw0MIykX .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-VN27uBjsxw0MIykX .arrowheadPath{fill:#333333;}#mermaid-svg-VN27uBjsxw0MIykX .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-VN27uBjsxw0MIykX .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-VN27uBjsxw0MIykX .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-VN27uBjsxw0MIykX .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-VN27uBjsxw0MIykX .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-VN27uBjsxw0MIykX .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-VN27uBjsxw0MIykX .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-VN27uBjsxw0MIykX .cluster text{fill:#333;}#mermaid-svg-VN27uBjsxw0MIykX .cluster span{color:#333;}#mermaid-svg-VN27uBjsxw0MIykX div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-VN27uBjsxw0MIykX .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-VN27uBjsxw0MIykX rect.text{fill:none;stroke-width:0;}#mermaid-svg-VN27uBjsxw0MIykX .icon-shape,#mermaid-svg-VN27uBjsxw0MIykX .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-VN27uBjsxw0MIykX .icon-shape p,#mermaid-svg-VN27uBjsxw0MIykX .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-VN27uBjsxw0MIykX .icon-shape .label rect,#mermaid-svg-VN27uBjsxw0MIykX .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-VN27uBjsxw0MIykX .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-VN27uBjsxw0MIykX .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-VN27uBjsxw0MIykX :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 有明确终态

迁移/重构/实现功能
持续监控巡检

CI状态/PR审查/性能回归
跨会话长期任务

每日构建检查/每周汇总
复杂多角色协作

规划+执行+评审
❓ 你的任务类型?
🎯 /goal

条件驱动

自动循环直到完成
⏱️ /loop

时间驱动

定时间隔触发
📅 Automations

cron规则调度

持久化不随会话消失
👥 Team + /goal

三角分工对抗验证

不同模型不同指令

九、核心认知

\[Clippings/提示词工程已死,Loop Engineering来了!.md] 的结语:

loop 的用法从来不是把人拿掉,而是把人从重复劳动里抽出来,把判断、验收和刹车留在自己手里。AI 干得越多,人越容易不再去看过程------时间一长,代码越堆越多,自己真正理解的越来越少。

过去比谁提示词写得好,接下来比谁的 loop 设计得好:怎么调度、怎么验证、怎么记录、什么时候该停。做的不是"用 AI 写代码",而是"设计让 AI 自己干活还不翻车的系统"。从提示词工程师到 AI 系统架构师

来源备注

  1. Addy Osmani 的原版哲学:Loop 的定义、五个积木+记忆机制、成本和边界、哪些工作适合 loop
    腾讯技术工程的实践指南:双层循环架构、ReAct 对比、CodeBuddy 三种实现机制、6 个实践案例
    Codez 的 14 步路线图:4 个前置问题、最小 loop 构建、3 种翻车模式+安全、完整 checklist