
Agent 循环机制设计:从 ReAct 到 Plan-and-Execute 的演进
Agent 的本质是循环 所有 Agent 都在做同一件事:感知 → 推理 → 行动 → 观察结果 → 重复。这个循环怎么设计,决定了 Agent 的能力上限。 第一代:ReAct 循环 ReAct(Reasoning + Acting)是最经典的 Agent 模式: Thought: 用户想了解今天的天气,我需要搜索 Action: search_weather("北京 今天") Observation: 北京今天晴,最高温32°C Thought: 搜索结果已获得,可以回答用户 Answer: 北京今天晴天,最高温度32°C。 核心代码 def react_loop(query, max_iterations=5): messages = [{"role": "user", "content": query}] for i in range(max_iterations): response = llm.invoke(messages + [ {"role": "system", "content": REACT_PROMPT} ]) if "Final Answer:" in response: return parse_answer(response) action = parse_action(response) observation = execute_tool(action) messages.append({"role": "assistant", "content": response}) messages.append({"role": "user", "content": f"Observation: {observation}"}) return "达到最大迭代次数" ReAct 的问题 短视决策:每一步只考虑当前最优,缺乏全局规划 Token 浪费:每轮都把完整历史发给 LLM 容易跑偏:一旦某步出错,后续步骤连锁偏移 无法并行:严格串行,效率低 第二代:Plan-and-Execute Plan-and-Execute 将循环拆为两个阶段: 阶段一:规划 def plan(query): prompt = f"""将以下任务分解为具体步骤: 任务:{query} 输出JSON格式的步骤列表。""" plan = llm.invoke(prompt) return json.loads(plan) # 输出示例 { "steps": [ {"id": 1, "action": "search", "params": {"query": "2026年AI Agent市场规模"}}, {"id": 2, "action": "search", "params": {"query": "主要Agent框架市场份额"}}, {"id": 3, "action": "analyze", "params": {"source": "step1+step2"}}, {"id": 4, "action": "write_report", "params": {"source": "step3"}} ] } 阶段二:执行 def execute_plan(steps): results = {} for step in steps: result = execute_step(step, results) results[step["id"]] = result # 动态重规划 if step.get("replan"): new_steps = replan(query, results) steps = merge_plan(steps, new_steps) return results 优势对比 维度 ReAct Plan-and-Execute 全局视野 无 有 可并行 ❌ ✅(无依赖步骤) 错误恢复 依赖LLM自行纠正 可重新规划 Token 效率 低(重复发送历史) 高(只发当前步骤) 复杂任务 容易失败 表现稳定 第三代:自适应循环 2026 年最新的研究趋向于动态选择策略: ...