从 ReAct 到 Plan-and-Execute:Agent 决策链路的演进与取舍

标题选项

  1. 《从ReAct到Plan-and-Execute:AI Agent决策链路的演进、技术原理与落地取舍全解析》
  2. 《告别Agent随机瞎跑!一文读懂ReAct到Plan-and-Execute的决策逻辑迭代》
  3. 《万字长文拆解:大模型Agent核心能力——决策链路从ReAct到PAE的演进之路》
  4. 《AI Agent落地避坑指南:对比ReAct与Plan-and-Execute的适用场景与取舍策略》

引言

痛点引入

你是不是在做AI Agent开发的时候遇到过这些典型问题:

让Agent做一个跨城市的商务旅行规划,用ReAct模式的话,它一会去查机票价格,一会突然跳转去搜索目的地景点的历史典故,跑了12轮工具调用还没给出完整行程,甚至连出发时间都给搞错了;
换成Plan-and-Execute模式吧,遇到航班临时取消的突发情况,它又死抱着原来的计划不调整,最后输出的行程完全不符合实际,根本没法用;
更头疼的是做企业级的多步骤数据处理任务,ReAct跑一次花了2万多token,最后输出的结果还漏了3个关键指标,PAE虽然结果准,但是遇到数据口径调整的需求又要重新写规划提示词,灵活度完全不够。

这些问题的本质,都指向AI Agent最核心的能力模块:决策链路。作为Agent的“大脑中枢”,决策链路决定了Agent拿到任务后怎么思考、怎么行动、怎么调整、怎么输出结果,直接决定了Agent的任务成功率、资源消耗和落地适配性。

文章内容概述

本文将从技术原理、实现逻辑、性能对比、适用场景四个维度,完整拆解AI Agent决策链路从ReAct到Plan-and-Execute(以下简称PAE)的演进路径,不仅会带你从零实现两种决策范式的Agent,还会深入分析两种模式的优劣边界,以及实际业务中怎么根据需求做取舍、怎么搭建混合模式的决策链路。

读者收益

读完本文你将:

  1. 彻底搞懂ReAct和PAE的核心原理、算法逻辑和实现细节;
  2. 可以独立根据业务场景选择合适的决策范式,避免落地踩坑;
  3. 掌握混合决策范式的实现方法,兼顾灵活性和可控性;
  4. 了解Agent决策链路的未来发展方向,提前布局技术能力。

准备工作

技术栈/知识要求

  1. 熟悉大语言模型基础原理,了解提示词工程、工具调用(Function Call)的基本逻辑;
  2. 有Python开发基础,了解LangChain等Agent开发框架的基本使用;
  3. 对AI Agent的基本概念有认知,最好有过简单Agent的开发经验。

环境/工具要求

  1. Python 3.9+ 运行环境;
  2. 已安装langchainopenailangchain-openaiduckduckgo-search等依赖包;
  3. 可用的大模型API Key(推荐使用GPT-3.5-turbo/GPT-4,效果更稳定)。

核心概念:Agent决策链路的本质

问题背景

在大模型爆发之前,传统的规则式Agent、强化学习Agent的决策链路都是预先写死的规则或者训练出来的固定策略,只能适配非常窄的场景,几乎没有通用性。大语言模型的出现,让Agent具备了通用推理能力,但是怎么把大模型的推理能力转化为可落地的行动能力,一直是行业研究的核心问题。

早期的大模型Agent有两个明显的流派:

  1. 推理流:以Chain-of-Thought(思维链)为代表,只让大模型做逻辑推理,完全不跟外部环境交互,适合做数学题、常识问答这类不需要外部数据的任务,但是遇到需要实时数据、工具操作的场景就完全失效;
  2. 行动流:只让大模型输出工具调用指令,没有中间推理过程,很容易出现动作偏移,比如用户要查北京的天气,它跑去查上海的景点,完全没有逻辑可解释。

这两个流派的缺陷,直接催生了第一代通用决策范式ReAct的诞生。

核心定义

Agent决策链路是指Agent从接收任务到输出结果的完整闭环逻辑,核心包含四个环节:任务理解->规划决策->行动执行->反馈调整,核心目标是用最少的资源(token消耗、调用次数、响应时间)完成最高准确率的任务。

决策链路的两个核心评价维度:

  • 可控性:Agent的行动是否符合预期,会不会偏离任务目标,结果是否可控;
  • 灵活性:Agent能不能适配动态变化的环境、突发的需求调整,会不会僵化。

