1. 从现象级产品到开源力量:OpenManus的诞生与定位

最近AI圈里有个事儿挺火的,不知道你听说了没?一个叫Manus的AI智能体产品,刚出来就被大家抢疯了,邀请码炒得老高,简直一码难求。它号称是全球第一个“通用型”AI智能体,意思就是啥活儿都能干点,从帮你分析股票到写代码、查资料,一个智能体全包了。这种“全能助手”的愿景,确实戳中了很多开发者和用户的痛点。但问题也来了,好东西大家都想用,可门槛太高,普通人根本摸不着。

就在大家眼巴巴看着的时候,开源社区的力量又一次展现了它的魅力。MetaGPT团队的五位工程师,只用了三个小时,就搓出了一个开源版本——OpenManus。好家伙,这项目在GitHub上几天就攒了三万多颗星,热度直接拉满。这事儿特别有意思,它不仅仅是一个简单的“复刻”,更像是一场宣言:最前沿的AI应用,不应该被锁在少数人的手里,而应该开放出来,让所有人都能研究、使用甚至改进。

所以,今天咱们要聊的OpenManus,它到底是什么?简单说,它是一个完全开源、拿来即用的通用AI智能体框架。你可以把它理解成一个高度智能的“数字员工”的制造工厂和运行平台。你给它一个目标,比如“帮我分析一下特斯拉的股票”,它就能自己规划步骤、上网查资料、运行代码计算、最后给你生成一份图文并茂的报告。整个过程全自动,你只需要喝着咖啡等结果就行。

它最适合谁呢?我觉得有三类朋友会特别需要它。第一类是AI应用开发者,你想快速构建一个能处理复杂任务的智能体,又不想从零开始造轮子,OpenManus提供了现成的、模块化的架构。第二类是技术爱好者或研究者,你想深入理解一个先进的AI智能体内部到底是怎么运转的,它的代码就是最好的教科书。第三类可能就是一些中小团队或个人,希望用低成本的方式,拥有一个强大的自动化助手来处理日常的调研、分析、汇总等工作。

和原版Manus那种“黑盒”服务不同,OpenManus把所有的“魔法”都摊开给你看。它的口号是“No fortress, purely open ground”——没有堡垒,只有开放的平原。这意味着你可以完全掌控它,随意更换底层的大脑(大模型)、给它增加新的技能(工具)、或者修改它的工作流程。从爆款产品到开源框架,这不仅仅是技术的下放,更是一种开发理念的转变:协作与共享,才是推动AI真正普惠的关键。接下来,我就带你一起,亲手拆开这个“数字员工工厂”,看看它的精妙设计,并一步步教你把它用起来。

2. 庖丁解牛:深度拆解OpenManus的模块化架构

很多开源项目代码一打开,文件堆得乱七八糟,看半天找不到北。但OpenManus给我的第一印象很好,它的目录结构清晰得像个教科书范例。这背后体现的,正是其核心的模块化与分层架构思想。这种设计不是为了看起来好看,而是为了让你在修改、扩展、调试时,能快速定位,像搭乐高一样组合功能。

咱们先来看看它的项目根目录,主要就几个文件夹:app/, config/, examples/, workspace/。核心代码几乎全在 app 下面。这种划分一下子就把用途分开了:app是发动机,config是方向盘和油门(配置),examples是教学录像,workspace是工作台,存放智能体生成的所有文件。我们重点钻进 app 这个“发动机舱”看看。

2.1 清晰的分层:从应用到基础设施

OpenManus的架构是典型的分层设计,每一层职责明确,上层依赖下层,但下层不知道上层的存在。这么做的好处是耦合度低,比如你想换掉底层的大模型接口,几乎不会影响到最上层的任务执行逻辑。

第一层:应用层 这是系统的入口,你可以理解为总控开关。主要文件是 main.pyrun_flow.pymain.py 是启动交互式命令行界面的入口,你运行 python main.py 就是从这里开始的。它负责初始化整个系统,接收你的指令,然后交给下面的智能体层去执行。run_flow.py 则更偏向于以编程方式或流程化的方式运行定义好的任务。这一层很薄,只做调度和启动,不涉及具体业务逻辑。

