当前位置: 首页 > news >正文

模块二,Agent规划模式的四个工具思考

📋 本文目录

  • 一、前言

  • 二、工具概览

  • 三、工具详解

    • 3.1 任务分解器

    • 3.2 计划生成器

    • 3.3 执行验证器

    • 3.4 计划管理器

  • 四、实战案例

  • 五、工具链整合

  • 六、总结


一、前言

1.1 工具化的规划

有了理论基础,我们来动手实现。规划能力是Agent从"执行指令"到"主动规划"的关键升级。把规划功能拆分为4个独立工具,灵活组合使用:

  • 可以单独使用任务分解器来拆解复杂问题

  • 可以用工具链完成"分解-生成-验证-管理"完整流程

  • 可以集成到Agent中,让Agent自主规划任务

1.2 你将学到什么?

  • ✅ 实现任务分解工具

  • ✅ 实现计划生成工具

  • ✅ 实现执行验证工具

  • ✅ 实现计划管理工具


二、工具概览

2.1 4个工具

工具

功能

任务分解器

把复杂任务拆成子任务

计划生成器

为子任务制定详细计划

执行验证器

验证计划的可行性

计划管理器

管理和调整计划

2.2 文件结构

07_planning/ ├── shared_planning.py # 共享存储 ├── tool_1_task_decomposer.py # 工具1 ├── tool_2_plan_generator.py # 工具2 ├── tool_3_execution_validator.py # 工具3 ├── tool_4_plan_manager.py # 工具4 ├── planning_chain_demo.py # 工具链演示 ├── planning_agent_demo.py # Agent演示 └── sample_planning_tasks.json # 示例数据

三、工具详解

3.1 任务分解器

功能说明:把复杂任务智能拆分为多个子任务。支持两种分解模式:简单分解(平级子任务)和分层分解(多层子任务)。

3.2 完整代码

from langchain.tools import tool import sys import os sys.path.insert(0, os.path.dirname(os.path.abspath(__file__))) from shared_planning import add_plan @tool def task_decomposer(task: str, decomposition_type: str = "simple"): """任务分解器 - 将复杂任务拆分为子任务 参数: task: 要分解的复杂任务 decomposition_type: 分解类型 (simple/hierarchical) 返回: 分解后的子任务列表 """ from langchain_openai import ChatOpenAI from langchain_core.prompts import ChatPromptTemplate # 初始化LLM try: llm = ChatOpenAI( base_url="http://localhost:11434/v1", api_key="ollama", model="qwen2.5:3b-instruct", temperature=0.7 ) except Exception as e: return f"[ERROR] LLM初始化失败: {e}" # 不同分解策略的提示 if decomposition_type == "simple": prompt = ChatPromptTemplate.from_messages([ ("system", """你是一个任务分解专家。请将给定的复杂任务分解为3-5个清晰的子任务。 请用以下格式输出: 【任务理解】 简要说明这个任务的目标 【子任务列表】 1. [子任务1名称] - [子任务1描述] 2. [子任务2名称] - [子任务2描述] 3. [子任务3名称] - [子任务3描述] ... 【执行顺序】 说明子任务应该按照什么顺序执行"""), ("user", "任务: {task}") ]) else: prompt = ChatPromptTemplate.from_messages([ ("system", """你是一个分层任务分解专家。请将给定的复杂任务分解为多个层次的子任务。 请用以下格式输出: 【第一层(主任务)】 - 主任务名称 【第二层(子任务)】 1. [子任务1] - 子子任务1.1 - 子子任务1.2 2. [子任务2] - 子子任务2.1 - 子子任务2.2 【执行顺序】 说明执行顺序"""), ("user", "任务: {task}") ]) chain = prompt | llm result = chain.invoke({"task": task}) # 解析子任务(简化版) subtasks = [] lines = result.content.split("\n") for i, line in enumerate(lines): if line.strip().startswith(("1.", "2.", "3.", "4.", "5.")): subtasks.append({"step": len(subtasks)+1, "description": line.strip()}) # 保存计划 plan_id = f"plan_{len(get_all_plans())}" if 'get_all_plans' in dir() else f"plan_{hash(task)}" add_plan(plan_id, task, subtasks, decomposition_type) output = [] output.append("=" * 80) output.append("【任务分解器】") output.append("=" * 80) output.append(f"\n原始任务: {task}") output.append(f"分解类型: {decomposition_type}") output.append("\n" + "=" * 80) output.append("【分解结果】") output.append("=" * 80) output.append(result.content) output.append("\n" + "=" * 80) output.append("[TIP] 说明:将复杂任务分解为可管理的小任务") output.append("=" * 80) return "\n".join(output)

