规划执行 Plan-and-Execute

Plan-and-Execute Agent

智能体架构中明确区分「规划阶段」和「执行阶段」的两阶段范式:先由规划器产出多步结构化计划,再由执行器按计划逐项调用工具,避免边想边做的漂移。

详细解释

Plan-and-Execute(规划-执行范式) 一句话定义:别让 Agent 像 ReAct 那样每走一步才想下一步要干嘛(边想边做容易走到沟里去),而是先花 200ms 「把整个任务的步骤清单一次性列出来」(比如做一个用户调研报告的 7 步计划),评审通过之后,再按清单一个一个步骤去执行,每执行完一步更新一下计划状态即可。2024 年之前主流是 ReAct(Thought-Action-Observation 循环),2024 年下半年开始 LangGraph、CrewAI、AutoGen 这些新框架几乎全部默认用 Plan-and-Execute 作为复杂任务的主范式,就是因为它在「5 步以上的长任务」上完成率比 ReAct 高 30% 至 40%。

Plan-and-Execute 的鼻祖是 2023 年 5 月的 HuggingGPT 论文和 2023 年 9 月的 TaskWeaver(微软亚研),之后 LangChain 提出的 LangGraph StateGraph 把这个模式工程化了——整个 Agent 是一个状态机,状态里有 plan: Step[]current_step_idx: intstep_results: Map<step_id, result> 三个核心字段。整个生命周期只在最开始跑一次 Planner,之后每次循环只跑 Executor 拿一个 step 去执行,不会每步重新规划。

唯元智创 的 Agent 平台默认就支持 Plan-and-Execute 模式:把任务丢进去先调用大规划器(GPT-4o / Claude Opus)输出 steps: [{id, name, tool, input_schema, depends_on}] 的 JSON 计划,然后由调度器按依赖关系 DAG 拓扑排序执行,支持并行分支、人工审批节点、失败重试策略;工程师也可以把「已有的业务工作流」固化成 Plan 模板直接复用,不用每次让 LLM 重新规划。

Plan-and-Execute vs ReAct vs 纯 Prompt Chaining:三种范式选型表

维度Plan-and-ExecuteReAct(边想边做)Prompt Chaining(静态链)
任务步数5 步以上,步骤间可能有并行依赖2-5 步,串行即可固定 2-10 步,结构完全确定
任务确定性半结构化:目标确定但路径不确定(如「调研竞品」)完全非结构化:走一步看一步(如「调试一段报错代码」)完全结构化:每个分支提前写死(如「客服工单处理」)
核心优点长任务完成率高;进度可追踪(用户能看到「第 3/7 步正在执行」)灵活,遇到意外可以动态改路径成本最低、延迟最低、最可控可测
核心缺点计划错了后面全错(垃圾进垃圾出)容易走偏、容易死循环、不可预测对计划外情况无应对能力
完成率(10 步任务)约 70% 至 85%约 30% 至 50%95%+(前提是任务确实在静态分支覆盖内)
成本倍数 vs 单模型×3 至 ×8×5 至 ×15×1.2 至 ×3
推荐选型场景调研、写作、数据分析报告、多步骤工具调用代码调试、开放环境探索所有能写死流程的生产业务

90% 企业落地的正确组合:外层用 Plan-and-Execute 负责整体大框架(给用户看进度),Plan 里每一个具体 Step 内部不是 ReAct,而是用「静态 Prompt Chaining + 工具调用」的确定性小链。这样兼顾灵活性和可控性,不会出现 Step 内部 ReAct 走偏的情况。

规划器(Planner)设计的三个关键细节

细节 1:规划输出必须严格是 DAG(有向无环图)JSON,绝不允许自然语言计划。错误的 Planner 输出:「第一步去 Google 搜索,第二步整理信息,第三步写报告」——执行器根本不知道怎么解析。正确的 Planner 输出必须长这样:{"steps": [{"id":"s1","name":"搜索竞品A官网","tool":"web_search","input":{"query":"竞品A pricing 2025"},"depends_on":[]}, {"id":"s2","name":"搜索竞品B官网","tool":"web_search","input":{"query":"竞品B pricing 2025"},"depends_on":[]}, {"id":"s3","name":"合并价格对比表","tool":"format_table","input":{"a_result":"{{s1.result}}","b_result":"{{s2.result}}"},"depends_on":["s1","s2"]}, {"id":"s4","name":"生成对比报告","tool":"llm_write","input":{"table":"{{s3.result}}"},"depends_on":["s3"]}]}。有了 DAG + depends_on,执行器自动知道 s1 和 s2 可以并行跑,s3 等前两个结束,s4 等 s3,调度逻辑零手写。

