OpenManus 项目深度梳理系列(第二篇)
整个OpenManus工作流的实现任务的规划与定位,实现每一步的动态规划控制,选择合适的智能体执行任务,实现多智能体之间的协同配合。但是目前的OpenManus flow版本仍然是不稳定版本,有待进一步优化。
在上文OpenManus 项目深度梳理系列(第一篇,开篇)中主要介绍了OpenManus整体架构与核心Agent部分代码逻辑与实现原理。
本文接着介绍核心代码中工作流部分的代码逻辑与实现原理。
2.2 工作流实现的基本原理
整个flow部分的代码类图如下,可以看出整个部分主要包含4个重要的类,BaseFlow,PlanningFlow, FlowFactory, PlanStepStatus。
2.2.1 BaseFlow
BaseFlow 是工作流管理模块的核心抽象基类,其设计目标是为智能体协作执行复杂任务提供统一的流程编排接口b。
BaseFlow继承自BaseModel和ABC(抽象基类),通过Python的类型注解和抽象方法强制子类实现关键接口,确保所有流程类(如PlanningFlow)遵循统一规范。
重要属性解析
agents: Dict[str, BaseAgent]:管理参与流程的智能体集合,支持通过键名动态调用特定智能体。
tools: Optional[List]:可选工具列表,为流程提供外部能力(如网页浏览、代码执行等)。
primary_agent_key: Optional[str]:指定主智能体,用于协调多智能体协作中的决策权分配。
重要方法解析
(1)primary_agent:获取工作流的主要智能体。
通过@property装饰器实现primary_agent属性,提供对主智能体的安全访问(避免KeyError异常)。
(2)get_agent:根据key获取指定智能体。
(3)add_agent:在工作流中添加智能体。
(4)excute (abstract method):使用指定输入执行工作流。
2.2.2 PlanningFlow
PlanningFlow 是基于BaseFlow抽象基类实现的具体工作流类,专注于复杂任务的动态规划与分步执行。其核心设计围绕“规划先行、分步执行”的策略,通过结构化任务分解和智能体协同,提升任务处理的连贯性和效率。
1、核心功能定位
(1)任务规划与分解
PlanningFlow通过_create_initial_plan方法,利用大语言模型(LLM)和PlanningTool将用户输入的复杂任务拆解为可执行的具体步骤。
对应提示词设计如下:
system_message_content = (
"You are a planning assistant. Create a concise, actionable plan with clear steps. "
"Focus on key milestones rather than detailed sub-steps. "
"Optimize for clarity and efficiency."
)
针对特别挑选的智能体,增加提示词
system_message_content += (
f"\nNow we have {agents_description} agents. "
f"The infomation of them are below: {json.dumps(agents_description)}\n"
"When creating steps in the planning tool, please specify the agent names using the format '[agent_name]'."
)
PlanningTool是一种计划工具,允许智能体创建和管理解决复杂任务的计划。该工具提供了创建计划、更新计划步骤和跟踪进度的功能。PlanningFlow首先基于PlanningTool调用LLM的askTool进行工具选择与规划。
当工具存在,就进行工具调用任务。
(2)动态执行控制
通过_get_current_step_info方法解析当前计划,识别下一步骤并调用对应智能体(如Manus)执行。执行过程中实时更新状态(如current_step_index),并支持动态调整后续步骤(如跳过已完成或失败的任务)。
(3)统一调度接口
继承自BaseFlow的execute(input_text)方法作为入口,协调规划、执行和结果整合。
2、重要属性
llm: LLM:封装与大语言模型的交互,用于生成任务规划。
planning_tool: PlanningTool:提供任务分解和上下文生成能力。
executor_keys: List[str]:定义可调用的智能体列表(当前版本主要使用Manus)。
tools: Optional[List]:集成外部工具(如网页浏览、代码执行、文件操作等),支持智能体完成具体操作。
3、与其他组件的协同
(1) FlowFactory工厂模式
通过FlowFactory.create_flow() 动态创建PlanningFlow实例,解耦流程创建与使用逻辑,便于后续扩展新的工作流类型。
(2)记忆管理
每个子任务执行后进行总结压缩,避免上下文过长,同时支持智能体基于历史信息决策(如跳过重复步骤)。
2.2.3 PlanStepStatus
PlanStepStatus是用于跟踪和管理任务规划中各个步骤执行状态的枚举类。
包含四种状态,未开始,进行中,已完成,锁定中。
NOT_STARTED = "not_started"
IN_PROGRESS = "in_progress"
COMPLETED = "completed"
BLOCKED = "blocked"
重要方法解析
(1)get_all_statuses:返回所有可能状态值得列表。
(2)get_active_statuses:获取表示活动状态的值列表(未开始或进行中)。
(3)get_status_marks:返回状态与其标记符号的映射关系。
2.2.4 FlowFactory
FlowFactory遵循工厂模式设计原则,将具体工作流类的实例化过程封装在静态方法中,调用方无需关心内部实现细节,只需通过FlowType枚举指定流程类型即可获取对应实例。
支持多智能体协作:在创建PlanningFlow时,FlowFactory会传递智能体集合(如Manus、ResearchAgent等),使流程能够根据任务需求动态调度不同智能体执行子任务。
总结
整个OpenManus工作流的实现任务的规划与定位,实现每一步的动态规划控制,选择合适的智能体执行任务,实现多智能体之间的协同配合。但是目前的OpenManus flow版本仍然是不稳定版本,有待进一步优化。
所有评论(0)