3.3 使用示例

result = task_decomposer.invoke({ "task": "周末在家里举办一个小型派对", "decomposition_type": "simple" }) print(result)

3.2 计划生成器

功能说明:为子任务制定详细的执行计划,包括时间安排、负责人、具体步骤等。如果没有提供子任务,会先调用任务分解器。

完整代码

from langchain.tools import tool import sys import os sys.path.insert(0, os.path.dirname(os.path.abspath(__file__))) from shared_planning import add_plan @tool def plan_generator(task: str, subtasks: list = None): """计划生成器 - 为子任务生成详细的执行计划 参数: task: 原始任务 subtasks: 子任务列表(可选,如不提供会先调用任务分解) 返回: 详细执行计划 """ from langchain_openai import ChatOpenAI from langchain_core.prompts import ChatPromptTemplate # 初始化LLM try: llm = ChatOpenAI( base_url="http://localhost:11434/v1", api_key="ollama", model="qwen2.5:3b-instruct", temperature=0.7 ) except Exception as e: return f"[ERROR] LLM初始化失败: {e}" # 如果没有子任务,先生成 if not subtasks: from tool_1_task_decomposer import task_decomposer subtasks_text = task_decomposer.invoke({"task": task, "decomposition_type": "simple"}) else: subtasks_text = "\n".join([f"{s['step']}. {s['description']}" for s in subtasks]) prompt = ChatPromptTemplate.from_messages([ ("system", """你是一个计划制定专家。请为给定的任务和子任务生成详细的执行计划。 请用以下格式输出: 【总体目标】 明确任务的最终目标 【执行时间表】 1. [子任务1] - [预计时间] - [负责人/工具] - 具体步骤: * 步骤1 * 步骤2 2. [子任务2] - [预计时间] - [负责人/工具] - 具体步骤: ... 【注意事项】 列出执行过程中需要注意的关键点 【成功标准】 说明如何判断任务成功完成"""), ("user", "任务: {task}\n\n子任务:\n{subtasks_text}") ]) chain = prompt | llm result = chain.invoke({"task": task, "subtasks_text": subtasks_text}) output = [] output.append("=" * 80) output.append("【计划生成器】") output.append("=" * 80) output.append(f"\n任务: {task}") output.append("\n" + "=" * 80) output.append("【详细执行计划】") output.append("=" * 80) output.append(result.content) output.append("\n" + "=" * 80) output.append("[TIP] 说明:好的计划让执行更有条理") output.append("=" * 80) return "\n".join(output)

4.3 使用示例

result = plan_generator.invoke({"task": "周末在家里举办一个小型派对"}) print(result)

3.3 执行验证器

功能说明:验证计划的可行性,发现潜在风险,提供改进建议。在执行前进行验证,可以大大减少实际执行时的问题。

完整代码