细节 2:必须加「计划评审 + 修正」环节。Planner 第一次输出的计划经常有漏步骤(比如忘记「先登录再查数据」)或工具调用错误(让文件搜索工具去调数据库)。所以规划之后必须再加一步 Plan Reviewer:把计划 + 可用工具列表 + 用户目标一起给 Reviewer 模型,问「这个计划有没有遗漏关键步骤、有没有工具用错、预计总步数是否超过 15 步」,有问题就把 Review 意见反馈给 Planner 重写一次。只花 10% 的额外成本,就能把后续执行失败率砍一半。

细节 3:计划必须支持人类在环(Human-in-the-Loop)的「计划确认」和「执行中修改」。Agent 规划好的 10 步计划如果涉及花钱(调付费 API、生成广告、群发邮件)、删数据、对外发消息,必须把计划展示给用户点「确认执行」才开始跑;并且执行到第 5 步的时候用户发现第 7 步不需要了,可以随时打断修改计划。没有人工审批的 Plan-and-Execute 在企业里 100% 会出事故(比如 Agent 自己规划了一步「给所有客户发推广邮件」并真的执行了)。

常见问题

Planner 一开始就计划错了(漏掉关键步骤),后面执行到一半才发现怎么办?
初始计划 100% 完美是不可能的,Plan-and-Execute 不是「定了就永远不能改」,而是「默认按计划走,遇到触发条件才局部重规划」。工程上标准做法是定义三种「触发 Replanner 的信号」,只要命中其中一个就自动调用 Replanner(只重排未执行的步骤,已执行的不动):(1)某一步连续失败 2 次——说明计划中这一步的工具选择不对,需要重规划;(2)某一步执行结果里出现了计划外的新信息(比如搜索发现有第三个竞品,原计划只对比 A 和 B),此时把新信息塞给 Replanner 问「要不要在剩余步骤中加一步对比 C」;(3)走到倒数第 2 步时,做一次「距离最终目标差距检查」——让 LLM 判断「按现有 step_results,再走最后一步能达到用户目标吗?」,如果不行,Replanner 在末尾补步骤。注意:是「局部重规划未执行部分」,不是整个计划推倒重来,否则已执行的步骤状态会乱。
Plan-and-Execute 的进度怎么给用户看?用户等 2 分钟盯着空白会焦虑。
用户可见的进度展示是 Plan-and-Execute 相比 ReAct 最大的 UX 优势,一定要用好。前端 UI 固定展示 4 个要素:(1)总进度条——分母 = 总 steps 数,分子 = 已完成 steps 数;(2)步骤清单展开列表——每一步显示状态图标(待执行灰/执行中蓝转圈/成功绿/失败红)+ 步骤名称 + 预计耗时;(3)当前步骤的「正在做什么」实时小字描述——比如「s3 正在合并对比表… 已拿到 A/B 两个搜索结果共 12 条数据」,把中间 Observation 缩略展示出来;(4)预计剩余时间(基于已执行 steps 的耗时均值估算)。再进阶一点:每完成一个 Step,自动把该 Step 的核心结果以「折叠卡片」形式展示在对话流里(用户不用等全部结束就能看到阶段性产出),比如「已完成竞品A价格抓取 → 展开查看详情」。这样用户从「焦虑等待黑盒」变成「看着 Agent 一步步干活」,满意度飙升。
小团队怎么选框架?LangGraph 手写 DAG 还是 CrewAI 开箱即用?
给一个非常明确的选型建议,不用纠结:(1)团队规模 ≤3 人,目标是快速出 Demo 验证价值 → 直接 CrewAI / AutoGen(声明式「角色 + 任务」,不用手写 DAG),2 天跑通调研报告 Agent;(2)团队规模 4-20 人,目标是把 Agent 接到生产环境、要可控、要和现有系统(数据库、消息队列、鉴权)打通 → 必须 LangGraph 手写 StateGraph + DAG,Plan 和 Executor 可以完全自定义,接入自己的可观测平台和重试策略;(3)超大规模企业级 → 直接用唯元智创平台内置的 Plan-and-Execute,不需要从零搭框架,已经做好了鉴权、人工审批、审计日志、多租户、成本归因这些生产要件,团队只需要写业务 Planner Prompt 和 Step 工具函数就行。无论选什么框架,切记一个铁则:Agent 框架只是骨架,真正决定效果的 80% 是你 Planner Prompt 的打磨、Plan Reviewer Rubric 的细化、工具输入输出的 Schema 约束——这些东西不管用什么框架都得自己花功夫写,框架只是帮你省了调度和状态管理的代码。