本文基于 2024 年 3 月 9 日最新代码版本解析,完整代码已上传至 GitHub(附项目地址https://github.com/mannaandpoem/OpenManus)
OpenMinus 是 MetaGPT 团队开发的类 MINUS 开源实现,其核心价值体现在:
open-manus
特性 | OpenMinus | 原版 MINUS |
---|---|---|
响应速度 | <200ms | 500-800ms |
并发处理 | 支持 | 受限 |
自定义工具扩展 | 开放 API | 封闭系统 |
本地化部署 | 支持 | 仅云端 |
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()
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()
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()
}
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:]])
# 克隆仓库
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
from openminus import MinusAgent
agent = MinusAgent()
response = agent.run("请写一篇关于量子计算的科普文章")
print(response.final_answer)
[THINK] 需要收集量子计算的基础概念
[ACTION] 使用 google_search("量子计算 基本原理")
[OBSERVE] 获得 3 篇相关论文摘要
[THINK] 需要解释量子比特与传统比特的区别
[ACTION] 使用 python 生成对比图表
[FINAL] 整合内容输出 Markdown 格式
@lru_cache(maxsize=100)
def cached_search(query: str):
return GoogleSearch(query).get_top_results(3)
风险类型 | 防护措施 |
---|---|
代码注入 | 沙盒环境执行 |
敏感信息泄露 | 输出内容过滤 |
资源滥用 | 请求频率限制 |
错误传播 | 异常捕获与降级处理 |
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}")
class EduAssistant:
def explain_concept(self, concept):
plan = [
"搜索基础定义",
"查找常见误解",
"生成教学案例",
"创建练习题"
]
return self.execute_plan(plan)
Q:如何处理复杂任务的超时问题?
A:采用分阶段执行策略:
@timeout_decorator.timeout(30)
def execute_with_timeout(step):
return agent.execute(step)
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 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
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