【用 Trae 读源码】OpenManus 执行流程
前提条件
在 Trae 中打开 OpenManus 工程,使用 build 模式,模型选择 claude-sonnet-3.7
提示词
分析 manus.py 中 main 方法及相关类的执行流程,以流程图的方式展示
Manus 执行流程分析
类继承关系
Manus 类的继承链如下:
BaseAgent (base.py)
↑
ReActAgent (react.py)
↑
ToolCallAgent (toolcall.py)
↑
BrowserAgent (browser.py)
↑
Manus (manus.py)
执行流程图
关键方法说明
-
main.py - main(): 程序入口点,创建Manus实例并调用run方法。
-
BaseAgent.run(): 基础执行方法,管理整个执行流程,包括状态转换和步骤控制。
-
ReActAgent.step(): 实现了基本的思考-行动循环模式。
-
ToolCallAgent.think(): 处理工具调用的思考过程,与LLM交互获取下一步操作。
-
ToolCallAgent.act(): 执行工具调用并处理结果。
-
BrowserAgent.think(): 添加浏览器状态到上下文,增强浏览器相关任务的处理能力。
-
Manus.think(): 根据上下文动态切换提示模板,优化不同类型任务的处理。
工具集合
Manus类配置了以下工具:
- PythonExecute: 执行Python代码
- BrowserUseTool: 控制浏览器进行网页交互
- StrReplaceEditor: 编辑文本内容
- Terminate: 终止执行
Manus 执行流程图(去掉类和方法信息)
提示词
分析 manus.py 中 main 方法及相关类的执行流程,以流程图的方式展示整个执行流程,不需要类和方法的信息,只需要完整的处理流程
以下流程图展示了Manus代理的完整执行流程,从用户输入到任务完成的整个过程。
执行流程说明
-
用户输入: 用户在main.py中输入提示。
-
初始化: 创建Manus实例并调用run方法。
-
设置环境: 将用户请求添加到memory并设置状态为RUNNING。
-
执行循环: 循环执行步骤直到完成或达到最大步数。
-
思考过程:
- 保存原始prompt
- 检查最近消息是否有浏览器活动
- 根据是否使用浏览器选择适当的prompt
- 获取浏览器状态(如果使用浏览器)
- 添加浏览器状态到上下文(如果使用浏览器)
- 调用LLM获取响应
- 处理工具调用和内容
- 恢复原始prompt
-
执行操作:
- 如果需要执行操作,执行相应的工具调用
- 将结果添加到memory
-
完成处理:
- 清理资源
- 返回执行结果
这个流程图展示了Manus代理如何处理用户请求,从接收输入到返回结果的完整过程,包括思考和执行操作的关键步骤。
备注:使用 claude-3.5-sonnet 的结果如下,效果明显差了一大截,而用 DeepSeekR1 效果更差