「AI Agent 全栈开发 50 讲」——从本地模型部署到多智能体系统,一年省 87 万 第 27 课 | Plan-and-Execute:先规划再执行
第 27 课 | Plan-and-Execute先规划再执行ReAct 是「边想边做」Plan-and-Execute 是「先想好再动手」。对于复杂分析任务先制定完整计划再逐步执行成功率更高、步骤更可控。一、业务痛点ReAct 的局限性在第 24 课我们学习了 ReAct 模式Thought → Action → Observation 循环它非常适合简单的多步查询用户问「对比 Q1 和 Q2 的销售趋势」 ReAct: Thought: 我需要查 Q1 数据 → Action: 查 Q1 → Observation: Q1100万 Thought: 还需要查 Q2 → Action: 查 Q2 → Observation: Q2120万 Thought: 对比完成 → Answer: Q2 增长 20%但面对复杂任务时ReAct 的「走一步看一步」就成了问题问题表现影响缺乏全局规划可能走错方向需要回退浪费 Token 和时间步骤不可控不知道还需要多少步用户体验差容易遗漏想到哪做到哪可能漏掉关键步骤结果不完整效率低串行思考无法并行识别耗时更长解决方案Plan-and-Execute先规划再执行二、Plan-and-Execute 核心思想 用户提问对比华东和华南的销售情况 Planner 规划阶段生成完整执行步骤 执行计划1. 查询华东区各品类销售额2. 查询华南区各品类销售额3. 计算两区差异并排序4. 生成对比分析报告✅ Step 1 执行✅ Step 2 执行✅ Step 3 执行✅ Step 4 执行 输出最终结果核心区别维度ReActPlan-and-Execute决策时机边做边想先想好再做全局视角局部最优全局最优步骤数量不可控完全可控可并行化不支持可识别并行任务适用场景简单查询、探索式任务复杂分析、报表生成、多维度对比三、实现方案3.1 状态定义classPlanState(TypedDict):question:str# 用户问题plan:list[str]# 执行计划步骤列表current_step:int# 当前执行到第几步results:list[str]# 每步的执行结果answer:str# 最终答案3.2 Planner制定计划defplanner(state:PlanState)-PlanState:将用户问题分解为执行步骤qstate[question]steps[]# 根据问题类型生成不同计划if对比inqand华东inqand华南inq:steps[查询华东区各品类销售额,查询华南区各品类销售额,计算两区差异并排序,生成对比分析报告,]elif趋势inq:steps[查询最近12个月的销售数据,计算环比增长率,识别趋势变化点,生成趋势分析报告,]state[plan]steps state[current_step]0state[results][]returnstate3.3 Executor逐步执行defexecutor(state:PlanState)-PlanState:执行当前步骤stepstate[plan][state[current_step]]resultexecute_step(step)# 实际执行state[results].append(result)state[current_step]1returnstatedefshould_continue(state:PlanState)-str:判断是否继续ifstate[current_step]len(state[plan]):returnsummarizereturnexecutor四、LangGraph 实现是否STARTPlannerExecutor还有步骤?SummarizeEND五、适用场景判断场景推荐模式原因简单查询单次即可完成ReAct不需要规划探索式分析用户意图不明确ReAct灵活调整定期报表每月销售报告Plan-and-Execute步骤固定多维度对比华东 vs 华南Plan-and-Execute步骤明确复杂分析趋势对比预测Plan-and-Execute需要全局规划六、本课小结ReAct 边想边做适合简单和探索性任务Plan-and-Execute 先规划再执行适合复杂结构化任务两者可以结合先用 Plan-and-Execute 制定框架再在每个步骤中用 ReAct 灵活执行配套代码code/lesson-27-plan-execute/plan_execute_agent.py