【译文】每个 AI 工程师都应该知道的 20 个循环设计模式
<p><figure class="image-caption" > <img src="https://raw.githubusercontent.com/stevedsun/blog-img/main/20-loop-patterns-swirl-v2-header.png" alt="header" loading="lazy" /> <figcaption>header</figcaption> </figure> </p> <blockquote> <p><strong>原文</strong>:<a href="https://x.com/sairahul1/status/2072258045460226373">20 Loop Design Patterns Every AI Engineer Should Know</a><br> <strong>作者</strong>:Rahul (@sairahul1)<br> <strong>声明</strong>:本文由 AI 翻译,可能包含错误</p></blockquote> <p>大多数 AI 工程师知道如何构建一个 agent。</p> <p>但很少有人知道如何构建一个能在首次尝试后不断变好的系统。</p> <p>这个差距值六位数美金。</p> <p>区别在哪里:</p> <p>Agent 是一个工人。</p> <p>Loop(循环)是让工人进步的机制。</p> <p>当今生产环境中最强大的 AI 系统,不是单次模型调用。</p> <p>它们是循环。</p> <p><strong>生成 → 评估 → 学习 → 改进。</strong></p> <p>一遍又一遍。</p> <p>直到输出真正变好。</p> <p>以下是生产级 AI 系统中反复出现的 20 个循环设计模式。</p> <p>收藏这篇文章。你会用到它们的。</p> <h2 id="agent-vs-loop">Agent vs Loop</h2> <p>旧方式:Prompt → Response → Done。</p> <p>新方式:Generate → Critique → Rewrite → Score → Retry → Remember → Improve。</p> <p>一个是流水线工人,做一次就完事。</p> <p>另一个是流水线工人,研究每一个错误,重写操作手册,每个班次进步 3%。</p> <p>现在能交付生产级 AI 的团队,他们不是在写更好的 prompt。</p> <p>他们在构建更好的循环。</p> <p><figure class="image-caption" > <img src="https://raw.githubusercontent.com/stevedsun/blog-img/main/20-loop-patterns-agents-vs-loops.jpg" alt="Agents vs Loops" loading="lazy" /> <figcaption>Agents vs Loops</figcaption> </figure> </p> <h2 id="类别-1--质量改进循环让输出在离开系统前就变好">类别 1 — 质量改进循环(让输出在离开系统前就变好)</h2> <h3 id="1-generate--critique--rewrite">1. Generate → Critique → Rewrite</h3> <p>AI 工程中最重要的循环。</p> <p>生成输出。评论家审阅。生成器根据反馈重写。重复直到质量达标。</p> <p>不是一个模型。两个角色。一条流水线。</p> <pre tabindex="0"><code>[Generator] → 初稿 [Critic] → "第三段含糊不清,缺少证据,语气不对" [Generator] → 根据批评重写 [Critic] → "好多了,但结尾还是薄弱" [Generator] → 最终重写 </code></pre><p>适用于:写作、代码审查、报告、策略文档、销售邮件。</p> <p>洞察:负责生成的模型不是自己输出的最佳评判者。</p> <p>独立的评论家每次都能发现生成器遗漏的问题。</p> <h3 id="2-score-and-retry-loop">2. Score-and-Retry Loop</h3> <p>生成。打分。低于阈值就重试。</p> <p>简单。强大。被严重低估。</p> <pre tabindex="0"><code>score = evaluate(output) while score < threshold: output = generate(prompt) score = evaluate(output) attempts += 1 if attempts > max_retries: return best_so_far </code></pre><p>最适合质量可衡量的场景——提取准确率、格式合规性、事实正确性、线索评分。</p> <p>生成器不知道自己在被评分。</p> <p>评估者知道。</p> <p>这个分离就是模式本身。</p> <h3 id="3-multi-critic-loop">3. Multi-Critic Loop</h3> <p>一个评论家有盲点。</p> <p>那就用四个。</p> <ul> <li><strong>正确性评论家</strong>:事实准确吗?</li> <li><strong>风格评论家</strong>:清晰且文笔好吗?</li> <li><strong>安全评论家</strong>:合适且安全吗?</li> <li><strong>领域评论家</strong>:符合专业标准吗?</li> </ul> <p>每个独立评估。</p> <p>最终输出必须同时满足四个才能放行。</p> <p>用于:医疗 AI、法律文档审查、金融分析、受监管内容。</p> <h3 id="4-adversarial-critique-loop">4. Adversarial Critique Loop</h3> <p>评论家唯一的任务是打破这个答案。</p> <p>不是改进它。是打破它。</p> <p>对抗性评论家会问的问题:</p> <ul> <li>这里什么假设会失效?</li> <li>缺少什么证据?</li> <li>怀疑论者会说什么?</li> <li>什么地方自信地错了?</li> </ul> <p>生成器随后要么辩护,要么重写。</p> <p>最好的答案在攻击中存活下来。</p> <p>用于:研究综合、投资论点评审、战略规划、风险分析。</p> <h3 id="5-judge-ensemble-loop">5. Judge Ensemble Loop</h3> <p>一个评委打分有噪声。</p> <p>五个评委平均掉噪声。</p> <p>将同一个输出送进多个评估器。</p> <p>汇总分数。</p> <p>只有高共识的输出才晋级。</p> <p>用于:单一模型评估不可靠、风险高、边界情况重要的场景。</p> <h2 id="类别-2--记忆循环从发生过的事情中学习">类别 2 — 记忆循环(从发生过的事情中学习)</h2> <h3 id="6-reflexion-loop">6. Reflexion Loop</h3> <p>这是最重要的自我改进模式,没有之一。</p> <p>Agent 失败。Agent 分析失败原因。Agent 存储教训。Agent 带着教训重新尝试。</p> <p>每一次迭代都比上一次更聪明。</p> <pre tabindex="0"><code>attempt 1: 失败 reflection: "我以为 X 是对的,但 X 是错的。下次先验证 X。" attempt 2: 融入教训 → 部分成功 reflection: "好多了。但我跳过了 Y。加上 Y 检查。" attempt 3: 成功 </code></pre><p>一个系统"失败一次"和"只失败一次"之间的区别。</p> <h3 id="7-memory-update-loop">7. Memory Update Loop</h3> <p>每次任务完成后存储三样东西:</p> <ul> <li>做了什么决定</li> <li>结果是什么</li> <li>下次会怎么不同做</li> </ul> <p>未来的运行继承这些知识。</p> <p>第 6 个月的系统已经不是第 1 个月的那个系统了。</p> <p>它读了 6 个月的自己历史。</p> <h3 id="8-error-library-loop">8. Error Library Loop</h3> <p>存储每一次失败。</p> <p>错误答案。糟糕输出。执行失败。边界情况。</p> <p>在处理新任务之前:</p> <p>先搜索错误库。</p> <p>如果类似的失败存在 → 在开始之前就应用已知修复。</p> <p>系统不再重复犯同一个错误。</p> <p>这是生产级 AI 中最被低估的模式。</p> <h3 id="9-success-pattern-loop">9. Success Pattern Loop</h3> <p>大多数工程师只存失败。</p> <p>也要存成功。</p> <p>当任务顺利时:</p> <ul> <li>保存方法</li> <li>保存上下文</li> <li>保存什么让它奏效</li> </ul> <p>遇到类似任务时检索成功模式。</p> <p>从胜利中学习,而不仅仅是错误。</p> <h3 id="10-memory-compression-loop">10. Memory Compression Loop</h3> <p>记忆永远在增长。</p> <p>无限记忆 = 不可用的记忆。</p> <p>当积累到 N 条之后:</p> <p>压缩它们。</p> <p>将许多具体记忆 → 变成少数高层抽象。</p> <pre tabindex="0"><code>压缩前: "任务 A 因为 X 失败了" "任务 B 因为 X 失败了" "任务 C 因为 X 失败了" 压缩后: "模式:X 导致失败。总是先检查 X。" </code></pre><p>上下文保持可控。模式保持可访问。系统保持快。</p> <h2 id="类别-3--规划循环当现实变化时调整计划">类别 3 — 规划循环(当现实变化时调整计划)</h2> <h3 id="11-plan--execute--replan">11. Plan → Execute → Replan</h3> <p>AI Agent 设计中最常见的错误:</p> <p>把计划当作固定的。</p> <p>计划在接触现实时会破裂。</p> <p>模式:</p> <p>制定计划 → 执行步骤 → 观察结果 → 更新计划 → 继续</p> <p>不是瀑布。</p> <p>是螺旋。</p> <p>每一圈收紧方法。</p> <p>用于:环境变化、任务有依赖关系、长期目标。</p> <h3 id="12-dynamic-workflow-loop">12. Dynamic Workflow Loop</h3> <p>大多数流水线是固定的。</p> <p>Step 1 → Step 2 → Step 3。永远如此。</p> <p>动态工作流根据结果改变:</p> <p>如果输出 A → 走分支 X;如果输出 B → 走分支 Y;如果输出 C → 跳到步骤 5。</p> <p>流水线在运行时决定自己的形状。</p> <p>用于:多文档研究、客服路由、自适应内容流水线。</p> <h3 id="13-goal-decomposition-loop">13. Goal Decomposition Loop</h3> <p>大目标进入。</p> <p>系统分解为子目标。</p> <p>每个子目标分解为任务。</p> <p>每个任务分解为步骤。</p> <p>持续分解直到每个单元小到一次调用可以完成。</p> <pre tabindex="0"><code>目标:"写一份全面的竞争分析" ↓ 子目标 1:"识别前 5 名竞争对手" 子目标 2:"分析每个竞争对手的产品" 子目标 3:"对比定价模式" 子目标 4:"识别差距" ↓ 每个子目标 → 任务 → 单独的模型调用 </code></pre><p>循环持续分解,直到系统可以行动。</p> <h3 id="14-progress-evaluation-loop">14. Progress Evaluation Loop</h3> <p>每 N 步:停下来问:</p> <p>“我们真的在接近目标吗?”</p> <p>如果是:继续当前策略。 如果不是:改变策略、工具或计划。</p> <p>系统监控自己的进度。</p> <p>而不是盲目执行。</p> <p>用于:长时间运行的研究 agent、多天自主任务、调试 agent。</p> <h3 id="15-constraint-satisfaction-loop">15. Constraint Satisfaction Loop</h3> <p>持续运行直到所有约束被满足。</p> <pre tabindex="0"><code>while not all_constraints_satisfied(output): output = improve(output, unsatisfied_constraints) constraints = [ budget_under_limit, quality_above_threshold, latency_under_200ms, tone_matches_brand, no_hallucinations ] </code></pre><p>在生产系统中非常常见。</p> <p>输出在每一条业务规则通过之前都不算完成。</p> <h2 id="类别-4--探索循环通过尝试多条路径找到最佳答案">类别 4 — 探索循环(通过尝试多条路径找到最佳答案)</h2> <h3 id="16-branch-and-explore-loop">16. Branch-and-Explore Loop</h3> <p>不要只走一条路。</p> <p>同时探索多条路径。</p> <pre tabindex="0"><code>paths = [ generate(approach="conservative"), generate(approach="aggressive"), generate(approach="creative") ] scores = [evaluate(p) for p in paths] best = paths[scores.index(max(scores))] </code></pre><p>对比结果。选择最佳分支。丢弃其余。</p> <p>用于:内容变体、架构决策、多假设调试、A/B 生成。</p> <h3 id="17-tree-search-loop">17. Tree Search Loop</h3> <p>Branch-and-Explore 只深入一层。</p> <p>Tree Search 需要多深就走多深。</p> <p>扩展最有希望的节点。剪掉最弱的。持续探索直到找到解。</p> <pre tabindex="0"><code>root → [A, B, C] A → [A1, A2] # A 看起来有希望,扩展它 B → prune # B 太弱,停在这里 A1 → [A1a, A1b] A1a → solution ✓ </code></pre><p>用于:复杂推理链、多步规划、代码调试、研究综合。</p> <p>计算成本高,但能找到单次调用无法找到的解。</p> <h3 id="18-debate-loop">18. Debate Loop</h3> <p>两个 agent。一个话题。相反的立场。</p> <p>Agent A 为答案辩护。Agent B 反对它。</p> <p>每一轮挑战假设、要求证据、暴露逻辑漏洞。</p> <p>最终答案通过分歧产生。</p> <p>不是通过一致。</p> <p>对抗性压力能发现自信的单 agent 答案遗漏的东西。</p> <p>用于:投资决策、战略规划、风险评估、研究评论。</p> <h2 id="类别-5--系统优化循环循环改进循环本身">类别 5 — 系统优化循环(循环改进循环本身)</h2> <h3 id="19-prompt-optimization-loop">19. Prompt Optimization Loop</h3> <p>大多数工程师写一个 prompt 就不再碰它。</p> <p>Prompt 优化循环改变了这一点。</p> <p>系统:</p> <ul> <li>在测试集上运行 prompt</li> <li>对每个输出评分</li> <li>识别 prompt 失败的地方</li> <li>重写 prompt 修复这些失败</li> <li>重新运行并重新评分</li> </ul> <p>Prompt 自动变好。</p> <p>不需要人碰。</p> <pre tabindex="0"><code>current_prompt = "Summarize this document." for iteration in range(max_iterations): outputs = [run(current_prompt, doc) for doc in test_set] scores = [evaluate(o) for o in outputs] avg_score = mean(scores) if avg_score >= target: break failures = [o for o, s in zip(outputs, scores) if s < threshold] current_prompt = improve_prompt(current_prompt, failures) </code></pre><p>用于:生产流水线、自动化内容系统、分类任务。</p> <p>生产级 AI 中最好的 prompt 不是人写的。</p> <p>它们是进化出来的。</p> <h3 id="20-workflow-optimization-loop">20. Workflow Optimization Loop</h3> <p>这才是真正有趣的地方。</p> <p>循环改进循环本身。</p> <p>系统测量自己的性能:</p> <ul> <li><strong>延迟</strong>:每一步花了多久?</li> <li><strong>成本</strong>:每次调用用了多少 token?</li> <li><strong>质量</strong>:每个阶段的输出得分多少?</li> </ul> <p>然后它修改自己的工作流。</p> <p>太慢了?并行化两个步骤。 太贵了?在质量能保持的地方用一个更小的模型替换 GPT-4 调用。 质量下降了?在最终输出前加一个评论家。</p> <pre tabindex="0"><code>metrics = measure_workflow(outputs, latency, cost) if metrics.latency > target_latency: workflow = parallelize(slow_steps) if metrics.cost > budget: workflow = replace_with_cheaper_model(high_cost_steps) if metrics.quality < threshold: workflow = add_critic_before(final_output_step) </code></pre><p>这就是真正的自我改进系统的起点。</p> <p>不只是输出在改进。</p> <p>是系统在重新设计自己。</p> <h2 id="所有-20-个模式背后的统一模式">所有 20 个模式背后的统一模式</h2> <p>每一个循环都共享一个结构:</p> <p><strong>Act → Observe → Evaluate → Adjust</strong></p> <p>这就是完整的配方。</p> <p>输出在第一次尝试时从来不是最终的。</p> <p>输出是一个起点。</p> <p>循环才是把起点变成生产级作品的东西。</p> <h2 id="全景图">全景图</h2> <p><strong>类别 1 — 质量循环</strong>(让输出在离开前变好)</p> <ol> <li>Generate → Critique → Rewrite</li> <li>Score-and-Retry</li> <li>Multi-Critic</li> <li>Adversarial Critique</li> <li>Judge Ensemble</li> </ol> <p><strong>类别 2 — 记忆循环</strong>(从发生过的事情中学习) 6. Reflexion 7. Memory Update 8. Error Library 9. Success Pattern 10. Memory Compression</p> <p><strong>类别 3 — 规划循环</strong>(当现实变化时适应) 11. Plan → Execute → Replan 12. Dynamic Workflow 13. Goal Decomposition 14. Progress Evaluation 15. Constraint Satisfaction</p> <p><strong>类别 4 — 探索循环</strong>(通过尝试多条路径找到最佳答案) 16. Branch-and-Explore 17. Tree Search 18. Debate</p> <p><strong>类别 5 — 系统优化循环</strong>(循环改进循环) 19. Prompt Optimization 20. Workflow Optimization</p> <hr> <p>大多数工程师认为 agent 是未来。</p> <p>Agent 只是工人。</p> <p>循环才是让工人进步的东西。</p> <p>AI 领域正在发生的最大的转变不是更好的模型。</p> <p>是从 <strong>Prompt → Response</strong></p> <p>转向 <strong>Generate → Evaluate → Learn → Improve</strong></p> <p>掌握循环设计的团队不会写出更好的 prompt。</p> <p>他们会构建出每天都在变好的系统。</p> <p>部署之后,不需要任何人碰它们。</p>