OpenManus 从用户提问到最终的结果展示整个处理流程较长,本文将重点通过三个关键流程的时序图分析,来说明 OpenManus 的执行流程。
一、整体请求处理流程
初绍化阶段:
用户通过 main.py 输入请求
系统初始化 Manus Agent,并将用户输入保存到 Memory中
执行循环:
Agent 通过迭代执行步骤(步数上限由 max_steps 控制)
每个步骤分为“思考”和“行动”两个阶段
思考阶段(Think):
Agent 从 Memory 获取会话历史
调用 LLM 进行思考,并决定使用哪些工具
将 LLM 的响应保存到 Memory
行动阶段(Act):
如果有工具调用,通过 ToolCollenction 执行相应工具;
工具执行结果保存到 Memory
如果执行的是特殊工具(如 Terminate),会将状态设置为 FINISHED
循环检测:
检查是否陷入循环状态
如果检测到循环,采取相应措施避免重复执行相同操作
结果返回:
执行完成后,返回结果给 main.py,最终展示给用户
二、基于计划的执行流程
初始化阶段:
用户通过 run_flow.py 输入请求
创建 agents 字典,并使用 FlowFactory 创建 PlanningFlow 实例
计划创建阶段:
PlanningFlow 调用LLM生成初始计划
使用 PlanningTool创建结构化计划,包含多个步骤
计划执行循环:
获取当前计划中下一个需要执行的步骤
根据步骤类型选择合适的执行 Agent
步骤执行:
选定的 Agent 执行当前步骤
内部过程包含 LLM 思考和工具执行
执行完成后标记步骤为已完成
计划总结:
所有步骤完成后,生成计划执行总结
返回完整结果给用户
三、工具执行流程
工具选择:
Agent 在思考阶段决定使用哪些工具
通过 ToolCollection 执行选定工具
不同工具的执行路径:
PythonExecute: 在受限环境中执行 Python 代码
BrowserUseTool:初始化浏览器并执行各种浏览器操作
GoogleSearch:执行 Google 搜索并返回结果
FileSaver:将内容保存到文件
Terminate:结束当前任务执行
结果处理:
工具执行结果以 ToolResult 形式返回
Agent 处理执行结果并决定下一步操作
指定的工具可能会改变 Agent 的状态(如 FINISHED)
OpenManus 的核心流程体现了一个完整的AI代码系统架构:
- 分层设计:从用户输入到LLM思考,再到工具执行,每一层都有明确的职责
- 状态管理:通过 Memory 和 AgentState 维护会话状态和执行进度
- 模块化工具系统:各种工具封装不同能力,可以独立扩展
- 计划引导执行:PlanningFlow 通过结构化计划来管理复杂任务的执行
- 安全机制:循环检测、超时控制等机制确保系统稳定运行
这种设计使 OpenManus 能够灵活处理各种复杂任务,从简单的问答到多步骤的复杂操作,同时保持高度的可扩展性和可维护性。