from langchain.tools import tool import sys import os sys.path.insert(0, os.path.dirname(os.path.abspath(__file__))) from shared_planning import get_all_plans @tool def execution_validator(plan: str, task: str = None): """执行验证器 - 验证计划的可行性并提供改进建议 参数: plan: 要验证的计划 task: 原始任务(可选) 返回: 验证结果和改进建议 """ from langchain_openai import ChatOpenAI from langchain_core.prompts import ChatPromptTemplate # 初始化LLM try: llm = ChatOpenAI( base_url="http://localhost:11434/v1", api_key="ollama", model="qwen2.5:3b-instruct", temperature=0.7 ) except Exception as e: return f"[ERROR] LLM初始化失败: {e}" prompt = ChatPromptTemplate.from_messages([ ("system", """你是一个计划验证专家。请仔细分析给定的计划,评估其可行性并提供改进建议。 请用以下格式输出: 【可行性评估】 - 总体评分: [1-10分] - 评估理由: [详细说明] 【潜在风险】 列出执行过程中可能遇到的问题 【改进建议】 提供具体的改进建议 【优化后的计划】 基于以上分析,提供一个优化后的版本"""), ("user", "任务: {task}\n\n计划:\n{plan}") ]) chain = prompt | llm result = chain.invoke({"task": task or "未指定", "plan": plan}) output = [] output.append("=" * 80) output.append("【执行验证器】") output.append("=" * 80) output.append("\n" + "=" * 80) output.append("【验证结果】") output.append("=" * 80) output.append(result.content) output.append("\n" + "=" * 80) output.append("[TIP] 说明:验证可以提前发现问题,减少执行风险") output.append("=" * 80) return "\n".join(output)

5.3 使用示例

test_plan = """ 【子任务列表】 1. 邀请客人 2. 准备食物 3. 布置场地 4. 组织活动 【执行顺序】 先邀请,再准备,然后布置,最后组织 """ result = execution_validator.invoke({"plan": test_plan, "task": "举办派对"}) print(result)

3.4 计划管理器

功能说明:管理计划的生命周期:查看、获取详情、摘要、清空、导出、调整等。方便追踪和管理多个计划。

完整代码

from langchain.tools import tool import sys import os import json sys.path.insert(0, os.path.dirname(os.path.abspath(__file__))) from shared_planning import ( get_all_plans, get_all_comparisons, clear_plan_store, format_plan_summary ) @tool def plan_manager(command: str, data: dict = None): """计划管理器 - 管理和调整计划 参数: command: 命令类型 (list/get/summary/clear/export/adjust) data: 相关数据(用于adjust命令) 返回: 操作结果 """ if command == "list": # 列出所有计划 plans = get_all_plans() output = ["=" * 80, "【计划列表】", "=" * 80] for i, plan in enumerate(plans, 1): output.append(f"\n计划 {i}:") output.append(f" ID: {plan['id']}") output.append(f" 任务: {plan['task'][:50]}...") output.append(f" 类型: {plan['type']}") output.append(f" 子任务数: {len(plan['subtasks'])}") output.append("\n" + "=" * 80) return "\n".join(output) elif command == "get" and data and "plan_id" in data: # 获取特定计划 plans = get_all_plans() plan = next((p for p in plans if p["id"] == data["plan_id"]), None) if plan: output = ["=" * 80, "【计划详情】", "=" * 80] output.append(f"ID: {plan['id']}") output.append(f"任务: {plan['task']}") output.append(f"类型: {plan['type']}") output.append(f"\n子任务:") for subtask in plan["subtasks"]: output.append(f" {subtask['step']}. {subtask['description']}") output.append("\n" + "=" * 80) return "\n".join(output) else: return f"[ERROR] 未找到计划: {data['plan_id']}" elif command == "summary": # 获取摘要 return format_plan_summary() elif command == "clear": # 清空 clear_plan_store() return "[OK] 已清空所有计划" elif command == "export": # 导出 data = { "plans": get_all_plans(), "comparisons": get_all_comparisons() } output_file = "output_plan_traces.json" with open(output_file, "w", encoding="utf-8") as f: json.dump(data, f, ensure_ascii=False, indent=2) return f"[OK] 已导出到 {output_file}" elif command == "adjust" and data: # 调整计划(模拟) return f"[OK] 计划已根据反馈调整: {data.get('feedback', '无反馈')}" else: return f"[ERROR] 未知命令: {command}\n可用命令: list/get/summary/clear/export/adjust"

