1. 为什么要在本地跑 OpenManus + Ollama
OpenManus 是 Manus 的开源复刻版本,核心能力是让大模型自己规划任务、调用工具、操作浏览器、读写文件,最终把一个模糊的需求拆成可执行的动作链。它本身不绑定任何云端服务,只要后端模型兼容 OpenAI 风格的接口,就能接进来。而 Ollama 正好在本地暴露了http://localhost:11434/v1这样一个兼容端点,两者一拼,整套 Agent 流程就完全跑在你自己的开发机上,不花一分钱,也不依赖外部网络。
这套组合适合谁?一类是想研究 Agent 调度逻辑的开发者,本地跑通后可以随意改 prompt、改工具集,不用担心 token 账单;另一类是手头有显卡但不想把数据发出去的场景,比如处理内部文档、跑代码分析任务。我实测下来,14B 级别的 coder 模型在 16G 显存上能跑,32B 需要 24G 以上,视觉任务再单独挂一个 minicpm-v 就行。
整篇内容会覆盖两条环境路线:conda 适合 Windows 和习惯 conda 管理的用户,uv 适合 macOS/Linux 上追求速度的人。两条路最终都指向同一个config.toml和同一个python main.py启动入口。下面按顺序把每一步命令、每个字段、每个容易踩的坑都写清楚。
2. 前置准备:Python、Ollama 与 TaoToken 的定位
在动手之前,先把三样东西确认好。第一是 Python 3.12,OpenManus 的依赖里有些包对 3.10 以下不友好,直接用 3.12 最省事。第二是 Ollama,去官网下载对应平台的安装包,装完后终端里能执行ollama --version就算成功。第三是模型,必须选支持 function calling 的,否则 Agent 调不动工具。
这里要说明一下 TaoToken 的位置。TaoToken 是一个模型接入网关,官网在 https://taotoken.net/?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content= ,它提供 OpenAI 兼容的 API 端点 https://taotoken.net/api 。本地 Ollama 跑的是你自己的模型,完全免费;但如果你后面想切换到更强的云端模型做对比,或者本地显卡不够跑大参数模型,就可以在config.toml里把base_url换成 TaoToken 的地址,用同一个配置文件切换后端,不用改代码。它的 API Key 在 https://taotoken.net/api-keys 生成,接入文档在 https://taotoken.net/doc 。
注意:本地 Ollama 和 TaoToken 是两种后端选择,不是必须同时用。本地跑通后再考虑切换,避免一开始就混淆变量。
模型选择上,函数调用能力是关键。qwen2.5-coder 系列表现稳定,14b 适合 16G 显存,32b 适合 24G 以上。视觉模型用 minicpm-v,装的时候直接ollama run minicpm-v即可。装完用ollama list确认模型在列表里。
3. 路线一:conda 环境搭建(Windows 友好)
conda 的优势是环境隔离干净,Windows 上装依赖不容易出编译问题。先创建环境:
conda create -n open_manus python=3.12 conda activate open_manus激活后终端提示符前面会出现(open_manus)。接着克隆仓库并进目录:
git clone https://github.com/mannaandpoem/OpenManus.git cd OpenManus然后装依赖。这一步如果网络慢,可以换国内镜像源,但不要用任何代理工具,直接加-i参数指向清华源即可:
pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple装完后验证一下关键包:
python -c "import openai, pydantic; print('ok')"输出ok说明基础依赖没问题。conda 路线到这里环境就绪,接下来跳到第 5 节配 Ollama 和 config.toml。
4. 路线二:uv 环境搭建(macOS/Linux 推荐)
uv 是 Rust 写的包管理器,装依赖比 pip 快很多,macOS 上体验尤其好。先装 uv:
curl -LsSf https://astral.sh/uv/install.sh | sh装完重开终端或 source 一下配置文件,然后确认:
uv --version接着克隆仓库,和 conda 路线一样:
git clone https://github.com/mannaandpoem/OpenManus.git cd OpenManus创建虚拟环境并激活。Windows 下用:
uv venv .venv\Scripts\activatemacOS/Linux 下用:
uv venv source .venv/bin/activate激活后装依赖:
uv pip install -r requirements.txtuv 的解析速度很快,通常几十秒就完成。装完同样用python -c "import openai"验证。两条路线的区别只在环境管理工具,后面的配置和启动完全一致。
5. 对接 Ollama 与 config.toml 关键字段
先把 Ollama 服务跑起来。装好 Ollama 后,拉取模型:
ollama run qwen2.5-coder:14b这条命令会下载模型并进入交互模式,输入/bye退出即可,模型已经留在本地。视觉模型同理:
ollama run minicpm-v确认模型列表:
ollama list如果之前装过旧模型想清理,用ollama rm 模型名称删除。Ollama 默认监听 11434 端口,OpenManus 通过http://localhost:11434/v1访问它。
接下来配 config.toml。进入 OpenManus 目录,找到config/config.example.toml,复制一份改名为config.toml:
cp config/config.example.toml config/config.toml然后编辑config.toml,把[llm]段改成:
[llm] model = "qwen2.5-coder:14b" base_url = "http://localhost:11434/v1" api_key = "sk-local" max_tokens = 4096 temperature = 0.0 [llm.vision] model = "minicpm-v" base_url = "http://localhost:11434/v1" api_key = "sk-local"几个字段说明:model必须和ollama list里的名字完全一致,大小写和标签都不能错;base_url末尾的/v1不能省,Ollama 的兼容层靠它路由;api_key本地服务不校验,随便填一个非空字符串即可,但留空有些版本会报错;temperature设 0.0 让 Agent 的动作更确定,减少随机乱调工具的情况。
提示:如果你后面想切到 TaoToken 的云端模型,把
base_url改成 https://taotoken.net/api ,api_key换成在 https://taotoken.net/api-keys 生成的真实 Key,model改成对应模型名即可,其余字段不动。
6. 启动验证:一次端到端任务跑通
配置完成后,在 OpenManus 目录下执行:
python main.py启动后会出现交互提示,输入一个具体任务,比如:
帮我搜索今天关于开源 Agent 的新闻,整理成三条摘要正常情况下,你会看到 Agent 开始规划步骤,调用浏览器工具打开页面,抓取内容,最后输出摘要。整个过程在终端里能看到工具调用日志,类似Tool: browser_use这样的输出。如果它成功返回了三条摘要,说明本地模型、Ollama 服务、config.toml 三者全部打通。
下次再启动,conda 用户执行:
conda activate open_manus cd OpenManus python main.pyuv 用户执行:
cd OpenManus source .venv/bin/activate python main.py想验证模型本身是否正常,可以单独测一下 Ollama 的兼容端点:
curl http://localhost:11434/v1/chat/completions \ -H "Content-Type: application/json" \ -d '{"model":"qwen2.5-coder:14b","messages":[{"role":"user","content":"say hi"}]}'返回 JSON 里有choices字段就说明端点通。这一步能快速区分是模型服务的问题还是 OpenManus 配置的问题。
7. 本篇常见错误排查
报错model not found:config.toml 里的 model 名和ollama list输出不一致。Ollama 的模型名带标签,比如qwen2.5-coder:14b,少写:14b就会找不到。改完保存再启动。
报错Connection refused:Ollama 服务没起来。执行ollama serve手动启动,或者确认 Ollama 桌面端在运行。端口被占用的话,ollama list也会失败,先解决端口冲突。
Agent 不调用工具,只聊天:模型不支持 function calling。换 qwen2.5-coder 系列或确认你装的模型有工具调用能力。有些小参数模型虽然能对话,但不会触发工具,表现就是一直输出文字不执行动作。
依赖装到一半报编译错误:Python 版本不对。确认python --version是 3.12,conda 环境激活后版本没切过去的话,重新conda create一次。
config.toml 改了没生效:文件名必须是config.toml,不是config.example.toml。有些人直接改 example 文件,程序读的是另一个,自然不生效。
显存不够跑 14b:换 7b 级别的 coder 模型,或者用量化版本。ollama run qwen2.5-coder:7b在 8G 显存上能跑,函数调用能力也够用。
视觉任务报错:[llm.vision]段没配或模型名写错。视觉模型和主模型可以不同,但 base_url 要指向同一个 Ollama 端点。
排查顺序建议从下往上:先 curl 测 Ollama 端点,再确认 config.toml 字段,最后看 OpenManus 启动日志。这样能快速定位是模型层、配置层还是应用层的问题。
8. 后续切换与扩展
本地跑通之后,如果你想对比云端模型的效果,或者本地显卡跑不动 32b,可以在 config.toml 里把base_url换成 TaoToken 的 https://taotoken.net/api ,api_key换成 https://taotoken.net/api-keys 生成的 Key。这样同一套 OpenManus 代码不用改,只换配置就能在本地模型和云端模型之间切换。想先感受一下模型对话效果,可以直接在 https://taotoken.net 的模型对话页面试;如果是长期跑编码类 Agent 任务,Coding Plan 在 https://taotoken.net/coding-plan 有更划算的额度方案。接入细节看 https://taotoken.net/doc ,控制台在 https://taotoken.net/console 。
本地这套环境最大的好处是可复现。把 conda 环境导出成 yaml,或者把 uv 的依赖锁文件存下来,换机器时几分钟就能重建。config.toml 里除了 api_key 之外都可以直接提交到自己的私有仓库,团队里其他人拉下来改个模型名就能跑。Agent 的工具集在app/tool目录下,想加自定义工具直接往里写,注册后重启即可生效。