AI Agent 架构设计模式:ReAct、Plan-and-Execute 实战指南
2026 年,AI Agent 已经从概念走向生产环境。但你是否思考过:为什么有的 Agent 能稳定完成复杂任务,有的却频繁陷入死循环?
答案藏在架构设计模式中。
就像软件架构有 MVC、微服务、事件驱动一样,AI Agent 也有自己的设计模式。选对模式,Agent 能像瑞士钟表一样精准运转;选错模式,再强的 LLM 也会变成无头苍蝇。
本文将深入解析 4 种主流 AI Agent 架构模式,每种都附带可运行的 Python 代码和真实应用场景对比。读完这篇文章,你将能够:
- 理解 ReAct 模式的核心思想(推理 + 行动的闭环)
- 掌握 Plan-and-Execute 模式的分层规划策略
- 设计 Multi-Agent 协作架构
- 为不同场景选择最合适的架构模式
TL;DR:简单任务用 ReAct,复杂多步任务用 Plan-and-Execute,需要专业分工的场景用 Multi-Agent。没有银弹,只有权衡。
一、为什么架构模式如此重要?
1.1 一个真实的失败案例
假设你要构建一个”自动调研并生成报告”的 Agent。任务描述:
调研 2026 年 AI Agent 工具市场,分析 Top 5 产品,生成一份包含市场份额、技术特点、用户评价的报告。
错误的设计:直接让 LLM 一次性生成完整报告
# ❌ 错误示范:单步生成
response = llm.generate("生成 AI Agent 工具市场报告")
问题:
- LLM 缺乏实时数据,只能编造信息
- 无法访问互联网获取最新市场份额
- 无法验证数据的准确性
- 输出质量不可控
正确的设计:选择合适的架构模式,让 Agent 分步骤完成任务
# ✅ 正确示范:使用 ReAct 模式
agent = ReActAgent(llm=llm, tools=[search, analyze, write])
result = agent.run("调研 AI Agent 工具市场并生成报告")
1.2 架构模式的核心价值
架构模式解决的是如何组织 LLM 的推理和行动:
| 维度 | 无架构 | 有架构 |
|---|---|---|
| 任务分解 | ❌ 一次性生成 | ✅ 分步骤执行 |
| 工具调用 | ❌ 无法使用外部工具 | ✅ 动态调用 API |
| 错误处理 | ❌ 失败即终止 | ✅ 自动重试修正 |
| 可解释性 | ❌ 黑盒输出 | ✅ 可追踪推理链 |
| 可控性 | ❌ 结果不可预测 | ✅ 可干预中间步骤 |
二、ReAct 模式:推理与行动的闭环
2.1 核心思想
ReAct = Reasoning + Acting
这是 2022 年由 Google 提出的经典范式。核心思想是:让 LLM 在每一步都先思考(Thought),再行动(Action),然后观察结果(Observation),循环往复直到完成任务。
┌─────────────────────────────────────────┐
│ Thought: 我需要搜索 AI Agent 工具市场数据 │
│ Action: search("AI Agent tools market 2026") │
│ Observation: 找到 5 篇相关报告... │
│ │
│ Thought: 数据不够,需要补充用户评价 │
│ Action: search("AI Agent tools user reviews") │
│ Observation: 找到 Reddit 讨论帖... │
│ │
│ Thought: 数据充足,开始分析 │
│ Action: analyze(data) │
│ Observation: 生成分析结果... │
│ │
│ Thought: 分析完成,生成最终报告 │
│ Action: write_report(analysis) │
│ Final Answer: [完整报告] │
└─────────────────────────────────────────┘
2.2 Python 代码实现
以下是一个简化的 ReAct Agent 实现(基于 LangChain 风格):
from langchain.llms import OpenAI
from langchain.agents import initialize_agent, Tool
from langchain.tools import BaseTool
import requests
# 1. 定义工具
class SearchTool(BaseTool):
name = "search"
description = "搜索互联网获取信息,输入关键词,返回相关结果"
def _run(self, query: str):
# 调用搜索 API(示例用 SerpAPI)
api_key = "your_api_key"
url = f"https://serpapi.com/search?q={query}&api_key={api_key}"
response = requests.get(url).json()
return [result["title"] + ": " + result["snippet"]
for result in response.get("organic_results", [])[:5]]
class WriteTool(BaseTool):
name = "write"
description = "将内容写入文件"
def _run(self, content: str):
with open("report.md", "w", encoding="utf-8") as f:
f.write(content)
return "报告已保存到 report.md"
# 2. 初始化 Agent
llm = OpenAI(model="gpt-4", temperature=0)
tools = [SearchTool(), WriteTool()]
agent = initialize_agent(
tools,
llm,
agent="zero-shot-react-description",
verbose=True # 打印推理过程
)
# 3. 执行任务
result = agent.run("调研 2026 年 AI Agent 工具市场,分析 Top 5 产品,生成报告")
print(result)
运行输出(verbose=True 时):
> Entering new AgentExecutor chain...
Thought: 我需要先搜索 AI Agent 工具市场的相关信息
Action: search
Action Input: "AI Agent tools market 2026"
Observation: [找到 5 篇报告:Cursor 市场份额 35%, Claude Code 28%...]
Thought: 数据不够详细,需要补充用户评价
Action: search
Action Input: "AI Agent tools user reviews 2026"
Observation: [Reddit 讨论:Cursor 编程体验最佳, n8n 自动化最强...]
Thought: 数据充足,开始分析并生成报告
Action: write
Action Input: "# 2026 AI Agent 工具市场报告\n\n## 市场份额\n1. Cursor: 35%\n..."
Observation: 报告已保存到 report.md
Thought: 任务完成
Final Answer: 报告已生成,包含市场份额分析和用户评价总结。
2.3 适用场景
✅ 适合 ReAct 的场景:
- 任务步骤不确定,需要动态探索
- 需要多次调用工具收集信息
- 任务复杂度中等(3-10 步)
- 需要可解释的推理过程
❌ 不适合 ReAct 的场景:
- 超复杂任务(>20 步),容易陷入循环
- 需要严格顺序执行的流水线任务
- 对延迟敏感的场景(每步都要 LLM 推理)
2.4 实战案例:智能客服 Agent
# 场景:电商客服 Agent,需要查询订单、物流、退换货政策
tools = [
QueryOrderTool(), # 查询订单状态
CheckLogisticsTool(), # 查询物流信息
ReturnPolicyTool(), # 查询退换货政策
CreateTicketTool(), # 创建工单
]
agent = ReActAgent(llm=gpt4, tools=tools)
# 用户输入
user_query = "我的订单 #12345 什么时候到?如果延迟了可以退款吗?"
# Agent 推理过程
# Thought: 用户询问订单 #12345 的物流状态
# Action: query_order("12345")
# Observation: 订单状态:已发货,预计 3 天后到达
# Thought: 用户还关心延迟退款政策
# Action: return_policy("延迟退款")
# Observation: 延迟超过 7 天可申请全额退款
# Thought: 信息充足,回复用户
# Final Answer: 您的订单预计 3 天后到达。如果延迟超过 7 天,可申请全额退款。
三、Plan-and-Execute 模式:分层规划与执行
3.1 核心思想
Plan-and-Execute = Planner + Executor
当任务过于复杂,ReAct 容易迷失方向时,我们需要分层设计:
- Planner(规划器):将复杂任务分解为子任务列表
- Executor(执行器):逐步执行每个子任务
- Replanner(重规划器):根据执行结果动态调整计划
┌─────────────────────────────────────────────┐
│ Planner: 分解任务 │
│ Plan: │
│ 1. 搜索 AI Agent 工具市场数据 │
│ 2. 分析 Top 5 产品的技术特点 │
│ 3. 收集用户评价 │
│ 4. 生成市场份额图表 │
│ 5. 撰写完整报告 │
└─────────────────────────────────────────────┘
↓
┌─────────────────────────────────────────────┐
│ Executor: 执行步骤 1 │
│ Action: search("AI Agent tools market") │
│ Result: [数据...] │
└─────────────────────────────────────────────┘
↓
┌─────────────────────────────────────────────┐
│ Replanner: 检查进度,调整计划 │
│ New Plan: │
│ 1. ✅ 已完成 │
│ 2. 分析 Top 5 产品(补充:需要对比价格) │
│ 3. 收集用户评价 │
│ 4. 生成市场份额图表 │
│ 5. 撰写完整报告 │
└─────────────────────────────────────────────┘
3.2 Python 代码实现
from langchain.chat_models import ChatOpenAI
from langchain.experimental.plan_and_execute import PlanAndExecute, Plan
from langchain.experimental.plan_and_execute.agent_executor import LoadStepExecutor
# 1. 定义执行工具
tools = [
SearchTool(),
AnalyzeTool(),
ChartTool(),
WriteTool(),
]
# 2. 初始化 Planner 和 Executor
planner_llm = ChatOpenAI(model="gpt-4", temperature=0)
executor_llm = ChatOpenAI(model="gpt-3.5-turbo", temperature=0)
# Planner:生成任务计划
planner = Plan(llm=planner_llm)
# Executor:执行每个子任务
executor = LoadStepExecutor(llm=executor_llm, tools=tools)
# 3. 组合成 Plan-and-Execute Agent
agent = PlanAndExecute(planner=planner, executor=executor)
# 4. 执行复杂任务
task = """
调研 2026 年 AI Agent 工具市场,要求:
1. 分析 Top 5 产品的市场份额和技术特点
2. 对比价格和功能
3. 收集至少 100 条用户评价
4. 生成市场份额饼图
5. 撰写 3000 字深度报告
"""
result = agent.run(task)
Planner 输出示例:
plan:
- step: 1
description: "搜索 AI Agent 工具市场报告和数据"
tools: ["search"]
- step: 2
description: "分析 Top 5 产品的技术特点"
tools: ["analyze"]
- step: 3
description: "对比价格和订阅模式"
tools: ["search", "analyze"]
- step: 4
description: "收集用户评价(Reddit、Twitter、产品官网)"
tools: ["search"]
- step: 5
description: "生成市场份额饼图"
tools: ["chart"]
- step: 6
description: "撰写完整报告"
tools: ["write"]
3.3 适用场景
✅ 适合 Plan-and-Execute 的场景:
- 复杂多步任务(>10 步)
- 需要明确的任务分解
- 任务有清晰的阶段性目标
- 需要动态调整计划
❌ 不适合的场景:
- 简单任务(杀鸡用牛刀)
- 高度交互式任务(需要实时反馈)
3.4 实战案例:自动化研究助手
# 场景:自动化学术研究助手
task = """
研究主题:Transformer 架构在计算机视觉中的应用
要求:
1. 搜索 2024-2026 年的顶会论文(CVPR、ICCV、ECCV)
2. 分析 ViT、DeiT、Swin Transformer 的技术演进
3. 对比 CNN 和 Transformer 在 ImageNet 上的性能
4. 整理开源代码仓库和 Star 数
5. 生成技术演进时间线图
6. 撰写 5000 字综述报告
"""
agent = PlanAndExecute(planner=gpt4_planner, executor=gpt4_executor)
result = agent.run(task)
# 输出:
# 1. 找到 47 篇相关论文
# 2. 技术演进分析:ViT → DeiT → Swin → ConvNeXt
# 3. 性能对比表:Transformer 在 Accuracy 上超越 CNN 2.3%
# 4. 整理 12 个开源仓库,总 Star 数 150K+
# 5. 生成时间线图(2020 ViT → 2021 DeiT → 2022 Swin V2)
# 6. 报告已保存到 research_report.pdf
四、Multi-Agent 协作架构:专业分工与协同
4.1 核心思想
Multi-Agent = 多个专业 Agent + 协调器
当任务涉及多个专业领域时,单个 Agent 难以胜任。我们需要让不同的 Agent 负责不同的专业领域,由协调器统一调度。
┌─────────────────────────────────────────────┐
│ Coordinator Agent │
│ (协调器:分配任务、汇总结果) │
└─────────────────────────────────────────────┘
↓ ↓ ↓
┌─────────────┐ ┌─────────────┐ ┌─────────────┐
│ Researcher │ │ Analyst │ │ Writer │
│ Agent │ │ Agent │ │ Agent │
│ (研究员) │ │ (分析师) │ │ (写作者) │
└─────────────┘ └─────────────┘ └─────────────┘
↓ ↓ ↓
搜索论文 数据分析 撰写报告
4.2 Python 代码实现(LangGraph)
from langgraph.graph import StateGraph, END
from typing import TypedDict, Annotated
import operator
# 1. 定义状态
class AgentState(TypedDict):
task: str
research_data: str
analysis_result: str
final_report: str
# 2. 定义专业 Agent
def researcher_agent(state: AgentState):
"""研究员:负责搜索和收集信息"""
tools = [SearchTool(), ArxivTool()]
agent = ReActAgent(llm=gpt4, tools=tools)
result = agent.run(f"研究:{state['task']}")
return {"research_data": result}
def analyst_agent(state: AgentState):
"""分析师:负责数据分析"""
tools = [AnalyzeTool(), ChartTool()]
agent = ReActAgent(llm=gpt4, tools=tools)
result = agent.run(f"分析数据:{state['research_data']}")
return {"analysis_result": result}
def writer_agent(state: AgentState):
"""写作者:负责撰写报告"""
tools = [WriteTool()]
agent = ReActAgent(llm=gpt4, tools=tools)
result = agent.run(f"撰写报告:{state['analysis_result']}")
return {"final_report": result}
# 3. 构建工作流图
workflow = StateGraph(AgentState)
# 添加节点
workflow.add_node("researcher", researcher_agent)
workflow.add_node("analyst", analyst_agent)
workflow.add_node("writer", writer_agent)
# 定义边(执行顺序)
workflow.set_entry_point("researcher")
workflow.add_edge("researcher", "analyst")
workflow.add_edge("analyst", "writer")
workflow.add_edge("writer", END)
# 4. 编译并运行
app = workflow.compile()
result = app.invoke({
"task": "研究 Transformer 在 CV 中的应用",
"research_data": "",
"analysis_result": "",
"final_report": ""
})
print(result["final_report"])
4.3 适用场景
✅ 适合 Multi-Agent 的场景:
- 任务涉及多个专业领域
- 需要并行处理多个子任务
- 需要不同 LLM 模型(如 GPT-4 做研究,GPT-3.5 做写作)
- 需要可插拔的 Agent 架构
❌ 不适合的场景:
- 单一专业领域的任务
- 任务步骤高度耦合
4.4 实战案例:自动化内容创作团队
# 场景:自动化博客创作团队
# 1. 研究员 Agent:负责调研
researcher = Agent(
name="Researcher",
role="调研主题、收集资料",
tools=[SearchTool(), ArxivTool(), WebScraperTool()],
llm=gpt4
)
# 2. 大纲 Agent:负责生成文章结构
outliner = Agent(
name="Outliner",
role="根据调研结果生成文章大纲",
tools=[OutlineTool()],
llm=gpt4
)
# 3. 写作者 Agent:负责撰写正文
writer = Agent(
name="Writer",
role="根据大纲撰写文章",
tools=[WriteTool()],
llm=gpt4
)
# 4. 编辑 Agent:负责校对和优化
editor = Agent(
name="Editor",
role="校对语法、优化表达、检查事实",
tools=[GrammarTool(), FactCheckTool()],
llm=gpt4
)
# 5. SEO Agent:负责优化 SEO
seo_specialist = Agent(
name="SEO",
role="优化标题、描述、关键词",
tools=[SEOTool()],
llm=gpt35 # SEO 任务不需要最强模型
)
# 构建工作流
workflow = StateGraph(ContentState)
workflow.add_node("researcher", researcher.run)
workflow.add_node("outliner", outliner.run)
workflow.add_node("writer", writer.run)
workflow.add_node("editor", editor.run)
workflow.add_node("seo", seo_specialist.run)
workflow.set_entry_point("researcher")
workflow.add_edge("researcher", "outliner")
workflow.add_edge("outliner", "writer")
workflow.add_edge("writer", "editor")
workflow.add_edge("editor", "seo")
workflow.add_edge("seo", END)
app = workflow.compile()
# 执行
result = app.invoke({
"topic": "2026 年 AI Agent 架构设计模式",
"research_data": "",
"outline": "",
"draft": "",
"edited_draft": "",
"final_article": ""
})
# 输出:一篇 SEO 优化、事实准确、表达流畅的文章
五、架构模式对比与选型指南
5.1 四种模式对比
| 维度 | ReAct | Plan-and-Execute | Multi-Agent | Tool-use Agent |
|---|---|---|---|---|
| 复杂度 | 低 | 中 | 高 | 低 |
| 任务步骤 | 3-10 步 | 10-50 步 | 不限 | 1-5 步 |
| 可解释性 | ✅ 高 | ✅ 高 | ⚠️ 中 | ⚠️ 低 |
| 灵活性 | ✅ 高 | ⚠️ 中 | ✅ 高 | ❌ 低 |
| 延迟 | 中 | 高 | 高 | 低 |
| 成本 | 中 | 高 | 高 | 低 |
| 适合场景 | 探索性任务 | 复杂多步任务 | 多专业协作 | 简单工具调用 |
5.2 选型决策树
任务是否涉及多个专业领域?
├─ 是 → Multi-Agent
└─ 否 → 任务步骤是否超过 10 步?
├─ 是 → Plan-and-Execute
└─ 否 → 是否需要动态探索?
├─ 是 → ReAct
└─ 否 → Tool-use Agent
5.3 真实案例对比
任务:生成一份 AI Agent 工具市场报告
| 模式 | 执行方式 | 耗时 | 质量 | 推荐度 |
|---|---|---|---|---|
| ReAct | 边搜索边分析边写 | 3 分钟 | ⭐⭐⭐ | ⭐⭐⭐ |
| Plan-and-Execute | 先规划再执行 | 5 分钟 | ⭐⭐⭐⭐ | ⭐⭐⭐⭐ |
| Multi-Agent | 研究员+分析师+写作者协作 | 8 分钟 | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ |
| Tool-use Agent | 单次调用生成 | 30 秒 | ⭐⭐ | ⭐⭐ |
六、常见问题解答(FAQ)
Q1: ReAct 和 Plan-and-Execute 可以结合使用吗?
A: 可以,而且推荐结合。在 Multi-Agent 架构中,每个专业 Agent 内部可以使用 ReAct 模式,而整体工作流使用 Plan-and-Execute 模式。
# 示例:Planner 分解任务,每个子任务用 ReAct Agent 执行
planner = PlanAndExecute(planner=gpt4_planner)
# Executor 内部是 ReAct Agent
executor = ReActAgent(llm=gpt4, tools=tools)
# 组合
agent = PlanAndExecute(planner=planner, executor=executor)
Q2: Multi-Agent 架构中,如何避免 Agent 之间的信息丢失?
A: 使用共享状态(Shared State)机制。在 LangGraph 中,所有 Agent 共享同一个 AgentState,每个 Agent 的输出都会更新到状态中,下一个 Agent 可以访问完整上下文。
class AgentState(TypedDict):
task: str
research_data: str # Researcher 写入
analysis_result: str # Analyst 写入
final_report: str # Writer 写入
Q3: 如何选择合适的 LLM 模型?
A: 根据任务复杂度选择:
- 简单工具调用:GPT-3.5-turbo / Claude Haiku(成本低)
- 推理密集型任务:GPT-4 / Claude Sonnet(平衡性能与成本)
- 复杂规划任务:GPT-4 / Claude Opus(最强推理能力)
在 Multi-Agent 中,可以为不同 Agent 分配不同模型:
researcher = Agent(llm=gpt4) # 研究需要强推理
writer = Agent(llm=gpt35) # 写作不需要最强模型
seo = Agent(llm=gpt35) # SEO 优化简单
Q4: 如何处理 Agent 陷入死循环的问题?
A: 三种策略:
- 设置最大步数:限制 Agent 的最大执行步数
- 超时机制:设置任务超时时间
- 人工干预:在关键步骤加入人工审核
agent = ReActAgent(
llm=gpt4,
tools=tools,
max_iterations=20, # 最多 20 步
timeout=300, # 超时 5 分钟
human_in_the_loop=True # 关键步骤需人工确认
)
Q5: 这些架构模式可以用于生产环境吗?
A: 可以,但需要注意:
- 错误处理:加入重试机制和降级策略
- 成本控制:监控 Token 消耗,设置预算上限
- 可观测性:记录每个 Agent 的推理过程,便于调试
- 安全性:限制 Agent 的工具权限,防止误操作
七、总结与下一步
AI Agent 架构模式没有银弹,只有权衡:
- ReAct:适合探索性任务,灵活但容易迷失
- Plan-and-Execute:适合复杂多步任务,结构清晰但延迟高
- Multi-Agent:适合多专业协作,强大但复杂
- Tool-use Agent:适合简单任务,快速但能力有限
下一步阅读:
本文作者:Kevin Peng,freeaitool.com 主编。专注 AI 工具评测与实战教程分享。