Skip to content

OpenManus 技术解析:开源智能体框架的架构与实现

OpenManus 是一个开源的智能体框架,旨在提供类似 Manus 的功能但无需邀请码,让开发者和用户能够轻松构建并使用功能强大的 AI 智能体。本文将从架构设计、核心组件、使用方法和技术特点等方面对 OpenManus 进行全面分析。

1. 项目概述

OpenManus 由来自 MetaGPT 社区的开发者团队@mannaandpoem@XiangJinyu@MoshiQAQ等共同开发,是一个专注于构建智能体的开源项目。该项目的主要目标是创建一个通用智能体框架,让用户能够通过简单的指令完成复杂任务,包括但不限于编程、信息检索、文件处理和网页浏览等。

2. 架构设计

OpenManus 采用了模块化的架构设计,主要由以下几个核心模块组成:

2.1 代理(Agent)层

Agent 层是 OpenManus 的核心,负责协调各个组件并执行用户指令。主要包括以下几种代理类型:

  • ToolCallAgent: 基础代理类,负责处理工具/函数调用的抽象实现
  • PlanningAgent: 计划型代理,负责创建和管理任务执行计划
  • ReActAgent: 反应型代理,实现了思考-行动-观察的循环模式
  • Manus: 主要代理实现,继承自 ToolCallAgent,是用户直接交互的入口

代理层遵循层级继承关系,每种代理类型都具有特定的职责和扩展能力:

ReActAgent --> ToolCallAgent --> PlanningAgent --> Manus

2.2 工具(Tool)层

工具层提供了丰富的工具集,使智能体能够与外部系统交互。主要工具包括:

  • PythonExecute: 执行 Python 代码
  • BrowserUseTool: 浏览器操作工具,支持网页导航、元素交互等
  • GoogleSearch: 谷歌搜索工具
  • FileSaver: 文件保存工具
  • PlanningTool: 计划管理工具
  • CreateChatCompletion: 创建聊天完成工具
  • Terminate: 终止执行工具

这些工具通过统一的接口(BaseTool)进行定义,确保代理能够一致地调用和使用它们。

2.3 提示词(Prompt)层

提示词层定义了与 LLM 交互的系统提示和指令模板,包括:

  • 系统提示: 定义智能体的角色和能力范围
  • 步骤提示: 指导智能体如何使用可用工具执行任务
  • 规划提示: 用于任务分解和计划创建

2.4 LLM 交互层

负责与大型语言模型进行通信,支持不同的 LLM 提供商和模型配置。核心功能包括:

  • 模型配置管理
  • 工具/函数调用接口
  • 响应解析和处理

3. 核心流程分析

OpenManus 的工作流程可以概括为以下几个关键步骤:

3.1 任务规划过程

  1. 用户输入任务请求
  2. 创建初始计划(create_initial_plan)
  3. 分解任务为可执行步骤
  4. 生成结构化计划(包含目标、步骤和状态追踪)

3.2 任务执行过程

  1. 获取当前活跃步骤(_get_current_step_index)
  2. 思考阶段(think):评估当前状态,决定下一步行动
  3. 行动阶段(act):执行所选工具,记录结果
  4. 更新计划状态(update_plan_status)
  5. 重复以上步骤直到计划完成或达到最大步骤数

3.3 工具调用机制

  1. 解析工具调用参数
  2. 执行工具并获取结果
  3. 将结果添加到智能体记忆中
  4. 处理特殊工具(如终止执行)的状态变更

4. 关键组件详解

4.1 PlanningAgent

PlanningAgent 是 OpenManus 中的核心代理类型,专门负责任务规划和执行。其主要功能包括:

  • 计划创建与管理: 根据用户输入创建结构化计划
  • 步骤追踪: 记录每个步骤的执行状态
  • 进度管理: 自动标记当前活跃步骤,更新完成状态

特点是能够维护任务执行的上下文,确保复杂任务能够按顺序完成,同时提供清晰的执行状态反馈。

4.2 ToolCallAgent

ToolCallAgent 实现了工具调用的基础机制,主要职责包括:

  • 工具选择: 决定使用哪些工具来完成任务
  • 参数解析: 处理 JSON 格式的工具参数
  • 结果处理: 格式化工具执行结果
  • 错误处理: 提供健壮的错误捕获和报告机制

ToolCallAgent 的设计使 OpenManus 能够灵活地扩展新工具,同时保持统一的调用接口。

4.3 BrowserUseTool

BrowserUseTool 是一个功能强大的工具,允许智能体与网页浏览器交互。主要功能包括:

  • 网页导航: 访问指定 URL
  • 元素交互: 点击、输入文本
  • 内容提取: 获取 HTML、文本和链接
  • JavaScript 执行: 在页面中执行 JS 代码
  • 标签管理: 创建、切换和关闭标签页

这个工具基于 browser-use 库实现,为智能体提供了丰富的网页交互能力。

4.4 PythonExecute

PythonExecute 工具允许智能体执行 Python 代码,使其能够:

  • 执行数据处理任务
  • 进行系统操作
  • 创建和修改文件
  • 调用其他 Python 库和 API

