Loop
Agent 反复执行"观察 → 思考 → 行动"直到目标达成。
一定义
Loop(循环)是 Agent 的运行骨架。模型每次不是只答一次就结束,而是在循环里反复"看 → 想 → 做",直到任务完成或主动放弃。
二为什么重要
没有 Loop,Agent 一次性给完答复就走 —— 错了没法改、不确定没法查。Loop 是让 Agent 能修正自己、能查证、能放弃的机制。
三三种典型 Loop
1. ReAct(Reason + Act)
最经典。每轮都让模型先输出思考,再选行动。
Thought: 我需要先查北京天气。
Action: get_weather(city="Beijing")
Obs: {"temp": 22, "sky": "晴"}
Thought: 数据够了,可以回答了。
Final: 北京今天 22 度,晴。
2. Reflection(反思)
每轮不仅做事,还评估上一轮的结果,然后决定下一步。常见做法:一个 Agent 做,另一个 Agent 评。
3. Plan-and-Execute(先规划,再执行)
先用一次 LLM 调用把任务拆成步骤,然后按步骤执行。遇到失败时,回到"规划"阶段重排。
四最小可跑的例子(ReAct)
def react_loop(goal, max_steps=8):
trace = [{"role": "user", "content": goal}]
for _ in range(max_steps):
resp = client.chat.completions.create(
model="gpt-4o-mini",
messages=trace,
tools=tools,
)
msg = resp.choices[0].message
trace.append(msg)
if not msg.tool_calls:
return msg.content # 模型选择结束
for call in msg.tool_calls:
obs = run_tool(call)
trace.append({"role": "tool",
"tool_call_id": call.id,
"content": obs})
return "步数用尽"
五常见误区
- Loop 没终止条件 —— 必须有"任务完成"的判断,否则模型会自己造答案。
- 没有最大步数 —— 一定设上限,防止无限循环把账户跑空。
- trace 无限增长 —— 上下文会爆炸,要在中途摘要、压缩、丢弃旧回合。
- Loop 与工具耦合太死 —— 把 Loop 抽象出来,让它能跑不同的工具集。