专栏名称: 架构师
架构师云集,三高架构(高可用、高性能、高稳定)、大数据、机器学习、Java架构、系统架构、大规模分布式架构、人工智能等的架构讨论交流,以及结合互联网技术的架构调整,大规模架构实战分享。欢迎有想法、乐于分享的架构师交流学习。
相关文章推荐
湛江日报  ·  湛品甄选·今周优惠 ·  19 小时前  
什么值得买  ·  7499元起,华为发布阔折叠手机Pura ... ·  2 天前  
大河报  ·  三胖”来了!胖东来新店国庆节营业 ·  2 天前  
大河报  ·  三胖”来了!胖东来新店国庆节营业 ·  2 天前  
每天发现一家店  ·  低价捡漏 - 0320 ·  2 天前  
51好读  ›  专栏  ›  架构师

「三小时复刻 Manus,GitHub 2 万星」:OpenManus 多智能体框架的技术拆解

架构师  · 公众号  ·  · 2025-03-11 22:48

正文

架构师(JiaGouX)
我们都是架构师!
架构未来,你来不来?



一、背景与缘起

随着大模型在推理与生成上的能力不断提升,Agent(智能体)技术也在近段时间"刷屏"并引起广泛探讨。

3 月 5 日晚 Manus 展示的多智能体 Demo 给业内带来深刻印象;3 月 7 日,国内 DeepWisdom MetaGPT 团队与 CAMEL AI 团队先后开源了 OpenManus 与 OWL,进一步让多智能体技术的应用与实践在社交媒体及 GitHub 社区呈爆发性传播。

OpenManus 团队基于此前多智能体研究成果和工程积累,几乎以"闪电"速度完成核心系统:团队在 1 小时内实现了核心功能,3 小时内上线初版本。如此快速的研发进度,既来源于对多智能体框架的长期技术沉淀,也与系统内部设计的高度抽象、可组合性密不可分。正因此,OpenManus 一经发布便收获了过万星(目前已超过 2 万 Star),同时引发了业内对 Agent 技术发展趋势的再次聚焦。


二、OpenManus 的设计思路

