在上文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版本仍然是不稳定版本,有待进一步优化。

Logo

为武汉地区的开发者提供学习、交流和合作的平台。社区聚集了众多技术爱好者和专业人士,涵盖了多个领域,包括人工智能、大数据、云计算、区块链等。社区定期举办技术分享、培训和活动,为开发者提供更多的学习和交流机会。