时间穿越回2025年1月31日,那个红红火火的大年初三

小编在老家同学聚会的饭桌上与朋友们侃天侃地,由于LLM的浪潮自2023年起就没有平息过,便有一个老哥突然问到:“诶?小C,你觉得今年AI的发展会是什么样子?”,小编推了推眼镜,沉稳说到:“前年文字生成,去年多模态,2025年必定是属于智能体应用的一年~Let's see.”节后回到公司便被哐哐打脸,DeepSeek-R1又一次卷起了千层浪,这浪更比Sora那浪凶。难道2025年要被推理大模型拿捏了吗?

时间又旋转跳跃到2025年3月6日,一个普通的工作日

“通用AI智能体应用” Manus突然发布,宣称其与传统的AI助手不一样,它针对的是各种应用场景下的复杂任务,比如撰写报告、编写网页、复杂数据分析以及其他各式各样的与“生产力”挂钩的任务。

这一发布可不得了,其展示出的任务回放中,大模型自主执行网页搜索、代码编写,经过各种花里胡哨的操作后竟真能给用户交出“实实在在的东西”,这样一来,媒体们瞬间坐不住了——这是DeepSeek 之后,又一个科技圈的不眠之夜。

这Manus到底是怎么一回事?一起来看!

1.什么是Manus

Manus 是由 Monica.im 团队开发的全球首个自主通用 AI Agent。据Manus官方介绍:“Manus 是一款通用型 AI 助手,能将想法转化为行动:不止于思考,更注重成果。Manus 擅长处理工作与生活中的各类任务,在你安心休息的同时,一切都能妥善完成。”

*为什么
Manus一经发布便引起了这么多的关注?
我们不妨回顾一下先前的智能体应用都是怎样的👇*

在Manus发布之前,市面上存在多种多样的AI助手:代码助手、旅行规划助手、公文写作助手......然而这些智能助手有一些共性上的不足——他们都专注于各自的“一亩三分地”,只在各自的垂直领域发光发热。这就导致了我们存在不同的需求时,需要寻找不同领域的AI Agent应用,找到的还不一定能保证效果。

另外,先前的Agent智能助手较为擅长的是“收集数据-分析问题-输出结论或建议”,这种工作模式实际上是指导人更好的完成工作,最终还是要落实到“让人做某事”上,但实际上明明有些任务使用简单的workflow即可完成,而有时我们还要花费额外的时间将AI提供的信息二次处理,最终才能转化为我们想要的结果,工作效率反而高不起来,还有可能因为AI的能力有限被拖后腿。

而Manus呢?作为一种“自主智能体”,它不仅会思考,还能直接执行任务并交付结果。“All-in-one”的属性瞬间让我感觉,其他的都可以不需要了,有任何需求使用Manus就好了嘛~

接下来让我们来看一下使用Manus都能够干些什么,并看看它是如何完成任务的。从官方提供的一些使用案例中我们可以发现,这个东西不得了——旅行规划、股票分析、页面编写、音频剪辑...大大小小的活它全包了。Manus不仅可以高效检索、数据分析,还可以主动操作系统、编写代码、给出实际的交付物,且交付物质量还挺不错,很多情况下不需要人进行二次修改了!

37c402808e535b27b3ada883b8447e2e.png

Manus官网中提供了海量用例展示