从外部来看,Manus(以及复刻的 OpenManus)本质上是一个 多智能体系统 (Multi-Agent System)。不同于单一大模型那种一次性"大而全"的回答方式,多智能体系统通过"规划—执行—反馈"的循环,逐步解决复杂的真实世界问题。在 OpenManus 的设计中,最核心的思路可以概括为以下几点:

  1. 极简可插拔框架
    OpenManus 的核心设计是构建一个非常精简的 Agent 框架,强调模块化和可扩展性。它通过可插拔的工具(Tools)和提示词(Prompt)的组合来定义 Agent 的功能和行为,降低了开发和定制 Agent 的门槛。

  • Prompt 决定 Agent 的行为逻辑和思考方式;

  • Tools 则提供行动能力(如计算机操作、代码执行、搜索等)。
    通过对 Prompt 和 Tools 的自由组合,就能快速"拼装"出新的 Agent,赋予其处理不同类型任务的能力。

  • 工具驱动的 ReAct Agent
    OpenManus 基于 ReAct(Reason + Act)模式,并以工具为核心驱动 Agent 的行动。Prompt 引导 Agent 的推理和逻辑,而 Tools 则赋予 Agent 行动能力。ToolCall Agent 的引入,进一步提升了工具使用的效率和规范性。

  • 规划能力处理复杂任务
    OpenManus 延续了 Manus 的多智能体规划优势,将 PlanningTool 用于对用户需求进行高层规划。这种"先规划,后执行"的思路在复杂、长链任务上效果更佳。PlanningTool 将复杂的用户需求分解为线性的子任务计划,这种规划能力是处理现实世界复杂问题的关键。过去的研究表明,在相同模型能力下,如果缺乏系统的分解和规划,许多真实问题的成功率会大打折扣;而加入规划后,成功率会有显著提升。

  • 动态 Agent 分配与工具调度
    当一个任务拆解出若干子任务后,系统会根据子任务类型,动态将其分配给预先定义或适配的 Agent(有各自的工具集和能力倾向)。这种**"临时分配 + 工具协作"**的机制,可以最大化利用多模型、多工具的组合优势,提高应对不同问题场景的灵活度。Agent 预先装备了不同的工具集以应对不同类型的任务,提高了系统的灵活性和效率。


  • 三、工作流程与执行路径

    OpenManus 的运行流程可以清晰概括为"规划→分配→执行",具体步骤如下:

    1. 用户需求输入
      用户在前端或命令行中输入复杂的需求,例如"写一段代码完成某种功能,并自动部署到服务器上"。

    2. PlanningTool 规划
      系统先调用 PlanningTool,对需求进行分析与分解,形成一个线性结构的计划或任务序列。比如,会将需求拆解为:

      1. 分析需求与环境

      2. 编写初始代码

      3. 测试并修复错误

      4. 部署并验证结果
        这些子任务被记录在一个 plan 或类似结构中。

    3. 任务分配与执行

    • 如果任务中涉及大规模数据分析或机器学习流程,可能会调用一个具备 Data Interpreter 能力的 Agent;

    • 若任务需要复杂的代码修复或文件管理,则会调用另一个能够使用 ComputerUse 工具的 Agent;

    • 系统按照顺序从计划中依次取出子任务;

    • 根据任务关键字或意图判定,分配给最合适的 Agent。目前 Agent 分配主要基于正则匹配,未来考虑使用 LLM 实现更智能的任务分配。

    • 每个 Agent 都会采用 ReAct 循环(Reason + Act)与 Tools 进行交互,以完成自己所负责的子任务。

  • 结果汇总与状态更新
    当某个子任务执行完毕后,系统会将执行结果、关键上下文信息进行必要的"总结与压缩"(以避免不断增加的冗长 Memory),然后存入当前的"Plan 内存"或全局可访问的共享内存。

    • 如果任务完成顺利,进入下一子任务;

    • 若出现执行失败或结果异常,系统可进行自动调试或重新规划,视设计实现程度而定。

  • 整体产出
    当所有子任务执行完毕,系统对整体结果进行汇总并返回给用户,或完成如网页部署、自动执行脚本等操作。

  • 在这个过程中, 多 Agent + 工具 的结构会在复杂需求上展现明显的优势,尤其当需要长链思考、结合搜索或外部工具时,能够更好地完成通用大模型难以一次性解决的工作。


    四、技术架构剖析

    4.1 工程结构概览

    首先来看一下 OpenManus 的整体工程结构,剔除配置和资源文件后,整个项目的核心仅包含约 30 个文件(3月7号版本,所有内容都基于当时的版本),结构清晰且高度模块化:

    .
    ├── app
    │ ├── agent
    │ │ ├── base.py
    │ │ ├── manus.py
    │ │ ├── planning.py
    │ │ ├── react.py
    │ │ ├── swe.py
    │ │ └── toolcall.py
    │ ├── flow
    │ │ ├── base.py
    │ │ ├── flow_factory.py
    │ │ └── planning.py
    │ ├── prompt
    │ │ ├── manus.py
    │ │ ├── planning.py
    │ │ ├── swe.py
    │ │ └── toolcall.py
    │ └── tool
    │ ├── base.py
    │ ├── bash.py
    │ ├── browser_use_tool.py
    │ ├── create_chat_completion.py
    │ ├── file_saver.py
    │ ├── google_search.py
    │ ├── planning.py
    │ ├── python_execute.py
    │ ├── run.py
    │ ├── str_replace_editor.py
    │ ├── terminate.py
    │ └── tool_collection.py

    项目依赖也相对简单,主要包括一些用于数据验证(pydantic)、AI 服务调用(openai)、浏览器控制(playwright、browsergym、browser-use)和一些基础工具库:

    • pydantic :数据验证和设置管理

    • openai :OpenAI API 的客户端库

    • browser-use :构建能使用网络浏览器的 AI 代理框架

    • browsergym :训练 AI 使用网络浏览器的环境

    • playwright :浏览器自动化库

    • googlesearch-python :无需 API 密钥进行搜索的库

    这样的结构设计使得 OpenManus 在提供强大功能的同时保持了极高的可维护性和可扩展性。

    4.2 核心系统组件

    OpenManus 的架构由四个主要模块构成:

    1. 核心多智能体框架(Agent)
      Agent 模块采用清晰的继承层次,自底向上逐步增强功能:

      示例代码(Manus 实现):

      class Manus(ToolCallAgent):
      """
      A versatile general-purpose agent that uses planning to solve various tasks.
      """
      name: str = "Manus"
      description: str = "A versatile agent that can solve various tasks using multiple tools"

      system_prompt: str = SYSTEM_PROMPT
      next_step_prompt: str = NEXT_STEP_PROMPT

      # Add general-purpose tools to the tool collection
      available_tools: ToolCollection = Field(
      default_factory=lambda: ToolCollection(
      PythonExecute(), GoogleSearch(), BrowserUseTool(), FileSaver(), Terminate()
      )
      )
    • BaseAgent :定义了智能体的基础属性(name、memory、system_prompt)和基本行为(执行逻辑、状态检查)。

    • ReActAgent :实现了经典的 "Reasoning + Acting" 模式,先思考后行动,每一步执行都分为 think 和 act 两个阶段。

    • ToolCallAgent :在 ReAct 基础上进一步细化,使 think 阶段专注于工具选择,act 阶段负责执行所选工具。

    • Manus :继承 ToolCallAgent,主要通过定制 system_prompt 和 available_tools 来赋予不同能力。

  • Tools(工具层)
    工具模块是 OpenManus 的行动能力基础,各类工具均继承自 BaseTool

    其中, planning.py 实现了 Manus 著名的计划功能,用 Markdown 格式管理任务计划并跟踪执行进度。

    • ComputerUse :命令行和计算机操作

    • BrowserUse :网络浏览和交互

    • PythonExecute :执行 Python 代码

    • GoogleSearch :网络搜索

    • FileSaver :文件读写

    • PlanningTool :任务规划与追踪

  • Prompt(提示词模块)
    Prompt 模块包含了各种 Agent 使用的指令模板,例如 Planning 的系统提示:

    PLANNING_SYSTEM_PROMPT = """
    You are an expert Planning Agent tasked with solving complex problems by creating and managing structured plans.
    Your job is:
    1. Analyze requests to understand the task scope
    2. Create clear, actionable plans with the `planning` tool
    3. Execute steps using available tools as needed
    4. Track progress and adapt plans dynamically
    5. Use `finish` to conclude when the task is complete

    Available tools will vary by task but may include:
    - `planning`: Create, update, and track plans (commands: create, update, mark_step, etc.)
    - `finish`: End the task when complete

    Break tasks into logical, sequential steps. Think about dependencies and verification methods.
    """

    而 Manus 的系统提示则更加简洁:

    SYSTEM_PROMPT =






  • 请到「今天看啥」查看全文