6.3 使用示例

# 获取摘要 result = plan_manager.invoke({"command": "summary"}) print(result) # 列出所有计划 result = plan_manager.invoke({"command": "list"}) print(result)

四、实战案例

4.1 工具链演示

运行完整的工具链演示:

cd 07_planning python planning_chain_demo.py

4.2 工具功能对比表

工具

核心功能

适用场景

优势

任务分解器

将复杂任务拆分为子任务

任务规划初期

简化复杂问题

计划生成器

为子任务制定详细计划

执行前准备

步骤清晰

执行验证器

验证计划可行性

执行前检查

降低风险

计划管理器

管理计划生命周期

计划跟踪

便于管理

4.3 实际应用案例

案例1:组织派对任务分解

任务:周末在家里举办一个小型派对

分解结果

【任务理解】 在周末举办一个小型家庭派对,需要邀请朋友、准备食物、布置场地、组织活动。 【子任务列表】 1. 邀请嘉宾 - 通过电话或消息邀请朋友,确认出席人数 2. 准备食物 - 根据人数准备菜单,采购食材 3. 布置场地 - 装饰房间,准备桌椅 4. 组织活动 - 准备游戏和娱乐项目 【执行顺序】 先邀请嘉宾,再准备食物,然后布置场地,最后组织活动

代码调用

from tool_1_task_decomposer import task_decomposer result = task_decomposer.invoke({ "task": "周末在家里举办一个小型派对", "decomposition_type": "simple" }) print(result)
案例2:项目计划生成

任务:开发一个个人博客网站

计划结果

【任务计划】 任务: 开发一个个人博客网站 【详细计划】 阶段1: 需求分析(1天) - 确定功能需求 - 设计页面结构 - 选择技术栈 阶段2: 环境搭建(1天) - 配置开发环境 - 创建项目结构 - 初始化Git仓库 阶段3: 核心功能开发(3天) - 用户认证模块 - 文章管理模块 - 评论系统 阶段4: 测试部署(1天) - 单元测试 - 部署上线

代码调用

from tool_2_plan_generator import plan_generator result = plan_generator.invoke({ "task": "开发一个个人博客网站" }) print(result)
案例3:计划可行性验证

计划:3天完成一个大型项目

验证结果

【可行性评估】 - 总体评分: 6/10 - 主要风险: 时间紧张 【风险分析】 1. 时间不足 - 大型项目通常需要更多时间 2. 需求不明确 - 可能导致返工 【改进建议】 1. 增加时间预算至5-7天 2. 先进行需求评审 3. 制定详细的每日计划 【调整建议】 建议将项目拆分为多个阶段,逐步推进

代码调用

from tool_3_execution_validator import execution_validator test_plan = """阶段1: 需求分析(1天) 阶段2: 设计开发(1天) 阶段3: 测试上线(1天)""" result = execution_validator.invoke({ "plan": test_plan, "task": "完成大型项目" }) print(result)

4.4 完整工具链调用示例

我们将4个工具组合成完整的规划流程:

from tool_1_task_decomposer import task_decomposer from tool_2_plan_generator import plan_generator from tool_3_execution_validator import execution_validator from tool_4_plan_manager import plan_manager # 步骤1:分解任务 task = "开发一个个人博客网站" decomposition_result = task_decomposer.invoke({ "task": task, "decomposition_type": "simple" }) print(decomposition_result) # 步骤2:生成计划 plan_result = plan_generator.invoke({"task": task}) print(plan_result) # 步骤3:验证计划 validation_result = execution_validator.invoke({ "plan": plan_result, "task": task }) print(validation_result) # 步骤4:管理计划 summary = plan_manager.invoke({"command": "summary"}) print(summary)

五、工具链整合

5.1 规划工具链架构

用户任务 ↓ [任务分解器] 将复杂任务拆分为子任务 ↓ [计划生成器] 为子任务制定详细计划 ↓ [执行验证器] 验证计划可行性,发现风险 ↓ [计划管理器] 存储、管理和调整计划 ↓ 执行阶段

