当前位置: 首页 > article >正文

【用 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)

执行流程图

Manus类执行流程
BrowserAgent类执行流程
ToolCallAgent类执行流程
ReActAgent类执行流程
BaseAgent类执行流程
Manus.think()
保存原始prompt
检查最近消息是否有浏览器活动
浏览器是否在使用?
使用浏览器特定prompt
保持原始prompt
调用父类think()方法
恢复原始prompt
返回结果
BrowserAgent.think()
获取浏览器状态
添加浏览器状态到上下文
调用父类think()方法
重置next_step_prompt
返回结果
ToolCallAgent.think()
添加next_step_prompt到消息
调用LLM获取响应
处理工具调用和内容
返回是否需要执行操作
ToolCallAgent.act()
执行工具调用
将结果添加到memory
返回执行结果
ReActAgent.step()
调用think()方法
是否需要执行操作?
调用act()方法
返回'无需操作'
BaseAgent.run(request)
调用agent.run(prompt)
更新memory添加用户请求
设置状态为RUNNING
循环执行step()直到完成或达到最大步数
main.py: main()函数
创建Manus实例
是否达到最大步数或完成?
设置状态为IDLE或FINISHED
清理资源
返回执行结果

关键方法说明

  1. main.py - main(): 程序入口点,创建Manus实例并调用run方法。

  2. BaseAgent.run(): 基础执行方法,管理整个执行流程,包括状态转换和步骤控制。

  3. ReActAgent.step(): 实现了基本的思考-行动循环模式。

  4. ToolCallAgent.think(): 处理工具调用的思考过程,与LLM交互获取下一步操作。

  5. ToolCallAgent.act(): 执行工具调用并处理结果。

  6. BrowserAgent.think(): 添加浏览器状态到上下文,增强浏览器相关任务的处理能力。

  7. Manus.think(): 根据上下文动态切换提示模板,优化不同类型任务的处理。

工具集合

Manus类配置了以下工具:

  • PythonExecute: 执行Python代码
  • BrowserUseTool: 控制浏览器进行网页交互
  • StrReplaceEditor: 编辑文本内容
  • Terminate: 终止执行

Manus 执行流程图(去掉类和方法信息)

提示词

分析 manus.py 中 main 方法及相关类的执行流程,以流程图的方式展示整个执行流程,不需要类和方法的信息,只需要完整的处理流程

以下流程图展示了Manus代理的完整执行流程,从用户输入到任务完成的整个过程。

开始
用户输入提示
创建Manus实例
调用agent.run(prompt)
将用户请求添加到memory
设置状态为RUNNING
是否达到最大步数
或状态为FINISHED?
步数+1
执行think()过程
保存原始prompt
检查最近消息是否有浏览器活动
浏览器是否在使用?
使用浏览器特定prompt
保持原始prompt
获取浏览器状态
调用父类think()方法
添加浏览器状态到上下文
调用LLM获取响应
处理工具调用和内容
恢复原始prompt
是否需要执行操作?
无需操作
执行工具调用
将结果添加到memory
清理资源
返回执行结果
结束

执行流程说明

  1. 用户输入: 用户在main.py中输入提示。

  2. 初始化: 创建Manus实例并调用run方法。

  3. 设置环境: 将用户请求添加到memory并设置状态为RUNNING。

  4. 执行循环: 循环执行步骤直到完成或达到最大步数。

  5. 思考过程:

    • 保存原始prompt
    • 检查最近消息是否有浏览器活动
    • 根据是否使用浏览器选择适当的prompt
    • 获取浏览器状态(如果使用浏览器)
    • 添加浏览器状态到上下文(如果使用浏览器)
    • 调用LLM获取响应
    • 处理工具调用和内容
    • 恢复原始prompt
  6. 执行操作:

    • 如果需要执行操作,执行相应的工具调用
    • 将结果添加到memory
  7. 完成处理:

    • 清理资源
    • 返回执行结果

这个流程图展示了Manus代理如何处理用户请求,从接收输入到返回结果的完整过程,包括思考和执行操作的关键步骤。

备注:使用 claude-3.5-sonnet 的结果如下,效果明显差了一大截,而用 DeepSeekR1 效果更差

Manus.run执行流程
main方法执行流程
ToolCallAgent.act执行流程
执行工具调用
开始执行工具
记录工具响应
返回执行结果
Manus.think执行流程
检查最近消息
存储原始提示
是否使用浏览器?
使用浏览器特定提示
使用原始提示
调用父类 think
恢复原始提示
调用父类 BrowserAgent.run
调用父类 ToolCallAgent.run
初始化状态
执行 think-act 循环
是否达到最大步数?
结束执行
是否需要继续?
初始化 Manus 实例
开始
接收用户输入
输入是否为空?
警告: 空输入
处理请求
调用 agent.run
类继承关系
ReActAgent
BaseAgent
ToolCallAgent
BrowserAgent
Manus

http://www.kler.cn/a/596655.html

相关文章:

  • 雨晨 26100.3613 Windows 11 IoT 企业版 LTSC 24H2 适度
  • 自动驾驶系统的车辆动力学建模:自行车模型与汽车模型的对比分析
  • 从零构建大语言模型全栈开发指南:第一部分:数学与理论基础-1.1.3模型参数与超参数:权重、偏置、学习率与正则化策略
  • CSS中的transition与渐变
  • 评估图片清晰度
  • 《Keras 3 : AI神经网络开发人员指南》
  • Maven高级-分模块设计与开发-继承-聚合-私服-Web后端总结
  • 2025免费资产管理系统推荐(5款免费IT资产管理系统/软件)
  • Python---数据分析(Pandas九:二维数组DataFrame数据操作二: 数据排序,数据筛选,数据拼接)
  • 单播、广播、组播和任播
  • Golang开发棋牌游戏中的坑
  • NVIDIA驱动升级
  • 【SpringCloud】OpenFeign
  • 什么是 POM 设计模式
  • 当今前沿科技:改变世界的最新技术趋势
  • VMware上调整centos终端的背景颜色
  • 机器学习开发完整流程
  • 简介S参数 .snp文件
  • 弱网测试:全链路实战、高阶策略与自动化落地
  • PTA团体程序设计天梯赛-练习集71-75题