所有决策范式的演进,本质都是在这两个维度之间做权衡。


第一阶段:ReAct决策范式的原理与实现

问题背景

2022年10月,谷歌大脑和普林斯顿大学联合发布了ReAct论文《ReAct: Synergizing Reasoning and Acting in Language Models》,首次提出了把推理(Reasoning)和行动(Acting)结合起来的决策范式,解决了之前推理流和行动流的割裂问题,成为了第一代通用Agent的标准决策模式。

核心原理

ReAct的核心逻辑非常接近人类处理未知问题的方式:走一步想一步。每一轮决策都会先输出当前的思考(Thought),明确当前要解决的问题,然后输出对应的行动(Action),拿到行动的结果(Observation)之后再做下一步的思考,循环往复直到完成任务。

ReAct的决策过程可以建模为一个马尔可夫决策过程(MDP):

  • 状态StS_tSt:当前的上下文历史,包含所有之前的Thought、Action、Observation序列;
  • 策略π(at∣St)\pi(a_t|S_t)π(atSt):大模型根据当前状态输出下一个动作或者最终结论;
  • 奖励rtr_trt:当前动作对完成任务的贡献度,最终总奖励是整个轨迹的累积奖励:
    π∗=arg⁡max⁡πEτ∼pπ(τ)∑t=0Tγtrt\pi^* = \arg\max_\pi \mathbb{E}_{\tau \sim p_\pi(\tau)} \sum_{t=0}^T \gamma^t r_tπ=argπmaxEτpπ(τ)t=0Tγtrt
    其中τ\tauτ是完整的决策轨迹,γ\gammaγ是折扣因子,用来权衡近期奖励和远期奖励的权重。
ReAct的核心要素组成
  1. Thought生成模块:负责根据当前上下文输出中间推理过程,明确当前阶段的目标,避免行动偏移;
  2. Action解析模块:负责从大模型输出中解析出符合格式要求的工具调用指令,包括工具名称、参数;
  3. 工具执行模块:负责调用对应的工具,获取返回结果(Observation);
  4. 上下文管理模块:负责把每一轮的Thought、Action、Observation拼接成上下文,传给下一轮的大模型调用。
ReAct算法流程图

接收用户任务

生成当前Thought: 我现在需要做什么?

是否已经获取足够信息完成任务?

输出最终结果

生成Action: 调用什么工具?参数是什么?

执行Action,获取Observation结果

将Thought/Action/Observation加入上下文

完整实现代码

我们用LangChain实现一个最简单的ReAct Agent,包含搜索和计算器两个工具,可以处理需要实时信息和数学计算的问题:

# 导入依赖
from langchain import hub
from langchain.agents import AgentExecutor, create_react_agent
from langchain_openai import ChatOpenAI
from langchain.tools import DuckDuckGoSearchRun, CalculatorTool
import os

# 配置API Key(替换成你自己的)
os.environ["OPENAI_API_KEY"] = "your-openai-api-key"

# 1. 定义大模型
llm = ChatOpenAI(model="gpt-3.5-turbo", temperature=0)

# 2. 定义工具:搜索工具和计算器工具
tools = [
    DuckDuckGoSearchRun(name="Search", description="用于查询实时信息、未知常识、最新数据等"),
    CalculatorTool(name="Calculator", description="用于进行数学计算,所有计算问题都要用这个工具")
]

# 3. 加载ReAct官方提示词(也可以自定义)
prompt = hub.pull("hwchase17/react")
print("ReAct提示词模板:\n", prompt.template)

# 4. 创建ReAct Agent
agent = create_react_agent(llm, tools, prompt)

# 5. 创建Agent执行器
agent_executor = AgentExecutor(
    agent=agent,
    tools=tools,
    verbose=True, # 开启详细日志,方便查看决策过程
    max_iterations=10, # 最大迭代次数,避免无限循环
    handle_parsing_errors=True # 自动处理格式解析错误
)

# 6. 测试运行
result = agent_executor.invoke({"input": "2024年巴黎奥运会中国代表团获得的金牌数比2020年东京奥运会多多少?"})
print("最终结果:\n", result["output"])

运行之后你会看到完整的决策过程:

  1. 第一轮Thought:我需要先查2024年巴黎奥运会中国的金牌数,再查2020年东京奥运会的金牌数,再计算差值;
  2. 第一轮Action:调用Search工具查2024年巴黎奥运会中国金牌数;
  3. 拿到Observation:40枚;
  4. 第二轮Thought:现在需要查2020年东京奥运会中国的金牌数;
  5. 第二轮Action:调用Search工具查2020年东京奥运会中国金牌数;
  6. 拿到Observation:38枚;
  7. 第三轮Thought:现在需要计算40-38=2;
  8. 第三轮Action:调用Calculator计算差值;
  9. 拿到Observation:2;
  10. 第四轮Thought:已经有足够信息,输出结果:多2枚。

