摘要 (TL;DR): ReAct 虽好,但在长链条复杂任务中容易“迷路”。本篇介绍 Plan-and-Solve 范式,它将任务解耦为“规划”与“执行”两个阶段。我们将实现一个能解决复杂逻辑问题的智能体,涵盖 (规划器)与 (执行器)的独立封装与状态管理。
关键词: Plan-and-Solve, Task Decomposition, Chain of Thought, State Management
本文是基于Datawhale的hello-agent开源项目做的一些笔记,内容仅供参考,原PDF以及代码可以去github仓库获取https://datawhalechina.github.io/hello-agents
在 Part 1 & 2 中,我们构建了 ReAct 智能体,它像侦探一样边走边看。现在,我们要构建一个像建Agent 智能体筑师一样的智能体:在动工前先画好蓝图。
掌握了反应式的 ReAct 后,我们探讨一种风格迥异但强大的范式:Plan-and-Solve。顾名思义,它将任务明确分为两个阶段:先规划 (Plan),后执行 (Solve) 。
4.3.1 Plan-and-Solve 的工作原理
如果说 ReAct 是根据现场蛛丝马迹推理的侦探,那么 Plan-and-Solve 则更像一位建筑师。它源于 Lei Wang 在 2023 年提出的 Plan-and-Solve Prompting 。
其核心为了解决 CoT (思维链) 在处理多步骤复杂问题时容易“偏离轨道”的问题。它将流程解耦为:
- 规划阶段 (Planning Phase):接收用户问题,不是直接解决,而是将其分解为一个清晰、分步骤的行动计划 。
- 执行阶段 (Solving Phase):严格按照计划 ,逐一执行步骤。每一步的输入都包含原始问题、完整计划以及之前步骤的执行结果 。
数学形式化
规划模型 生成计划 :
执行模型 逐步求解,依赖于历史结果:
流程可视化
(图 4.2 Plan-and-Solve 范式的两阶段工作流)
这种模式特别适用于结构性强、可清晰分解的任务,如多步数学应用题、长篇报告撰写或代码生成 。
4.3.2 规划阶段 (The Planner)
为了凸显该范式在结构化推理上的优势,我们将解决一个逻辑应用题,而非使用工具。
目标问题:
“一个水果店周一卖出了15个苹果。周二卖出的苹果数量是周一的两倍。周三卖出的数量比周二少了5个。请问这三天总共卖出了多少个苹果?”
1. 提示词设计 (Planner Prompt)
我们需要一个“顶级 AI 规划专家”,它的任务是将复杂问题拆解为 Python 列表格式的子任务。
“””
4.3.3 执行器与状态管理 (The Executor)
生成蓝图后,我们需要 来搬砖。执行器最关键的角色是 State Management (状态管理):它必须记录每一步的执行结果,并作为上下文传给下一步 。
1. 执行器提示词
执行器的目标不是拆解,而是“专注当下”。
2. 执行器实现
类循环遍历计划,维护 字符串。
4.3.4 整合与运行 (Orchestration)
最后,我们用 将规划器和执行器组合起来。这体现了“组合优于继承”的原则 。
运行结果分析:
- Planner 输出:
- Executor 执行:
- Step 1 -> Result: 15
- Step 2 -> Result: 30 (基于 Step 1)
- Step 3 -> Result: 25 (基于 Step 2)
- Step 4 -> Result: 70
- 最终答案: 70
通过这种方式,智能体避免了在一步推理中同时处理三个变量计算可能导致的算术错误(Hallucination in Logic)。
发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/242770.html原文链接:https://javaforall.net