第二层:智能体层 这是整个框架的“大脑”和“指挥官”,位于 app/agent/ 目录下。这里定义了不同类型的智能体。最重要的几个角色包括:

  • manus.py:这是主智能体,可以看作是“总经理”。它负责统筹全局,管理记忆,协调其他智能体。
  • planning.py:这是“战略规划师”。当“总经理”接到一个复杂任务(比如分析股票)时,就会把任务交给这位规划师。规划师会调用大模型,把“分析特斯拉股票”这样模糊的指令,拆解成“1. 搜索特斯拉最新财报;2. 获取近期股价数据;3. 计算关键财务指标;4. 撰写分析报告”等一系列可执行的子任务序列。
  • toolcall.py:这是“一线工程师”或“工具调用专家”。它负责具体的“思考-行动”循环。在规划师给出步骤后,工具调用智能体会在每一步中:先“思考”(Think)当前该用什么工具(比如用浏览器搜索,还是用Python计算),然后“行动”(Act)执行工具,最后“观察”(Observe)结果并更新记忆。这个循环会一直进行,直到任务完成或达到步数上限。

这种分工协作的机制,模拟了一个高效的团队。规划师做顶层设计,工具调用专家负责落地执行,主智能体负责监督和记忆,确保了复杂任务能被系统化地完成。

第三层:工具层 这是“武器库”,位于 app/tool/ 目录。智能体再聪明,没有工具也干不了实事。OpenManus内置了一批非常实用的工具:

  • browser.py:浏览器自动化工具。这是OpenManus的一大亮点,它集成了Playwright,能让智能体像真人一样操作浏览器:打开网页、点击、输入、滚动、截图、提取文本数据。这让智能体获取实时信息的能力大大增强。
  • python_executor.py:Python代码执行器。智能体可以编写并执行Python代码,用于数据处理、计算、图表生成等。这赋予了它强大的逻辑处理和数据分析能力。
  • file.py:文件操作工具。读写、创建、删除文件,让智能体能持久化保存工作成果。
  • search.py:网络搜索工具(如果配置了相关API)。 这些工具都以统一的接口暴露给上层的智能体,智能体不需要关心工具内部如何实现,只需要知道工具的名字和怎么用就行。你也可以很容易地在这里添加自己的工具,比如连接数据库的、调用特定API的。

第四层:基础设施层 这是“地基”,包括配置管理、日志系统、大模型接口抽象等。在 app/ 目录下还能找到 memory.py(记忆系统)、llm.py(大模型客户端)等。llm.py 尤其重要,它定义了一个统一的接口来调用不同的大模型服务(如OpenAI、Anthropic、Google等)。无论底层是GPT还是Claude,上层的智能体都通过同样的方式与之对话,这实现了模型的热插拔。

2.2 工作流程全景图:Plan-Action-Review循环

理解了架构,我们再来看看这个“数字员工”具体是怎么干活的。它的核心工作流程是一个经典的 “规划-行动-评审”循环,非常符合人类解决问题的思路。

当你输入一个指令后,系统首先会创建一个主智能体实例,并把你的话记到它的“小本本”(记忆系统)里。然后,规划智能体上场。它会拿着你的问题去问大模型:“嘿,用户想分析特斯拉股票,我们该分几步走?每一步用什么工具合适?”大模型会返回一个详细的计划书。这个计划不是瞎猜的,而是基于OpenManus预先设计好的系统提示词(在 app/prompt/ 目录下),引导模型进行结构化思考后产生的。

计划制定好后,就进入了紧张的执行阶段。工具调用智能体登场,它进入一个循环:

  1. 思考:看看当前任务进行到哪一步了,历史记录都干了啥,然后决定下一步最应该调用哪个工具。比如,第一步是“搜索特斯拉财报”,那它就会选择浏览器工具。
  2. 行动:精确地调用浏览器工具,打开谷歌,输入关键词,进入官网,找到财报页面。
  3. 观察:工具执行完后,会返回结果,比如网页的文本内容、截图,或者一个“成功”状态。智能体会仔细“观察”这些结果。
  4. 更新记忆:把“我已经搜到财报了,内容如下……”记录到记忆里。然后判断,当前子任务完成了吗?如果完成了,就进入下一个子任务(比如“获取股价数据”),开始新的“思考-行动-观察”循环;如果没完成或者出错了,它可能会调整策略,重新尝试。