ReAct的优劣势分析

优势
  1. 极致灵活:完全动态决策,每一步都会根据最新的观察结果调整方向,非常适合动态性强、不确定因素多的场景;
  2. 开发简单:只需要一套提示词、一个大模型、一套工具,不需要额外的模块,开发成本极低;
  3. 可解释性强:每一步都有明确的Thought,决策过程完全透明,方便排查问题;
  4. 上下文利用率高:所有历史信息都在同一个上下文中,不需要额外的存储模块,信息传递损耗低。
劣势
  1. 长任务容易漂移:当任务步骤超过5步之后,ReAct很容易忘记最初的目标,出现“注意力偏移”,比如做旅行规划的时候跑去查景点的历史;
  2. 资源消耗高:每一步都要把所有历史上下文传给大模型,步骤越多token消耗越高,10步的任务token消耗通常是PAE的2倍以上;
  3. 不可控风险高:没有全局计划,很容易做出不符合业务规则的操作,比如企业场景下不小心删除了生产数据;
  4. 成功率随任务长度骤降:根据LangChain官方测试,超过8步的任务,ReAct的成功率会从70%降到35%以下。

第二阶段:Plan-and-Execute决策范式的原理与实现

问题背景

2023年上半年,AutoGPT等基于ReAct范式的Agent爆火,但是大家很快发现,ReAct处理复杂多步骤任务的成功率极低,比如让AutoGPT写一个网站,它跑了几十轮调用,最后连基础的项目结构都没建对。核心原因就是ReAct没有全局规划,短视问题严重,遇到长任务很容易跑偏。

为了解决这个问题,行业借鉴了人类处理复杂任务的逻辑:先做全局计划,再按计划分步执行,执行过程中动态调整计划,这就是Plan-and-Execute范式的核心思路。2023年5月,LangChain官方推出了Plan-and-Execute Agent的实现,很快成为了复杂任务场景下的主流决策范式。

核心原理

PAE的核心是把规划模块和执行模块解耦,用两个独立的大模型分别负责全局规划和子任务执行,避免了ReAct的短视问题。它的决策过程是分层的马尔可夫决策过程(HMDP):

  • 上层规划层MDP:状态是当前的全局计划和已完成的子任务结果,策略是规划大模型输出调整后的全局计划,奖励是计划的合理性、覆盖度;
  • 下层执行层MDP:每个子任务对应一个独立的MDP,状态是当前子任务的上下文,策略是执行大模型输出子任务的执行动作,奖励是子任务的完成质量。

总奖励公式为:
R=Rplanner(Pfinal)+∑i=1nαiRexec(pi)R = R_{planner}(P_{final}) + \sum_{i=1}^n \alpha_i R_{exec}(p_i)R=Rplanner(Pfinal)+i=1nαiRexec(pi)
其中PfinalP_{final}Pfinal是最终执行完成的计划,pip_ipi是第i个子任务,αi\alpha_iαi是子任务的权重。

PAE的核心要素组成
  1. 任务理解模块:负责解析用户的任务需求,明确任务的目标、约束、交付要求;
  2. 计划生成模块:负责把大任务拆解成多个可执行的子任务,生成完整的全局计划,每个子任务有明确的输入输出、依赖关系;
  3. 执行调度模块:负责按计划调度子任务的执行,每个子任务可以用ReAct或者其他执行范式完成;
  4. 反思调整模块:负责在每个子任务执行完成后,判断结果是否符合预期,是否需要调整全局计划;
  5. 结果汇总模块:负责把所有子任务的执行结果汇总成最终的输出,交付给用户。
PAE算法流程图

需要调整计划

不需要调整

接收用户任务

任务理解:明确目标、约束、交付要求

规划模块:生成全局多步骤计划,拆解为子任务列表

取出下一个待执行的子任务

执行模块:完成当前子任务,获取子任务结果

反思模块:子任务结果是否符合预期?计划是否需要调整?

所有子任务都执行完成?

汇总所有子任务结果,输出最终交付物

完整实现代码

我们用LangChain实现一个PAE Agent,用来生成一份2024年上半年新能源汽车市场的分析报告:

