主题
循环工程(Loop Engineering)
循环工程是面向 AI Agent 场景的核心工程方向,关注 AI 系统在连续反馈中完成复杂任务的完整循环机制设计。
核心不是优化单次输出,而是让模型在多步行动、反馈、修正的过程中最终收敛完成目标。
为什么需要 Loop Engineering
单次 LLM 调用能做的事有限:
- 写一段代码 ✅
- 回答一个问题 ✅
但无法完成复杂任务:
- "帮我给这个项目加上完整的用户认证功能"
→ 需要:分析现有代码 → 设计方案 → 写代码 → 测试 → 修复 → ...
→ 需要多步循环,且有反馈4 个工程层的关系
Loop Engineering(循环工程)
↑ 多步反馈循环、终止条件
Harness Engineering(承载管控工程)
↑ 执行、验证、安全边界
Context Engineering(上下文工程)
↑ 信息输入、上下文管理
Prompt Engineering(提示工程)
↑ 单次输入优化层层叠加,不是互相替代。
核心设计维度
1. 终止条件设计
明确什么情况下循环继续、什么情况下停止,避免 Agent 无限空转:
python
def agent_loop(task):
max_steps = 50
for step in range(max_steps):
# 执行一步
action = llm.decide_next_action(task)
result = harness.execute(action)
# 终止条件
if task.is_completed():
return result
if result.has_error():
if cannot_recover(result.error):
ask_human_for_help()
return None
# 继续循环
task.add_feedback(result)
# 达到最大步数,终止
raise TimeoutError("任务未在限定步数内完成")常见终止条件:
| 条件 | 说明 |
|---|---|
| 任务完成 | 测试通过、目标达成 |
| 超过最大步数 | 防止无限循环 |
| 需要人工确认 | 遇到高风险操作 |
| 连续失败 | 同一错误重复出现 3 次 |
2. 失败修正机制
让 Agent 在动作失败后不是盲目重试,而是能判断失败原因:
python
def execute_with_feedback(action, max_retry=3):
for attempt in range(max_retry):
result = harness.execute(action)
if result.success:
return result
# 分析失败原因
error_type = analyze_error(result.error)
if error_type == "syntax_error":
# 语法错误:让 LLM 修复代码
action["code"] = llm.fix_syntax(action["code"], result.error)
elif error_type == "missing_dependency":
# 缺少依赖:让 LLM 添加依赖
action["code"] = llm.add_dependency(action["code"], result.error)
elif error_type == "logic_error":
# 逻辑错误:需要重新设计方案
action = llm.redesign(action, result.error)
else:
# 未知错误:请求人工介入
ask_human(f"无法自动修复错误:{result.error}")
break
return None3. 循环状态管理
设计 Agent 每步产生的新信息的留存、更新、清理规则:
python
class AgentState:
def __init__(self):
self.task = None # 原始任务
self.steps = [] # 执行步骤历史
self.context = [] # 当前上下文
self.failed_attempts = [] # 失败记录
def add_step(self, action, result):
self.steps.append({"action": action, "result": result})
# 只保留最近 N 步(避免上下文过长)
if len(self.steps) > 10:
self.steps = self.steps[-10:]
def get_context_for_next_step(self):
"""为下一步决策准备上下文"""
return {
"task": self.task,
"recent_steps": self.steps[-5:], # 最近 5 步
"failed_attempts": self.failed_attempts
}与 Context Engineering 的配合:循环状态需要高效管理上下文,避免信息过载。
4. 人机协作边界设计
明确哪些节点需要人工介入:
python
HUMAN_APPROVAL_REQUIRED = [
"delete_data", # 删除数据
"deploy_to_prod", # 部署到生产环境
"send_external_email", # 发送对外邮件
"execute_paid_api", # 调用付费 API
"modify_config" # 修改配置文件
]
def execute(action):
if action["type"] in HUMAN_APPROVAL_REQUIRED:
approved = ask_human_for_approval(action)
if not approved:
return {"status": "rejected_by_user"}
return harness.execute(action)不盲目追求完全全自动,合适的人机协作比完全自主更可靠。
实际案例
Case 1:自动编程 Agent
任务:给项目添加用户认证功能
循环过程:
Step 1:分析现有代码 → 反馈:项目使用 Express + JWT
Step 2:设计认证方案 → 反馈:需要安装依赖
Step 3:安装依赖 → 反馈:成功
Step 4:写认证中间件 → 反馈:测试失败(密码未加密)
Step 5:修复(加入 BCrypt) → 反馈:测试通过
Step 6:写测试 → 反馈:覆盖率 80%
[终止:任务完成]Case 2:LangChain Agent 的循环
python
from langchain.agents import initialize_agent, AgentType
agent = initialize_agent(
tools=tools,
llm=llm,
agent=AgentType.OPENAI_FUNCTIONS,
max_iterations=10, # 终止条件 1:最大迭代次数
early_stopping_method="force", # 终止条件 2:强制停止
verbose=True
)
# Agent 会自动循环:
# 思考 → 选工具 → 执行 → 观察结果 → 思考 → ...
agent.run("帮我分析这个项目的性能瓶颈")与"自我反思"的区别
自我反思(Self-Reflection):
- 范围:单次任务的 quality 提升
- 动作:生成 → 批评 → 改进
- 适合:写作、代码优化
循环工程(Loop Engineering):
- 范围:复杂任务的完整执行流程
- 动作:思考 → 执行 → 观察 → 修正 → ... → 终止
- 适合:AI Agent、自动编程、复杂任务执行自我反思是循环工程的一种具体实现方式,但循环工程的含义更广。
设计原则
- 明确终止条件:不要让 Agent 无限循环
- 失败要有策略:不是盲目重试,而是分析错误、调整策略
- 状态要高效管理:上下文太长会影响效果,需要裁剪
- 关键节点人工介入:不要盲目追求全自动
- 完整的日志:方便调试和审计