Agent架构全景图:ReAct / Plan-Execute / Multi-Agent 怎么选

系列 :Agent实战系列 第01篇 预计阅读 :15分钟 难度:⭐⭐⭐⭐☆
引子
上周面试官问我:「你的Agent项目用的什么架构?」
我答:「ReAct,让大模型自己想一步做一步。」
他追问:「那如果任务有20个步骤,ReAct还能撑住吗?」
我愣了一下------我的项目最多就5步,从来没想过20步的情况。面试官笑了笑:「回去了解一下Plan-Execute和Multi-Agent吧。」
回去后我把三种架构从头到尾拆了一遍,发现这根本不是「哪个更好」的问题,而是**「什么场景该用什么」**的问题。这篇就把三种架构的原理、代码和落地选型一次讲透。
一、原理:三种架构到底在干什么
1.1 一句话理解
ReAct是「走一步看一步」
Plan-Execute是「先规划路线再出发」
Multi-Agent是「组个团队分工干」。
1.2 三种架构全景图

一图看全:左边是ReAct(逐步推理),中间是Plan-Execute(先规划再执行),右边是Multi-Agent(多角色协作)。三种架构的复杂度递增,但适用场景不同。
1.3 ReAct:推理+行动的交替循环
核心思想:让大模型在「思考」和「行动」之间交替。每一步先想清楚(Thought),再决定做什么(Action),看到结果后(Observation),再决定下一步。
这个模式来自2022年Yao等人的论文《ReAct: Synergizing Reasoning and Acting in Language Models》,核心贡献是发现单独的推理(Chain-of-Thought)容易幻觉,单独的行动(工具调用)缺乏规划,两者交替才能既准又能干。

图解:Thought-Action-Observation的循环本质。右侧展示了查天气+查紫外线的完整运行链路,每一步都基于上一步的Observation动态决策------这就是ReAct「走一步看一步」的精髓。
1.4 Plan-Execute:先画路线再出发
核心思想 :把「规划」和「执行」拆成两个阶段。先用一个Planner(规划器)生成完整的步骤计划,再交给Executor(执行器,通常本身是个ReAct Agent)逐步执行。如果执行中发现计划有问题,可以触发重新规划。
这个思路受BabyAGI和Plan-and-Solve论文启发,LangChain官方提供了标准实现。

图解:先由Planner生成完整计划(4步),再由Executor(通常是ReAct Agent)逐步执行,执行中发现问题可触发Replan(带着已有结果重新规划)。右侧列出了架构的优缺点。
1.5 Multi-Agent:组团队分工干
核心思想:不靠一个超级Agent包揽一切,而是构建多个角色明确的Agent,各司其职,通过通信协议协作完成复杂任务。通常有一个Supervisor(协调者)负责任务分配和结果汇总。
代表框架各有特色:
| 框架 | 核心机制 | 适合场景 | 特点 |
|---|---|---|---|
| AutoGen (微软) | 对话涌现式,GroupChat群聊协商 | 研究/探索型任务 | 最灵活,但难调试 |
| CrewAI | 角色驱动,API极简 | 内容创作、报告生成 | 最易上手,流程可预测 |
| MetaGPT | SOP驱动,模拟软件公司 | 软件开发类 | 文档交接,减少幻觉传播 |
| LangGraph | 状态机/图编排 | 精细控制型任务 | 最灵活的工程化方案 |

