项目分析:OpenManus
OpenManus 是一个基于 LLM(大型语言模型)的智能代理系统,它采用了模块化的设计,支持工具调用、规划和执行等功能。下面我将通过时序图和流程图来详细分析整个系统的工作流程。
系统架构
OpenManus 采用了分层架构设计,主要包括以下几个核心组件:
- Agent 层:实现了不同类型的智能代理,包括基础代理(BaseAgent)、ReAct 代理(ReActAgent)、工具调用代理(ToolCallAgent)和 Manus 代理。
- Flow 层:管理代理的执行流程,主要实现了规划流程(PlanningFlow)。
- Tool 层:提供各种工具供代理使用,如 Python 执行、Google 搜索、浏览器工具等。
- LLM 层:负责与大型语言模型的交互,处理消息格式化和响应解析。
- Schema 层:定义了系统中使用的数据结构,如消息(Message)、工具调用(ToolCall)等。
时序图
下面是 OpenManus 系统的主要执行流程时序图:
流程图
下面是 OpenManus 系统的主要执行流程图:
规划流程图
下面是 PlanningFlow 的执行流程图:
代码全链路过程
-
初始化阶段:
- 用户通过
main.py
启动程序,输入提示(prompt) - 系统创建 Manus 代理实例,Manus 继承自 ToolCallAgent,提供了多种工具能力
- Manus 代理调用
run(prompt)
方法开始处理用户请求
- 用户通过
-
执行阶段:
- BaseAgent 的
run
方法将用户输入存入内存,并设置代理状态为 RUNNING - 系统进入主循环,在不超过最大步骤数且未完成的情况下,执行
step
方法 - ReActAgent 的
step
方法分为两个阶段:思考(think)和行动(act) - ToolCallAgent 的
think
方法调用 LLM 获取响应和工具调用 - 如果有工具调用,ToolCallAgent 的
act
方法会执行相应的工具 - 工具执行结果会被添加到代理的内存中
- 系统检查是否需要继续执行或已完成任务
- BaseAgent 的
-
规划执行阶段(当使用 PlanningFlow 时):
- PlanningFlow 的
execute
方法首先创建初始计划 - 然后获取当前步骤信息,检查是否所有步骤已完成
- 如果未完成,选择合适的执行器代理执行当前步骤
- 执行完成后,标记步骤为已完成,并继续下一步骤
- 当所有步骤完成后,完成计划并返回结果
- PlanningFlow 的
-
工具调用阶段:
- ToolCallAgent 通过
execute_tool
方法执行工具调用 - 工具调用通过 ToolCollection 找到对应的工具实例
- 工具执行后返回 ToolResult,包含输出或错误信息
- 工具结果被格式化为消息添加到代理的内存中
- ToolCallAgent 通过
-
完成阶段:
- 当任务完成或达到最大步骤数时,代理状态设置为 FINISHED
- 系统收集所有步骤的结果,并返回给用户
- 用户可以继续输入新的提示或退出程序
核心组件详解
-
BaseAgent:
- 提供了代理的基础功能,如状态管理、内存管理和执行循环
- 实现了
run
方法作为代理执行的入口点 - 提供了上下文管理器
state_context
用于管理代理状态
-
ReActAgent:
- 实现了 ReAct(Reasoning and Acting)模式
- 将执行过程分为思考(think)和行动(act)两个阶段
- 提供了
step
方法作为执行单个步骤的入口点
-
ToolCallAgent:
- 扩展了 ReActAgent,增加了工具调用功能
- 实现了
think
方法用于获取 LLM 的响应和工具调用 - 实现了
act
方法用于执行工具调用 - 提供了
execute_tool
方法用于执行单个工具调用
-
Manus:
- 继承自 ToolCallAgent,是一个通用的智能代理
- 配置了多种工具,如 Python 执行、Google 搜索、浏览器工具等
- 使用特定的系统提示和下一步提示来指导 LLM 的行为
-
PlanningFlow:
- 实现了基于规划的任务执行流程
- 使用 PlanningTool 创建和管理执行计划
- 支持多个代理协作执行不同类型的任务
- 提供了计划创建、步骤执行和计划完成的功能
-
LLM:
- 负责与大型语言模型的交互
- 提供了
ask
和ask_tool
方法用于获取 LLM 的响应 - 处理消息格式化和响应解析
- 支持流式响应和工具调用
-
ToolCollection:
- 管理多个工具实例
- 提供了工具查找、执行和参数转换的功能
- 支持添加新工具和批量执行工具
通过这些组件的协作,OpenManus 系统能够接收用户输入,规划任务执行步骤,调用合适的工具完成任务,并将结果返回给用户。系统的模块化设计使其具有良好的扩展性,可以通过添加新的代理、工具和流程来增强其功能。