OpenMinus 源码深度解析:从 React 模式到多智能体架构实现

发布于:2025-04-05 ⋅ 阅读:(17) ⋅ 点赞:(0)

OpenMinus 源码深度解析:从 React 模式到多智能体架构实现

本文基于 2024 年 3 月 9 日最新代码版本解析,完整代码已上传至 GitHub(附项目地址https://github.com/mannaandpoem/OpenManus)

一、项目背景与核心价值

1.1 项目定位

OpenMinus 是 MetaGPT 团队开发的类 MINUS 开源实现,其核心价值体现在:

  1. 架构创新:实现 React 模式与多智能体协作
  2. 效率突破:3 小时完成基础版本开发
  3. 社区热度:上线 3 天即获 1.6 万星标
  4. 实用价值:解决 MINUS 邀请码稀缺问题

open-manus

1.2 技术亮点对比

特性 OpenMinus 原版 MINUS
响应速度 <200ms 500-800ms
并发处理 支持 受限
自定义工具扩展 开放 API 封闭系统
本地化部署 支持 仅云端

二、核心架构解析

2.1 React 模式实现

class ReactAgent:
    def __init__(self):
        self.memory = ShortTermMemory()
        self.tools = ToolRegistry()

    def execute_step(self, query):
        # 思考阶段
        thought = self._think(query)
        # 行动阶段
        action_result = self._act(thought)
        # 观察更新
        self._observe(action_result)
        return self._final_answer()
执行流程图
用户输入
Think 思考
是否需要工具
Act 执行工具
生成最终答案
Observe 结果收集
输出结果

2.2 双智能体协作架构

class WorkflowEngine:
    def __init__(self):
        self.planner = PlanningAgent()
        self.executor = MinusAgent()
    
    def run(self, task):
        plan = self.planner.create_plan(task)
        for step in plan.steps:
            result = self.executor.execute(step)
            self.planner.update_plan(plan, result)
        return plan.finalize()

三、关键技术实现

3.1 工具调用系统

class PythonREPLTool:
    @tool
    def execute(code: str) -> str:
        try:
            local_vars = {}
            exec(code, globals(), local_vars)
            return str(local_vars.get('result', ''))
        except Exception as e:
            return f"执行错误: {str(e)}"

class BrowserTool:
    @tool
    def search(query: str) -> str:
        return GoogleSearch(query).get_top_results(3)
工具注册表
TOOL_REGISTRY = {
    "python": PythonREPLTool(),
    "browser": BrowserTool(),
    "file": FileSystemTool(),
    "terminate": TerminationTool()
}

3.2 记忆管理模块

class ShortTermMemory:
    def __init__(self):
        self.history = []
        self.max_length = 10
    
    def add(self, item):
        if len(self.history) >= self.max_length:
            self.history.pop(0)
        self.history.append(item)
    
    def get_context(self):
        return "\n".join([f"- {item}" for item in self.history[-3:]])

四、实战演示

4.1 环境配置

# 克隆仓库
git clone https://github.com/THU-MIG/open-minus.git
cd open-minus

# 安装依赖
pip install -r requirements.txt

# 配置 API 密钥
echo "OPENAI_API_KEY=sk-your-key-here" > .env

4.2 典型工作流

from openminus import MinusAgent

agent = MinusAgent()
response = agent.run("请写一篇关于量子计算的科普文章")
print(response.final_answer)
执行过程日志
[THINK] 需要收集量子计算的基础概念
[ACTION] 使用 google_search("量子计算 基本原理")
[OBSERVE] 获得 3 篇相关论文摘要
[THINK] 需要解释量子比特与传统比特的区别
[ACTION] 使用 python 生成对比图表
[FINAL] 整合内容输出 Markdown 格式

五、架构优化建议

5.1 性能提升方案

  1. 缓存机制:对常见查询结果进行缓存
  2. 异步执行:工具调用的并行处理
  3. 模型蒸馏:使用小模型处理简单任务
@lru_cache(maxsize=100)
def cached_search(query: str):
    return GoogleSearch(query).get_top_results(3)

5.2 安全增强策略

风险类型 防护措施
代码注入 沙盒环境执行
敏感信息泄露 输出内容过滤
资源滥用 请求频率限制
错误传播 异常捕获与降级处理

六、扩展应用场景

6.1 企业级应用

class EnterpriseMinus(MinusAgent):
    def __init__(self):
        super().__init__()
        self.register_tool(CRMIntegrator())
        self.register_tool(ERPAccess())
    
    def handle_ticket(self, ticket):
        return self.run(f"处理客户工单:{ticket.content}")

6.2 教育领域应用

class EduAssistant:
    def explain_concept(self, concept):
        plan = [
            "搜索基础定义",
            "查找常见误解",
            "生成教学案例",
            "创建练习题"
        ]
        return self.execute_plan(plan)

七、常见问题解答

7.1 性能优化

Q:如何处理复杂任务的超时问题?

A:采用分阶段执行策略:

@timeout_decorator.timeout(30)
def execute_with_timeout(step):
    return agent.execute(step)

7.2 部署方案

Q:如何实现高可用部署?

推荐架构:

负载均衡器
├── 节点1(GPU 实例)
├── 节点2(GPU 实例)
└── 节点3(CPU 实例 - 降级模式)

八、未来演进方向

  1. 多模态支持:集成图像/语音处理能力
  2. 分布式架构:支持横向扩展的智能体集群
  3. 增强学习:动态优化工具调用策略
  4. 知识图谱:构建长期记忆系统
class MultiModalAgent(MinusAgent):
    def process_image(self, img_path):
        vision_model = load_vision_model()
        return vision_model.analyze(img_path)

九、安装指南

我们提供两种安装方式。推荐使用方式二(uv),因为它能提供更快的安装速度和更好的依赖管理。

方式一:使用 conda

  1. 创建新的 conda 环境:
conda create -n open_manus python=3.12
conda activate open_manus
  1. 克隆仓库:
git clone https://github.com/mannaandpoem/OpenManus.git
cd OpenManus
  1. 安装依赖:
pip install -r requirements.txt

方式二:使用 uv(推荐)

  1. 安装 uv(一个快速的 Python 包管理器):
curl -LsSf https://astral.sh/uv/install.sh | sh
  1. 克隆仓库:
git clone https://github.com/mannaandpoem/OpenManus.git
cd OpenManus
  1. 创建并激活虚拟环境:
uv venv --python 3.12
source .venv/bin/activate  # Unix/macOS 系统
# Windows 系统使用:
# .venv\Scripts\activate
  1. 安装依赖:
uv pip install -r requirements.txt

浏览器自动化工具(可选)

playwright install

配置说明

OpenManus 需要配置使用的 LLM API,请按以下步骤设置:

  1. config 目录创建 config.toml 文件(可从示例复制):
cp config/config.example.toml config/config.toml
  1. 编辑 config/config.toml 添加 API 密钥和自定义设置:
# 全局 LLM 配置
[llm]
model = "gpt-4o"
base_url = "https://api.openai.com/v1"
api_key = "sk-..."  # 替换为真实 API 密钥
max_tokens = 4096
temperature = 0.0

# 可选特定 LLM 模型配置
[llm.vision]
model = "gpt-4o"
base_url = "https://api.openai.com/v1"
api_key = "sk-..."  # 替换为真实 API 密钥

快速启动

一行命令运行 OpenManus:

python main.py

然后通过终端输入你的创意!

如需使用 MCP 工具版本,可运行:

python run_mcp.py

如需体验不稳定的多智能体版本,可运行:

python run_flow.py

网站公告

今日签到

点亮在社区的每一天
去签到