图解:Multi-Agent的典型协作模式------Supervisor接收用户请求后做任务分解,分别派给研究员/工程师/测试员三个子Agent,最后汇总结果。右侧列出了4个代表框架的定位。
1.6 三种架构对比总览
| 维度 | ReAct | Plan-Execute | Multi-Agent |
|---|---|---|---|
| 核心循环 | Thought→Action→Observation | Plan→Execute→Replan | 协商→执行→汇总 |
| 架构复杂度 | 低 | 中 | 高 |
| Token消耗 | 中 | 中 | 很高 |
| 短任务成功率(~5步) | ~90% | ~92% | ~88% |
| 长任务成功率(~20步) | ~40% ⚠️ | ~70% | ~80% |
| 灵活性 | 极高(实时调整) | 中(需重新规划) | 低(分工固定) |
| 可调试性 | 简单(单链路) | 中等 | 困难(多链路交叉) |
| 延迟 | 简单任务低/复杂任务高 | 中等且可预测 | 高(通信开销) |
核心结论 :没有最好的架构,只有最合适的架构。选型的关键变量是任务步骤数 和是否需要多专业分工。
二、实现:三种架构的极简代码
以下代码基于LangChain最新API,全部本地可运行。完整代码已上传GitHub(文末链接)。
2.1 环境准备
pip install langchain langchain-openai langgraph
import os
from langchain_openai import ChatOpenAI
from langchain_core.tools import tool
os.environ["OPENAI_API_KEY"] = "your-api-key"
# 准备两个简单工具
@tool
def search(query: str) -> str:
"""搜索互联网获取信息"""
# 实际项目中接入搜索API
return f"搜索结果:{query}的相关信息..."
@tool
def calculate(expression: str) -> str:
"""数学计算"""
try:
return str(eval(expression))
except:
return "计算失败"
tools = [search, calculate]
llm = ChatOpenAI(model="gpt-4o", temperature=0)
2.2 ReAct Agent(10行核心代码)
from langchain.agents import create_tool_calling_agent, AgentExecutor
from langchain_core.prompts import ChatPromptTemplate
# ReAct的核心:让LLM在"思考-行动-观察"中循环
prompt = ChatPromptTemplate.from_messages([
("system", "你是一个有用的助手。根据需要使用工具来回答问题。\n"
"思考过程:先Thought(思考),再Action(调用工具),"
"看到Observation(观察结果)后继续,直到得出Final Answer。"),
("human", "{input}"),
("placeholder", "{agent_scratchpad}"), # ← 关键:存放Thought-Action-Observation历史
])
# 创建ReAct Agent
agent = create_tool_calling_agent(llm, tools, prompt)
agent_executor = AgentExecutor(agent=agent, tools=tools, verbose=True)
# 运行
result = agent_executor.invoke({
"input": "搜索2026年中国GDP增长率,然后乘以1.5,告诉我结果"
})
print(result["output"])
运行时会看到完整的Thought→Action→Observation链路:
> Entering new AgentExecutor chain...
Thought: 我需要先搜索2026年中国GDP增长率
Action: search
Action Input: "2026年中国GDP增长率"
Observation: 搜索结果:预计2026年中国GDP增长率约为5.2%...
Thought: 现在需要把5.2乘以1.5
Action: calculate
Action Input: "5.2 * 1.5"
Observation: 7.8
Thought: 得到最终结果
Final Answer: 2026年中国GDP增长率约为5.2%,乘以1.5后结果为7.8。
> Finished chain.
2.3 Plan-Execute Agent
from langchain_core.pydantic_v1 import BaseModel, Field
from typing import List
# 阶段1:定义规划器 —— 生成多步计划
class Plan(BaseModel):
"""多步执行计划"""
steps: List[str] = Field(description="按顺序执行的步骤列表")
planner_prompt = ChatPromptTemplate.from_messages([
("system", "你是一个规划专家。将用户需求拆解为明确的执行步骤。"),
("human", "{objective}"),
])
planner = planner_prompt | llm.with_structured_output(Plan)
# 阶段2:执行器 —— 复用上面的ReAct Agent逐步执行
def execute_step(step: str) -> str:
"""用ReAct Agent执行单个步骤"""
result = agent_executor.invoke({"input": step})
return result["output"]
# 阶段3:主流程 —— 先规划,再逐步执行
def plan_and_execute(objective: str) -> str:
# 1. 生成计划
plan = planner.invoke({"objective": objective})
print(f"计划:{plan.steps}")
# 2. 逐步执行
results = []
for i, step in enumerate(plan.steps):
print(f"执行步骤 {i+1}/{len(plan.steps)}: {step}")
result = execute_step(step)
results.append(f"步骤{i+1}: {result}")
# 3. 可选:检查是否需要重新规划(简化版,实际可加Replan逻辑)
# if need_replan(result): plan = replan(objective, results)
# 4. 汇总结果
return "\n".join(results)
# 运行
result = plan_and_execute("调研Python和Rust两门语言的优缺点,给出学习建议")
print(result)
2.4 Multi-Agent(基于LangGraph)
from langgraph.graph import StateGraph, START, END
from typing import TypedDict, Annotated
import operator
# 定义协作状态
class TeamState(TypedDict):
task: str
research_result: str
code_result: str
final_report: str
# Agent A:研究员
def researcher(state: TeamState) -> dict:
"""负责调研分析"""
result = llm.invoke(f"作为研究员,针对以下任务做技术调研:{state['task']}")
return {"research_result": result.content}
# Agent B:工程师
def coder(state: TeamState) -> dict:
"""负责写代码"""
result = llm.invoke(
f"作为工程师,基于以下调研结果写代码实现:{state['research_result']}"
)
return {"code_result": result.content}
# Agent C:总结者
def summarizer(state: TeamState) -> dict:
"""负责汇总报告"""
result = llm.invoke(
f"汇总以下内容为最终报告:\n调研:{state['research_result']}\n代码:{state['code_result']}"
)
return {"final_report": result.content}
# 构建协作图
workflow = StateGraph(TeamState)
workflow.add_node("researcher", researcher)
workflow.add_node("coder", coder)
workflow.add_node("summarizer", summarizer)
# 定义执行顺序:研究 → 编码 → 汇总
workflow.add_edge(START, "researcher")
workflow.add_edge("researcher", "coder")
workflow.add_edge("coder", "summarizer")
workflow.add_edge("summarizer", END)
# 编译运行
app = workflow.compile()
result = app.invoke({"task": "实现一个简单的网页爬虫"})
print(result["final_report"])
代码要点:ReAct最简单(一个Agent+工具循环);Plan-Execute是「ReAct外面套一层规划」;Multi-Agent需要设计多个Agent角色和协作图,复杂度跳升。
三、落地:工程中到底怎么选
这一层是核心。原理和代码谁都能搜到,但什么场景用哪种架构、踩过什么坑、怎么决策------这才是工程价值。
3.1 选型决策矩阵
| 场景特征 | 推荐架构 | 理由 |
|---|---|---|
| 问答/客服/单次工具调用 | ReAct | 步骤少(1-5步),实时性好 |
| 数据调研/报告生成/批量任务 | Plan-Execute | 步骤多(5-20步),需要全局规划 |
| 代码开发+测试+文档 | Multi-Agent | 需要多专业角色分工 |
| 不确定复杂度的任务 | ReAct起步 | 先跑通,复杂度按需加 |
| 20步以上的长流程 | Plan-Execute | ReAct在长链任务成功率骤降至40% |
| 需要并行处理子任务 | Multi-Agent | 多Agent可并行,但协调成本高 |
选型黄金法则:
80%的场景,用ReAct起步就够了。 不要一上来就上Multi-Agent------那是过度工程。先让简单架构跑起来,遇到瓶颈再演进。
3.2 踩坑实录
坑1:ReAct陷入死循环
现象:
Agent反复调用同一个工具,Thought一直在"我再试试"
循环了8次才报错退出,烧了2万token
原因:
工具返回结果质量不稳定,Agent无法判断"已经够了"
ReAct没有全局终止条件,依赖LLM自己判断"信息够了"
解法:
1. 设置 max_iterations=5 ← 硬性兜底
2. 在System Prompt中加约束:
"如果连续2次获得相同结果,直接给出当前最佳答案"
3. 对工具返回结果加置信度评分,低于阈值直接终止
效果:
循环率从30%降到3%,平均token消耗减少60%
坑2:Plan-Execute的计划全是幻觉
现象:
Planner生成的计划看起来合理,但Step 2依赖Step 1的结果
而Step 1的输出格式和Planner预期完全不同,导致Step 2直接失败
原因:
Planner是"空想"计划,没有考虑每步实际输出的格式和内容
这是Plan-Execute的固有缺陷——计划和执行之间存在信息断层
解法:
1. 在每步执行后,检查结果是否满足下一步的前置条件
2. 不满足时触发Replan,把已有结果喂给Planner重新规划
3. 关键步骤的输出用structured output约束格式
代码:
def execute_with_replan(plan, objective):
results = []
for i, step in enumerate(plan.steps):
result = execute_step(step)
results.append(result)
# 检查是否需要重新规划
if i < len(plan.steps) - 1:
if not check_prerequisite(result, plan.steps[i+1]):
plan = replan(objective, results) # ← 带着已有结果重新规划
break # 用新计划继续执行
return results
坑3:Multi-Agent通信灾难
现象:
3个Agent互相对话,30轮还没出结果
日志里全是"我认为你应该..." "不,我觉得..."
token消耗是ReAct的10倍,结果还不如单Agent
原因:
Agent之间没有明确的"对话终止协议"
每个Agent都想"帮助对方",导致无限协商
这是AutoGen GroupChat模式的经典问题
解法:
1. 用LangGraph的状态机模式替代自由对话
— 明确定义"谁说话、什么时候结束"
2. 限制每个Agent最多发言2轮
3. 设置Supervisor强制做决策,而不是让Agent自己协商
4. 如果任务能拆成"流水线"(A→B→C),
就不要用"圆桌讨论"模式
教训:
Multi-Agent最大的坑不是技术实现,
而是"到底需不需要多Agent"。
大多数场景,一个带好工具的ReAct Agent就能搞定。
3.3 成本对比数据
这是我在实际项目中的测算(GPT-4o,2026年初价格):