这个循环会一直持续,直到所有规划的子任务都完成,或者达到了系统设置的最大尝试步数(默认20步)。最后,主智能体会把所有中间结果汇总、整理,生成最终答案输出给你,并保存到工作区。

我特别喜欢这种设计,因为它把不确定性很强的AI能力,套进了一个确定性的、可追踪的流程框架里。即使某一步大模型“犯糊涂”了,系统也能通过循环和记忆进行纠正,大大提高了复杂任务的成功率。你可以打开 app/agent/toolcall.py 文件,找到 async def think(self)async def act(self) 这两个核心方法,里面就是上述逻辑的代码实现,读起来非常直观。

3. 从零到一:手把手配置与运行你的第一个智能体

理论说得再多,不如亲手跑一遍。这部分我就以Windows 11环境为例,带你从零开始,把OpenManus搭起来,并且配置成使用目前公认智能体能力最强的Claude 3.7 Sonnet模型。放心,步骤很详细,跟着做就行。

3.1 环境准备与安装:为什么我强烈推荐用uv?

首先,你需要准备两样东西:Python环境和一个代码编辑器(VS Code或Cursor都行)。OpenManus要求Python 3.12或更高版本。安装Python的方法网上很多,这里不赘述。

重点来了:安装OpenManus本身。官方给了两种方法,但我实测后,强烈推荐你使用uv,而不是传统的pip或conda。你可能没听过uv,它是用Rust写的新一代Python包管理工具,速度飞快。我举个例子,用传统pip安装OpenManus这一堆依赖,可能得等上好几分钟,还可能遇到版本冲突。用uv,几十秒就搞定了,而且几乎没遇到依赖地狱的问题。

怎么装uv呢?打开你的终端(Windows用PowerShell或CMD,Mac/Linux用Terminal)。对于Windows用户,一行命令搞定:

iwr -useb https://astral.sh/uv/install.ps1 | iex

对于Mac或Linux用户,用这条命令:

curl -LsSf https://astral.sh/uv/install.sh | sh

安装完成后,关闭终端再重新打开,输入 uv --version 检查一下是否安装成功。

接下来,我们用uv来创建虚拟环境和安装项目:

# 1. 克隆项目代码
git clone https://github.com/mannaandpoem/OpenManus.git
cd OpenManus

# 2. 使用uv创建Python 3.12的虚拟环境,环境会自动放在项目目录下的 .venv 文件夹里
uv venv --python 3.12

# 3. 激活虚拟环境
# 如果你是Windows:
.venv\Scripts\activate
# 如果你是Mac/Linux:
source .venv/bin/activate

# 4. 使用uv安装所有依赖包,速度飞快
uv pip install -r requirements.txt

# 5. (可选但强烈建议)安装浏览器自动化工具Playwright
playwright install

第5步安装Playwright是为了让智能体能操作浏览器。如果你确定你的任务不需要上网(比如只做本地文件处理),可以跳过。但绝大多数有趣的任务都需要它,所以建议装上。

3.2 关键一步:配置大模型连接(以Claude 3.7 Sonnet为例)

环境装好了,但现在的OpenManus还是个“植物人”,因为它没有“大脑”——大模型。默认配置用的是OpenAI的GPT-4o,但咱们完全可以用更强大或更经济的模型。这里我演示如何配置通过OpenRouter来使用Claude 3.7 Sonnet。OpenRouter是一个聚合了多家大模型API的平台,用起来很方便。

首先,你需要去 OpenRouter官网 注册一个账号,并获取一个API Key。通常新用户会有少量免费额度供测试。

然后,在OpenManus项目目录下,复制配置文件模板:

cp config/config.example.toml config/config.toml

现在,用你的编辑器打开 config/config.toml 文件。找到 [llm] 这个部分,把它修改成下面这样:

[llm]
# 指定使用Claude 3.7 Sonnet模型
model = "anthropic/claude-3.7-sonnet"
# OpenRouter的API地址
base_url = "https://openrouter.ai/api/v1"
# 替换成你在OpenRouter上获取的真实API Key
api_key = "sk-or-v1-xxxxxx...你的密钥..."
# 最大生成长度,可以根据需要调整
max_tokens = 8192
# 温度参数,0.0表示输出更确定、更专注,适合任务执行
temperature = 0.0

保存文件。就这么简单!现在,OpenManus就会通过OpenRouter去调用Claude 3.7 Sonnet了。这种配置方式非常灵活,你以后想换Gemini、DeepSeek或者其他任何OpenRouter支持的模型,只需要改一下 model 字段的名字就行,比如换成 "google/gemini-flash-2.0"

3.3 运行与初体验:和你的智能体第一次对话

激动人心的时刻到了!在终端里,确保你还在项目目录下,并且虚拟环境已经激活(命令行前面应该有 (.venv) 提示)。然后输入:

python main.py

你会看到一个简洁的命令行界面启动起来。它会提示你输入任务。咱们先来个简单的测试,输入:

请用中文介绍一下OpenManus这个项目。

按下回车,你会看到终端开始滚动日志。智能体首先会“思考”,生成一个计划(比如:1. 回忆项目信息 2. 组织语言介绍 3. 输出),然后执行。因为它有访问本地项目文件的能力,所以它会去读README等文件,最后给你生成一段介绍。虽然这个问题简单,但你可以观察到它完整的“规划-执行”流程。

如果一切顺利,没有报错(特别是关于API连接的错误),那么恭喜你,你的通用AI智能体框架已经成功跑起来了!你可以尝试更复杂的任务,比如“总结今天知乎热榜上前三条新闻”,它会自动启动浏览器去知乎抓取信息。第一次运行浏览器可能会稍慢,因为它要启动浏览器实例。

4. 实战演练:用不同模型完成股票分析任务

框架跑通了,我们来点真格的。我复现了原版Manus演示中的一个经典场景:股票投资分析。这个任务综合性强,需要规划、信息检索、数据处理和报告撰写,非常适合检验一个智能体框架的能力。同时,我会用不同的模型来跑同一个任务,给你看看效果和成本的差异,帮你做选型参考。

4.1 任务执行:观察智能体的完整工作流

在OpenManus的命令行界面,输入以下指令:

帮我做一下Tesla(特斯拉)的股票投资分析报告,要求包含公司近期财务表现、市场竞争力分析、风险因素以及投资建议,最后以Markdown格式输出。

输入后,你就泡杯茶,看着终端刷屏吧。这个过程非常有趣,像看一个实习生在你眼皮底下干活:

  1. 规划阶段:日志会显示 Creating initial plan...,然后打印出一份详细的计划。Claude 3.7 Sonnet生成的计划通常非常结构化,例如:

    • 步骤1:使用浏览器搜索特斯拉最新季度财报(10-Q或10-K)。
    • 步骤2:搜索特斯拉近期股价走势和市值数据。
    • 步骤3:搜索电动汽车行业竞争格局(对比比亚迪、蔚来等)。
    • 步骤4:识别潜在风险(监管、竞争、供应链)。
    • 步骤5:使用Python计算关键财务比率(如市盈率P/E)。
    • 步骤6:综合以上信息,撰写Markdown报告。
  2. 执行与循环:接下来,你会看到它打开浏览器(如果装了Playwright),自动导航到特斯拉投资者关系页面、雅虎财经等网站。日志会显示 Act: Using browser tool to navigate to...Observe: Page content retrieved...。它可能会遇到一些小问题,比如页面元素没找到,但智能体会根据错误调整策略,比如换一个搜索词。这个“思考-行动-观察”的循环会一步步推进。

  3. 生成与保存:所有步骤完成后,它会调用文件工具,在 workspace 目录下生成一个 .md 文件。你可以用任何Markdown编辑器打开它。我实测用Claude 3.7 Sonnet生成的报告,结构清晰,有数据引用,有分析观点,甚至会尝试画一个简单的ASCII图表来展示股价趋势,质量相当不错。

