贴脸开大,几个 00 后 3 小时闪电复刻 Manus,代码全开源:OpenManus 本地部署与 TaoToken 接入实录

发布时间:2026/10/3 12:04:19
贴脸开大,几个 00 后 3 小时闪电复刻 Manus,代码全开源:OpenManus 本地部署与 TaoToken 接入实录 1. OpenManus 是什么为什么值得在本地跑一遍OpenManus 是 MetaGPT 团队在 Manus 爆火后快速开源的一个通用 Agent 项目核心思路是把「推理大模型 工具调用 任务规划」三件事拼在一起让模型自己拆解任务、自己调用工具、自己把结果落盘。它和 Manus 最大的区别在于运行位置Manus 跑在云端虚拟机上OpenManus 跑在你自己的电脑上直接操作你的文件系统、浏览器和终端。对于想搞清楚 Agent 执行链路到底怎么走、想自己改 System Prompt 做实验的人来说本地跑一遍比看十篇评测都有用。我第一次看到这个项目时最直观的感受是它把 Agent 的「黑盒」拆成了可读的 Python 类。主代理负责理解需求并协调PlanningAgent 负责把复杂任务拆成步骤ToolCallAgent 负责实际调用工具。工具层目前主要有四个PythonExecute 用来执行 Python 代码并与系统交互FileSaver 用来把结果保存成本地文件BrowserUseTool 用来打开和控制浏览器GoogleSearch 用来做网络检索。这套组合不算复杂但足够跑通「搜索—分析—写文件」这类典型链路。适合谁上手如果你已经会用 Python 虚拟环境、能看懂 requirements.txt并且手里有一个可用的模型 API Key那基本可以在半小时内跑起来。如果你只是想体验「一句话让 AI 自己干活」OpenManus 也能满足但你需要接受它偶尔会卡在某个工具调用上需要你手动干预。它不是开箱即用的产品而是一个可调试的工程骨架这一点在部署前要有心理预期。我实测下来OpenManus 对模型的要求集中在两点一是要支持 function calling 或 tool use二是上下文窗口要够大因为 PlanningAgent 会把任务拆解结果和工具返回结果都塞进对话历史。这也是为什么后面接入 TaoToken 时模型 ID 的选择会直接影响任务成功率。2. 部署前的环境准备与 TaoToken 接入前置在开始 clone 代码之前先把环境理清楚。OpenManus 官方推荐 Python 3.12我用 3.11 也跑通了但 3.12 在依赖解析上更顺。你需要准备一个干净的虚拟环境避免和系统里已有的包冲突。另外BrowserUseTool 依赖 Playwright第一次运行会下载浏览器内核网络不稳的话这一步容易失败建议提前留出时间。模型接入方面OpenManus 默认走 OpenAI 兼容接口这意味着只要你的服务商提供/v1/chat/completions并且支持 tool use就可以直接对接。TaoToken 的 API 地址是https://taotoken.net/api注意这里不加任何查询参数Base URL 填到/api这一层即可。Key 在控制台的 API Keys 页面生成生成后只显示一次记得先复制到安全的地方。这里有一个容易踩的坑OpenManus 的配置文件里模型名和 Base URL 是分开写的如果你只改了 Base URL 没改模型 ID请求会打到默认模型上结果就是工具调用格式对不上报错信息往往指向reading choices之类的解析失败。所以下面配置片段里的三个字段——Base URL、API Key、Model ID——必须同时改缺一不可。另外TaoToken 的 Coding Plan 适合长期跑 Agent 任务的场景因为 Agent 一次任务可能产生多轮请求按量计费容易失控包月形式更可控。如果你只是先验证链路用 API Keys 按量调用也够。控制台地址和文档都在官网导航里能找到建议先把文档里的「接入说明」那一页看一遍确认当前支持的模型列表再决定用哪个 Model ID。环境变量方面我建议不要把 Key 硬编码进config.toml而是用.env文件管理然后让配置读取环境变量。这样你后续换 Key 或者把代码推到 Git 仓库时不会泄露。OpenManus 的配置加载逻辑支持从环境变量读取具体写法在下一节的 TOML 片段里会给出。3. 可复制的配置config.toml 与 .env 完整片段先把仓库拉下来然后进入目录创建虚拟环境。命令如下git clone https://github.com/mannaandpoem/OpenManus.git cd OpenManus python3.12 -m venv .venv source .venv/bin/activate pip install -r requirements.txt playwright installplaywright install这一步会下载 Chromium如果中途断掉重新执行即可它会续传。装完之后在项目根目录创建.env文件内容如下TAOTOKEN_API_KEYsk-你的实际Key TAOTOKEN_BASE_URLhttps://taotoken.net/api注意 Base URL 结尾不要带/v1OpenManus 内部会自己拼路径。然后找到config/config.toml如果没有就从config/config.example.toml复制一份。修改[llm]段[llm] model claude-3-5-sonnet-20241022 base_url https://taotoken.net/api api_key ${TAOTOKEN_API_KEY} max_tokens 8192 temperature 0.0这里model字段填的是 Model ID不是显示名称。TaoToken 文档里会列出当前可用的 Model ID选一个支持 tool use 的。temperature设成 0.0 是为了让工具调用格式更稳定Agent 任务里随机性太强反而容易跑偏。max_tokens给到 8192 是因为 PlanningAgent 的输出可能比较长给少了会被截断。如果你要用 BrowserUseTool还需要在[browser]段确认headless设置。本地调试建议设成false这样你能看到浏览器实际在做什么方便排查。配置片段如下[browser] headless false disable_security truedisable_security true只在本地调试时用它会让浏览器忽略部分跨域限制方便 Agent 操作页面。生产环境不要开这个选项。另外[search]段如果你没有 Google Search API可以先用默认的 DuckDuckGo 引擎或者直接跳过搜索类任务先跑纯文件操作的任务验证链路。配置改完后用python main.py启动如果看到提示输入任务的交互界面说明配置加载成功。如果报KeyError或401先检查.env是否被正确读取可以在 Python 里import os; print(os.getenv(TAOTOKEN_API_KEY))确认一下。4. 验证请求跑一个完整任务并观察执行链路配置就绪后用一个具体任务来验证。我选的任务是「在当前目录下创建一个名为demo_output的文件夹在里面生成一个hello_agent.txt内容为当前时间的 ISO 格式然后用 Python 打印这个文件的内容。」这个任务会触发 PythonExecute 和 FileSaver 两个工具能比较完整地看到 Agent 的决策过程。启动后输入任务你会看到终端里依次输出[PlanningAgent] 正在拆解任务... [ToolCallAgent] 调用 PythonExecute: os.makedirs(demo_output, exist_okTrue) [ToolCallAgent] 调用 PythonExecute: datetime.now().isoformat() [ToolCallAgent] 调用 FileSaver: 写入 hello_agent.txt [ToolCallAgent] 调用 PythonExecute: print(open(demo_output/hello_agent.txt).read())如果一切正常最后会输出类似2025-01-15T14:32:07.123456的时间字符串并且demo_output文件夹出现在项目根目录下。这个过程里PlanningAgent 先把任务拆成「建目录—取时间—写文件—读文件」四步然后 ToolCallAgent 逐步执行。你可以打开hello_agent.txt确认内容确实写进去了。如果任务卡住或者报错重点看两个地方一是模型返回的 tool call 格式是否被正确解析二是工具执行结果是否被正确回传给模型。OpenManus 的日志会打印每一轮对话的 message 结构你可以看到tool_calls字段和role: tool的返回。常见的情况是模型返回了工具名但参数是空对象这时候 Agent 会重试或者直接失败你需要检查 System Prompt 里工具描述是否清晰。验证成功后可以试着把任务改复杂一点比如「搜索今天的天气把结果写入 weather.txt」。这会触发 GoogleSearch 或 DuckDuckGo 工具同时考验模型对搜索结果的总结能力。如果搜索工具返回空结果Agent 可能会反复重试这时候你可以手动中断检查搜索 API 是否可用。整个链路跑通一次之后你对 Agent 的执行节奏就有体感了。5. 本篇常见报错排查401、local proxy failed、reading choices第一个高频报错是401 Unauthorized。如果你确认 Key 是对的那大概率是 Base URL 写错了。OpenManus 拼接路径时会在你填的 base_url 后面加/v1/chat/completions所以 base_url 应该填https://taotoken.net/api而不是https://taotoken.net/api/v1。多写一层/v1就会变成/api/v1/v1/chat/completions服务端直接返回 401 或 404。检查config.toml里的base_url字段确保没有多余路径。第二个报错是local proxy failed或类似的连接错误。这通常出现在你本机设置了系统代理但 Python 请求没有走代理或者代理配置和实际网络环境不匹配。OpenManus 底层用 httpx它会读取HTTP_PROXY和HTTPS_PROXY环境变量。如果你不需要代理就在启动前unset HTTP_PROXY HTTPS_PROXY如果你需要就确保代理地址正确。注意不要在.env里写代理相关变量避免和系统环境冲突。第三个报错是Cannot read properties of undefined (reading choices)。这个错误说明请求返回的 JSON 结构里没有choices字段通常是服务端返回了错误信息但 HTTP 状态码是 200或者返回格式不是 OpenAI 兼容格式。先看日志里打印的原始响应体如果是{error: ...}那就是模型 ID 写错了或者该模型不支持 tool use。换一个文档里明确标注支持 function calling 的 Model ID 再试。如果响应体是空的检查max_tokens是否设得太小导致输出被截断。还有一个容易忽略的问题OAuth 或 token 过期。TaoToken 的 Key 一般不会短期过期但如果你在控制台手动删除了 Key本地配置不会自动更新需要重新生成并替换.env里的值。另外如果你同时装了 Cline MCP 或 Claude Code 的配置注意不要把它们的环境变量和 OpenManus 的混在一起不同工具读的变量名可能不同。CC Switch 这类工具切换配置时确认 Base URL、Key、Model ID 三件套都切到了 OpenManus 对应的那一组。排查顺序建议先看 HTTP 状态码再看响应体最后看配置字段。大部分问题都出在 Base URL 多写或少写路径、Model ID 不支持 tool use、以及环境变量没被正确加载这三类上。6. 接入文档与后续调试入口链路跑通之后你可能会想换模型、加工具或者改 System Prompt。OpenManus 的 System Prompt 在app/prompt/目录下主代理和 PlanningAgent 各有一份。改 Prompt 时注意保留工具调用的格式说明否则模型可能返回纯文本而不是 tool call。如果你想加自定义工具参考app/tool/下的现有实现继承基类并注册到 ToolCallAgent 的工具列表里即可。模型接入方面TaoToken 的接入文档里有完整的参数说明和可用 Model ID 列表建议在换模型前先对照文档确认该模型是否支持 tool use。API Keys 页面可以生成多个 Key方便你给不同项目分配不同的额度。如果你打算长期跑 Agent 任务Coding Plan 的包月形式比按量计费更省心具体在控制台里能看到当前套餐和用量。调试过程中如果遇到工具调用格式问题可以把temperature降到 0.0并且在 System Prompt 里加一句「必须使用提供的工具不要直接回答」。另外OpenManus 的日志级别可以在config.toml里调成DEBUG这样能看到每一轮完整的 message 结构对定位问题很有帮助。跑通第一个任务之后建议把任务复杂度逐步提高观察 Agent 在什么情况下会失败这比一次性跑一个大任务更有收获。