OpenMinus 源码深度解析:从 React 模式到多智能体架构实现
本文基于 2024 年 3 月 9 日最新代码版本解析,完整代码已上传至 GitHub(附项目地址https://github.com/mannaandpoem/OpenManus)
一、项目背景与核心价值
1.1 项目定位
OpenMinus 是 MetaGPT 团队开发的类 MINUS 开源实现,其核心价值体现在:
- 架构创新:实现 React 模式与多智能体协作
- 效率突破:3 小时完成基础版本开发
- 社区热度:上线 3 天即获 1.6 万星标
- 实用价值:解决 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()
执行流程图
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 性能提升方案
- 缓存机制:对常见查询结果进行缓存
- 异步执行:工具调用的并行处理
- 模型蒸馏:使用小模型处理简单任务
@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 实例 - 降级模式)
八、未来演进方向
- 多模态支持:集成图像/语音处理能力
- 分布式架构:支持横向扩展的智能体集群
- 增强学习:动态优化工具调用策略
- 知识图谱:构建长期记忆系统
class MultiModalAgent(MinusAgent):
def process_image(self, img_path):
vision_model = load_vision_model()
return vision_model.analyze(img_path)
九、安装指南
我们提供两种安装方式。推荐使用方式二(uv),因为它能提供更快的安装速度和更好的依赖管理。
方式一:使用 conda
- 创建新的 conda 环境:
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
方式二:使用 uv(推荐)
- 安装 uv(一个快速的 Python 包管理器):
curl -LsSf https://astral.sh/uv/install.sh | sh
- 克隆仓库:
git clone https://github.com/mannaandpoem/OpenManus.git
cd OpenManus
- 创建并激活虚拟环境:
uv venv --python 3.12
source .venv/bin/activate # Unix/macOS 系统
# Windows 系统使用:
# .venv\Scripts\activate
- 安装依赖:
uv pip install -r requirements.txt
浏览器自动化工具(可选)
playwright install
配置说明
OpenManus 需要配置使用的 LLM API,请按以下步骤设置:
- 在
config
目录创建config.toml
文件(可从示例复制):
cp config/config.example.toml config/config.toml
- 编辑
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