1. 为什么要在本地跑 OpenClaw + Ollama,而不是只用云端
很多人第一次接触本地 AI 助手,都是被“断网可用、数据不出本机”这两个点吸引的。但真正动手之后会发现,纯本地方案有个绕不开的坎:本地模型能力有上限,遇到复杂推理、长文档总结、代码生成这类任务,小参数模型经常答非所问。于是大家又会去接云端 API,结果 Key 散落在各个平台,OpenClaw 里配一套、Ollama 里配一套、写脚本时又硬编码一套,切换模型时改配置改到怀疑人生。
这篇要解决的就是这个具体问题:用 OpenClaw 做本地 AI 助手的调度层,Ollama 负责跑本地模型,同时把云端模型的 endpoint 统一收敛到 TaoToken 的 Key 通道上。这样你既保留了本地推理的隐私和低延迟,又能在需要时一键切到更强的云端模型,而所有模型在 OpenClaw 里看到的都是同一套 OpenAI 兼容接口。
适合谁看:刚装完 Ollama、想让 OpenClaw 真正跑起来的新手;手里有多个模型 Key、被配置分散折磨过的开发者;以及想给团队搭一个统一模型入口、又不想动生产数据库的人。整篇按“先跑通本地、再接入统一 Key、最后验证请求”的顺序写,每一步都有可复制的配置和命令,照着做就能得到一个能对话的本地助手。
需要提前说明的是,本文不涉及任何网络加速工具,所有操作都在你本机的正常网络环境下完成。Ollama 的模型下载走官方源,TaoToken 的接口调用走标准 HTTPS,不需要额外配置代理。
2. 前置准备:Ollama 安装与模型拉取
2.1 安装 Ollama 并确认服务端口
Ollama 的安装本身没什么难度,官网下载对应系统的安装包,双击下一步即可。Windows 和 macOS 装完后会自动在后台起一个服务,Linux 则通常需要手动systemctl start ollama或直接前台运行。装完后第一件事是确认服务在监听哪个端口,默认是11434。
打开终端或 PowerShell,执行:
ollama --version curl http://127.0.0.1:11434/api/tags第一条命令确认版本,第二条命令会返回当前已拉取的模型列表。如果第二条返回{"models":[]},说明服务正常,只是还没拉模型。如果连接被拒绝,检查 Ollama 是否真的在运行:Windows 看系统托盘图标,macOS 看菜单栏,Linux 用ps aux | grep ollama。
这里有个新手常踩的坑:Ollama 默认只监听127.0.0.1,也就是只有本机能访问。如果你打算让局域网内其他设备也用这个 Ollama,需要设置OLLAMA_HOST=0.0.0.0:11434再启动。但本文的场景是 OpenClaw 和 Ollama 在同一台机器上,所以保持默认的127.0.0.1最安全,不用改。
2.2 拉取一个适合本地跑的模型
模型选择上,零基础用户建议从 0.8B 到 7B 之间的量化模型起步。参数太大,16GB 内存的机器会频繁爆内存;参数太小,回答质量又撑不起“助手”这个定位。Qwen 系列的中文能力在本地模型里比较均衡,适合作为第一个跑通的模型。
ollama pull qwen3.5:0.8b ollama listollama list会显示模型名称、大小和修改时间。记下这个名称,后面写 OpenClaw 配置时id字段必须和它完全一致,包括冒号和后面的 tag。很多人配置失败就是因为把qwen3.5:0.8b写成了qwen3.5,Ollama 找不到对应模型,OpenClaw 就会报模型不存在。
拉取完成后,可以先用命令行直接测一下模型能不能正常对话:
ollama run qwen3.5:0.8b "用一句话解释什么是本地大模型"如果能看到流式输出的回答,说明 Ollama 这一层已经通了。这一步很重要,先把 Ollama 单独验证通过,再去配 OpenClaw,出问题时才能快速定位是哪一层的毛病。
2.3 确认 OpenAI 兼容接口可用
OpenClaw 连接 Ollama 走的是 OpenAI 兼容协议,所以需要确认 Ollama 的/v1接口能正常响应。执行:
curl http://127.0.0.1:11434/v1/models正常会返回一个 JSON,里面列出所有已拉取的模型。如果这个接口 404,说明你的 Ollama 版本太旧,需要升级到支持 OpenAI 兼容层的新版本。这个接口通了,OpenClaw 的baseUrl填http://127.0.0.1:11434/v1才有意义。
3. 可复制配置:OpenClaw 接入 Ollama 与 TaoToken 统一 Key
3.1 定位并备份 openclaw.json
OpenClaw 的主配置文件默认在用户目录下的隐藏文件夹里。Windows 是C:\Users\你的用户名\.openclaw\openclaw.json,macOS 和 Linux 是~/.openclaw/openclaw.json。Windows 下需要先在文件资源管理器里开启“显示隐藏文件”才能看到.openclaw文件夹。
改配置之前先复制一份备份,这是血泪教训。配置写错导致 OpenClaw 起不来时,直接还原备份比逐行排查快得多:
cp ~/.openclaw/openclaw.json ~/.openclaw/openclaw.json.bakWindows 下用文件管理器复制粘贴一份即可,改名为openclaw.json.bak。
3.2 写入 Ollama provider 配置
用 VS Code 或任意文本编辑器打开openclaw.json,找到models.providers这一段。下面是一个可以直接复制的最小可用配置,把 Ollama 作为本地 provider 加进去:
{ "models": { "providers": { "ollama": { "baseUrl": "http://127.0.0.1:11434/v1", "apiKey": "ollama-local", "auth": "api-key", "api": "openai-completions", "authHeader": true, "models": [ { "id": "qwen3.5:0.8b", "name": "qwen3.5:0.8b", "api": "openai-completions", "reasoning": false, "input": ["text"], "cost": { "input": 0, "output": 0, "cacheRead": 0, "cacheWrite": 0 }, "contextWindow": 60000, "maxTokens": 60000 } ] } } }, "agents": { "defaults": { "model": { "primary": "ollama/qwen3.5:0.8b" } } } }几个关键字段解释一下。baseUrl里的127.0.0.1是本机回环地址,11434是 Ollama 默认端口,/v1是 OpenAI 兼容路径,三者缺一不可。apiKey对本地 Ollama 来说随便填,因为它不校验,但字段不能省,否则 OpenClaw 的鉴权逻辑会报错。id必须和ollama list里显示的模型名一字不差。primary的格式是provider名/模型id,这里就是ollama/qwen3.5:0.8b。
3.3 把云端模型 endpoint 收敛到 TaoToken
本地模型跑通之后,接下来解决多模型 Key 分散的问题。思路是在 OpenClaw 里再加一个 provider,指向 TaoToken 的统一接口,这样云端模型和本地模型在 OpenClaw 看来是同一套调用方式,切换时只改primary字段就行。
TaoToken 的 API 地址是https://taotoken.net/api,兼容 OpenAI 协议。在models.providers里追加一个 provider:
{ "models": { "providers": { "taotoken": { "baseUrl": "https://taotoken.net/api/v1", "apiKey": "你的TaoToken Key", "auth": "api-key", "api": "openai-completions", "authHeader": true, "models": [ { "id": "claude-sonnet-4-5", "name": "claude-sonnet-4-5", "api": "openai-completions", "reasoning": false, "input": ["text"], "contextWindow": 200000, "maxTokens": 8192 } ] } } } }这里baseUrl填https://taotoken.net/api/v1,apiKey换成你在 TaoToken 控制台生成的 Key。模型id填你要调用的云端模型标识,具体可用的模型列表在 TaoToken 的模型对话页面能看到。配好之后,OpenClaw 里就有两个 provider:ollama走本地,taotoken走统一 Key 通道。
3.4 用 settings 片段控制默认模型切换
OpenClaw 的模型选择逻辑在agents.defaults.model里。想让本地模型做默认,就写ollama/qwen3.5:0.8b;想临时切到云端,改成taotoken/claude-sonnet-4-5即可。如果 OpenClaw 版本支持别名,还可以在agents.defaults.models里给每个模型起短名:
{ "agents": { "defaults": { "model": { "primary": "ollama/qwen3.5:0.8b" }, "models": { "ollama/qwen3.5:0.8b": { "alias": "local" }, "taotoken/claude-sonnet-4-5": { "alias": "cloud" } } } } }这样在对话里用@local或@cloud就能切换,不用每次改配置文件。改完保存,OpenClaw 重启后生效。
4. 验证请求:一次对话的完整检查清单
4.1 启动 OpenClaw Gateway
配置写完后,先确认 Ollama 在运行,然后启动 OpenClaw:
openclaw gateway终端会输出启动日志。重点看两行:一行是加载 provider 的日志,应该能看到ollama和taotoken都被注册;另一行是 gateway 监听的地址,默认是http://127.0.0.1:18789/。如果日志里出现provider ollama not found或model qwen3.5:0.8b not found,说明配置里的名称和实际不匹配,回去核对id字段。
4.2 用 curl 直接打一次对话请求
在打开浏览器之前,先用 curl 验证接口层是否通。这一步能排除掉前端界面的干扰:
curl http://127.0.0.1:18789/v1/chat/completions \ -H "Content-Type: application/json" \ -H "Authorization: Bearer 你的gateway token" \ -d '{ "model": "ollama/qwen3.5:0.8b", "messages": [{"role": "user", "content": "你好,用一句话介绍你自己"}], "stream": false }'gateway token在openclaw.json的gateway.auth.token字段里。如果返回的 JSON 里有choices[0].message.content且内容是中文回答,说明整条链路通了。如果返回 401,检查 token 是否填对;如果返回model not found,检查model字段的格式是不是provider/id。
4.3 返回结果检查清单
拿到响应后,按下面几项逐一确认:
第一,choices数组非空,且finish_reason是stop而不是length。如果是length,说明maxTokens设太小,回答被截断了。
第二,usage字段里prompt_tokens和completion_tokens都有数值。本地 Ollama 的 usage 统计可能不如云端精确,但字段应该存在。
第三,响应时间。本地 0.8B 模型在普通 CPU 上首 token 延迟通常在 1 到 3 秒,如果超过 10 秒,检查是不是模型太大或者内存不足导致频繁 swap。
第四,切到taotoken/claude-sonnet-4-5再打一次同样的请求,确认云端通道也能返回。两次都通,说明统一 Key 通道配置成功。
4.4 浏览器界面实测
curl 通过后,打开http://127.0.0.1:18789/,在聊天框里输入问题。如果界面能正常流式输出,说明 OpenClaw 的 gateway 和 provider 配置都没问题。这时候你可以试着在对话里切换模型,观察本地和云端回答风格的差异。本地模型响应快但知识面窄,云端模型慢一些但推理更完整,按任务类型选用即可。
5. 本篇常见报错排查
5.1 401 Unauthorized
这个报错分两种情况。如果打的是本地 Ollama 接口却返回 401,检查apiKey字段是不是漏了,Ollama 虽然不校验 Key,但 OpenClaw 的authHeader: true会强制带上 Authorization 头,字段缺失会导致请求构造失败。如果打的是 TaoToken 接口返回 401,说明 Key 无效或过期,去控制台重新生成一个,注意复制时不要带多余空格。
5.2 local proxy failed 或 connection refused
这个报错通常出现在 OpenClaw 启动时。原因是baseUrl指向的地址连不上。先确认 Ollama 是否在运行:curl http://127.0.0.1:11434/api/tags。如果这条命令都失败,问题在 Ollama 不在 OpenClaw。如果 Ollama 正常但 OpenClaw 报连接失败,检查baseUrl是不是写成了http://localhost:11434/v1,某些系统上localhost解析到 IPv6 而 Ollama 只监听 IPv4,改成127.0.0.1即可。
5.3 reading choices 相关报错
这个报错说明请求发出去了,但返回的 JSON 结构不符合 OpenAI 格式,OpenClaw 解析choices字段时失败。常见原因是api字段没设成openai-completions,或者模型本身不支持 chat 格式。检查 provider 配置里的api字段,确保是openai-completions。如果用的是 TaoToken 通道,确认模型 id 拼写正确,不存在的模型有时会返回错误页而不是标准 JSON。
5.4 OAuth 或鉴权模式不匹配
OpenClaw 的auth字段支持api-key和oauth两种模式。本地 Ollama 和 TaoToken 都用api-key。如果误设成oauth,启动时会报鉴权模式不匹配。检查每个 provider 的auth字段,确保和实际鉴权方式一致。另外authHeader: true表示把 Key 放在Authorization: Bearer头里,这个对两个 provider 都适用。
5.5 模型加载成功但回答为空
有时候请求返回 200,但content是空字符串。这通常是模型本身的问题,不是配置问题。先用ollama run qwen3.5:0.8b "测试"确认模型能正常输出。如果命令行也输出空,重新拉取模型。如果命令行正常但 OpenClaw 里为空,检查maxTokens是不是设成了 0 或负数。
6. 把统一 Key 通道用起来:从本地助手到多模型工作流
配置跑通之后,日常使用其实很简单。本地模型负责快速问答、草稿生成、隐私敏感的内容处理;遇到需要长上下文推理、复杂代码生成的任务,在对话里切到 TaoToken 通道的云端模型。因为两个 provider 在 OpenClaw 里是同一套接口,切换成本几乎为零。
如果你打算长期用这套组合做编码或 Agent 任务,可以关注一下 TaoToken 的 Coding Plan,它针对高频调用场景做了额度优化,比按量计费更适合日常开发。需要看具体模型列表和额度说明的话,模型对话页面有实时更新的信息。API Key 的生成和管理在控制台里,接入文档里写了各种语言的调用示例,遇到协议细节问题时可以直接对照。
最后留一个实用技巧:把openclaw.json纳入版本管理,但把apiKey字段抽到环境变量里。OpenClaw 支持用${TAOTOKEN_API_KEY}这种占位符读取环境变量,这样配置文件可以安全地提交到私有仓库,Key 不会泄露。具体写法是在apiKey字段填${TAOTOKEN_API_KEY},然后在启动 OpenClaw 前export TAOTOKEN_API_KEY=你的Key。这个习惯在团队协作时尤其重要,避免 Key 跟着配置文件到处传。