主题
循环工程(Loop Engineering)
循环工程(Loop Engineering)是大模型工程第四代 Agent 体系的核心,研究如何通过**多步反馈循环(Loop)**让 LLM 不断自我修正、逼近目标,而非"一问一答"式单次输出。它是 Agent 自主决策能力的引擎,也是 Graph 中每个可执行节点的"思维内核"。
核心不是让模型一次答好,而是设计"观察→决策→行动→反馈"的闭环,让模型在迭代中自我纠错。
为什么需要 Loop Engineering
第一代到第三代都是"一次性"的:Prompt 进去,答案出来,结束。但现实任务很少能一步到位:
传统方式:用户提问 → LLM 回答 → 结束
问题:回答可能是错的、不完整的、没有验证过的
Loop 方式:
用户提问 → LLM 尝试 → 验证 → 失败 → LLM 改进 → 再验证 → 成功在五代演进中,Loop 是 Agent 区别于 Workflow 的本质特征——Workflow 是 A → B → C(一条线,无回头),而 Loop 允许"回到上一环重新来过",引入真正的反馈。
Prompt → Prompt Chain → Workflow → Loop → Graph
对应系统进化:输入 → 流程 → 状态 → 反馈 → 自治与已有工程层的关系
Graph Engineering(图工程) ← 用图编排多个 Loop / Workflow ◀ 包容 Loop
Loop Engineering(循环工程) ← 多步反馈循环、终止条件 ◀ 本文
Harness Engineering(承载管控) ← 执行、验证、安全边界
Context Engineering(上下文工程) ← 信息输入、上下文管理
Prompt Engineering(提示工程) ← 单次输入优化Loop 是 Graph 的"基本单元":Graph 用节点和边组织多个 Loop;一个 Loop 内部靠 Harness 执行动作、靠 Context 裁剪每步信息、靠 Prompt 驱动单步思考。没有成熟的 Loop 设计,Graph 只会是一张失控的网。
核心要素
| 要素 | 说明 |
|---|---|
| 循环体 | 每轮要执行的逻辑(思考 + 行动) |
| 反馈信号 | 用于判断"是否达成目标"的结果(测试/评分/校验) |
| 终止条件 | 成功 / 失败上限 / 步数上限,避免死循环 |
| 状态传递 | 每轮把历史上下文带入下一轮 |
| 自我修正 | 根据反馈重写上一步的输出 |
核心模式
1. 自我修正循环(Self-Correction Loop)
最基础的 Loop 模式:
┌─────────────────────────────────────┐
│ │
▼ │
生成 → 自我评估 → 发现问题 → 重写 → ──┘
│
无问题 → 输出python
def self_correction_loop(task, max_iter=3):
for i in range(max_iter):
# 1. 生成
output = llm(f"完成任务:{task}")
# 2. 自我评估(关键 Loop 环节)
critique = llm(f"检查以下输出有无问题:{output}")
# 3. 判断是否需要修正
if "无问题" in critique:
return output # 终止条件命中
# 4. 重写(带着反馈进入下一轮)
task = f"之前的输出有这些问题:{critique},请修正:{task}"
return output2. ReAct 循环(推理 + 行动)
Agent 最常用的 Loop 模式:
Thought(想):我需要查一下用户余额
Action(做):调用 get_balance 工具
Observation(看):余额是 100 元
Thought:够了,可以下单
Action:调用 create_order
...python
# ReAct 循环的核心结构
def react_loop(question, max_steps=10):
trajectory = []
for step in range(max_steps):
# 模型思考 + 决定动作
thought_action = llm(
f"问题:{question}\n历史:{trajectory}\n下一步?"
)
# 解析 Thought 和 Action
action = parse_action(thought_action)
if action.type == "Final Answer":
return action.value # 终止
# 执行动作(交给 Harness 层)
obs = execute_tool(action)
# 观察结果进入下一轮
trajectory.append(f"{thought_action}\nObservation: {obs}")
return "超出步数限制"3. 反思循环(Reflexion)
在自我修正基础上,增加"长期记忆":
生成 → 执行 → 失败 → 反思(总结错误模式)→ 改进 → 再执行
↑
错误经验会记住,下次避免python
class ReflexionAgent:
def __init__(self):
self.memory = [] # 长期记忆:错误经验
def run(self, task):
for episode in range(5):
# 带着历史错误经验执行
result = self.act(task, self.memory)
if result.success:
return result
# 反思:这轮为什么失败?
lesson = llm(f"任务失败:{result.error},总结教训")
self.memory.append(lesson) # 写入长期记忆终止条件设计
Loop 最危险的问题是停不下来,必须设计明确的终止条件:
python
def safe_loop(task, max_iter=5, max_tokens=10000):
for i in range(max_iter): # 步数上限
if budget_exceeded(max_tokens): # Token 预算
break
output = llm(task)
if is_done(output): # 目标达成
return output
return fallback() # 兜底返回| 终止条件 | 说明 |
|---|---|
| 目标达成 | 验证通过 / 评分达标 |
| 步数上限 | 超过 N 步强制停止 |
| Token 预算 | 成本/长度超限停止 |
| 错误上限 | 连续失败 N 次停止 |
| 超时 | 超过时间限制停止 |
实际案例
Case 1:AI 编程 Agent
用户:给项目加用户认证
Loop:
1. 生成认证代码
2. 运行测试 → 失败(密码未加密)
3. 根据测试错误重写代码(加入 BCrypt)
4. 再运行测试 → 通过
5. 输出最终代码Case 2:文章优化 Agent
Loop:
1. 写初稿
2. 自评(逻辑是否清晰?有无错别字?)
3. 发现 3 个问题 → 修正
4. 再评 → 通过
5. 输出终稿设计原则
- 必须有终止条件:步数、Token、错误上限三者至少设其一,严防死循环。
- 反馈信号要真实:不要靠模型"自检"就放行,关键结果交给 Harness 真正执行验证。
- 状态要节流:每轮带入全部历史会撑爆窗口,用 Context Engineering 裁剪。
- 失败要可观测:每轮的输入输出落日志,便于事后复盘为什么卡住。
- Loop 是 Graph 的细胞:先打磨好单个 Loop,再考虑用 Graph 编排多个 Loop。