用Trae做项目分析,以openManus为例

270 阅读4分钟

OpenManus 项目结构

image.png

OpenManus/
├── app/                    # 主应用程序目录
│   ├── agent/             # 智能代理模块
│   │   ├── __init__.py
│   │   ├── base.py       # 基础代理类
│   │   ├── planning.py   # 规划代理
│   │   ├── react.py      # ReAct代理
│   │   ├── swe.py        # 软件工程代理
│   │   ├── toolcall.py   # 工具调用代理
│   │   └── manus.py      # Manus主代理
│   ├── tool/             # 工具模块
│   │   ├── __init__.py
│   │   ├── base.py       # 基础工具类
│   │   ├── bash.py       # 命令行工具
│   │   ├── create_chat_completion.py
│   │   ├── planning.py   # 规划工具
│   │   ├── python_execute.py
│   │   ├── str_replace_editor.py
│   │   ├── terminate.py
│   │   ├── tool_collection.py
│   │   ├── browser_use_tool.py
│   │   ├── file_saver.py
│   │   └── web_search.py
│   ├── flow/             # 流程控制模块
│   │   ├── __init__.py
│   │   ├── base.py
│   │   └── planning.py
│   ├── prompt/           # 提示词模块
│   ├── schema/          # 数据模型模块
│   ├── config.py        # 配置文件
│   ├── exceptions.py    # 异常定义
│   └── logger.py        # 日志工具
├── assets/              # 资源文件目录
├── config/             # 配置文件目录
├── examples/           # 示例代码目录
├── main.py            # 主入口文件
├── run_flow.py        # 流程运行入口
├── setup.py           # 安装配置
├── requirements.txt    # 依赖项
├── README.md          # 英文说明文档
├── README_ja.md       # 日文说明文档
├── README_ko.md       # 韩文说明文档
├── README_zh.md       # 中文说明文档
├── LICENSE            # 许可证
└── .gitignore         # Git忽略文件

主要模块说明:

  1. agent/ - 智能代理模块,包含各种类型的代理实现
  2. tool/ - 工具模块,提供各种功能工具
  3. flow/ - 流程控制模块,管理执行流程
  4. prompt/ - 提示词模块,存储各种提示模板
  5. schema/ - 数据模型定义
  6. config/ - 配置文件目录 项目采用模块化设计,各个组件之间通过清晰的接口进行交互。主要功能通过 agent(代理)调用 tool(工具)来实现,并通过 flow(流程)来组织和管理整个执行过程。

运行模式

image.png

时序分析

image.png

image.png

工具使用

image.png

根据代码库分析,OpenManus 提供了以下工具(定义在 app/tool 目录下):

  1. 基础工具
  • BaseTool :所有工具的基类,提供基础工具接口
  1. 核心功能工具
  • PythonExecute :执行 Python 代码
  • Bash :执行命令行指令
  • StrReplaceEditor :文本替换编辑工具
  1. 网络和浏览器工具
  • WebSearch :网络搜索功能
  • BrowserUseTool :浏览器操作工具
  1. 文件操作工具
  • FileSaver :文件保存工具
  1. 规划和控制工具
  • PlanningTool :任务规划工具
  • CreateChatCompletion :创建对话完成
  • Terminate :终止执行工具
  1. 工具管理
  • ToolCollection :工具集合管理类,负责:

    • 工具的注册和管理
    • 工具的执行调度
    • 工具参数的处理
    • 工具执行结果的处理 这些工具被不同的 Agent 使用:
  • Manus Agent:使用全套工具

  • Planning Agent:主要使用规划相关工具

  • SWE Agent:主要使用开发相关工具 每个工具都实现了标准的接口,包括:

  • execute() 方法:执行工具的核心功能

  • to_param() 方法:提供工具参数信息

  • 错误处理机制:通过 ToolResult 和 ToolFailure 处理执行结果

阶段发起方动作接收方说明
输入阶段User输入提示词Main用户输入初始提示
Main创建 Manus AgentManus初始化代理
初始化阶段Manus初始化 LLM 客户端LLM设置语言模型
Manus初始化内存存储Memory创建内存系统
Manus加载可用工具集Tools准备工具集
执行循环Manus思考(think)LLM分析当前状态
LLM返回决策Manus提供行动建议
条件分支 1Manus执行工具(act)Tools需要执行工具时
Tools返回结果Manus工具执行完成
Manus存储结果Memory保存工具执行结果
条件分支 2Manus存储思考结果Memory无需执行工具时
完成阶段Manus返回最终结果Main任务完成时
Main输出执行结果User返回给用户

prompt使用

image.png

根据代码库,我来分析各个 prompt 的使用场景:

  1. Manus Prompt 中的 prompt:
  • 用于 代理
  • SYSTEM_PROMPT:定义 Manus 作为全能 AI 助手的角色和能力
  • NEXT_STEP_PROMPT:指导如何使用各种工具(PythonExecute、FileSaver、BrowserUseTool 等)
  1. Planning Prompt 中的 prompt:
  • 用于
  • PLANNING_SYSTEM_PROMPT:定义规划代理的任务和工作流程
  • NEXT_STEP_PROMPT:指导如何评估和执行下一步计划
  1. SWE (Software Engineering) Prompt 中的 prompt:
  • 用于
  • SYSTEM_PROMPT:定义软件工程代理的工作环境和命令行接口规则
  • NEXT_STEP_TEMPLATE:提供命令行环境的状态信息模板
  1. Tool Call Prompt 中的 prompt:
  • 用于
  • SYSTEM_PROMPT:定义工具调用代理的基本角色
  • NEXT_STEP_PROMPT:提供终止交互的指导

这些 prompt 形成了一个层级结构:

  • ToolCallAgent 是基础类
  • ReActAgent 继承自 BaseAgent
  • 其他具体代理(Manus、Planning、SWE)继承并扩展这些基础类
  • 每个代理使用特定的 prompt 来定义其行为和能力