Manus 自主 AI 智能体技术分析与开源复现路线
基于泄露的系统提示与工具,系统梳理 Manus 架构、CodeAct 方法与可复现开源路线。
这篇文章是基于对泄露的 Manus 系统提示和工具的分析。你可以在这里查看相关文件:
我编写了一份深度研究提示词,对 Manus 主题进行了一次 GPT-Deep-Research,旨在探索使用当前可用的开源工具复现它的可能性。以下是研究成果:
摘要:Manus AI 智能体报告
Manus 是一个自主 AI 智能体,作为基础模型(主要是 Claude 3.5/3.7 和阿里巴巴的 Qwen)的封装层。它在一个基于云的虚拟计算环境中运行,拥有对网页浏览器、Shell 命令和代码执行等工具的完全访问权限。该系统的关键创新是使用可执行的 Python 代码作为其行动机制(“CodeAct”方法),使其能够自主执行复杂操作。 其架构由一个迭代式的智能体循环(分析→计划→执行→观察)组成,并配备了用于规划、知识检索和记忆管理的专门化模块。Manus 使用基于文件的记忆来跨操作跟踪进度和存储信息。该系统可以使用开源组件进行复现,包括 CodeActAgent(一个微调过的 Mistral 模型)、用于沙箱环境的 Docker、用于网页交互的 Playwright 以及用于流程编排的 LangChain。尽管技术上复现可行,但要达到 Manus 的可靠性和性能,将需要精心的提示词工程和广泛的测试。
Manus 自主 AI 智能体:技术分析
1. 系统架构分析
基础模型支柱: Manus 建立在强大的基础语言模型之上,而不是从头开始构建专有模型。该团队的首席科学家透露,Manus 最初利用 Anthropic 的 Claude(特别是 Claude 3.5 “Sonnet v1”)作为核心推理引擎,并辅以阿里巴巴 Qwen 大模型的微调版本。换句话说,Manus 的“大脑”是现有大语言模型的组合。他们一直在积极升级这一支柱——例如,内部测试 Claude 3.7 以备将来使用。报告指出,Manus 甚至可以针对不同的子任务动态调用多个模型(“多模型动态调用”),利用每个模型的优势——例如,使用 Claude 3 进行复杂的逻辑推理,使用 GPT-4 进行编码任务,以及使用谷歌的 Gemini 进行广泛的知识查询。(目前尚不清楚 GPT-4/Gemini 是否已实际使用或计划中,但媒体曾提及此事 (Manus在紅什麼?外媒評測訂餐、訂位、訂票⋯都碰壁:它是中國第二個DeepSeek時刻?).) 关键在于,Manus 充当了顶级大语言模型的协调器,而不是一个单一的独立模型——这种设计使其能够为每个任务利用最优秀的可用 AI 能力。
云端代理与工具沙箱: 与仅限文本交互的典型聊天机器人不同,Manus 运行在云端的一个虚拟计算环境中。该环境是具备联网能力的完整 Ubuntu Linux 工作空间(Manus tools and prompts · GitHub),Manus 可以像熟练的人类高级用户一样使用一整套工具与软件。根据系统规格,Manus 可访问带有 sudo 权限的Shell、可控的网页浏览器、文件系统,以及诸如 Python 和 Node.js 等编程语言的解释器(Manus tools and prompts · GitHub)(Manus tools and prompts · GitHub)。它甚至可以启动 Web 服务器并对外网暴露。上述一切均在服务端完成——即便用户设备离线,Manus 也会继续工作;这点将其与在用户浏览器中运行的智能体(例如 OpenAI 的实验性“Operator”)区分开来(After DeepSeek, China takes a leap with Manus, world’s first autonomous AI agent — TFN)(After DeepSeek, China takes a leap with Manus, world’s first autonomous AI agent — TFN)。这种沙箱化的工具环境意味着 Manus 不仅仅局限于自然语言回复,它可以直接行动:如浏览网页、填写表单、编写并执行代码,或自主调用 API。该架构使 Manus 更像云端的数字员工,而不仅是对话机器人。
智能体循环与编排: Manus 通过一个迭代式的智能体循环来构建其自主性 (Manus tools and prompts · GitHub)。宏观来看,循环的每个周期包括:(1) 分析当前状态和用户请求(基于近期交互的事件流),(2) 规划/选择一个行动(决定下一步使用哪个工具或操作),(3) 在沙箱中执行该行动,以及 (4) 观察结果,并将结果追加到事件流中 (Manus tools and prompts · GitHub)。这个循环不断重复,直到 Manus 判断任务已完成,此时它会向用户输出最终结果并进入空闲状态 (Manus tools and prompts · GitHub)。该设计明确限制智能体每次迭代只能执行一个工具动作——它必须等待每个动作的结果返回后,才能决定下一步 (Manus tools and prompts · GitHub)。这种控制流防止了模型执行一长串未经检查的操作而失控,并允许系统(和用户)监控每一步。
规划器模块(任务分解): 为管理复杂任务,Manus 集成了一个规划器模块,它将高层级目标分解为一个有序的步骤列表 (Manus tools and prompts · GitHub)。当用户给出一个目标或项目时,规划器会以一种伪代码或枚举列表(包含步骤编号、描述和状态)的形式生成一个计划,该计划作为一个特殊的“Plan”事件被注入到 Manus 智能体的上下文中。例如,如果要求构建一个数据可视化图表,规划器可能会生成如下序列:1. 收集数据,2. 清洗数据,3. 生成图表,4. 保存并发送图表。Manus 将此作为路线图,按顺序执行每个步骤。如果任务发生变化,计划可以被动态更新 (Manus tools and prompts · GitHub)。智能体在每次迭代中都会参考该计划,并清楚必须完成所有步骤才能结束任务 (Manus tools and prompts · GitHub)。这种机制赋予了 Manus 一种前瞻性和结构化决策的能力,而不仅仅是逐轮做出反应。这在精神上类似于 AutoGPT 或 BabyAGI 为实现目标而维护一个任务列表,确保 AI 在执行微小动作时不会忘记总体目标。
知识与数据模块: Manus 不仅仅依赖大语言模型的内置知识。它有一个知识模块,可以在需要时从知识库中提供相关的参考信息或最佳实践指南 (Manus tools and prompts · GitHub)。这些信息作为“知识”事件出现在上下文中,为智能体提供特定领域或任务的有用信息(例如,如果任务是写一篇文章,知识模块可能会提供一份风格指南或可供使用的事实片段)。同时,Manus 可以通过 API 使用数据源模块来获取事实数据 (Manus tools and prompts · GitHub)。智能体被授予一个预先批准的数据 API 库(推测用于天气、金融等),并附有其文档。当这些 API 相关时,它将通过 Python 代码调用它们,而不是抓取网页,因为系统优先考虑权威数据源而非一般的网络信息 (Manus tools and prompts · GitHub)。例如,Manus 可以调用天气 API 来获取最新的气候数据(如所提供的代码片段所示)(Manus tools and prompts · GitHub)。这种方法集成了检索增强生成(RAG):智能体主动获取外部知识和数据,而不是依赖其参数化记忆。事实上,开发人员证实 Manus “支持检索增强生成(RAG)”,这意味着它将外部数据检索与模型的生成能力相结合 (Manus在紅什麼?外媒評測訂餐、訂位、訂票⋯都碰壁:它是中國第二個DeepSeek時刻?)。所有检索到的事实或数据都作为只读上下文注入到事件流中,以便大语言模型可以将其纳入其推理和输出。
多智能体协作: Manus 架构中一个值得注意的方面是其多智能体(多模块)设计。Manus 并非由一个单一的、庞大的智能体处理所有事情,其结构允许多个专门的子智能体或组件并行处理一个任务的不同方面 (Manus在紅什麼?外媒評測訂餐、訂位、訂票⋯都碰壁:它是中國第二個DeepSeek時刻?)。例如,一个子智能体(或线程)可能专注于网页浏览和信息收集,而另一个处理编码,还有一个管理数据分析——每个都在其自己隔离的沙箱环境中工作 (Manus在紅什麼?外媒評測訂餐、訂位、訂票⋯都碰壁:它是中國第二個DeepSeek時刻?) (Manus在紅什麼?外媒評測訂餐、訂位、訂票⋯都碰壁:它是中國第二個DeepSeek時刻?)
2. 技术组件
可执行代码动作(“CodeAct”): Manus 的工具使用机制建立在一个洞见之上:AI 智能体可以通过编写并运行代码来与环境交互。事实上,Manus 的开发者将其方法基于 2024 年的一篇研究论文,该论文提出使用可执行的 Python 代码作为 LLM 智能体的通用动作格式 (Manus tools and prompts · GitHub) (Manus tools and prompts · GitHub)。Manus 不会输出像 “SEARCH(query)” 这样的固定令牌或僵化的 JSON,而是经常生成一个简短的 Python 脚本来执行所需的操作。这就是 CodeAct 范式——模型的“动作”就是被执行的代码。其优势在于灵活性:代码可以一次性组合多个工具或逻辑,处理条件流,并利用无数的库。CodeAct 论文发现,能够生成代码动作的智能体在复杂的工具使用任务上的成功率,显著高于那些仅限于简单文本工具调用的智能体 (Executable Code Actions Elicit Better LLM Agents) (Executable Code Actions Elicit Better LLM Agents)。Manus 将此付诸实践。例如,如果 Manus 需要获取天气信息,它可能会生成调用天气 API 客户端并打印结果的 Python 代码,而不是依赖于单一的内置“天气”函数 (Manus tools and prompts · GitHub)。
工具集成与控制流: Manus 集成了数十种特定工具,但通过标准化的函数调用接口来调用它们。系统提示明确要求智能体:每一步都必须是一次工具调用(函数调用),而不是直接用自然语言回复(Manus tools and prompts · GitHub)。在实际运行中,用户下达任务后,Manus 随后的响应不是答案,而是指示系统要执行的动作的 JSON 或结构化输出。例如,Manus 可能会输出:{"action": "SEARCH", "parameters": {"query": "best hotels in Tokyo"}}。Manus 的编排器解析该输出并执行搜索,然后把结果回传。只有当最终答案准备好时,Manus 才会给出正常的消息。这种方式类似于 OpenAI 的函数调用格式,旨在防止模型用“幻觉”替代真实行动(Manus tools and prompts · GitHub)。Manus 可用的工具很可能包括:网页搜索(查找 URL 或数据)、浏览器导航(打开 URL、点击、滚动等)、Shell 命令(安装软件、运行系统工具等)、文件操作(读/写文件,保存中间结果或草稿)、代码执行(运行 Python 等语言的代码片段)、API 调用(如上所述通过代码调用数据源 API)、以及消息发送(在确有必要时向用户发送消息或询问)。每种工具都有约束规则。例如,未经用户特别许可,Manus 不应点击或执行会产生不可逆副作用的操作;并应优先使用非交互模式(如在 apt-get 中添加 -y)以避免等待确认(Manus tools and prompts · GitHub)。提示还规定在使用浏览器时,若内容被截断必须滚动,并忽略搜索引擎的摘要片段——应点击进入原页面获取权威信息(Manus tools and prompts · GitHub)。这些规则旨在让工具使用更可靠且覆盖更充分。围绕工具使用的控制流也很严格:Manus 每个循环周期一次只能执行一个工具动作(Manus tools and prompts · GitHub),且执行后必须检查结果(一次“观察”事件)再继续。如果发生错误(如 shell 命令失败或代码抛异常),Manus 有错误处理策略:应根据错误信息诊断原因并在可能时重试,或改用替代方法;仅在万不得已时再告知用户无法继续(Manus tools and prompts · GitHub)。这符合人类使用工具的方式——尝试、调试、重试。值得注意的是,Manus 的工具接口很可能通过 LLM“可见”的 API 实现。许多开源智能体框架通过拦截模型输出的特殊 token 或 JSON 来实现这一点。就 Manus 而言,鉴于 CodeAct 方法,它很可能拦截代码输出——例如模型打印特殊标记或在代码中调用某个函数时,系统将其视为一次工具调用。总之,Manus 将自由形式代码的灵活性与受控工具 API 的安全性相结合:智能体几乎可以通过代码完成任何操作,但系统确保其一步一步执行并对每次结果进行观察。
内存与状态管理: 作为一个自主智能体,Manus 必须在其操作过程中管理大量状态。它通过以下几种方式实现:
- 事件流上下文(Event Stream Context): Manus 的即时工作记忆是事件流——一个按时间顺序记录会话中发生的所有事情的日志:用户消息、智能体的动作以及这些动作的结果 (Manus tools and prompts · GitHub)。在每次迭代中,Manus 会被给予(或记住)这个流的最新部分,并用它来决定下一步。该流可能会被截断以适应模型的上下文窗口(例如,它可能只包括最近的 N 个事件或早期事件的摘要)(Manus tools and prompts · GitHub)。通过将上下文结构化为类型化事件(“用户说了 X”、“动作 Y 已执行”、“观察:Y 的结果是…”),系统提示可以帮助模型区分不同类型的信息。这本质上是模型用于思想链的结构化记忆。
- 持久暂存器(文件): Manus 主动地将内存外部化到其虚拟文件系统中的文件中。泄露的提示表明,Manus 应该将中间结果和笔记保存到文件中,而不是试图将所有内容都保留在聊天上下文中 (Manus tools and prompts · GitHub)。例如,如果 Manus 正在撰写一份研究报告,它可能会在收集信息时为报告的每个部分创建文件,并在稍后将它们合并。它还使用一个名为
todo.md的特殊文件作为计划步骤的实时清单 (Manus tools and prompts · GitHub)。每完成一个步骤,Manus 就会在 todo.md 中将其勾掉(提示告诉它要用进度更新该文件)(Manus tools and prompts · GitHub)。这不仅有助于智能体跟踪进度,而且即使用户会话暂停或上下文丢失,待办事项文件也可以作为已完成和未完成任务的真实来源。在任务结束时,Manus 可以参考todo.md来验证所有项目都已完成且没有遗漏 (Manus tools and prompts · GitHub)。这与人类项目经理维护清单的方式非常相似,即使 AI 的短期记忆有限,它也能提供连续性。 - 长期知识库: 前面提到的知识模块充当了最佳实践和领域知识的记忆库。它实际上是一个外部知识库,Manus 会在适当时查询它。例如,如果用户要求 Manus 构建一个 React 应用,系统可能会引入一个包含有关设置 React 项目最佳实践参考代码段的“知识”事件。这样,模型就不需要记住所有东西;它能从一个精心策划的知识库中获得提示 (Manus tools and prompts · GitHub)。同样,Manus 使用 RAG 意味着它可以即时获取与用户查询相关的文档或数据 (Manus在紅什麼?外媒評測訂餐、訂位、訂票⋯都碰壁:它是中國第二個DeepSeek時刻?),并将其整合到其上下文中。通过将检索与生成相结合,Manus 避免了典型 LLM 知识截止日期固定的限制。
- 上下文管理: 为了保持性能,Manus 必须管理提供给 LLM 的上下文大小。很可能,一旦旧事件不再相关,它们就会被总结或丢弃(例如,一旦一个子任务完成,其细节可能会被提炼成一个简短的说明)。提示明确指出,由于上下文长度的限制,对话的久远部分可能无法被回忆 (Manus tools and prompts · GitHub),承认了这一局限性。Manus 通过信息隔离来缓解这个问题:代码和数据保存在文件中(智能体可以在需要时打开),原始搜索结果被保存而不是保留在聊天中,只有结论或下一步行动才保留在实时上下文中。这种设计反映了像 AutoGPT 这样的系统处理内存的方式(AutoGPT 使用本地文件或向量数据库来存储不适合放入提示的信息,然后在需要时提取摘要)。鉴于其 RAG 方法,Manus 很可能使用向量存储来嵌入和回忆过去对话或检索文档的相关片段。
提示词工程(Prompt Engineering): Manus 出色的表现不仅仅源于模型本身,如何对整个系统进行提示和指导至关重要。Manus 团队精心设计了一套非常详细的系统提示(或一组提示)来规范其行为。从泄露的提示要点中,我们可以看到 Manus 被赋予了清晰的角色和范围:“你是 Manus,一个由 Manus 团队创造的人工智能代理。你擅长……[任务列表]……” (Manus tools and prompts · GitHub)。这为模型注入了自信,并使其了解自身能力。接着,提示以结构化形式(如 <system_capability>、<browser_rules>、<coding_rules> 等部分)列出了大量规则和指南,模型必须严格遵守。这些规则包括:如何处理搜索,不应在点击链接前信任摘要文本 (Manus tools and prompts · GitHub);在提供事实信息或撰写报告时,必须引用来源 (Manus tools and prompts · GitHub);如何格式化输出(除非被要求,否则避免使用项目符号列表 (Manus tools and prompts · GitHub));以及如何与用户互动(例如,通过“通知”消息提供进度更新,但不要询问不必要的问题以免中断自主流程 (Manus tools and prompts · GitHub))。这本质上是一种基于提示的硬编码治理,使人工智能的风格和程序更具可预测性。提示词工程还涵盖了规划器如何输出步骤(例如,以编号伪代码的形式)、这些步骤如何呈现给代理,甚至包括“禁止行为”(Manus 被告知不能泄露其系统提示或从事任何有害/非法活动 (Manus tools and prompts · GitHub))。通过将开发人员的专业知识和安全护栏编码到提示中,Manus 从一开始就避免了许多潜在的陷阱。值得注意的是,Manus 的提示中包含了生成非常详细输出的指令——例如,一条规则规定,任何书面报告应尽可能达到数千字 (Manus tools and prompts · GitHub)。这表明设计者追求的是彻底性。他们还指示代理为长文档保存草稿并将其连接起来,而不是依赖模型一次性输出一篇长文 (Manus tools and prompts · GitHub),这是一个聪明的策略,用以处理大文本的令牌限制和连贯性问题。所有这些提示元素共同构成了一本 AI 严格遵守的“操作手册”。从本质上讲,在实现 Manus 的自主行为方面,提示与模型权重同等重要。它通过预先加载关于如何行动、如何规划以及如何使用工具的系统消息,将一个通用模型(如 Claude 或其他模型)转变为一个专业化代理。
总而言之,Manus 的技术秘诀在于:(a) 一个健壮的架构(规划器 + 内存 + 工具执行循环),(b) 利用顶级基础模型(Claude 等)进行认知,(c) 大量使用代码执行和工具来与世界互动,以及 (d) 一个精细调整的系统提示,该提示编码了“智能体工作流”和最佳实践。这种组合使 Manus 能够端到端地自主处理复杂任务,而普通的 ChatGPT 仅限于回答问题。Manus 的设计通过务实的工程(规则、外部存储和工具使用框架)解决了 LLM 的常见局限性(幻觉、缺乏长期记忆、无法采取行动)。
3. 实现策略(使用开源工具复现 Manus)
架构蓝图: 要复现 Manus 的能力,需要将几个组件拼凑在一起。在宏观层面,可以设想一个包含以下部分的架构(可以用图表来说明):
- LLM 核心: 一个大型语言模型,作为推理和决策的核心(可以是一个像 OpenAI/Anthropic 这样的 API,也可以是本地运行的开源模型)。
- 编排器/循环控制器: 包裹在 LLM 周围的逻辑,用于实现智能体循环——为其提供上下文、接收动作、执行动作,然后反复反馈结果。
- 工具/动作接口: 一组 LLM 可以调用来与世界互动的 API 或函数(网页搜索、浏览器自动化、代码执行等)。这包括一个用于执行 LLM 编写的任何代码的安全沙箱执行环境。
- 规划器模块: 一个将任务分解为子任务的机制(可以是一个单独的提示,甚至是生成计划的另一个较小的模型)。
- 知识检索器: 连接到外部数据源——例如,一个文档的向量数据库,或者仅仅是进行网页搜索和吸收结果的能力——以便按需提供额外的上下文。
- 内存存储: 某种形式的持久性内存(文件或数据库),智能体可以在其中记录进度、结果或应在多轮对话或会话中持续存在的信息。
一个系统图可能会将 LLM 核心置于中心,箭头指向各种工具执行器(shell、浏览器等),而来自规划器和知识模块的传入箭头则将信息注入 LLM 的上下文中。事实上,开源的 CodeActAgent 项目提供了一个与此想法相匹配的参考实现:它包括 (1) 一个 LLM 服务器(他们使用 vLLM 将模型托管在 API 后面),(2) 一个代码执行服务,为每个会话启动一个 Docker 容器来运行智能体生成的任何代码,以及 (3) 一个前端或接口,用于协调对话并存储聊天记录(通常在数据库中)(GitHub - xingyaoww/code-act: Official Repo for ICML 2024 paper “Executable Code Actions Elicit Better LLM Agents” by Xingyao Wang, Yangyi Chen, Lifan Yuan, Yizhe Zhang, Yunzhu Li, Hao Peng, Heng Ji.)。Manus 的架构将是这个架构的超集(带有额外的规划和知识组件),但可以从 CodeAct 的设计作为基础开始。
选择基础模型: 如果要复现 Manus,首先要决定用哪种 LLM 作为智能体的“大脑”。Manus 使用了 Claude 3.5 和 Qwen 模型;作为个人开发者,你可能无法使用 Claude,但有一些很强的开源替代方案。一个很有前景的路径是使用研究团队开源的 CodeActAgent 模型(他们在 CodeAct 任务上微调了一个 7B Mistral 模型)(GitHub - xingyaoww/code-act: Official Repo for ICML 2024 paper “Executable Code Actions Elicit Better LLM Agents” by Xingyao Wang, Yangyi Chen, Lifan Yuan, Yizhe Zhang, Yunzhu Li, Hao Peng, Heng Ji.)。该模型专门针对用 Python 代码生成与执行动作进行了调优,非常契合我们的需求。它还支持较大的上下文窗口(32k tokens),有助于在上下文中保留事件流与计划(GitHub - xingyaoww/code-act: Official Repo for ICML 2024 paper “Executable Code Actions Elicit Better LLM Agents” by Xingyao Wang, Yangyi Chen, Lifan Yuan, Yizhe Zhang, Yunzhu Li, Hao Peng, Heng Ji.)。如果需要更强能力,可以通过 API 使用 GPT-4 作为核心(例如 AutoGPT 就用 GPT-4 驱动其智能体(AutoGPT - Wikipedia))。不过,依赖 GPT-4 会带来成本与供应依赖问题,因此可以采用混合方案:多数步骤使用开源模型,只有在特别困难的子任务上再调用 GPT-4(类似 Manus 的多模型调用思路)。无论选择哪种模型,关键在于它必须能接受复杂的系统提示并产出类似函数调用的结构化输出。像 GPT-4、GPT-3.5、Claude、CodeActAgent 或经过微调的 Llama‑2 都能做到这一点。若使用开源 LLM,建议配合一个提供 OpenAI 兼容 API 的推理服务(如 vLLM 或 FastChat)来托管模型,这会简化与各类工具框架的集成(GitHub - xingyaoww/code-act: Official Repo for ICML 2024 paper “Executable Code Actions Elicit Better LLM Agents” by Xingyao Wang, Yangyi Chen, Lifan Yuan, Yizhe Zhang, Yunzhu Li, Hao Peng, Heng Ji.)。
工具执行环境: 接下来,搭建沙箱与工具至关重要。你可以使用 Docker 或其他容器化方案,为智能体提供隔离的 Linux 环境(确保即便 AI 写出恶意或有缺陷的代码,也不会影响宿主系统)。在该容器中安装必要的软件:Python、Node、无头浏览器(例如用于浏览器自动化的 Playwright 或 Selenium)等。Manus 的环境包括 Ubuntu、Python 3.10、Node.js 20 以及基础的 Unix 工具(Manus tools and prompts · GitHub),这是一个不错的模板。对于网页浏览,可以采用由 Python 控制的无头浏览器。开源包如 playwright-python 可以打开页面、点击元素并提取内容。或者,也可以使用更简单(但受限)的“浏览器 API”来抓取页面 HTML(此时需要由 AI 解析 HTML)。在我们的复现中,我们可以提供一个 Python 函数 open_url(url),用 requests 或自动化浏览器获取页面文本,然后由模型进行调用。为安全地执行 Shell 命令,你可以只暴露特定命令,或统一通过 Python 的子进程接口运行。Manus 的规则显示它大量使用 Shell 来执行安装软件包或运行系统级工具等任务(Manus tools and prompts · GitHub),因此我们的智能体也应具备该能力——例如提供一个 run_shell(command) 函数,在容器中执行并返回输出(为安全可截断)。这些工具应在你所使用的智能体框架中完成注册。以 LangChain 为例,你会为“Search”“Browse”“Execute Python”等创建 Tool 对象,并为每个对象绑定一个供智能体调用的函数。在 CodeAct 范式下,不再使用离散的工具调用,而是允许模型在其生成的代码中导入一个辅助库。你可以创建一个名为 agent_tools.py 的 Python 模块,其中包含 search_web(query)、get_url_content(url)、run_shell(cmd) 等函数,并在执行环境中预置 import agent_tools。这样,模型便可在代码里调用 agent_tools.search_web("...") 来触发你的 Python 后端执行搜索并返回结果。搭建这些钩子需要一些工作,但一旦完成,模型本质上就拥有了一套用于行动的 SDK。务必加入安全防护——例如限制网络访问,使智能体无法绕过你审计过的搜索/浏览器去调用任意外部 URL,并为代码执行设置时间/内存上限以避免无限循环。
规划与分解: 我们需要模仿 Manus 的规划器模块。一个简单的方法是在任务开始时提示 LLM,例如:“你是一个规划助手。用户的目标是 X。请将其分解为一个有序的步骤列表来实现它。” 你可以在一个单独的“规划阶段”调用 LLM 来完成此操作(如果需要,甚至可以使用更便宜的模型进行规划)。然后将步骤列表作为系统消息输入到主智能体提示中(例如,“计划:1)… 2)… 等”)。或者,你可以像 Manus 的提示中看到的那样,通过设置一个 <planner_module> 部分,将规划集成到主提示中,并指示模型更新计划事件。对于初始实现,外部规划调用可能更容易理解。输出的计划可以被存储(在上下文中,也许像 Manus 那样存储在 todo.md 文件中)(Manus tools and prompts · GitHub)。在每个循环迭代期间,你可以提醒智能体它当前所在的步骤(例如,在提示中包含一行:“当前步骤:3. 执行 XYZ”)。这有助于集中智能体的注意力。该计划还提供了一个停止标准——当所有步骤都完成时,循环结束。重新规划:如果用户更改了请求或发生了意外情况,你可能需要重新生成计划。Manus 的规则说,如果计划发生重大变化,它会重建待办事项列表 (Manus tools and prompts · GitHub)。在我们的实现中,我们可以监控用户是否在任务中途给出新指令,然后触发重新规划。
记忆与知识集成: 针对知识检索,应根据资源选择实现路径。一种做法是使用向量数据库(如 FAISS、Milvus 等)来存储文档与过往会话的嵌入。如果你已经有知识库(例如与智能体任务相关的操作指南或参考手册),先对其进行向量化索引。随后,当收到用户查询时,对查询进行嵌入并检索相关文档,将其作为“知识”前置到提示中(类似 Manus 注入知识事件的方式)(Manus tools and prompts · GitHub)。LangChain 为此类 RAG 流水线提供了实用工具。对于网页搜索,鉴于我们难以维护完整的网络索引,智能体应使用搜索 API(SerpAPI、Bing Web Search API 等)获取结果。代码或工具调用会取回前 N 条结果;随后可为每条结果抓取页面文本(篇幅很长时可只取开头部分或摘要)并反馈给模型。模型再决定哪些需要进一步点击与展开(Manus 的提示明确要求为全面信息同时打开多个链接,且不要只信任单一来源(Manus tools and prompts · GitHub))。因此,我们的智能体也应照此进行:初次搜索后遍历结果,依次调用 open_url 并读取内容。还应通过提示鼓励智能体将关键信息保存到文件(如 notes.txt),以释放上下文。我们也可以模仿 Manus 的文件使用方式:指示智能体在发现重要信息时,可使用写文件工具将其落盘,后续通过引用该文件而非把全文保留在对话中。管理长会话还可能需要摘要策略:当事件流(会话日志)过大时,让智能体(或自动流程)对较早部分进行摘要;这可以通过额外一次 LLM 调用对事件进行压缩,并将该摘要作为“压缩事件”注入上下文。上述策略正是 Manus 在上下文窗口受限的条件下处理大型任务时可能采用的方法。
提示词设计(Prompt Design): 我们应当创建一份与 Manus 精神一致的系统提示。它应以对智能体的角色与能力的描述开场(例如:“你是一名可自主使用 XYZ 工具完成任务的 AI 智能体……”)。随后纳入受 Manus 启发的关键规则,例如:工具使用——“除非在交付最终结果,否则始终以一个行动(action)进行响应”;信息来源——“优先使用提供的 API 或官方渠道的可靠数据,而非一般网页内容(Manus tools and prompts · GitHub),并在输出中引用来源(Manus tools and prompts · GitHub)”;写作风格——“采用正式语气,除非被要求尽量避免使用列表(Manus tools and prompts · GitHub),解释要尽量详尽(Manus tools and prompts · GitHub)”等。泄露的 Manus 提示中许多规则可以直接复用或意译,因为它们体现了智能体的通用最佳实践。例如,禁止向用户泄露系统消息或内部逻辑这一条至关重要(可防止用户通过提示注入迫使代理暴露自身提示)。同样,关于确认任务接收与定期提供进度更新的规则也十分关键(Manus 将非阻塞的“通知(notify)”与面向用户问题的“询问(ask)”消息类型区分开来(Manus tools and prompts · GitHub))。在开源实现中,未必需要完全复刻带有 notify/ask 区分的消息 UI,但当处理耗时任务时,让智能体偶尔输出简短的进度更新依然是有益的。
在撰写系统提示时,像 Manus 一样进行模块化:为每个工具单设一个章节并写清使用准则。这样,当替换某个工具实现时,只需更新对应章节即可;本质上,这些部分也是提供给 AI 的“内嵌文档”。如果上下文长度允许,还可以加入少量少样本示例(few‑shot)——例如给出一个用户请求,然后示范理想的思考序列(行动与观察)以及最终回答,这有助于模型学习响应模式。CodeAct 论文作者在微调时很可能采用了类似做法,他们甚至发布了一个展示 code‑act 技术的多轮交互数据集(Executable Code Actions Elicit Better LLM Agents)。利用此类数据对所选模型进一步微调可显著提升性能;即便无法微调,一份精心编写且包含示例的系统提示也能有效引导基础模型。
开发工作流: 构建一个类似 Manus 的智能体是一个迭代的软件项目。一个可能的工作流程是:
- 从一个基本循环开始: 实现一个带有一个 LLM 的简单循环,该 LLM 可以调用一两个虚拟工具。例如,让它接受一个数学问题并使用 Python REPL 工具进行计算。这可以测试模型和工具执行的集成。
- 逐步添加工具: 逐一添加更多的工具能力(网页搜索、文件 I/O、shell 等),并在添加每个工具后,用说明更新提示并测试智能体的相关任务。例如,在添加网页搜索后,向智能体提出一个需要查找信息的问题。监控它是否正确使用了该工具。
- 实现日志记录和观察处理: 确保每个动作和结果都被记录下来(既用于调试,也用于反馈给模型)。使用结构化格式记录日志。这将有助于调整行为。Manus 的事件流可以通过简单地在代码中维护一个事件列表并在每个周期将它们连接到提示中来模拟。
- 整合规划: 一旦基本的感知和行动功能正常工作,就开始着手规划模块。你可以集成一个现有的任务规划器,或者只使用 LLM 本身(“首先概述步骤”)。让智能体展示一个计划并遵循它。如果智能体倾向于忽略计划,则调整提示说明。理想情况下,智能体应该牢记计划并更新进度。你可以让它明确打印出标有已完成步骤的计划,以进行验证。
- 添加内存/RAG: 连接一个简单的向量存储并测试检索。例如,给智能体一段信息,结束对话,然后开始一个新的对话询问该信息——看看它是否能从存储中检索到。或者让它吸收一个文档,然后提出一个需要引用该文档的问题。微调将这些检索到的块注入上下文的管道,使其以有用的方式呈现(也许用像“参考:”这样的标签作为前缀)。
- 优化提示与策略: 通过在各种场景下进行测试,你会发现问题——例如,智能体有时会出现无效循环,或误用工具。你可能需要补充更多规则(甚至对个别行为进行硬编码)。例如,早期 Manus Beta 测试者发现它在某些错误情况下可能会陷入无限循环(Manus在紅什麼?外媒評測訂餐、訂位、訂票⋯都碰壁:它是中國第二個DeepSeek時刻?)。你可以实现一个保护措施:如果同一动作连续 3 次仍未成功,则中断并向用户请求指引;若外部网站无法加载,则尝试替换来源。许多问题可以通过改进提示来提升智能体的推理与决策,但有些则需要外部机制介入(例如设置监督函数,在运行时间过长时强制停止循环)。Manus 团队很可能在其私测阶段已处理了这些边界情况(他们也提到正在修复用户反馈的问题)。
- 接口和集成: 最后,为你的智能体构建一个用户界面或 API。Manus 是通过一个带有候补名单等的 Web 应用/Discord 提供的,但对于你的复现,你可能只需要使用一个控制台或一个简单的聊天 Web UI。重要的部分是后端逻辑。公开一个 API 端点,用户可以在其中 POST 一个任务,智能体将启动循环,定期发送消息或最终结果。考虑如何处理长时间运行的任务——你可能需要异步处理或后台作业队列(因为一些任务,如编码和调试,可能需要几分钟或更长时间)。
利用开源项目: 许多开源智能体框架可以提供捷径或至少是灵感:
- LangChain – 提供了大量用于定义工具和选择工具的智能体的脚手架。可以使用 LangChain 的
AgentExecutor配合自定义的 LLM 和自定义工具。LangChain 本身不支持 CodeAct 风格(它倾向于使用“计划 -> 工具调用字符串”),但你仍然可以用它来处理多步工具使用。这是一个快速获得搜索工具或 python 执行工具等功能的方法,而无需自己编写所有粘合代码。 - AutoGPT – 这个热门项目已经使用 GPT-4(或 3.5)实现了一个自主循环 (AutoGPT - Wikipedia)。它具有任务列表(计划)、带向量数据库的内存以及与网页浏览和文件 I/O 的集成等功能。然而,AutoGPT 的代码库以有点庞大和粗糙而闻名(它是一个突然走红的实验)。尽管如此,你仍然可以研究它,甚至 fork 它以使用不同的 LLM 后端。AutoGPT 使用一种让 AI 批评自己计划的方法(“批评性思维”),这是另一个可以考虑用来提高可靠性的想法。
- BabyAGI – 另一个专注于任务列表执行理念的开源项目。BabyAGI 更简单:它维护一个任务列表,总是选择最上面的一个来执行,可能会根据需要添加新任务,并使用 LLM 来执行每个任务,然后更新列表。这与 Manus 的方法有些不同,但共享了分解目标的概念。你可以从 BabyAGI 中借鉴维护和重新确定任务列表优先级的概念。
- CodeActAgent – 由于 Manus 特别引用了 “CodeAct” 论文,使用作者的开源实现是高度相关的。CodeActAgent(特别是他们提供的微调模型)正是为智能体输出代码以使用工具的场景量身定制的。通过使用他们的模型和代码,你可以开箱即用地获得 Manus 的许多核心功能:得益于其训练,模型将知道如何调用 API、如何格式化代码动作等 (Executable Code Actions Elicit Better LLM Agents) (GitHub - xingyaoww/code-act: Official Repo for ICML 2024 paper “Executable Code Actions Elicit Better LLM Agents” by Xingyao Wang, Yangyi Chen, Lifan Yuan, Yizhe Zhang, Yunzhu Li, Hao Peng, Heng Ji.)。然后你只需要将其接入你的系统,并可能用规划和内存来扩展它。CodeAct 仓库甚至包括一个示例聊天 UI 和关于使用 Kubernetes 进行可伸缩性部署的指南 (GitHub - xingyaoww/code-act: Official Repo for ICML 2024 paper “Executable Code Actions Elicit Better LLM Agents” by Xingyao Wang, Yangyi Chen, Lifan Yuan, Yizhe Zhang, Yunzhu Li, Hao Peng, Heng Ji.)。从本质上讲,CodeActAgent 就像一个开源的迷你 Manus(减去 Manus 拥有的一些专有打磨)。
API 集成注意事项: 如果你的智能体要使用外部服务(例如,调用 OpenAI API 获取 GPT-4,或任何付费 API),请仔细处理密钥和配额。生产环境中的 Manus 很可能使用对模型隐藏的搜索或地理数据 API 密钥(模型只调用一个函数,服务器端代码附加凭据)。你也应该这样做——永远不要将 API 密钥放在提示中,否则模型可能会泄露它们;将它们保存在你的工具实现代码中。还要对工具使用实施速率限制,以避免智能体(无论是恶意还是意外)滥发调用。Manus 可能有安全措施,以防止对网站进行 DOS 攻击或无休止地循环调用付费 API。
测试与评估: 最后,为了确保你类似 Manus 的智能体能够工作,请在一系列 Manus 声称能处理的任务上对其进行测试:例如,“起草一份关于主题 X 的 5 页研究报告,并附上引文”——看看它是否能搜索、编译信息并生成一份带来源的结构化报告(你可能需要为其提供足够的上下文或知识库才能做得好)。或者 “构建一个能实现 Y 功能的简单 Web 应用”——看看它是否能创建文件、编写代码、启动服务器并给你一个 URL(这将测试部署/工具集成)。还要故意测试失败模式:让它做一些它不应该做的事情(Manus 在提示中有道德护栏),或者给它一个不可能完成的任务——它最终应该回应说它做不到,而不是永远空转。根据早期用户的评论,Manus 有时会出现事实错误或未能完成订餐或订票等交易(它会进行到一半但无法完成)(Manus在紅什麼?外媒評測訂餐、訂位、訂票⋯都碰壁:它是中國第二個DeepSeek時刻?)
总之,使用开源工具构建像 Manus 这样的自主智能体是一个复杂但可以实现的项目。核心步骤是:选择一个有能力的 LLM,为其提供丰富的提示和/或微调,使其知道如何作为智能体行动,给它一个安全的工具(代码、网络等)试验场,以及实现一个使其朝着目标前进的循环。Manus 证明了,通过对现有 AI 组件(Claude 等)的正确组合和仔细集成,AI 可以转变为一个主动完成任务的“数字员工”。通过遵循我们概述的架构和技术——借鉴自 Manus 的设计和相关研究——人们可以复现一个类似的智能体 AI 系统。它可能不会立即达到 Manus 的全部实力,但通过迭代改进和可能的社区贡献(正如早期采用者对 Manus 的热情逆向工程所见),一个开源的 Manus 等价物可能会出现,以透明的方式推动自主 AI 智能体的能力向前发展。
Sources:
- Ji Yichao (Peak) on Manus’s foundation models – using Anthropic Claude and finetuned Alibaba Qwen (Manus背后的基础大模型首次公布!基于美国Claude和阿里Qwen开发美国阿里AI_新浪科技_新浪网) (Manus背后的基础大模型首次公布!基于美国Claude和阿里Qwen开发美国阿里AI_新浪科技_新浪网).
- Tech media report on Manus’s multi-model and multi-agent strategy (GPT-4, Claude, Gemini for different tasks; sub-agents in separate VMs) (Manus在紅什麼?外媒評測訂餐、訂位、訂票⋯都碰壁:它是中國第二個DeepSeek時刻?) (Manus在紅什麼?外媒評測訂餐、訂位、訂票⋯都碰壁:它是中國第二個DeepSeek時刻?).
- Manus system prompt (leaked) – capabilities and tool use rules (Manus tools and prompts · GitHub) (Manus tools and prompts · GitHub).
- Manus agent loop and planning (system prompt excerpt) (Manus tools and prompts · GitHub) (Manus tools and prompts · GitHub).
- Manus knowledge integration and RAG support (Manus在紅什麼?外媒評測訂餐、訂位、訂票⋯都碰壁:它是中國第二個DeepSeek時刻?) (Manus tools and prompts · GitHub).
- Example of Manus calling an API via code (CodeAct paradigm in action) (Manus tools and prompts · GitHub).
- CodeAct (ICML 2024) paper abstract – code as action outperforms text/JSON formats (Executable Code Actions Elicit Better LLM Agents) (Executable Code Actions Elicit Better LLM Agents).
- CodeActAgent open-source components (LLM server, execution engine, etc.) (GitHub - xingyaoww/code-act: Official Repo for ICML 2024 paper “Executable Code Actions Elicit Better LLM Agents” by Xingyao Wang, Yangyi Chen, Lifan Yuan, Yizhe Zhang, Yunzhu Li, Hao Peng, Heng Ji.).
- AutoGPT description – an autonomous agent that uses GPT-4 in a loop to break down goals and use tools (AutoGPT - Wikipedia).
- Manus prompt rules on information sourcing and citation (Manus tools and prompts · GitHub) (Manus tools and prompts · GitHub).
- Error handling and self-debug instructions from Manus prompt (Manus tools and prompts · GitHub).
- Early tests of Manus by users – limitations in completing certain autonomous tasks (ordering food, booking flight) (Manus在紅什麼?外媒評測訂餐、訂位、訂票⋯都碰壁:它是中國第二個DeepSeek時刻?)