给 OpenClaw 配好 TaoToken 通道后,Ollama 本地模型还能当 fallback
2026/9/18 22:50:49 网站建设 项目流程

OpenClaw 的 models.providers.ollama 指向本机 qwen2.5-coder:32b,agents.defaults.model.fallbacks 也留了它。去 TaoToken https://taotoken.net/?utm_source=taotoken_aicg_blog_end 创建一把 Key,就能给主通道换一条云端出口,Ollama 原封不动退回兜底。本地跑模型的好处是不出网、不占额度,代价是长上下文和连续 tool call 时掉速明显;云端通道补的恰恰就是这一段。两条路并存不是二选一——OpenClaw 只会在主模型这次请求失败时,按 fallbacks 数组的顺序往下找,断网、限流、上游模型临时不可用时都还有活路。

这篇不打算重讲 OpenClaw 装什么版本、Ollama 怎么拉模型,那些内容原文里已经写过一遍。这里只处理一件事:在已经写好的 models.providers.ollama 配置旁边,新增一条 provider,把 agents.defaults.model.primary 从 ollama/qwen2.5-coder:32b 挪到云端模型上,fallbacks 数组保持原样不动。改完之后本地模型照样能被调用,工具调用的链路也不用重搭,只是在主模型接不住的时候才会轮到它。下面从配置结构拆起,再到验证方法、常见报错,最后收在下一步该看哪个页面。

1. models.providers.ollama 这条配置在 OpenClaw 里到底做了什么

1.1 provider 的 key 就是后面引用的名字

OpenClaw 的配置里,models.providers 是个对象,对象里的每个 key 就是一个 provider 名。原来那条 ollama 之所以能在别处被引用成 ollama/qwen2.5-coder:32b,靠的就是「provider 名 + 斜杠 + 模型 id」这套写法。provider 名不一定非得叫 ollama,你写成 local 也完全可以,但一旦改名,agents.defaults.model 里所有引用它的地方都得跟着换,漏掉一处启动时就会提示找不到模型。

字段的分工大致是这样:baseUrl 指服务地址,api 指上游用哪套协议,apiKey 是鉴权串,models 数组列出这个 provider 下具体能被引用的条目。本地服务通常不校验 Key,写个占位字符串也能过;云端通道就完全相反,Key 错一位就是 401。

1.2 本地 Ollama 的 baseUrl 和 api 字段写法

本地 Ollama 暴露的 OpenAI 兼容入口一般是 http://127.0.0.1:11434/v1,注意这里有 /v1。api 字段决定 OpenClaw 用哪套请求体去调它,开源模型走 openai-completions 这套最稳。很多人配完之后会把这条习惯顺手带到云端通道上,结果请求打出去直接 404,后面第 5 节会专门讲这个。

还有个小地方值得提醒:models 数组里的 id 必须和 Ollama 端真实拉的模型标签完全一致。qwen2.5-coder:32b 和 qwen2.5-coder:32b-instruct 在 Ollama 里是两个不同的标签,写错了本地服务会回 404,OpenClaw 那边看到的却是「模型不可用」,容易误判成配置没生效。

1.3 工具调用在本地模型上能走到哪一步

qwen2.5-coder 系列本身支持 function calling。OpenClaw 会把工具的 JSON Schema 一起下发给模型,模型返回 tool_calls 结构,OpenClaw 负责执行,再把执行结果塞回对话继续下一轮。协议这条链路,本地和云端走的是一模一样的流程,差别在模型扛不扛得住。

32B 这一档,单轮工具调用基本没问题;一轮里连着调五六次、每次还带着几个文件的内容,上下文很快顶到窗口上限。表现出来不是报错,而是生成质量往下掉:前面读过的文件内容记混、参数拼错、回答忽然变短。这也是为什么值得再挂一条云端 provider,而不是把本地那条删掉。本地模型的价值在于「随时能用」,云端通道的价值在于「扛得住大活」,两件事本来就不冲突。

2. 在 models.providers 里新增一条 TaoToken 配置

2.1 先去把 YOUR_API_KEY 拿到

打开 TaoToken,注册登录之后进控制台,在 API Keys 页面创建一把新 Key。创建完立刻复制走,页面刷新之后不保证还能看全。这把 Key 后面要填进 openclaw.json 的 apiKey 字段。别把它提交进 Git 仓库,也不要在聊天记录里贴出来;如果 OpenClaw 当前版本支持从环境变量取,用环境变量引用更安全。