这使得 OpenManus 能够执行编程任务,是其通用能力的关键组件。

5. 使用指南

5.1 安装配置

OpenManus 提供两种安装方式:

  1. 使用 conda:

    bash
    conda create -n open_manus python=3.12
    conda activate open_manus
    git clone https://github.com/mannaandpoem/OpenManus.git
    cd OpenManus
    pip install -r requirements.txt
  2. 使用 uv(推荐):

    bash
    curl -LsSf https://astral.sh/uv/install.sh | sh
    git clone https://github.com/mannaandpoem/OpenManus.git
    cd OpenManus
    uv venv
    source .venv/bin/activate
    uv pip install -r requirements.txt

5.2 配置 LLM

OpenManus 需要配置 LLM API 才能正常工作:

  1. 创建配置文件:

    bash
    cp config/config.example.toml config/config.toml
  2. 编辑config.toml添加 API 密钥:

    toml
    [llm]
    model = "gpt-4o"
    base_url = "https://api.openai.com/v1"
    api_key = "sk-..."  # 替换为实际API密钥
    max_tokens = 4096
    temperature = 0.0

5.3 基本使用

启动 OpenManus 只需一行命令:

bash
python main.py

然后通过终端输入你的请求,例如:

  • "创建一个简单的网站计算器"
  • "查找关于气候变化的最新研究"
  • "帮我优化这段 Python 代码"

OpenManus 会自动规划任务并调用相应工具来完成请求。

6. 代码解析

6.1 主入口(main.py)

python
async def main():
    agent = Manus()
    while True:
        try:
            prompt = input("Enter your prompt (or 'exit'/'quit' to quit): ")
            prompt_lower = prompt.lower()
            if prompt_lower in ["exit", "quit"]:
                logger.info("Goodbye!")
                break
            if not prompt.strip():
                logger.warning("Skipping empty prompt.")
                continue
            logger.warning("Processing your request...")
            await agent.run(prompt)
        except KeyboardInterrupt:
            logger.warning("Goodbye!")
            break

主入口非常简洁,创建 Manus 代理实例,然后循环接收用户输入并交给代理处理。

6.2 Manus 代理实现

python
class Manus(ToolCallAgent):
    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
    available_tools: ToolCollection = Field(
        default_factory=lambda: ToolCollection(
            PythonExecute(), GoogleSearch(), BrowserUseTool(), FileSaver(), Terminate()
        )
    )

Manus 代理继承自 ToolCallAgent,配置了系统提示和可用工具集。

6.3 执行工具方法(execute_tool)

python
async def execute_tool(self, command: ToolCall) -> str:
    if not command or not command.function or not command.function.name:
        return "Error: Invalid command format"

    name = command.function.name
    if name not in self.available_tools.tool_map:
        return f"Error: Unknown tool '{name}'"

    try:
        # 解析参数
        args = json.loads(command.function.arguments or "{}")

        # 执行工具
        logger.info(f"🔧 Activating tool: '{name}'...")
        result = await self.available_tools.execute(name=name, tool_input=args)

        # 格式化结果
        observation = (
            f"Observed output of cmd `{name}` executed:\n{str(result)}"
            if result
            else f"Cmd `{name}` completed with no output"
        )

        # 处理特殊工具
        await self._handle_special_tool(name=name, result=result)

        return observation
    except Exception as e:
        # 错误处理
        error_msg = f"⚠️ Tool '{name}' encountered a problem: {str(e)}"
        logger.error(error_msg)
        return f"Error: {error_msg}"

这个方法展示了 OpenManus 如何执行工具调用,包括参数解析、错误处理和结果格式化。

7. 项目展望

根据项目的路线图,OpenManus 计划在未来实现以下功能:

  1. 增强 Planning 能力,优化任务分解和执行逻辑
  2. 引入标准化评测指标(基于 GAIA 和 TAU-Bench)
  3. 拓展模型适配,优化低成本应用场景
  4. 实现容器化部署,简化安装和使用流程
  5. 丰富示例库,增加更多实用案例
  6. 前后端开发,提升用户体验

8. 总结

OpenManus 是一个设计精良的开源智能体框架,通过模块化架构和灵活的工具集成机制,实现了强大的任务规划和执行能力。其核心优势在于:

  1. 灵活的代理体系:从基础的工具调用代理到复杂的规划代理,提供了不同层次的智能体实现
  2. 丰富的工具集:内置 Python 执行、浏览器交互、搜索等多种工具,满足多样化的任务需求
  3. 结构化的任务规划:能够自动分解复杂任务并追踪执行进度
  4. 开源开放:允许社区贡献和扩展,持续进化

OpenManus 为开发者提供了一个强大的平台,让构建复杂 AI 智能体变得简单直观,是 AI 应用开发的理想选择。无论是研究人员、开发者还是普通用户,都能从 OpenManus 中受益,创建自己的智能助手来解决各种问题。

对于希望深入了解或贡献项目的开发者,建议查看官方 GitHub 仓库和加入社区讨论组,共同推动 OpenManus 的发展。

Last updated: