随着大模型在推理与生成上的能力不断提升,Agent(智能体)技术也在近段时间"刷屏"并引起广泛探讨。
3 月 5 日晚 Manus 展示的多智能体 Demo 给业内带来深刻印象;3 月 7 日,国内 DeepWisdom MetaGPT 团队与 CAMEL AI 团队先后开源了 OpenManus 与 OWL,进一步让多智能体技术的应用与实践在社交媒体及 GitHub 社区呈爆发性传播。
OpenManus 团队基于此前多智能体研究成果和工程积累,几乎以"闪电"速度完成核心系统:团队在 1 小时内实现了核心功能,3 小时内上线初版本。如此快速的研发进度,既来源于对多智能体框架的长期技术沉淀,也与系统内部设计的高度抽象、可组合性密不可分。正因此,OpenManus 一经发布便收获了过万星(目前已超过 2 万 Star),同时引发了业内对 Agent 技术发展趋势的再次聚焦。
从外部来看,Manus(以及复刻的 OpenManus)本质上是一个
多智能体系统
(Multi-Agent System)。不同于单一大模型那种一次性"大而全"的回答方式,多智能体系统通过"规划—执行—反馈"的循环,逐步解决复杂的真实世界问题。在 OpenManus 的设计中,最核心的思路可以概括为以下几点:
-
极简可插拔框架
OpenManus 的核心设计是构建一个非常精简的 Agent 框架,强调模块化和可扩展性。它通过可插拔的工具(Tools)和提示词(Prompt)的组合来定义 Agent 的功能和行为,降低了开发和定制 Agent 的门槛。
工具驱动的 ReAct Agent
OpenManus 基于 ReAct(Reason + Act)模式,并以工具为核心驱动 Agent 的行动。Prompt 引导 Agent 的推理和逻辑,而 Tools 则赋予 Agent 行动能力。ToolCall Agent 的引入,进一步提升了工具使用的效率和规范性。
规划能力处理复杂任务
OpenManus 延续了 Manus 的多智能体规划优势,将 PlanningTool 用于对用户需求进行高层规划。这种"先规划,后执行"的思路在复杂、长链任务上效果更佳。PlanningTool 将复杂的用户需求分解为线性的子任务计划,这种规划能力是处理现实世界复杂问题的关键。过去的研究表明,在相同模型能力下,如果缺乏系统的分解和规划,许多真实问题的成功率会大打折扣;而加入规划后,成功率会有显著提升。
动态 Agent 分配与工具调度
当一个任务拆解出若干子任务后,系统会根据子任务类型,动态将其分配给预先定义或适配的 Agent(有各自的工具集和能力倾向)。这种**"临时分配 + 工具协作"**的机制,可以最大化利用多模型、多工具的组合优势,提高应对不同问题场景的灵活度。Agent 预先装备了不同的工具集以应对不同类型的任务,提高了系统的灵活性和效率。
OpenManus 的运行流程可以清晰概括为"规划→分配→执行",具体步骤如下:
-
用户需求输入
用户在前端或命令行中输入复杂的需求,例如"写一段代码完成某种功能,并自动部署到服务器上"。
-
PlanningTool 规划
系统先调用 PlanningTool,对需求进行分析与分解,形成一个线性结构的计划或任务序列。比如,会将需求拆解为:
-
分析需求与环境
-
编写初始代码
-
测试并修复错误
-
部署并验证结果
这些子任务被记录在一个
plan
或类似结构中。
-
任务分配与执行
-
如果任务中涉及大规模数据分析或机器学习流程,可能会调用一个具备 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 的架构由四个主要模块构成:
-
核心多智能体框架(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 格式管理任务计划并跟踪执行进度。
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 =