顺手在同一个站点上看一眼模型广场,把准备用的模型 id 记下来。模型 id 以 https://taotoken.net/?utm_source=taotoken_aicg_blog_end 上当时列出的为准,不要凭印象拼后缀。

2.2 在 providers 下加一段和 ollama 平级的配置

在 models.providers 里,跟 ollama 平级地加一个新 key,名字按自己习惯起,这里叫 taotoken。baseUrl 填 https://taotoken.net/api,末尾不要带 /v1,这是它和本地 Ollama 那条最容易搞混的地方。api 字段保持 openai-completions,apiKey 填 YOUR_API_KEY,models 数组里写一个模型条目。

{ "taotoken": { "baseUrl": "https://taotoken.net/api", "api": "openai-completions", "apiKey": "YOUR_API_KEY", "models": [ { "id": "YOUR_MODEL_ID", "name": "TaoToken Cloud", "toolCall": true } ] } }

这段是嵌在 models.providers 对象里的子结构,不是独立文件。写的时候别把它放到 models 外面去,否则 OpenClaw 读配置时会直接忽略这一段,表现就是「配了但一直没生效」。

2.3 模型 id 不要自己拼后缀

模型 id 这个字段特别容易翻车。有的同学看到别人写 gpt-4o-mini 就跟着写,但其实模型广场上列出的名字可能完全不一样。更忌讳的是自己加 -latest、-preview、日期后缀这类尾巴。写错的表现不一定是显式报错,有些通道会把不存在的模型名当成空响应返回,最后你在 OpenClaw 里看到的是「答非所问」或者界面一直转圈,排查半天才发现是 id 写错了。

还有一个细节:models 数组里 name 字段只是展示名,随便写不影响调用;id 字段才是真正发给上游的值,一个字都不能错。id 和 name 分清楚,能省掉很多来回试错的时间。

3. primary 指向 TaoToken,ollama 留在 fallbacks

3.1 agents.defaults.model 的结构

agents.defaults.model 下面一般有两三个位置:primary 是主模型,fallbacks 是一个数组,按顺序列出备选,另外可能还有给轻量任务用的小模型位。切换主通道,本质上就是改 primary 这一个字符串;fallbacks 那一行不用动,因为它引用的是 provider 名加模型 id,跟你新加的 provider 没关系。

有两种常见组合。想要「云端优先、本地兜底」,primary 写 taotoken/YOUR_MODEL_ID,fallbacks 里保留 ollama/qwen2.5-coder:32b。想要「本地优先、云端备用」,就是把这两个位置对调。第二种更适合网络不稳、或者想省额度的场景,但主通道的体验会回到本地模型那档。这篇按第一种走。

3.2 fallbacks 是顺序列表,不是负载均衡

这一点要讲清楚,否则容易期待错。OpenClaw 不是在两个模型之间平均分配请求,也不会因为主模型「慢」就提前切过去。它只有在主模型这次请求失败、或者被明确标记为不可用时,才会按 fallbacks 的顺序往下找。所以 fallbacks 里写两三个模型,实际意义是「第一备胎、第二备胎」,不是「三个一起用」。

明白这个语义之后,配置取舍就清楚了:本地模型只有在云端那条真出错的时候才会被叫起来,日常的绝大多数请求都会走 primary。如果你希望本地模型承担更多活,那就把本地放到 primary,把云端放到 fallbacks,别指望它俩同时干活。

3.3 合并后的完整配置参考

把上面几段拼起来,整个 openclaw.json 的相关部分长这样。字段名以你本地 OpenClaw 版本的 schema 为准,结构是对的,直接照着改:

{ "models": { "providers": { "ollama": { "baseUrl": "http://127.0.0.1:11434/v1", "api": "openai-completions", "apiKey": "ollama", "models": [ { "id": "qwen2.5-coder:32b", "name": "Qwen2.5 Coder 32B (local)", "toolCall": true } ] }, "taotoken": { "baseUrl": "https://taotoken.net/api", "api": "openai-completions", "apiKey": "YOUR_API_KEY", "models": [ { "id": "YOUR_MODEL_ID", "name": "TaoToken Cloud", "toolCall": true } ] } } }, "agents": { "defaults": { "model": { "primary": "taotoken/YOUR_MODEL_ID", "fallbacks": [ "ollama/qwen2.5-coder:32b" ] } } } }

保存之后重启 OpenClaw。只改配置文件不重启,进程里还是旧的那份配置,很容易以为改动没生效。

3.4 toolCall 这一位别顺手删掉