图解解读 : - 左图 :Multi-Agent单次成本(¥0.52)是简单ReAct(¥0.03)的17倍 - 右图 :ReAct在5步之前成功率很高(>90%),但超过20步骤降至40%------这正是你该切换到Plan-Execute的临界点 - 核心结论:任务步骤数和成本是选型的两大硬约束
3.4 架构演进路径(推荐)
不要一步到位,按需演进:

图解 :从ReAct起步,遇到瓶颈才升级。80%项目止步于阶段2就够了------别一上来就上Multi-Agent,那是过度工程。
3.5 选型决策树
最后送一个一图决策法:

决策路径 :先看步骤数(≤5走ReAct,否则继续判断),再看是否需要多专业分工(否则Plan-Execute,否则Multi-Agent)。不确定复杂度时,永远先选ReAct。
核心原则 :每一步演进都是因为前一步遇到了真实瓶颈,而不是因为「Multi-Agent听起来更高级」。
四、总结
核心要点
1. ReAct = 走一步看一步,适合短任务(1-5步),灵活但长链容易跑偏
2. Plan-Execute = 先规划再执行,适合长流程(5-20步),有全局视野但重新规划成本高
3. Multi-Agent = 组团队分工干,适合多专业协作任务,但通信开销和调试复杂度最高
4. 选型法则:80%场景ReAct起步,长链任务上Plan-Execute,多专业分工才上Multi-Agent
5. 演进路径:ReAct → Plan-Execute → 轻量Multi-Agent → 完整Multi-Agent,按需升级
下期预告
下一篇:《手写ReAct Agent:从Thought到Action全流程拆解》 我们将从零手写一个ReAct Agent(不用LangChain),彻底搞懂Thought-Action-Observation循环的底层实现。
互动
你的Agent项目用的是哪种架构?遇到过什么坑?评论区聊聊,下一篇我可以针对性拆解。