跳转至

ReAct vs Plan-and-Execute

一句话:ReAct 是"边想边做"的思考-行动-观察循环,Plan-and-Execute 是"先规划后执行"的分步求解;企业级 Agent 通常用意图分类器在两者间动态切换,形成混合推理。

概念

ReAct(Reasoning + Acting) 由 LLM 在每一轮交替输出三段内容:

  • Thought(思考):分析当前状态,决定下一步动作;
  • Action(行动):调用一个外部工具(检索、查询、计算等);
  • Observation(观察):读取工具返回结果,喂回下一轮思考。

循环往复,直到 LLM 给出最终答案。它的优势是反应快、可纠错——每一步都能根据观测结果调整,适合简单查询和强反馈场景。

Plan-and-Execute(先规划后执行) 则先把任务拆成有序的子步骤清单,再依次执行:

  1. Plan(规划):LLM 一次性输出完整步骤列表(如"①查订单 ②查物流 ③计算运费 ④汇总");
  2. Execute(执行):按计划逐步调用工具或子 Agent;
  3. (可选)Replan(重规划):执行中若发现计划失效,重新生成计划。

它的优势是全局视野强、可控,适合需要多步且步骤间有依赖的复杂任务。

维度 ReAct Plan-and-Execute
决策时机 每步即时决策 先规划再执行
适合任务 简单、单轮或弱依赖 复杂、多步、强依赖
Token 成本 步数不定,可能偏多 一次性规划,路径可控
纠错能力 强(每步反馈) 弱,需显式 replan
可解释性 高(有显式计划)

原理

企业实践中,单一范式都有短板:纯 ReAct 在多步任务里容易"走偏"且 Token 消耗大;纯 Plan-and-Execute 对简单查询又是杀鸡用牛刀。报告 §5.3 中彭超案例采用的 "ReAct + Plan-and-Execute 混合推理",其核心就是一层意图分类器做动态路由:

  • 简单查询(如"我的订单到哪了")→ 走 ReAct,快速响应,延迟低;
  • 复杂多步任务(如"帮我处理这笔退货并通知客户")→ 走 Plan-and-Execute,拆解执行;
  • 意图分类器可用一个轻量分类模型或规则 + LLM 混合实现,根据 query 复杂度、涉及系统数、是否含多约束等特征判分。

下面给出两种范式的最小实现骨架。

// LangChain4j 风格:ReAct 与 Plan-and-Execute 的混合路由
public class HybridAgent {

    private final ChatLanguageModel model;
    private final ToolRegistry tools;
    private final IntentClassifier classifier; // 意图分类器

    public String run(String userQuery) {
        // 1. 意图分类,动态切换范式
        Intent intent = classifier.classify(userQuery);
        if (intent == Intent.SIMPLE) {
            return react(userQuery);          // 简单查询走 ReAct
        } else {
            return planAndSolve(userQuery);   // 复杂任务走 Plan-Solve
        }
    }

    /** ReAct:思考-行动-观察循环 */
    private String react(String query) {
        ReActAgent agent = AiServices.builder(ReActAgent.class)
                .chatLanguageModel(model)
                .tools(tools.all())            // 注册全部可用工具
                .build();
        return agent.answer(query);
    }

    /** Plan-and-Execute:先规划后执行 */
    private String planAndSolve(String query) {
        // Step 1: Plan —— LLM 一次性产出步骤列表
        List<TaskStep> plan = model.generate(
            PromptTemplates.planPrompt(query, tools.descriptions())
        ).parseSteps();

        // Step 2: Execute —— 逐步执行(失败可触发 replan)
        StringBuilder ctx = new StringBuilder();
        for (TaskStep step : plan) {
            String result = executor.run(step, tools);
            ctx.append(step.summary()).append(" => ").append(result).append("\n");
        }
        // Step 3: 汇总
        return model.generate(PromptTemplates.summarize(query, ctx.toString()));
    }
}
# LangGraph 风格:混合推理状态图
from langgraph.graph import StateGraph, END
from typing import TypedDict, Literal

class AgentState(TypedDict):
    query: str
    intent: str
    plan: list[str]
    results: list[str]
    answer: str

def classify_node(state: AgentState) -> AgentState:
    # 意图分类器:简单 -> react,复杂 -> plan
    state["intent"] = classifier.predict(state["query"])
    return state

def route(state: AgentState) -> Literal["react", "planner"]:
    return "planner" if state["intent"] == "complex" else "react"

def react_node(state: AgentState) -> AgentState:
    # ReAct:思考-行动-观察循环
    state["answer"] = react_agent.run(state["query"], tools=tools)
    return state

def planner_node(state: AgentState) -> AgentState:
    # Plan-and-Execute Step1:生成计划
    state["plan"] = llm.invoke(plan_prompt(state["query"])).steps
    return state

def executor_node(state: AgentState) -> AgentState:
    # Plan-and-Execute Step2:逐步执行,可触发 replan
    for step in state["plan"]:
        state["results"].append(executor.run(step))
    state["answer"] = llm.invoke(summarize_prompt(state))
    return state

g = StateGraph(AgentState)
g.add_node("classify", classify_node)
g.add_node("react", react_node)
g.add_node("planner", planner_node)
g.add_node("executor", executor_node)
g.set_entry_point("classify")
g.add_conditional_edges("classify", route, {"react": "react", "planner": "planner"})
g.add_edge("planner", "executor")
g.add_edge("react", END)
g.add_edge("executor", END)
graph = g.compile()

实战要点

  • 混合而非二选一:意图分类器是"混合推理"的关键,简单查询走 ReAct 保延迟(响应 < 800ms P95 的基础),复杂任务走 Plan-and-Execute 保可控。报告将"混合推理"列为 2026 前沿基线要素之一。
  • ReAct 要设循环上限:Thought-Action-Observation 循环必须有最大步数和超时,否则工具异常或 LLM 反复"思考"会拖垮延迟与 Token 成本。
  • Plan-and-Execute 要支持 replan:执行中某步失败或观测与预期不符时,应回退到规划阶段重拟计划,而非硬执行错误计划。
  • 工具描述质量决定 ReAct 成败:ReAct 依赖 LLM 自主选工具,工具的 name/description/参数 schema 写得越清晰,选错工具概率越低(工具成功率 98% 的前提)。
  • 可观测:每一步的 Thought/Action/Observation 都要落 Trace,既是调试依据,也是 CoT 归因、负样本挖掘的数据源。

本节相关题目

难度 题目 链接
基础 ReAct 的思考-行动-观察循环是什么 → 题库
进阶 ReAct vs Plan-and-Execute 如何按场景选择、意图分类器如何切换 → 题库
深度 设计企业级 Agent 平台如何落地混合推理 → 题库