toolCall 这个标记是告诉 OpenClaw:这个模型能接住下发的工具 schema。删掉之后不是不能聊天,而是工具调用会被整体跳过,表现出来就像「模型忽然变笨了」——该读文件的步骤不读,该执行的函数不调,回答全靠猜。如果新换的云端模型本身不支持 function calling,那这一位就该老实写 false,或者干脆别把需要工具的 Agent 挂到它上面。

4. 改完配置后,怎么确认 fallback 真能接上

4.1 先确认主通道是通的

重启之后随便发一句需要它读本地文件的话,看 OpenClaw 的日志里这次请求落到哪个 provider。能正常读到文件、正常回答,说明 primary 那条通了。接着去 TaoToken 模型对话 用同一把 Key 发一条测试消息,两边的反应如果一致,说明 Key、Base URL、模型 id 这三样都没填错。这一步花不了一分钟,但能省掉后面大量「到底哪个环节出问题」的猜测。

4.2 故意把 Key 改错一次,看它掉不掉

想验证 fallback 是否真的生效,别去拔网线,最容易的方式是临时把 apiKey 改成 YOUR_API_KEY_INVALID,保存、重启,再发一条请求。如果日志里第一次请求失败、紧接着第二次落到 ollama,那就说明 fallbacks 配对了。验证完记得改回来,再发一次确认主通道恢复。

要注意,这一步只影响配置里那一处,不会动到你在 TaoToken 上的 Key 本身。改错一次的成本很低,比事后线上真的遇到限流才发现 fallback 没配好要划算得多。

4.3 回控制台核对这次调用

拿 https://taotoken.net/?utm_source=taotoken_aicg_blog_end 登录后进控制台,翻一下用量记录,看刚才那几次正常请求有没有被计上。故意写错 Key 的那一次不会记账,这是正常的,别因此以为 Key 有问题。如果你同时在跑好几个 Agent,用量页还能帮你判断到底是哪个 Agent 在消耗通道——这种信息比在本地日志里翻半天靠谱。

5. 排障对照:401、404 和 fallback 不触发

5.1 401:Key 没被读到

最常见的三种原因:apiKey 前后带了空格(从网页复制时特别容易带上换行);改完文件没重启 OpenClaw;Key 在控制台里被删除或轮换了。判断方法很直接,把同一把 Key 拿到模型对话页发一条消息。那边也 401,问题在 Key 本身;那边正常,问题就在本地配置。

5.2 404:baseUrl 多写了 /v1

填云端通道的地址时,写完 https://taotoken.net/api 就停手,不要在末尾再补 /v1。本地 Ollama 那条是需要 /v1 的,两条地址长得像但规则相反,复制粘贴的时候特别容易带错。看到 404 先去看这一条,比翻半天日志快。

5.3 fallback 不触发:provider 名对不上

fallbacks 数组里写的是 ollama/qwen2.5-coder:32b。这里斜杠前面那一段必须和 models.providers 里的 key 完全一致。如果你把 provider 改名成了 local,但引用还写着 ollama,OpenClaw 找不到这个 provider,整条 fallback 就等于没写。改完 provider 名之后,全局搜一遍旧名字,别漏。

另外一种情况是模型 id 写错:provider 名对了,但 id 拼错,也会导致引用解析不到。这时候日志里通常会提示模型未找到,翻一下就知道。

5.4 工具调用被跳过

如果对话正常,但模型该调工具的时候不调,先检查 toolCall 是不是被误删。确认没问题的话,再看模型本身——不是所有模型都支持 function calling,把不支持工具调用的模型放到需要工具的 Agent 上,会得到「回答看起来挺对但什么都没做」的效果。遇到这种情况,换一个支持工具调用的模型 id 再试。

6. 跑通之后,下一步去哪里

配置改完、主通道和 fallback 都验证过一轮之后,建议先去 TaoToken 模型对话 用同一把 Key 发条测试消息,确认模型 id 和 Base URL 对得上,这一步能排掉大部分「配置看起来没问题但请求打不通」的情况。如果打算把 OpenClaw 当日常主力写代码,可以看看 Coding Plan 的套餐是否够用;Key 随时能在 控制台 API Keys 里重建或轮换。想顺带把命令行里的 Claude Code 也接到同一条通道上,环境变量怎么写见 Claude Code 接入文档。

最后提一句容易忽略的事:本地那条 ollama provider 不要因为有了云端通道就删掉。它的存在不是冗余,而是断网、上游抖动、额度临时不够时的退路。OpenClaw 的 fallbacks 机制本来就是为这种场景准备的,配好之后你可以很久不去看它,但它一直在那儿。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询