1. Mac M2 24G 上 OpenClaw 与 Ollama 的模型入口为什么总打架
在 Mac M2 24G 上跑 OpenClaw + Ollama,最典型的体验是:本地模型能跑,但拉取慢、切换模型要改一堆配置、API Key 散落在不同文件里,最后连自己用的是本地还是云端都分不清。这篇就围绕「把 Ollama endpoint 改到 TaoToken」这个动作,把 Homebrew 安装、endpoint 与 API Key 写入、一次对话验证连通、以及常见报错回退讲清楚。
先说清楚这套组合是什么。Ollama 是本地模型运行时,负责把 Qwen、Llama 这类模型跑在 Mac 的 GPU 上;OpenClaw 是 Agent 框架,负责把模型接进对话、工具调用和自动化流程。两者默认都假设「模型入口只有一个」,但真实开发里你往往需要本地小模型做隐私任务、云端大模型做复杂推理,于是 endpoint 和 API Key 就成了最容易踩坑的地方。
适合谁看:手里是 M2 24G 或类似内存的 Mac、已经装过 Homebrew、想统一本地与云端模型入口的开发者。如果你还没装过 Ollama,也能跟着走,因为下面从安装开始。
我试过最省事的路径不是死磕 Homebrew 的 cask 报错,而是先确认 Ollama 能跑,再把 OpenClaw 的 provider 指向一个统一入口。这里统一入口用 TaoToken 的 API 地址https://taotoken.net/api,本地 Ollama 继续用http://127.0.0.1:11434/v1。两者在 OpenClaw 里通过不同 provider 区分,而不是互相覆盖。
关键认知:Ollama 的 endpoint 是「本地模型服务地址」,TaoToken 的 endpoint 是「云端模型统一入口」。把 Ollama endpoint 改到 TaoToken,本质是让 OpenClaw 在需要云端模型时走 TaoToken,而不是去改 Ollama 本身。Ollama 本身仍然是本地服务,不要把它和云端入口混在一个 baseUrl 里。
下面按「先装、再配、再验、再排」的顺序走。每一步都给可复制命令或配置片段,你照着改路径即可。
2. Homebrew 安装 Ollama 与 OpenClaw 的前置准备
Mac M2 24G 的前置准备分三块:Homebrew 环境、Ollama 安装、OpenClaw 安装。Homebrew 报错是高频问题,先处理它。
先确认 Homebrew 可用:
brew --version # 期望输出:Homebrew 4.x.x如果brew update卡住或报 502,先换镜像源再重试。国内网络环境下,官方源偶尔会超时,换中科大或清华源通常能恢复:
export HOMEBREW_BREW_GIT_REMOTE="https://mirrors.ustc.edu.cn/brew.git" export HOMEBREW_CORE_GIT_REMOTE="https://mirrors.ustc.edu.cn/homebrew-core.git" brew update装 Ollama 时,brew install ollama可能报 cask 定义错误,类似Cask 'ollama' definition is invalid。这类报错多半是本地 cask 元数据过期,先brew update-reset再试;如果仍然失败,直接去 Ollama 官网下载 macOS 安装包,拖进「应用程序」即可。装完后菜单栏出现羊驼图标,说明本地服务已就绪。
验证 Ollama 本地服务:
curl http://localhost:11434/api/tags # 返回 JSON 列表说明服务正常拉一个适合 24G 内存的模型。Qwen3 8B 在 M2 24G 上比较稳,量化后占用可控:
ollama pull qwen3:8b ollama run qwen3:8b "用一句话介绍你自己"如果拉取慢,是模型仓库网络问题,不是 OpenClaw 的问题。可以先用小模型qwen3:4b验证链路,再换 8B。
装 OpenClaw。它通常通过 npm 或官方脚本安装,装完先跑一次 onboard 向导:
openclaw onboard --force # 选择 Custom Provider # Base URL 填 http://127.0.0.1:11434/v1 # Model ID 填 qwen3:8b # 通道选 Skip for nowonboard 向导比手动改配置靠谱,尤其是第一次。它会生成~/.openclaw/openclaw.json和 agent 配置。装完后先别急着接云端,先确认本地链路通。
这一步的坑:OpenClaw 默认 gateway mode 可能不是 local,启动会报Gateway start blocked: set gateway.mode=local。先记着,下一节配。
3. 把 Ollama endpoint 与 API Key 写入 TaoToken 的可复制配置
这一节是核心。目标:OpenClaw 里同时保留本地 Ollama provider 和云端 TaoToken provider,通过配置切换,而不是每次改代码。
先看 OpenClaw 的 gateway 配置。编辑~/.openclaw/openclaw.json,gateway 段只保留 mode 和 auth,不要加 host/port,否则会报Unrecognized key: "host":
{ "gateway": { "mode": "local", "auth": { "mode": "token", "token": "你的本地gateway token" } } }然后配 agent 的模型 provider。编辑~/.openclaw/agents/main/agent/config.json,把本地 Ollama 和云端 TaoToken 分开写:
{ "model": { "provider": "ollama", "name": "qwen3:8b", "baseUrl": "http://127.0.0.1:11434/v1" }, "providers": { "ollama": { "type": "openai-compatible", "baseUrl": "http://127.0.0.1:11434/v1", "apiKey": "ollama" }, "taotoken": { "type": "openai-compatible", "baseUrl": "https://taotoken.net/api", "apiKey": "你的TaoToken API Key", "models": ["claude-sonnet-4-5", "gpt-4.1", "qwen3-235b"] } } }注意三件套必须齐全:Base URL、API Key、Model ID。缺一个就会在请求时报 401 或No API key found for provider。TaoToken 的 API Key 在控制台创建,地址是https://taotoken.net/console,创建后复制到apiKey字段。
如果你用 Claude Code 或 Cline 这类工具,配置思路一样,只是文件路径不同。Claude Code 的 settings 里写:
{ "env": { "ANTHROPIC_BASE_URL": "https://taotoken.net/api", "ANTHROPIC_API_KEY": "你的TaoToken API Key", "ANTHROPIC_MODEL": "claude-sonnet-4-5" } }Codex 的auth.json则写:
{ "base_url": "https://taotoken.net/api", "api_key": "你的TaoToken API Key", "model": "gpt-4.1" }配完后重启 gateway:
openclaw gateway stop openclaw gateway start openclaw gateway status # 期望看到 RPC probe: ok这一步的坑:不要把所有 provider 的 baseUrl 都写成同一个。Ollama 是本地127.0.0.1:11434,TaoToken 是https://taotoken.net/api,写混了就会出现「本地模型请求打到云端」或反之。
4. 一次对话请求验证连通与报错回退
配置写完必须验证。先验证本地 Ollama 链路:
curl http://127.0.0.1:11434/v1/chat/completions \ -H "Content-Type: application/json" \ -d '{ "model": "qwen3:8b", "messages": [{"role": "user", "content": "你好,介绍一下你自己"}] }'返回 JSON 里有choices字段,说明本地链路通。如果报connection refused,说明 Ollama 没在后台运行,去应用程序里打开 Ollama.app,或brew services start ollama。
再验证 TaoToken 云端链路:
curl https://taotoken.net/api/v1/chat/completions \ -H "Content-Type: application/json" \ -H "Authorization: Bearer 你的TaoToken API Key" \ -d '{ "model": "claude-sonnet-4-5", "messages": [{"role": "user", "content": "用一句话说明你来自哪个模型"}] }'返回choices且内容正常,说明云端入口通。如果报 401,检查 API Key 是否复制完整、是否有多余空格。如果报local proxy failed,检查 baseUrl 是否写成了https://taotoken.net/api而不是带/v1的路径,TaoToken 的兼容路径以文档为准。
最后在 OpenClaw 里发一条消息验证端到端:
openclaw gateway status # 打开 Dashboard: http://127.0.0.1:18789/在 Dashboard 里发「你好,请介绍一下自己」。如果返回的是 Qwen3 8B 的自我介绍,说明当前走的是本地 Ollama;如果想切云端,把 agent 配置里的model.provider改成taotoken,name改成claude-sonnet-4-5,重启 gateway 再发一次。
回退策略:如果云端请求失败,把model.provider改回ollama,name改回qwen3:8b,重启 gateway。这样即使云端不可用,本地链路仍然能工作。这就是「统一入口 + 可回退」的价值。
实测下来,M2 24G 跑 qwen3:8b 大约 11 tokens/秒,日常对话够用;复杂推理切到 TaoToken 的云端模型,响应更快且不占本地内存。
5. 本篇常见报错排查:401、local proxy failed、reading choices、OAuth
这一节按真实报错对照排查。每个报错都给原因和修复动作。
401 Unauthorized。原因通常是 API Key 缺失、写错、或 provider 没配 apiKey。检查~/.openclaw/agents/main/agent/config.json里对应 provider 的apiKey字段。TaoToken 的 Key 在https://taotoken.net/api-keys创建。注意不要把 Key 写进 gateway 的 auth.token,那是本地 gateway 的 token,不是模型 API Key。
local proxy failed。原因通常是 baseUrl 写错或网络不可达。检查 TaoToken 的 baseUrl 是否为https://taotoken.net/api,不要多加/v1或漏掉协议头。如果本地 Ollama 报这个,检查127.0.0.1:11434是否在监听。
reading choices 报错,类似cannot read property 'choices' of undefined。原因通常是返回体不是标准 OpenAI 格式,或模型名不存在。检查model.name是否在 provider 的models列表里。TaoToken 的模型 ID 以文档为准,不要自己拼。
OAuth 相关报错。如果你用 Claude Code 或 Codex,可能遇到 OAuth 登录失败。这类工具支持 API Key 模式,直接走ANTHROPIC_API_KEY或auth.json的api_key,不要走 OAuth 流程。配置里把 OAuth 相关字段删掉,只保留 Base URL + Key + Model ID 三件套。
No API key found for provider "anthropic"。这是 onboard 时残留了 anthropic 的 authProvider。重新跑openclaw onboard --force,选 Custom Provider,Base URL 填http://127.0.0.1:11434/v1,Model ID 填qwen3:8b,通道 Skip。或者手动删掉 agent 配置里所有auth相关字段。
Telegram 通道持续报错。如果 onboard 时选了 Skip,但配置里还残留channels.telegram,日志会一直报setMyCommands failed。编辑 agent 配置,把channels改成{}或删掉整个字段。
Unrecognized key: "host"。OpenClaw 的 gateway 配置不接受 host/port,它会自动绑定默认地址和端口。删掉这两个字段,只留 mode 和 auth。
排查顺序建议:先curl本地 Ollama,再curlTaoToken,最后看 OpenClaw 日志。这样能快速定位是本地服务、云端入口、还是 OpenClaw 配置的问题。
6. 统一本地与云端模型入口的长期用法
把 Ollama endpoint 改到 TaoToken 之后,日常用法会变成:本地小模型处理隐私和离线任务,云端模型处理复杂推理和长上下文。OpenClaw 的 provider 配置让你不用改代码就能切换。
长期维护建议:把~/.openclaw/agents/main/agent/config.json纳入版本管理,但 API Key 用环境变量注入,不要硬编码。例如:
export TAOTOKEN_API_KEY="你的Key"然后在配置里写"apiKey": "${TAOTOKEN_API_KEY}"。这样换机器或分享配置时不会泄露 Key。
如果你需要长期跑编码 Agent 或自动化任务,可以了解 TaoToken 的 Coding Plan,地址是https://taotoken.net/coding-plan。它适合需要稳定云端模型入口的开发者,和本地 Ollama 形成互补。
最后提醒:Ollama 不会自动开机启动,每次重启 Mac 后确认菜单栏有羊驼图标,或brew services start ollama。OpenClaw gateway 用openclaw gateway status确认RPC probe: ok。这两步做完,本地和云端入口就都稳了。