【AiCoding】ReAct VS Plan—Execute

【AiCoding】ReAct VS Plan—Execute
云初ReAct+Tool call
Reasoning+Acting 推理和行动交替进行
(Reasoning + Acting)执行流程
深入ReAct模式
基础ReAct
LLM每一步都输出Thought+Action,然后执行Action,观察结果继续循环
整体流程
输入用户问题 + 工具列表 + 历史轨迹 送入 LLM
Thought(思考,模型输出)
: 模型基于已有信息分析:现在知道什么、缺什么、下一步该做什么;判断是否还需要调用工具,还是直接出答案
示例:Thought: 用户想知道今天石家庄气温,我缺少实时数据,需要调用天气查询工具
Action(行动,模型输出结构化指令)
: 输出工具名称 + 参数,交给框架 / 调度器执行;不是模型自己调用,是外层系统执行工具调用
示例:Action: SearchWeather (city=”石家庄”)
Observation(观察,系统回填,不是模型生成)
: 工具执行返回结果(搜索内容、计算结果、接口返回、报错信息),追加到上下文历史里
示例:Observation: 石家庄今日 22℃,晴
循环判断(ReAct Loop): 把
Observation并入对话历史,回到第 2 步,再次交给 LLM 思考; 当模型判断信息足够,输出 Final Answer,终止循环; 一般会加最大步数上限,防止死循环。
1 | Thought: 用户要我创建一个 Java 项目,我需要用 create_project 工具 |
Reflexion
ReAct 执行循环 + 评估器 Evaluator + 反思 Reflector + episodic 记忆库;不微调模型权重,用自然语言复盘、沉淀教训,跨轮次复用经验
在ReAct的基础上添加了反思的功能,例如我本次需要让Agent去创建HelloCli的工程在code_agent文件夹下,当我没有去创建文件夹code_agent他就会回顾自己的行动,总结成功教训,保存到记忆中,下次遇到就会首先检查文件夹是否创建与是否存在,导致可能覆盖的状况。
1 | Thought: 刚才创建项目时我没有检查目录是否存在,导致可能覆盖已有文件。下次应该先 list_dir 检查。 |
模型工具(Function/Tool)
- name(工具名称):唯一标识,模型用来指定调用哪个工具,比如
get_weather - description(工具描述):告诉模型这个工具能干什么、什么时候该调用
- parameters(参数 schema):入参定义,参数名、类型、是否必填、说明
示例
1 | { |
一句话分工: name:找谁;description:什么时候用;parameters:带什么参数
Plan和DAG
Plan-and-Execute 把一次任务交给两个角色。规划器(Planner)负责出计划,它调用模型时不给任何工具,只要求模型输出一份 JSON 格式的计划。执行器(PlanExecuteAgent)拿着这份计划,按依赖关系一批一批地跑任务。正常情况下规划器只调用一次模型;用户审阅时补充要求,或者任务失败后需要重新规划,规划器会再调用模型。
DFS 深度优先搜索 Depth-First Search
核心思想:一路往深处走,走不通再回溯,优先深度、后广度,像走迷宫,一条路走到头,碰壁再退回来试别的分支。
核心流程
- 访问当前节点,标记已访问(防止环路重复走)
- 依次遍历当前节点的相邻子节点
- 如果子节点没访问过,递归进入这个子节点(继续往下深挖)
- 所有子节点遍历完 → 回溯,回到上一层,尝试其他分支
口诀:先深挖,走到底,无路回退,再探旁支
| 特性 | ReAct | Plan-and-Execute |
|---|---|---|
| LLM 调用次数 | 多(每步都调) | 少(初始规划一次,执行阶段调用轻量,异常才重规划) |
| 执行速度 | 慢(每步都有 LLM 网络往返) | 快(规划一次,后续步骤本地 / 轻量执行) |
| Token 消耗 | 高 | 低 |
| 灵活性 | 高,边执行边调整,遇到意外随时换路线 | 低,优先按照预先制定的计划执行 |
| 可预测性 | 低,路径不可控,容易跑偏绕路 | 高,计划可见,步骤可审计、可人工预审 |
| 错误恢复 | 容易,单步失败后下一轮 Thought 即时调整策略 | 一般,单步出错需要触发重规划流程,成本更高 |
| 适用场景 | 探索类、不确定环境、调试代码、信息检索、未知路径任务 | 流程固定、长步骤流水线、批量任务、需要事前审核方案的任务 |
- ReAct:边走边想(Thought-Action-Observation 循环)
- Plan-and-Execute:先全局规划,再按计划执行,失败才重规划
什么时候用 ReAct
- 任务简单,1-3 步就能完成
- 需要探索性操作,不确定具体步骤
- 用户想看到思考过程
- 需要频繁的人机交互
比如“查看当前目录有什么文件”,直接 ReAct 一步完成。
什么时候用 Plan-and-Execute
- 任务复杂,需要多步操作
- 步骤之间有明确依赖关系
- 追求执行效率
- 需要可预
比如“搭建一个完整的 Web 项目,包括前后端、数据库、部署”,用 Plan-and-Execute 更合适。




