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

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

相关文章:

  • WebSocket 传输大量数据好不好?稳定不稳定
  • Vue3自定义指令实现前端权限控制 - 按钮权限
  • 进制转换(c++)
  • 【LeetCode 热题100】 22. 括号生成 的算法思路及python代码
  • 从 0 到 1:深度学习模型,重构世界的数字蓝图
  • 【数据预测】基于遗传算法GA的LSTM光伏功率预测 GA-LSTM光伏功率预测【Matlab代码#91】
  • 【unordered_set和unordered_map】—— 我与C++的不解之缘(二十七)
  • 使用pycel将Excel移植到Python
  • 图解 ThreadLocal
  • 第二天 开始Unity Shader的学习之旅之熟悉顶点着色器和片元着色器
  • 深度学习 Deep Learning 第7章 深度学习的正则化
  • ESPNOW收发测试 基于esp-idf
  • 车载以太网网络测试-21【传输层-DOIP协议-4】
  • C++中的stoi和to_string函数详解:字符串与数值的高效转换工具
  • C++ 面向对象程序设计 - 学习笔记(持续更新中)
  • strstr!!!
  • 【信息系统项目管理师】【八大绩效域】知识点整合图
  • 管家婆工贸ERP PR010.任务单批量打印
  • (自用)yolo算法学习
  • vue3:i18n的使用
  • 同日哑火丢冠,双骄的下山路,手牵手一起走
  • 美乌矿产协议签署被曝“临门一脚”时生变,美方提附加条件
  • 铺就长三角南北“交通动脉”,乍嘉苏改高速扩建项目首桩入位
  • 五一小长假,带着小狗去上海音乐厅
  • 哈莉·贝瑞、洪常秀等出任戛纳主竞赛单元评委
  • 成都警方:在地铁公共区域用改装设备偷拍女乘客,男子被行拘