# 导入依赖
from langchain.chat_models import ChatOpenAI
from langchain_experimental.plan_and_execute import PlanAndExecute, load_agent_executor, load_chat_planner
from langchain.tools import DuckDuckGoSearchRun, CalculatorTool
from langchain.utilities import WikipediaAPIWrapper
import os

# 配置API Key
os.environ["OPENAI_API_KEY"] = "your-openai-api-key"

# 1. 定义大模型:规划用GPT-4(更强的规划能力),执行用GPT-3.5-turbo(成本更低)
planner_llm = ChatOpenAI(model="gpt-4", temperature=0)
executor_llm = ChatOpenAI(model="gpt-3.5-turbo", temperature=0)

# 2. 定义工具:搜索、维基百科、计算器
wikipedia = WikipediaAPIWrapper()
search = DuckDuckGoSearchRun()
calculator = CalculatorTool()
tools = [search, wikipedia, calculator]

# 3. 加载规划器和执行器
planner = load_chat_planner(planner_llm)
executor = load_agent_executor(executor_llm, tools, verbose=True)

# 4. 创建PAE Agent
agent = PlanAndExecute(
    planner=planner,
    executor=executor,
    verbose=True,
    max_iterations=5, # 计划调整的最大次数
    return_intermediate_steps=True # 返回中间步骤,方便排查问题
)

# 5. 测试运行
result = agent.run("生成一份2024年上半年中国新能源汽车市场的分析报告,包含销量排名、市场占比、同比增速、TOP3企业的核心竞争力分析,字数不少于2000字")
print("最终报告:\n", result)

运行之后你会看到PAE的决策过程:

  1. 规划模块首先生成全局计划:
    • 步骤1:搜索2024年上半年中国新能源汽车总销量、同比增速数据;
    • 步骤2:搜索2024年上半年新能源汽车企业销量排名、市场占比数据;
    • 步骤3:搜索TOP3企业(比亚迪、特斯拉中国、吉利)的2024年上半年核心动作、技术优势;
    • 步骤4:汇总所有数据,计算相关指标,生成2000字以上的分析报告。
  2. 执行模块逐个执行每个子任务,每个子任务内部用ReAct范式完成;
  3. 每执行完一个子任务,反思模块会判断结果是否符合要求,比如如果销量数据缺失,就会返回规划模块调整计划,新增步骤补充数据;
  4. 所有子任务完成后,汇总模块生成最终的报告。

PAE的优劣势分析

优势
  1. 长任务成功率高:因为有全局计划,不会偏离目标,根据LangChain官方测试,10步以上的复杂任务,PAE的成功率比ReAct高40%以上;
  2. 资源消耗低:每个子任务的执行上下文是独立的,不需要携带整个任务的所有历史信息,token消耗通常是ReAct的50%-70%;
  3. 可控性强:可以给规划模块加上业务规则约束,比如“不能调用删除类工具”“所有数据必须来自官方渠道”,避免违规操作;
  4. 可并行性高:没有依赖关系的子任务可以并行执行,大幅提升响应速度,比如同时查销量数据和企业信息。
劣势
  1. 灵活性不足:全局计划生成后调整成本高,遇到突发情况(比如数据源失效、需求临时变更),很容易出现计划僵化的问题;
  2. 开发复杂度高:需要维护规划、执行、反思三个模块的提示词,还要处理计划调整、子任务依赖等逻辑,开发成本是ReAct的2-3倍;
  3. 信息传递损耗:子任务之间的信息传递依赖计划模块的调度,容易出现信息丢失的问题,比如上一个子任务的结果没有正确传给下一个子任务;
  4. 短任务效率低:对于1-2步的简单任务,PAE还要先做计划,反而比ReAct多了1-2轮调用,响应速度更慢。

ReAct vs Plan-and-Execute:全方位对比与取舍

核心属性维度对比

对比维度 ReAct Plan-and-Execute
核心架构 单模型紧耦合,推理执行一体化 双模型分层解耦,规划执行分离
决策逻辑 走一步看一步,动态决策 先规划后执行,动态调整计划
上下文开销 随步骤线性增长,10步任务约12k token 随子任务数量平稳增长,10步任务约7k token
长任务(>8步)成功率 ~35% ~82%
动态场景适配性 极强,实时响应环境变化 较弱,需要触发计划调整流程
开发难度 极低,一套提示词即可 较高,需要维护3个以上模块的提示词和调度逻辑
任务平均调用次数 是PAE的1.5-2倍 比ReAct少30%-50%
可控性 弱,容易出现违规操作 强,可通过规划约束全局行为
容错能力 弱,一步错就容易全链路跑偏 强,子任务错误可以单独重跑,不影响全局
适用场景 简单任务、动态性强的场景(实时客服、实时数据查询、故障排查) 复杂多步骤、目标明确的静态场景(报告生成、项目规划、批量数据处理)