接下来我们举个🌰日本旅行7-Day Japan Itinerary with Proposal Ideas(https://manus.im/share/brWKUSp51ItvVMBpcXNCZ1?replay=1)

看看Manus完成一项任务从头到尾的流程:

1️⃣Manus的每个任务session都独立运行并维护在一个单独的sandbox中,Agent拥有这个sandbox的所有权限。
2️⃣在接收到任务后,Manus首先会创建一个相关工程目录,随后围绕任务分析并规划出一个详细的Todo List(todo.md)。
3️⃣随后,针对Todo中的每一项任务,每项任务执行的过程都可以看作一个工具调用循环(Tool call Circle),在其中Manus会有针对性地调用各种工具,直到完成目标,并在过程中生成各种有必要的本地文件。
4️⃣最后,Manus能够综合所有的工作记录以及中间文件,汇总生成最终交付内容。

以下是工作流程展示:

509c974cfb295919443ce7b9c122b7d9.png

e05a2fe625722ca688087304e7dc8b66.png
Manus首先创建工程目录和 todo 文件,并编写任务相关的步骤分解和待办事项列表

0cf7f826836b02844ffb4dff61da889d.png
按照 todo 顺序执行每一项任务

32d15f92979ff9ec86f58384e8923dfa.png
5382e1aae2634e3b00f0a231444d7484.png
8d85ecb128d6e62fca897d88f41323d0.png
c53dcf62de7804c73452860d54f66b4b.png
Manus使用了网络搜索、网页操作、文件编写工具完成本次任务

afe5b9fd5e1e83a430f96b398f7ae368.png
最终给出交付物(html网页)

看来这家伙确实有两下子,既可以进行缜密思考,规划任务流程,又可以通过调用多种工具,一步一步把任务完成,并最终提供文件给用户。

所以这么好用的东西,从哪里获得呢?当前Manus并没有正式开放使用,而是采用邀请制,用户可以凭邀请码注册体验。而这个邀请码并不是很好拿到,甚至一度炒到几万元一个... 最近Manus也是公布了初步的付费方案:ManusStarter 每月收费 39 美元,可获得 3900 积分,最多可以同时运行 2 个任务。ManusPro 每月收费 199 美元,可获得 19900 积分最多可以同时运行 5 个任务,同时支持使用高投入模式和其他测试功能。

好家伙,虽然看上去很牛很有吸引力,但是开个会员一个月动辄成百上千,邀请码被炒至成千上万...想使用超级AI,我们穷哥们儿还不配了?不行,我要白嫖一切!今天就帮大家拆解Manus的技术架构,梳理技术要点,并尝试使用LazyLLM框架对Manus进行复现,帮助大家在本地部署一个属于自己的“Lazy Manus”。

2.Manus技术架构拆解

通过观察Manus的运行机制我们可以发现,Manus其实就是结合了Plan-and-Solve原理的多智能体应用框架:创建好工程目录后,Manus首先会进行充分的规划(Plan),然后针对规划中的每一环节调用工具执行,直到当前环节完成后进入下一环节(Solve,Tool call Circle),循环往复直到todo list中的每一项完成目标。

我们再结合市面上较为成熟的智能体应用框架梳理一下,其本身可以分为三大模块:

规划模块(Planning Module)
规划模块充当了智能体应用中大脑的角色,主要用于识别用户意图、拆解复杂任务、规划执行方案等,以DeepSeek-R1为例,当前推理大模型的能力已经达到了不错的水平,优秀的推理和规划能力能够助力Manus轻松驾驭各式各样的复杂场景,任何复杂任务都能得到清晰靠谱的行动规划。

工具调用模块(Tool call Module)
一个优秀的智能体应用不仅需要聪明的大脑,还需要丰富的工具支撑,工具调用模块就像Manus的手,主要负责调用各种工具,完成具体的操作,这里的操作在整个任务流程中往往只体现了一小步,但正是每一次高效稳定的工具调用,促成了任务最终的高质量完成。在Manus中,比较典型的工具如下:
🔨网络搜索工具(Web Search)
🔨浏览器操作工具(Browser-use)
🔨代码执行工具(Code Executor)
🔨文件管理工具(File Manager)
🔨命令行执行工具(Terminal)

记忆模块(Memory Module)
经典智能体框架中,Agent存在着两种记忆——短时记忆与长期记忆,其中短时记忆即大模型的history,赋予Agent单次任务中感知中间结果和临时数据,方便一步步完成任务,而长期记忆负责记录与用户相关的偏好数据和历史对话,方便应用在后续的工具当中更好的便是用户意图,有针对性的优化用户体验。对于一个智能体应用来说,记忆模块是必不可少的。根据以上梳理,小编帮大家整理了一份Manus工作流程图:

图片

Manus工作流程图观察这个流程图,小编发现Manus的结构并不复杂,但看着这琳琅满目的示例,内心不由得思考:严谨的规划、丝滑的工具调用、多种多样的内容呈现,这绝对不是仅仅靠着上面那坨流程图就能实现的,其背后一定还存在着大量的工程与模型优化。还没缓过神,Manus的主理人已经在Twitter上给到了答案:

9c778bb6741db41879650da6b2085e6f.png
e037dda26ba3b0d64b98ff954fc89178.png
58c7822b929f8066d9e5025a1a9f8db9.png

从其介绍中我们可以知道,Manus是一个多智能体框架系统,且内部进行了大量的模型微调、提示词优化以适配多种多样的工具、场景。并且Manus没有使用MCP(后面介绍)。正如Manus的主理人所说,简洁高效的框架仅仅是优秀应用的一部分,Manus让人感到其无所不能的原因还在于团队使用了大量的模型微调和工具调用优化来提升系统整体的性能。也就是说,Manus是一个集虚拟机机制、Prompt调优、模型微调、多样工具集于一身的究极结合体。

3.开源版的Manus

就在我沉浸在观察Manus,梳理其技术流程时,Manus的开源版本——Open Manus与OWL强势来袭。

Open Manus(https://github.com/mannaandpoem/OpenManus)由国内专注于多智能体系统的技术公司 DeepWisdom 旗下的 MetaGPT 团队研发,团队号称“只用了3个小时,把团队先前的浏览器操作插件集成进来就差不多完成了”。雄厚的技术沉淀以及强大的执行力让小编佩服。观察其开源出的代码,我们可以发现:
📌Open Manus本身是一个拥有丰富工具链的ReactAgent
📌其工作过程中每个Step始终遵循了“Think-Act”步骤,即思考-工具调用,直到任务完成或达到最大迭代次数:
-Think(思考):观测当前任务状态,决定是否要调用工具、调用什么工具,可供使用的工具由搜索、浏览器、代码执行、命令行、文件管理。
-Act(演绎):调用工具集中对应的工具,完成单个step的任务。
图片

Open Manus工作流程示意图OWL(https://github.com/camel-ai/owl)是由Camel-AI基于自家大模型应用开发框架研发的多智能体应用,与Open Manus不同,从其官方的系统架构图上来看,系统结构则是与Manus相似的多Agent结构,其中的智能体被分为通用Agent和工具类Agent两大类,通用Agent负责同用户交互、调度各工具类Agent执行不同的工作,工具类agent则是结合自身特定的能力,使用各种工具完成给定任务。这种多智能体协作完成任务的架构层次清晰,很大程度上增强了系统的可扩展性。

图片

OWL官方系统架构示意图虽说各家都推出了自己的开源Manus,从小编的实际使用体验下来,效果只能说“还可以”:

在执行一些简单的任务时,比如搜索信息、总结报告场景,效果都还不错,都可以正常执行搜索、网页浏览等工具。但到了一些需要十几步才能完成的复杂任务场景中,系统在很多时候会出现“运行完没有给出交付物、给出的代码没办法正常运行”的尴尬现象,有时直接进入死循环出不来了(大概是因为搜索得到的有些网页在浏览过程中无法正常提取信息造成的)。

即使效果没有Manus那么好,但这么多Manus的开源版本相继发布,这一现象非常振奋人心(瞬间又增加了小编白嫖的决心)——眼看着小编已经有些落后大部队了,赶紧搞一下(LazyLLM,启动!)。由于Manus这类应用除了强大的LLM支撑外,还需要各种好用的工具支持,这就需要开发者在“工具开发”环节下很大的功夫。我们实现相关功能具体需要哪些工具呢?
🔨网络搜索功能:网络搜索工具、网页浏览工具
🔨代码执行功能:Python代码执行工具
🔨文件管理功能:文件系统管理工具:文件和目录的增删改查

小编看着这份工具清单,不禁打了个寒战——考虑到开发、适配、调试的成本,即使有这么多开源项目可以参考,这开发量还是有点多,不符合一个Lazy Boy的风格。就在这时,小编想起了最近一个因为Manus而引发热议的工具——MCP。

4.Agent时代的究极武器——MCP

36f36268654d7da9b584b152d49f03ad.png

MCP(Model Context Protocol,模型上下文协议)是一种开放标准协议,其由Anthropic公司于2024年11月推出,旨在让大语言模型能够“无缝连接”外部工具和数据源。MCP类似于我们电脑的扩展坞,充当一个“双向翻译官”的角色,让LLM能够安全、可控的调用各种工具来访问你的文件、应用以及其他网络服务,并执行对应的任务。以下是官方给出的MCP Client-Server架构示意图:
图片

可以看到,MCP主要由三大核心组件构成:Host、Server、Client:
-Host即与用户交互的主机(类似Cursor、Claude Desktop、我们所创建的应用等等)。-Server即服务提供商,提供特定的功能、工具、资源等。
-Client即主机与服务器中间的桥梁,确保中间通信,每个Client与Server保持着1:1的连接。

对于一个接入MCP的Agent应用来说,其工具调用从简单的调用函数,变成了以下流程:
1️⃣首先AI Agent通过MCP Client获取对应MCP Server提供的工具列表,其中每一个工具都包含了详细的功能和请求参数描述。
2️⃣随后的工作当中AI Agent便可根据上下文和模型的推理,判断出是否需要调用某个工具。
3️⃣当AI Agent判断需要进行工具调用时,系统会发出调用特定工具的请求给到对应MCP Client,随后被其转发至对应MCP Server。
4️⃣MCP Server收到并处理请求后,将对应的结果发送给MCP Client,随后响应被发送回AI Agent。

MCP的出现反而使Tool call本身流程变复杂了那这件事的意义是什么呢?

随着模型能力的进一步提升,模型能力目前出现了一些边际效应,你会发现继续卷模型的玩家越来越少,AI发展逐渐从卷模型转移到卷应用方向。

而研究过许许多多agent产品之后,我们发现每次我们重新研究某一个agent应用/框架的时候,其往往是一个全新的服务,内部使用的tools往往都是自研的,换个地方就没法用了,因此MCP出现之前,所有人都在重复造轮子——执行机制不统一、接口标准不统一、数据处理方式不统一... 这种现象就好像在说:你用我就完事儿了,别用其他的了。然而,当前应用和框架并没有到某一个超级巨头占领市场的阶段,因此我们并没有选择一个树吊死的理由。

MCP的出现就是为了解决这一窘境——通过这一协议维护一个工具社区生态,让想要使用这些优秀工具的应用只需要关注协议本身就好了。通过建立通用标准,服务商可以基于协议来推出它们自己服务的 AI 能力,从而支持开发者更快的构建更强大的 AI 应用。开发者也不需要重复造轮子,通过开源项目可以建立强大的 AI Agent 生态。

许多人可能会把MCP误解为一个工具,就和其他可调用工具一样,其实不然,Tool call、AI Agent、MCP 这三者之间有着本质的区别:

-Tool call指的是LLM根据上下文自动执行函数的机制,其充当了 AI 模型与外部系统之间的桥梁,不同的模型有不同的工具调用实现,代码集成的方式也不一样。

-MCP 是一个标准协议,可以在不同的应用/服务之间保持上下文,从而增强整体自主执行任务的能力。如同电子设备的 Type C 协议(可以充电也可以传输数据),只要有这个协议在,所有人都可以基于这个协议进行自己的开发,并将成果提供给他人使用, AI 模型便能够与不同的 API 和数据源无缝交互。MCP 旨在替换碎片化的 Agent 工具代码集成,从而使 AI 系统更可靠,更有效。
-AI Agent 是一个智能系统,它可以自主运行以实现特定目标。传统的 AI 聊天仅提供建议或者需要手动执行任务,AI Agent 则可以分析具体情况,做出决策,并自行采取行动。AI Agent 可以利用 MCP 提供的功能描述来理解更多的上下文,并在各种平台/服务自动执行任务。

聪明的你可能会问说了这么多MCP的好处我能在LazyLLM中使用它吗?问的好 问的妙❗❗❗

小编观察到,就在前几天,LazyLLM官方仓库中已经合入了兼容MCP的PR(https://github.com/LazyAGI/LazyLLM/pull/469),根据官方提供的示例,一行代码便可将MCP Server接入LazyLLM应用中,使用起来也是非常的方便。那岂不是只要找一些非常牛的工具,结合多智能体框架就可以实现Manus自由了?

简直是天助我也,下面就让我们一同开启使用LazyLLM复现Manus的丝滑奇幻冒险!

5.Lazy Manus

接下来,小编将给大家详细介绍如何使用LazyLLM复现一个Manus类型的应用。复现主要分为四部分:环境准备、MCP工具集成、多智能体框架实现、应用组装。

环境准备

本次复现中,Python版本使用3.11(MCP支持的最低版本),LazyLLM使用github仓库中的最新版本(具体的安装方式和环境配置可以参考官网文档https://docs.lazyllm.ai/zh-cn/latest/ ,采用手动配置的方式,从github拉取代码并进行安装)。配置大模型这里我们采用线上的DeepSeek-V3大模型,其强大的性能能够确保Lazy Manus有一个出色稳定的“大脑”,DeepSeek模型的API Key可以在其官方接口平台获取(https://platform.deepseek.com)。获取API KEY并充值成功后,在系统中配置对应的环境变量:

Linux:
export LAZYLLM_DEEPSEEK_API_KEY=<your api key>
Windows:
set LAZYLLM_DEEPSEEK_API_KEY=<your api key>

随后测试模型配置是否成功:

>>> from lazyllm import OnlineChatModule
>>> llm = OnlineChatModule(source="deepseek")
>>> llm("你好,你是谁?")
'你好!我是DeepSeek Chat,由深度求索公司开发的智能AI助手。我可以帮你解答问题、提供建议、陪你聊天,还能处理各种文本和文件信息。如果有
任何问题或需要帮助,尽管问我吧!😊'

由于要使用MCP提供的工具能力,我们需要在环境中安装Node.js(具体的安装流程见https://nodejs.org/en/download)。安装后我们通过node和npm命令行来验证安装是否成功:

node -v
v22.14.0
npm -v 
10.9.2

到这里,相关的开发和运行环境就准备好了。

MCP工具集成

我们可以找到了一些比较好用的MCP工具网站:https://mcp.so/https://github.com/punkpeye/awesome-mcp-servers ,依托于MCP优秀的社区生态,在这些网站中我们可以轻松发现很多好用的MCP Server。基于本次复现的需求和实验,我们最终选择了以下MCP Servers作为目标工具集:

图片

列表中的每个MCP Server都内置了丰富的工具可供大模型进行调用,这里以filesystem MCP Server为例,介绍一下如何使用LazyLLM接入MCP,并把工具提供给Agent。首先,MCP Server的启动方式有两种:本地启动和SSE远程连接,本地启动时需要掌握每个server的启动命令,而远程连接需要获取对应的url以获取连接。我们可以在对应的链接中找到对于的启动命令,比如filesystem的启动命令如下所示,其实就是命令行。

{
  "mcpServers": {
    "filesystem": {
      "command": "npx",
      "args": [
        "-y",
        "@modelcontextprotocol/server-filesystem",
        "/Users/username/Desktop",
        "/path/to/other/allowed/dir"
      ]
    }
  }
}

需要注意的是,如果你是Windows环境,对于使用npx启动的server,需要对以上命令做一些修改:command改为“cmd”,args则在最开始加入“/c”,“npx”,即以下形式:

{
  "mcpServers": {
    "filesystem": {
      "command": "cmd",
      "args": [
        "/c",
        "npx",
        "-y",
        "@modelcontextprotocol/server-filesystem",
        "/Users/username/Desktop",
        "/path/to/other/allowed/dir"
      ]
    }
  }
}

有了以上配置信息,只需几行代码,便可将MCP接入到LazyLLM中,创建一个能够使用MCP的智能体。

以下代码中,我们只用了一行代码便完成了MCP Server的接入,随后又用了一行代码便创建出一个LazyLLM中的ReactAgent:

from lazyllm import OnlineChatModule
from lazyllm.tools.agent.reactAgent import ReactAgent
from lazyllm.tools import MCPClient

config = {
    "command": "npx",
    "args": [
      "-y",
      "@modelcontextprotocol/server-filesystem",
      "./output"
    ]
}
# 获取MCP Server的工具集
tools = MCPClient(command_or_url=config["command"], args=config["args"], env=config.get("env")).get_tools()
# 将工具传入agent,创建智能体
agent = ReactAgent(OnlineChatModule(source="deepseek"), tools)

对于一些功能较为简单,不那么消耗系统资源的MCP Server,我们可以使用以上方式接入到系统。如果遇到一些功能复杂、计算量较大的MCP Server,比如浏览器工具集,LazyLLM支持将其一键部署至单独的机器当中,并通过ip+port的方式给出地址以供我们在应用中使用sse的方式接入工具。具体使用方式如下:

启动命令
Linux:

lazyllm deploy mcp_server --sse-port 11210 npx -- @playwright/mcp@latest

Windows:

lazyllm deploy mcp_server --sse-port 11210 cmd -- /c npx @playwright/mcp@latest

db0702d9438ae56439d3607159b0b492.png
MCP Server独立部署成功

运行以上命令行,配置好具体的启动命令、接口信息等,使用“lazyllm deploy”命令便可以实现MCP Server的一键部署!随后我们以sse的方式接入Agent应用:

config = {"remote_mcp":{"url":"http://127.0.0.1:11287/sse"}}
mcp_config = config["remote_mcp"]
client = MCPClient(command_or_url=mcp_config["url"])
agent = ReactAgent(OnlineChatModule(source="deepseek", stream=False), client.get_tools())

另外,由于MCP仍处于起步阶段,不是所有的功能都可以找到一个很好用的开源MCP Server与之匹配,除了使用MCP Server外,我们还复用了此前复现Lazy DeepResearch时的一些已有工具:系统反问工具(get_more_info_from_user)、基于博查AI搜索API(https://open.bochaai.com/)开发的网络搜索工具(web_search)以及执行Python代码的工具(python_executor)。如果你感兴趣,可以从“阅读原文”获取相关代码。

至此,我们整个系统中需要用到的工具便集成完毕了。MCP的出现直接改变了我们的开发方式,相比之前写代码、不断调试自研各种工具,现在我们能够像刷某宝一样,在海量的开源MCP Server中挑选我们所需的强力工具,并且很多工具出自各种官方之手,比我们自己开发适配方便多了~
图片
像刷某宝一样畅游MCP Server“市场”

应用框架

准备好工具集后,我们基于调研中的已知内容,设计了Lazy Manus的多智能体应用框架,本次复现省略了记忆模块,感兴趣的小伙伴可以自行设计。
图片
Lazy Manus框架展示

流程描述:
📌系统接收到用户的任务描述后,首先使用规划模块,该模块会将任务拆解为多个步骤,确保顺序执行这些步骤可以完成任务,并给出规定格式的Todo List,并将其传给任务管理智能体(Solver)。
📌任务管理智能体是一个ReactAgent,其主要有两大功能:寻求用户建议和分发任务给具体的工具智能体。任务管理智能体在执行每一步时,都会动态更新Todo List中任务的状态,并根据Todo List的状态决策下一步需要执行的任务,决策是否给特定的工具智能体发送任务,亦或是描述当前的任务状态给用户并寻求意见。
📌工具智能体同样是ReactAgent,其接收到任务描述后,便会根据任务自动调用必要的工具,并在当前任务完成将任务的完成情况、关键信息反馈给任务管理智能体。
📌任务管理智能体接收到工具智能体的任务完成信息后,会结合信息动态的更新Todo List,并进入下一次循环,直到任务完成。
📌任务完成后,用户便可以获得具体的任务交付物。

考考你
这样设计的多智能体框架有啥优势
❓❓❓

主要优势:
📌“用户输入--任务规划--分布完成--任务交付”的流程清晰,逻辑缜密。
📌任务管理智能体掌控全局,各工具智能体只关注当前任务,有效减少了大模型上下文的数据量,提高系统稳定性。
📌多智能体框架下,每个智能体仅被分配了少量的工具,负责特定领域的部分任务,有效避免了因工具过多造成的工具错用现象,提高系统的可靠性。
📌仅需要做少量修改,便可将包含新功能的工具智能体接入至系统当中,系统可扩展性较高。

以下是上述框架对应的代码设计,在这里我们定义了Manus类,并在其中传入了相关的模型、提示词以及工具,并依托于LazyLLM灵活的Flow模块,实现了Plan-and-Slove Agent的核心流程。

其中CustomReactAgent是为了自定义提示词,基于LazyLLM ReactAgent继承实现的子类,任务分配则是封装成了工具函数(set_task_to_worker),其中规定了可选工具智能体的类型,能够通过输入类型动态构建工具智能体,并完成本次任务。(完整的工程代码将在附录中给出,在这里我们仅展示核心模块):

class Manus():
    PLAN_PROMPT = MANUS_PLAN_INSTRUCTION
    SOLVE_SYSTEM_PROMPT = MANUS_SOLVER_INSTRUCTION

    def __init__(self, plan_llm, solve_llm, max_retries: int = 5, return_trace: bool = False, stream: bool = False):
        self._max_retries = max_retries
        self._plan_llm = plan_llm.share(prompt=ChatPrompter(instruction=self.PLAN_PROMPT))
        self._solve_llm = solve_llm.share()
        self._tools = ["get_more_info_from_user", "set_task_to_worker"]  # 询问意见和任务分配工具
        self._return_trace = return_trace
        self._stream = stream
        self._build_agent_ppl()
        
    def _build_agent_ppl(self):
        with pipeline() as self._agent:
            self._agent.plan_ins = StreamResponse(prefix="[Planner 🤔] Receive instruction:", prefix_color=Color.yellow, color=Color.magenta, stream=True)
            self._agent.planner = self._plan_llm  # 任务规划,生成todo list
            self._agent.plan_out = StreamResponse(prefix="[Planner 🤔] Todo List created:", prefix_color=Color.yellow, color=Color.magenta, stream=True)
            self._agent.parse = plan2md | bind(query=self._agent.input)  # 将生成的todo list转换为markdown格式
            self._agent.solver = CustomReactAgent(
                llm=self._solve_llm.share(),
                tools=self._tools,
                custom_prompt=self.SOLVE_SYSTEM_PROMPT,
                max_retries=self._max_retries,
                return_trace=self._return_trace,
                stream=self._stream
            )  # 任务管理智能体

    def forward(self, query: str):
        return self._agent(query)

    def __call__(self, query: str):
        return self._agent(query)

应用组装

实现以上工具集接入和核心组件Manus后,我们简单实现一下入口,即可运行我们的Lazy Manus啦:

def main():
    question = input("Lazy Manus Demo...\nPlease enter your task:\n")
    try:
        lazyllm.globals._init_sid()
        with lazyllm.ThreadPoolExecutor(1) as executor:
            agent = Manus(
                plan_llm=OnlineChatModule(source="deepseek", stream=True),
                solve_llm=OnlineChatModule(source="deepseek", stream=True),
                return_trace=True,
                stream=True,
                max_retries=20
            )
            future = executor.submit(agent, question)
            while True:
                if value := lazyllm.FileSystemQueue().dequeue():
                    print("".join(value))
                elif future.done():
                    break
                else:
                    time.sleep(0.3)
    except KeyboardInterrupt as e:
        raise e

if __name__ == "__main__":
    main()

另外,也可以使用LazyLLM提供的WebModule,在基于gradio的图形界面上测试我们的Lazy Manus。你只需要执行以下代码:

from lazyllm import WebModule
w = WebModule(
  Manus(
    plan_llm=OnlineChatModule(source="deepseek", stream=True),
    solve_llm=OnlineChatModule(source="deepseek", stream=True),
    return_trace=True,
    stream=True,
    max_retries=20
  ),
  stream=True
)
w.start().wait()

效果测试

我们尝试运行Lazy Manus,并执行以下两个测试任务,实际测试效果如下:

测试任务1

输入指令“清明假期就要到了,我打算从北京出发去阿那亚玩,请你帮我做一个三天两晚的旅行规划,并做一个html页面展示行程。”

Lazy Manus通过任务规划、网页搜索与浏览成功搜集到信息,并生成了旅行计划页面。

(视频见原文)

测试任务2

输入指令“写一个打砖块游戏,要求体现出模拟碰撞的效果,且我能够使用方向键控制挡板的移动。游戏需要有前端界面供用户试玩。”经过游戏设计、代码编写、功能调试等步骤后,Lazy Manus成功编写打砖块游戏,游戏能够正常运行。

(视频见原文)

从以上两个视频中我们可以观察到,Lazy Manus能够根据用户的输入进行任务规划,并在一次次的工具调用中自己完成搜索、网页浏览、信息汇总、调试程序,并把中间文件和最终生成的内容保存至本地目录。

🚨调试智能体应用的过程中非常消耗token,盯紧你的账户余额!!!

6.总结与展望

以上便是小编使用LazyLLM复现Manus的全过程,我们从学习Manus的技术框架展开,并通过使用MCP大幅提高了AI Agent的开发效率,最终一个会思考、能交付的Lazy Manus就这么水灵灵的被小编实现了~我也太厉害了吧哈哈哈!

当然,小编的Lazy Manus与Manus本尊相比还有着不小的差距,具体表现在:

🎯系统稳定性
虽然还没真正使用过Manus,但相信其是一个经过精心打磨过后的产品。得益于LazyLLM强大的灵活性和可扩展性,小编的快速复现很高效,但实际运行时的工具调用以及模型回复有时存在一定的稳定性问题,且由于未经过微调,即使是极为强大的DeepSeek模型,在这种较为复杂的任务执行场景中也有些吃力,由此看来,后续的维护工作必不可少~

🎯工具的多样性
本次复现只是对于一些常用场景的针对性复现,更高级的功能比如沙盒环境、命令行环境交互等因为环境安全问题并没有实现,依托于MCP活跃的社区氛围,相信不久的将来会出现越来越多好用的工具,后续小编也会持续跟进,让Lazy Manus更加强大!

🎯视觉呈现
当前的Lazy Manus从视觉呈现上略显粗糙,而Manus的回放功能让更多的人以简单的方式了解到其强大之处,这体现了一个优秀的界面设计和回放功能的重要性。

还是开头那句话,2025年必然是AI Agent类应用持续爆发的一年,未来也会有越来越多有趣的应用出现在我们的面前。小编也会持续使用LazyLLM复现更多有趣的应用,给大家带来更多干货满满的内容!


商汤万象开发者
1 声望0 粉丝