4.2 模型对比测试:性能、质量与成本的三角权衡

光用一个模型不算本事,我特意通过OpenRouter,测试了三个不同价位和能力的模型来完成完全相同的特斯拉股票分析任务。结果很有意思,直接看下表:

测试模型 任务完成情况 步骤数/耗时 报告质量主观评价 预估API成本(约)
GPT-4o 未完成,在第20步(最大步数)陷入循环,反复执行同一操作(如重复刷新同一页面)。 20步后卡死 未生成完整报告 $0.60
Claude 3.7 Sonnet 顺利完成,逻辑清晰,步骤连贯。 17步完成 优秀。结构完整,数据有引用,分析有深度,给出了平衡的投资建议。 $0.91
Gemini Flash 2.0 顺利完成,步骤与Claude类似。 17步完成 良好。结构清晰,内容覆盖全面,但分析深度和洞察力稍逊于Claude,部分表述较笼统。 $0.028

这个对比能给我们很多实操层面的启发:

  • GPT-4o的意外折戟:这有点反直觉,GPT-4o能力很强,但在这种长链条、多步骤的规划执行任务中,它有时会“钻牛角尖”,陷入死循环。这可能与它对复杂工具调用指令的理解和自身规划稳定性有关。这说明模型能力强大不等于在智能体框架中表现最好,适配性很关键。
  • Claude 3.7 Sonnet的稳健表现:它不愧是当前公认的“智能体之王”。不仅任务完成得干净利落,生成的内容质量也最高。它的规划更合理,执行更果断,很少做无用功。如果你追求最高成功率和最佳输出质量,且预算充足,Claude 3.7 Sonnet是目前的开源智能体框架的最佳搭档
  • Gemini Flash 2.0的性价比惊喜:这是最大的亮点!成本只有Claude的约三十分之一,但成功完成了任务,报告质量也“可用”。对于大量、日常、对分析深度要求不是极端高的自动化任务(比如每日竞品信息简报、网络内容初筛汇总),Gemini Flash 2.0提供了难以置信的性价比。它让运行一个高级智能体的日常成本变得极低。

所以,在实际项目中怎么选?我的经验是:前期调试和关键任务用Claude 3.7 Sonnet,追求稳定和优质;批量生产或简单任务用Gemini Flash 2.0,控制成本。你完全可以在 config.toml 里准备多个配置块,根据任务类型动态切换模型。

4.3 常见问题与调优技巧

跑的过程中你可能会遇到一些问题,这里分享几个我踩过的坑和解决办法:

  1. 浏览器卡住或超时:Playwright打开浏览器可能受网络或环境影响。可以在 app/tool/browser.py 里适当增加 timeout 参数(默认可能是30秒)。如果总是卡在某个网站,可以考虑在提示词(app/prompt/下的文件)里增加约束,比如“如果页面加载超过10秒或找不到元素,则尝试换一个信息源搜索”。
  2. API调用频率超限:免费或低阶的API Key有调用频率限制。如果任务中途失败,检查日志是否显示“rate limit”错误。解决办法是换更高级的Key,或者在代码中增加错误处理和重试逻辑,例如在 app/llm.py 的请求函数里加入指数退避重试。
  3. 任务规划不合理:有时模型会规划出无法执行的步骤。你可以去修改 app/prompt/planning_system_prompt.txt 等文件,优化给模型的系统指令。比如,更明确地告诉它:“优先使用公开的财经网站如Yahoo Finance、Macrotrends,避免需要登录的网站。”
  4. 控制成本:除了选用便宜模型,一定要设置 max_tokens 和最大步数(在 config.toml[agent] 部分找 max_steps)。避免智能体陷入无限循环疯狂调用API,那账单可就吓人了。

调试时,多看看 workspace 目录下生成的中间文件,比如 plan_xxx.json(计划文件)和 memory_xxx.json(记忆文件),能帮你理解智能体当时“在想什么”,是定位问题的最佳途径。