核心组件交互关系对比

PAE架构

调整计划

继续执行

用户任务

规划LLM

计划存储模块

调度模块

执行LLM

工具模块

反思模块

结果汇总模块

结果输出

ReAct架构

用户任务

单一LLM

工具模块

全局上下文存储

结果输出

取舍策略:怎么选适合自己的决策范式?

我们可以按照以下的决策树来选择:

拿到业务需求

任务步骤是否>5步?

场景是否动态性极强?

选择ReAct

都可以,优先选ReAct降低开发成本

需求是否频繁变更、环境是否频繁变化?

选择混合模式:粗粒度PAE + 子任务ReAct

选择PAE,保证成功率和可控性

最佳实践:混合决策范式

大多数实际业务场景都不是非黑即白的,我们可以用混合模式兼顾灵活性和可控性:

  1. 规划模块只生成粗粒度的节点计划,比如“1. 数据收集 2. 数据分析 3. 报告生成”,不需要拆解到太细的步骤;
  2. 每个粗粒度节点用ReAct范式执行,灵活处理节点内的不确定情况;
  3. 每个节点执行完成后做一次反思,判断是否需要调整粗粒度计划。

这种混合模式的成功率比纯ReAct高30%,灵活性比纯PAE高50%,是目前企业级Agent落地的主流选择。


进阶探讨:决策链路的未来演进方向

1. 自适应决策范式

未来的Agent会自动根据任务的复杂度、动态性选择最合适的决策模式,不需要人工配置:简单任务用ReAct,复杂任务用PAE,动态场景自动切换模式。

2. 基于强化学习的决策优化

现在的决策范式都是靠提示词引导,未来会用强化学习对决策策略进行微调,让Agent自己学会怎么规划、怎么执行、怎么调整,大幅提升决策效率和成功率。

3. 多Agent协同决策

复杂任务会拆分给多个Agent,一个规划Agent负责全局调度,多个执行Agent负责不同领域的子任务,配合起来完成更复杂的工作。

4. 端侧轻量化决策

针对端侧Agent(比如手机Agent、车机Agent),会出现轻量化的决策范式,不需要大模型也能完成简单的决策任务,降低延迟和成本。


行业发展历史时间线

时间 事件 决策范式演进阶段
2022年之前 Chain-of-Thought思维链提出,大模型具备推理能力 推理流阶段,无行动能力
2022年10月 ReAct论文发表,首次结合推理和行动 第一代通用决策范式诞生
2023年3月 AutoGPT爆火,ReAct范式的缺陷暴露,长任务成功率极低 ReAct普及与问题暴露阶段
2023年5月 LangChain推出Plan-and-Execute Agent,分层决策成为主流 第二代决策范式诞生,复杂任务适配性大幅提升
2023年10月 OpenAI推出Assistants API,内置规划执行能力 PAE范式工程化成熟
2024年至今 混合决策范式、多Agent协同决策成为研究热点 决策范式向自适应、协同化方向演进

总结

回顾要点

  1. ReAct是第一代通用决策范式,核心是推理执行一体化,灵活但长任务容易漂移,适合简单动态场景;
  2. Plan-and-Execute是第二代决策范式,核心是规划执行解耦,可控性强、长任务成功率高,适合复杂静态场景;
  3. 两种范式没有绝对的优劣,本质是在灵活性和可控性之间做权衡,实际业务中优先选择混合模式;
  4. 决策链路的未来演进方向是自适应、自优化、多Agent协同。

成果展示

通过本文的学习,你已经掌握了两种核心决策范式的原理、实现和取舍策略,可以根据业务需求独立搭建适合自己的AI Agent,避免落地踩坑。

鼓励与展望

AI Agent的决策链路还在快速演进,未来会有更多更优秀的范式出现,但是核心逻辑永远是平衡效率、准确率和成本,建议大家多动手实践,根据自己的业务场景做优化,不要盲目跟风新技术。


行动号召

如果你在AI Agent开发过程中遇到过决策链路相关的问题,或者有自己的优化经验,欢迎在评论区留言讨论,我们一起交流进步!如果觉得本文对你有帮助,欢迎点赞收藏转发给更多需要的朋友~

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