5.2 工具协作流程

步骤

工具

作用

1

任务分解器

拆分任务为子任务

2

计划生成器

生成详细执行计划

3

执行验证器

验证并优化计划

4

计划管理器

存储和管理计划


六、总结

6.1 本文要点

工具

核心能力

价值

✅ 任务分解器

将复杂任务拆分为子任务

简化问题

✅ 计划生成器

制定详细执行计划

步骤清晰

✅ 执行验证器

验证计划可行性

降低风险

✅ 计划管理器

管理计划生命周期

便于跟踪

6.2 学习路径建议

阶段

任务

目标

基础

理解每个工具的功能

掌握单个工具使用

进阶

组合使用多个工具

构建简单工具链

高级

集成到完整Agent

实现智能规划系统


点赞 + 关注,更新不迷路!🚀

http://www.jsqmd.com/news/919057/

相关文章:

  • 如何通过Betaflight的模块化架构解决无人机飞控的三大核心挑战
  • 告别手动拖拽!用CANape脚本自动化添加观测/标定量,提升效率50%
  • 别再只用GetX做状态管理了!它的路由、主题、网络请求全家桶功能,一个Demo全搞定
  • 告别IP和端口:群晖DSM7反向代理实战,把局域网Jellyfin、aria2都挂上你的专属域名
  • 白话Skills之一:什么是 Skills?
  • 从40G到100G:手把手拆解XLGMII/CGMII接口的时钟、数据与控制信号(附时序图)
  • Unlock Music音乐解密工具:高效解锁加密音乐的完整免费方案
  • 商业智能实战:从数据孤岛到决策引擎的五大行业案例解析
  • Win11下JDK17与Burpsuite 2024保姆级联动配置指南(含一键启动脚本)
  • AI落地实战:构建高效人机协同系统的核心思路与工程实践
  • 别急着改GOOS!遇到Go文件被‘排除’,先检查这个VSCode/GoLand的隐藏设置
  • Scala核心编程(十一)数据结构之集合操作
  • HS2-HF_Patch终极指南:新手如何快速安装Honey Select 2汉化去码补丁
  • 文档分类实战:从业务痛点到智能落地的完整指南
  • 2026年上海小程序定制开发公司推荐榜单:从选型逻辑到十家全链路服务商深度横评 - 新闻快传
  • 用 changedetection.io 监控网页变化和价格变动
  • 保姆级教程:在Ubuntu 22.04/20.04上为PX4安装MAVROS(ROS2 Humble/Foxy避坑指南)
  • Python包安装总报错?可能是你的setuptools该升级了!一份给新手的避坑自查清单
  • 白话skills之二:Prompt和Skills的区别是什么?
  • 保姆级教程:用Pix4D和ArcGIS处理DJI M3M/P4M多光谱数据,从辐射标定到NDVI提取
  • 基于SEIR模型与R0量化社交距离对医疗床位需求的影响
  • 2026年京东云OpenClaw/Hermes Agent配置Token Plan怎么集成看这
  • jQuery Mobile CSS 类详解
  • 【私密级AI工作台配置白皮书】:军工级端到端加密+离线语音唤醒+自动上下文隔离——仅限前500名技术人的定制化部署手册
  • Spring AI 提示词工程实战:让大模型更懂你的意图
  • ​2028江西首届统一职教高考全面启新,升学格局迎来重大变革 大圣学成好 - 新闻快传
  • 【多变量输入单步预测】基于减法优化器算法(SABO)优化CNN-BiLSTM-Attention的风电功率预测研究附Matlab代码
  • 面试官最爱问的异或运算:从‘找缺失数字’到‘交换变量’,手把手教你用Python搞定算法题
  • 别再混淆了!一文搞懂FPGA中Mealy与Moore状态机的本质区别(以11010检测为例)
  • 量子纠错码硬件实现与HAL算法解析