5. 进阶与扩展:打造属于你自己的智能体

OpenManus的魅力在于它的开放性。你不仅仅是一个使用者,更可以成为一个改造者。这里我分享两个最实用的扩展方向:增加自定义工具和修改工作流程。

5.1 为智能体添加新技能:自定义工具开发

假设你想让智能体能查询天气预报,或者能操作你的数据库。这就需要开发一个新工具。在OpenManus里,这非常简单。所有工具都放在 app/tool/ 目录下,并且继承一个基础的 BaseTool 类。

我们来创建一个最简单的例子:一个能进行简单数学计算的工具,虽然Python执行器也能做,但这是为了演示流程。新建一个文件 app/tool/calculator.py

from app.tool.base import BaseTool, ToolParameter
from pydantic import BaseModel, Field

# 定义工具的输入参数模型
class CalculatorInput(BaseModel):
    a: float = Field(description="第一个数字")
    b: float = Field(description="第二个数字")
    operation: str = Field(description="运算类型,支持 'add', 'subtract', 'multiply', 'divide'")

# 工具类继承BaseTool
class CalculatorTool(BaseTool):
    # 工具的唯一名称,智能体通过这个名字调用它
    name: str = "calculator"
    # 工具的描述,这很重要!大模型根据描述决定是否使用该工具
    description: str = "一个简单的计算器,可以对两个数字进行加、减、乘、除运算。"
    # 定义输入参数模型
    args_schema = CalculatorInput

    # 这是工具的核心执行方法
    async def run(self, a: float, b: float, operation: str):
        """执行计算"""
        try:
            if operation == "add":
                result = a + b
            elif operation == "subtract":
                result = a - b
            elif operation == "multiply":
                result = a * b
            elif operation == "divide":
                if b == 0:
                    return {"error": "除数不能为零"}
                result = a / b
            else:
                return {"error": f"不支持的运算类型: {operation}"}

            # 返回结果,格式最好是字典,便于智能体解析
            return {
                "operation": f"{a} {operation} {b}",
                "result": result
            }
        except Exception as e:
            return {"error": f"计算失败: {str(e)}"}

开发完成后,你需要在 app/tool/__init__.py 文件中导入并注册这个新工具,把它加入到工具列表中,这样智能体在规划时就能知道有这个“计算器”技能可用了。之后,当你问智能体“请计算一下389乘以127等于多少”时,它就有可能规划出使用这个计算器工具的步骤,而不是去打开浏览器搜索或者写Python代码,效率更高。

5.2 优化智能体行为:调整提示词与流程

智能体的“性格”和“能力”很大程度上由提示词决定。OpenManus的所有系统提示词都放在 app/prompt/ 目录下。比如,app/prompt/manus_system_prompt.txt 是主智能体的“人格设定”,app/prompt/planning_system_prompt.txt 是规划智能体的“思考指南”。

如果你发现智能体总喜欢用浏览器搜索一些它本可以推理或计算的事情,导致任务慢且耗钱,你可以去修改规划智能体的提示词。例如,在规划提示词末尾加上一条约束:

请注意:对于简单的数学计算、单位换算、日期推算等任务,应优先考虑使用内置的计算工具或逻辑推理完成,仅在需要获取最新、非公开的实时信息时才使用浏览器搜索工具。

一个小小的提示词调整,往往能显著改变智能体的行为模式,使其更高效、更符合你的预期。这就是开源框架带来的深度控制力,是在使用闭源服务时无法体验的。

通过以上这些步骤,你不仅学会了如何使用OpenManus,更掌握了如何“调教”和“增强”它。从一个爆款产品的惊叹者,变成了一个开源智能体框架的驾驭者。这种从消费技术到理解并创造技术的转变,正是开源精神带给开发者最宝贵的礼物。剩下的,就交给你的想象力去探索了,无论是把它集成到你的工作流中,还是基于它开发出更专业的垂直领域智能体,OpenManus都提供了一个坚实而优雅的起点。

Logo

欢迎加入DeepSeek 技术社区。在这里,你可以找到志同道合的朋友,共同探索AI技术的奥秘。

更多推荐