在上一章中,我们详细解构了构成 AI Agent 的核心组件——大脑(LLM)、记忆、规划和行动模块。我们理解了它们各自的功能和潜在的交互方式。然而,仅仅拥有这些组件是不够的,Agent 需要一个清晰的执行策略或工作流来有效地编排这些组件,驱动它们协同工作以完成任务。
本章,我们将聚焦于两种当前最主流且具代表性的 Agent 执行逻辑:ReAct 和 Plan-and-Execute (P-a-E)。我们将深入探讨它们各自的内部运作机制、核心思想、优劣势,并通过一个实战对比案例,直观地理解它们是如何指挥 Agent 进行思考与行动的循环或流程的。掌握这两种基础模式,是理解更复杂 Agent 行为和设计更高级 Agent 系统的关键一步。
3.1 ReAct 框架深度解析:推理与行动的迭代循环
ReAct [1](其名称是 Reasoning + Acting 的结合)是一种极具影响力的 Agent 执行框架,由 Yao 等人明确提出。它的核心思想是模仿人类解决问题时边想边做、边观察边调整的模式。
-
工作原理详解:迭代循环机制
ReAct Agent 在一个紧密的迭代循环中运行,这个循环通常包含以下步骤:- Thought (思考): Agent 首先基于当前目标和之前的观察进行内部“思考”。这通常是利用 LLM 生成一段描述当前状态、分析问题、制定下一步行动策略或分解任务的文本。
- Action (行动): 基于思考的结果,Agent 决定执行一个具体的行动。这通常是调用一个工具(如搜索引擎、计算器、API)并附带必要的参数,或者是向用户请求更多信息,甚至是判断任务已经完成并生成最终答案。
- Observation (观察): 执行行动后,Agent 会从环境或工具那里获得一个结果或反馈,这就是“观察”。例如,搜索引擎返回的搜索结果、API 调用的输出、代码执行的错误信息等。
- 回到 Thought: Agent 将这个观察结果纳入考量,开始新一轮的思考,评估上一步行动的效果,判断是否需要调整策略,并规划下一步的行动。这个循环不断重复,直到 Agent 判断任务目标已经达成。
-
核心流程图
-
关键 Prompt 设计技巧
ReAct 的效果在很大程度上依赖于精心设计的 Prompt。这个 Prompt 需要引导 LLM 在每一步:- 有效思考 (Thought): 指示 LLM 分析当前状况、回顾目标、评估已有信息、识别知识差距、制定行动计划。常常包含 “Think step-by-step” 或类似的指令。
- 做出行动决策 (Action): 指示 LLM 以特定格式(如 JSON)输出要调用的工具名称和参数,或者输出最终答案。
- 解读观察结果 (Observation): 帮助 LLM 理解工具返回的信息,并将其融入下一步的思考中。
Prompt 还需要包含可用工具的描述以及一些示例(Few-shot examples),来帮助 LLM 更好地理解如何在这个循环中工作。
-
优点分析
- 灵活性高: ReAct 能够根据每一步的观察结果动态调整策略,对预料之外的情况或工具执行失败具有较强的适应性。
- 处理知识密集型任务: 通过迭代地使用工具(如搜索)获取信息,ReAct 能较好地处理需要外部知识的任务。
- 透明度: “Thought”步骤提供了 Agent 决策过程的中间记录,便于理解和调试。
-
缺点分析
- 可能陷入无效循环: 如果 Agent 的思考或工具使用出现偏差,可能会导致在几个步骤之间重复循环而无法取得进展。
- 效率较低: 每一步都需要 LLM 进行思考和决策,对于长流程任务,LLM 调用次数多,可能导致较高的延迟和成本。
- 错误累积: 前一步的错误(如错误的思考或工具调用失败)可能会影响后续步骤,导致最终结果偏差。
-
代码实现分析 (以 LangChain/LlamaIndex 为例)
主流的 Agent 开发框架如 LangChain 和 LlamaIndex 都对 ReAct 提供了良好的支持,极大地简化了其实现。它们通常会提供一个核心的执行器模块,例如 LangChain 中的AgentExecutor
,负责管理整个 ReAct 循环。开发者可以通过简单的配置来快速启用 ReAct 逻辑。例如,在 LangChain 中,开发者常常可以通过
initialize_agent
函数并选用特定的agent_type
(如zero-shot-react-description
、react-docstore
等预置类型)来便捷地构建 ReAct Agent。类似地,LlamaIndex 也通过其AgentRunner
或相关类(如ReActAgent
)提供了对 ReAct 模式的支持,允许开发者将 LLM、工具集和 ReAct 的循环机制方便地组合起来。这些框架的执行器(Executor/Runner)内部封装了 ReAct 的核心流程:
- 格式化并发送包含思考、行动指令的 Prompt 给 LLM。
- 解析 LLM 输出的 Thought 和 Action。
- 根据 Action 查找并调用相应的工具。
- 将工具返回的 Observation 格式化并反馈给 LLM,开始下一轮循环。
- 处理循环的终止条件(如达到最大迭代次数、Agent 判断任务完成并输出 Final Answer 等)。
这意味着开发者通常只需要定义好 LLM 实例、准备好工具列表(Tool)以及可能定制化的基础 Prompt,就可以利用这些框架快速搭建并运行一个 ReAct Agent,而无需手动编写复杂的循环控制和解析逻辑。具体的实现细节和代码演练将在后续的框架实战章节(如第六、七章)中深入探讨。
3.2 Plan-and-Execute 框架:结构化规划与顺序执行
与 ReAct 的迭代试错不同,Plan-and-Execute (P-a-E) 采取了一种更结构化、更线性的方法。这种“先规划后执行”的模式是 AI Agent 领域中另一种常见的架构范式 [2]。顾名思义,它包含两个截然不同的阶段:
-
工作原理详解
- Planning (规划) 阶段: 首先,Agent(通常通过一次或少数几次 LLM 调用)基于用户给定的初始目标,生成一个完整的、通常是分步骤的执行计划。这个计划列出了为达成目标所需执行的所有步骤及其顺序。
- Execution (执行) 阶段: 然后,Agent 严格按照预先制定的计划,一步一步地顺序执行。通常每一步会涉及调用一个或多个工具。只有当前步骤成功完成后,才会进入下一步。
-
核心流程图
-
实现模式与关键点
构建 P-a-E Agent 通常涉及两个核心组件:- 规划器 (Planner): 负责理解初始目标并生成结构化的执行计划。这通常是一个专门的 LLM 调用,其 Prompt 旨在输出一个清晰的步骤列表或带有依赖关系的计划。计划的质量直接决定了 Agent 的最终表现。
- 执行器 (Executor): 负责解析计划,并按顺序调度工具执行每个步骤。它需要管理步骤间的状态传递(如上一步的输出作为下一步的输入),但不负责重新规划(除非设计了非常复杂的错误处理逻辑)。
-
与 ReAct 的对比分析
对比维度 ReAct (Reasoning + Acting) [1] Plan-and-Execute (P-a-E) [cf. 2] 核心机制 思考-行动-观察 的迭代循环 先生成完整计划,再按顺序执行 适应性 (Adaptability) 高,能根据实时观察调整策略 低,严格按预定计划执行,对意外情况脆弱 鲁棒性 (Robustness) 中等,易受单步错误影响,可能循环 较高(如果计划合理),流程更可预测 复杂任务处理 适合探索性、信息不全、需实时调整的任务 适合长流程、步骤明确、依赖关系清晰的任务 效率与成本 LLM 调用次数多,可能较慢,成本较高 规划阶段可能复杂,但执行阶段 LLM 调用少 可控性/可预测性 较低,行为更像“涌现” 较高,行为基本由初始计划决定
3.3 实操对比:构建并观察两种 Agent 的行为
理论讲解和对比之后,最好的理解方式是动手实践。我们将通过一个简单的任务来直观感受 ReAct 和 P-a-E 的差异。
-
任务设定
选择一个需要结合信息查询和简单处理的任务,例如:“查询中国北京市今天的天气怎么样?如果温度低于 10 摄氏度,提醒我穿件外套。” 这个任务包含:① 信息查询(天气 API 或搜索),② 信息处理(提取温度),③ 条件判断,④ 可能的最终行动(发送提醒)。 -
构建实现
我们将使用同一个框架(例如 LangChain)和相同的可用工具(如搜索 API、最终回答工具),分别构建一个 ReAct Agent 和一个 Plan-and-Execute Agent 来完成上述任务。 -
对比观察重点
在运行这两个 Agent 时,我们需要仔细观察并记录以下方面:- 执行轨迹: ReAct Agent 的完整 Thought-Action-Observation 序列 vs. P-a-E Agent 生成的初始 Plan 和后续的执行步骤记录。
- 中间步骤差异: ReAct 可能需要多次思考和尝试(比如第一次搜索没找到温度,第二次换关键词),而 P-a-E 的计划一旦生成,执行步骤通常是固定的。
- 错误处理(若模拟): 如果模拟天气查询失败的情况,ReAct Agent 是否会尝试重新查询或报告错误?P-a-E Agent 很可能会在失败的步骤卡住(除非有特定的重试逻辑)。
- 效率与资源消耗: 比较两者完成任务所需的 LLM 调用次数和大致时间。通常 ReAct 的调用次数会更多。
- 最终结果: 检查两者是否都准确完成了任务(正确查询天气、判断温度并给出合适的提醒或结论)。
-
结论总结
通过这个简单的实操对比,我们期望能直观地看到:ReAct 的灵活性和试错过程,以及 P-a-E 的结构性和可预测性。我们会发现,对于这个相对直接的任务,P-a-E 可能会更直接高效(如果规划得当),但如果天气查询接口不稳定,ReAct 则有潜力表现出更强的适应性。最终的选择取决于具体任务的性质、对可靠性和灵活性的不同要求,以及可接受的成本。
总结
本章深入探讨了 ReAct [1] 和 Plan-and-Execute [cf. 2] 这两种主流的 AI Agent 执行逻辑。ReAct 通过迭代的“思考-行动-观察”循环赋予了 Agent 灵活性和适应性,而 Plan-and-Execute 则通过“先规划后执行”的模式提供了更高的结构性和可预测性。
理解这两种基础框架的工作原理、优缺点和适用场景,是后续学习和构建更复杂、更专用 Agent 的重要基石。在下一章,我们将聚焦于如何为 Agent 配备更强大的“武器库”——探索高级工具的使用,包括代码执行、Web 浏览,以及我们专栏特别关注的知识图谱查询工具。
参考文献
[1] Yao, S., Zhao, J., Yu, D., Du, N., Shafran, I., Narasimhan, K., & Cao, Y. (2022). ReAct: Synergizing Reasoning and Acting in Language Models. arXiv preprint arXiv:2210.03629. (https://arxiv.org/abs/2210.03629)
[2] Wang, L., Ma, C., Feng, X., Zhang, Z., Yang, H., Zhang, J., … & Wang, X. (2023). A Survey on Large Language Model based Autonomous Agents. arXiv preprint arXiv:2308.11432. (https://arxiv.org/abs/2308.11432) (注:此文献作为代表,讨论了包括类似 Plan-and-Execute 在内的多种 Agent 架构范式)
内容同步在gzh:智语Bot