AI Agent技术框架解析:Plan & Execute 深度剖析

目录
1. 主流技术框架概览
四大核心框架对比
| 框架名称 | 适用场景 | 核心特点 | GitHub Stars趋势 |
|---|---|---|---|
| Plan and Execute | 复杂项目管理 | 分步规划+执行反馈机制 | ⭐⭐️⭐️⭐ |
| Self Ask | 知识推理任务 | 自问自答式知识验证 | ⭐⭐️⭐ |
| Thinking and Sacrifici | 资源优化场景 | 成本效益分析优先 | ⭐⭐ |
| ReAct | 交互式任务处理 | 推理+行动实时结合 | ⭐⭐️⭐️⭐️ |
框架选择建议:根据任务复杂度选择框架,简单任务推荐ReAct,多步骤复杂任务优先Plan and Execute
2. Plan & Execute 框架详解
Plan-and-Execute这个方法的本质是先计划再执行,即先把用户的问题分解成一个个的子任务,然后再执行各个子任务,并根据执行情况调整计划。Plan-and-Execute相比ReWOO,最大的不同就是加入了Replan机制,其架构上包含规划器、执行器和重规划器:
- 规划器Planner负责让 LLM 生成一个多步计划来完成一个大任务,在书籍运行中,Planner负责第一次生成计划;
- 执行器接收规划中的步骤,并调用一个或多个工具来完成该任务;
- 重规划器Replanner负责根据实际的执行情况和信息反馈来调整计划
下图是Plan-and-Execute的原理:
- Planner接收来自用户的输入,输出具体的任务清单;
- 将任务清单给到Single-Task Agent,即执行器,执行器会在循环中逐个处理任务;
- 执行器每处理一个任务,就将处理结果和状态同步给Replanner,Replanner一方面会输出反馈给用户,另一方面会更新任务清单;
- 任务清单再次给到执行器进行执行。

核心组件架构
Plan-and-Execute的实现过程
关键特性解析
- 双阶段处理:严格区分规划(Planning)和执行(Execution)阶段
- 动态调整机制:通过State Update实现任务流动态修正
- 工具兼容性:支持无缝集成外部API/数据库等工具
- 记忆持久化:自动保存任务执行上下文
3. 核心流程拆解
五步执行流程图
- 构建执行器,请求接收:User → LM的原始输入
- 定义系统状态,任务分解:生成有序子任务列表(Task List)
为什么要定义系统状态?因为在处理复杂的不确定性问题时,一个非常有效的方法是将执行阶段拆分为状态机和执行器的循环。
执行器将外部事件输入状态机,状态机告诉执行器必须采取的操作,而原始计划则成为状态机起始状态的初始化程序。这样做的优点在于状态机不依赖于混乱的执行细节,因此我们可以对其进行详尽而彻底的测试。

首先,我们需要跟踪当前计划,将其表示为字符串列表;然后跟踪先前执行的步骤,将其表示为元组列表;最后,还需要状态来表示最终响应以及原始输入。 - 定义Planner,逐项执行:
Planner的主要任务就是接收输入,并输出初始的Task List。
相比ReWOO的Planner,这里的Planner的Prompt会有所不同,“对于给定的目标,制定一个简单的分步计划。该计划涉及单个任务,如果正确执行,将产生正确的答案,不要添加任何多余的步骤,最后一步的结果应该是最终答案。确保每一步都包含所需的所有信息,不要跳过步骤。”- 工具选择判断
- 状态更新(成功/失败标记)
- 循环校验,定义Replanner:
Replanner的主要任务是根据子任务的执行结果,更新计划。
Replanner和Planner的prompt模板非常相似,但是约束了Replanner的目标任务、原始Plan、已执行的步骤、以及更新计划。
比如更新计划,我们要求“根据执行的步骤更新计划。如果不需要更多步骤,直接可以返回给用户;否则就填写计划,并向计划中添加仍需完成的步骤,不要将之前完成的步骤作为计划的一部分返回”while not all(task.status == 'done' for task in task_list): replanning() execute_retry() - 构建流程图,结果聚合:整合各子任务结果生成最终响应
下面,我们构建流程图,将Planner、Replanner、执行器等节点添加进来,执行并输出结果。
异常处理机制
- 三级重试策略:
- 即时重试(3秒内)
- 工具替换重试
- 人工干预兜底
4. 代码实现与实战
环境配置
# 推荐使用Conda环境
conda create -n agent_env python=3.9
conda activate agent_env
pip install langchain==0.2.1 wikipedia requests
核心代码实现
from langchain.agents import PlanAndExecute, load_tools
from langchain.llms import OpenAI
# 初始化组件
llm = OpenAI(temperature=0.5)
tools = load_tools(["serpapi", "wikipedia"], llm=llm)
# 构建Agent
agent = PlanAndExecute(
planner=llm,
executer=llm,
tools=tools,
verbose=True
)
# 执行示例
question = "在纽约用100美元能买多少束玫瑰?分步骤说明价格计算过程"
result = agent.run(question)
print(f"\n最终答案:{result}")
执行结果示例
[规划阶段]
1. 查询纽约玫瑰单束均价
2. 获取美元汇率数据
3. 计算可购买数量
[执行阶段]
• 通过SerpAPI获取当前价格:$18.5/束
• 查询实时汇率:1美元=6.9人民币
• 计算:100/(18.5*1) ≈ 5.4束
最终答案:在纽约用100美元约可购买5束标准玫瑰(取整计算)
5. 常见问题分析
典型报错处理
| 错误现象 | 解决方案 | 预防措施 |
|---|---|---|
| 无限循环 | 设置max_iterations参数 | 添加循环终止条件 |
| 工具调用超时 | 增加timeout阈值 | 使用异步调用 |
| 结果精度异常 | 添加数据校验层 | 限制数值范围 |
结果优化技巧
- 价格精确处理:
def format_price(value): return round(value, 2) # 保留两位小数 - 多源验证:交叉比对Wikipedia和电商平台数据
- 单位换算增强:
CURRENCY_CONVERTER = { 'CNY': 6.9, 'EUR': 0.95, # ...其他货币 }
6. 框架对比建议
四大框架适用场景对比
| 场景特征 | Plan and Execute | ReAct | Self Ask | Thinking and Sacrifici |
|---|---|---|---|---|
| 多步骤任务 | ✓✓✓✓ | ✓✓✓ | ✓ | ✓✓ |
| 实时交互需求 | ✓ | ✓✓✓✓ | ✓✓ | ✓ |
| 资源成本敏感 | ✓✓ | ✓ | ✓✓✓ | ✓✓✓✓✓ |
| 知识推理需求 | ✓✓ | ✓✓✓ | ✓✓✓✓✓ | ✓✓ |
选型矩阵:当遇到需要处理超过3个步骤的复杂任务时,Plan and Execute的架构优势将显著体现
最佳实践提示:
- 始终添加执行超时限制
- 对数值计算结果进行合理性校验
- 定期清理记忆存储防止内存泄漏
- 使用版本锁定保证环境一致性:
# requirements.txt langchain==0.2.1 openai==0.27.8


被折叠的 条评论
为什么被折叠?



