1. OpenClaw 对接 Ollama 本地模型时 endpoint 到底该填什么
OpenClaw 是一个跑在终端里的本地 AI Agent 框架,能读文件、执行命令、调用工具,适合把代码审查、批量重构、项目问答这类活儿交给它自动跑。Ollama 则是本地模型运行时,一条ollama pull就能把模型拉到本机,通过http://localhost:11434暴露 OpenAI 兼容接口。很多人第一次把这两个东西拼起来,卡住的地方不是安装,而是 endpoint 那一栏:到底填http://localhost:11434/v1,还是填http://localhost:11434/api/generate,还是干脆填一个远端地址?
这篇就聚焦这个环节。场景很明确:你本机已经跑着 Ollama,ollama list能看到模型,现在想让 OpenClaw 统一走 TaoToken 的 API 通道去调用,而不是把请求散落在各个本地端口上。我会给出可直接复制的 endpoint 与 Key 配置片段,再附一次对话请求的验证动作,确认整条调用链路是通的。
先说结论,省得你来回翻:OpenClaw 的模型接入走的是 OpenAI 兼容协议,所以 Base URL 要填到/v1这一层,而不是 Ollama 原生的/api/generate。如果你把/api/generate填进去,OpenClaw 发出去的chat/completions请求会直接 404。这个坑我见过太多次,报错信息还特别含糊,只说 provider 验证失败,不告诉你路径错了。
那为什么还要绕 TaoToken 一层?因为本地 Ollama 的模型能力有限,遇到复杂重构或者长上下文审查,本地小模型经常答非所问。把 endpoint 指到 TaoToken 之后,你可以在同一个 OpenClaw 配置里,既保留本地模型做快速草稿,又能切到云端更强的模型做深度分析,Key 和 Base URL 统一管理,不用在多个配置文件之间来回改。下面从环境确认开始,一步步把配置落地。
2. TaoToken 前置准备:Key、Base URL 与模型 ID 三件套
在动 OpenClaw 配置之前,先把 TaoToken 这边的三样东西备齐。任何 OpenAI 兼容客户端接入,本质上都是这三件套:Base URL、API Key、Model ID。缺一个都跑不起来,而且报错各不相同,提前确认能省掉一半排障时间。
Base URL 固定是https://taotoken.net/api,注意结尾不要带/v1,也不要带斜杠。有些客户端会自动补/v1,有些不会,OpenClaw 属于后者,所以你在配置里要自己把/v1拼上,最终填进去的是https://taotoken.net/api/v1。这一点和 Ollama 本地的http://localhost:11434/v1结构是一致的,切换的时候只换域名部分就行。
API Key 去控制台生成,地址是https://taotoken.net/console/api-keys。生成之后复制出来,形如sk-开头的一长串。这个 Key 只显示一次,建议直接存进密码管理器。填进 OpenClaw 的时候不要加引号以外的任何字符,前后空格是最常见的 401 来源。
Model ID 这块要看你打算用哪个模型。如果你只是想验证链路,随便挑一个便宜的对话模型即可;如果是长期做代码审查,建议选上下文长、代码能力强的。Model ID 必须和 TaoToken 平台上列出的名称完全一致,大小写敏感,写错会返回model not found。三件套准备好之后,先别急着改 OpenClaw,用一条 curl 把 TaoToken 本身连通性验一下:
curl https://taotoken.net/api/v1/chat/completions \ -H "Authorization: Bearer sk-你的Key" \ -H "Content-Type: application/json" \ -d '{ "model": "你的ModelID", "messages": [{"role": "user", "content": "ping"}], "stream": false }'返回里带choices数组就说明 Key 和 Base URL 没问题,接下来所有问题都出在 OpenClaw 侧。如果这一步就 401,先检查 Key 有没有复制全;如果 404,检查 Base URL 是不是漏了/v1。这一步过了,再往下走。
3. 可复制配置:把 OpenClaw 的 endpoint 改到 TaoToken
OpenClaw 的配置集中在~/.openclaw/openclaw.json,Windows 下是C:\Users\你的用户名\.openclaw\openclaw.json。这个文件在首次 onboarding 时会自动生成,里面记录了 gateway、provider、model 等信息。我们要改的是 provider 部分,把原来指向http://127.0.0.1:11434/v1的本地地址换成 TaoToken。
先备份一份,改坏了能回滚:
cp ~/.openclaw/openclaw.json ~/.openclaw/openclaw.json.bak然后打开配置文件,找到providers这一段。如果你之前 onboarding 时选的是 Custom Provider 并填了 Ollama 地址,结构大概长这样:
{ "providers": { "custom-127-0-0-1-11434": { "type": "openai-compatible", "baseUrl": "http://127.0.0.1:11434/v1", "apiKey": "ollama", "models": ["glm-4.7-flash:latest"] } } }现在把它改成走 TaoToken。注意 provider 的 key 名字可以保留,也可以改成更好认的taotoken,但改名字的话,后面引用它的地方也要同步改,否则会报 provider not found。稳妥起见,我建议新增一个 provider,而不是直接覆盖本地那个,这样本地模型和云端模型可以共存:
{ "providers": { "custom-127-0-0-1-11434": { "type": "openai-compatible", "baseUrl": "http://127.0.0.1:11434/v1", "apiKey": "ollama", "models": ["glm-4.7-flash:latest"] }, "taotoken": { "type": "openai-compatible", "baseUrl": "https://taotoken.net/api/v1", "apiKey": "sk-你的Key", "models": ["你的ModelID"] } } }保存之后,还要告诉 OpenClaw 默认用哪个 provider。在配置里找到agents.main.model或者类似的默认模型字段,把它指向新 provider:
{ "agents": { "main": { "model": "taotoken/你的ModelID" } } }这里的写法是provider名/模型ID,中间用斜杠分隔。如果你把 provider 命名成别的,这里也要对应改。改完执行一次配置校验,OpenClaw 会检查 JSON 语法和字段合法性:
openclaw config get agents.main.model能正确回显你填的模型名,说明配置被读进去了。如果报 JSON 解析错误,多半是少了个逗号或者多了个尾逗号,用python -m json.tool ~/.openclaw/openclaw.json可以快速定位。
4. 验证请求:一次对话确认本地模型调用链路正常
配置改完不代表链路通,必须发一次真实请求。OpenClaw 提供了 TUI 和命令行两种方式,验证阶段用命令行更直接。先确认 gateway 在跑:
openclaw gateway status如果显示 not running,先启动:
openclaw gateway start然后发一条最简单的对话请求。OpenClaw 的 CLI 支持直接指定模型和 prompt:
openclaw run --model taotoken/你的ModelID "用一句话说明什么是幂等性"正常的话,几秒内会返回一段中文解释。如果返回内容正常,说明 OpenClaw → TaoToken → 模型这条链路是通的。这时候你再切回本地 Ollama 模型验证一下,确认两个 provider 都能用:
openclaw run --model custom-127-0-0-1-11434/glm-4.7-flash:latest "你好"两条都通,说明你的配置是双通道可用的。这一步很关键,因为很多人改完配置只测了云端,结果本地那条被覆盖了都不知道。
如果你更习惯用 Python 直接验证,也可以绕过 OpenClaw,直接打 TaoToken 的接口,确认返回结构里choices[0].message.content有内容:
import requests resp = requests.post( "https://taotoken.net/api/v1/chat/completions", headers={ "Authorization": "Bearer sk-你的Key", "Content-Type": "application/json", }, json={ "model": "你的ModelID", "messages": [{"role": "user", "content": "返回 JSON:{\"ok\": true}"}], "stream": False, }, timeout=60, ) data = resp.json() print(data["choices"][0]["message"]["content"])返回里能看到模型输出,就说明 endpoint、Key、Model ID 三件套全部正确。这一步过了,再回到 OpenClaw 里跑实际任务,比如代码审查,就不会在接入层浪费时间。
5. 本篇常见报错排查:401、local proxy failed 与 reading choices
接入过程中最常见的几类报错,我按出现频率排一下,每个都给出定位方法。
第一类是 401 Unauthorized。这个几乎都是 Key 的问题。先确认 Key 有没有复制完整,sk-后面那串是不是被截断了。然后检查配置文件里 Key 有没有多余空格或换行。OpenClaw 读取 JSON 时不会自动 trim,"sk-xxx "和"sk-xxx"是两个不同的值。用openclaw config get providers.taotoken.apiKey回显一下,肉眼比对。
第二类是local proxy failed或者connection refused。这个通常出现在你还想保留本地 Ollama 通道的时候。检查 Ollama 服务是不是在跑,ollama list能不能正常输出。如果 Ollama 没启动,OpenClaw 在初始化所有 provider 时可能会因为本地那个连不上而整体报错。解决办法是把不用的 provider 从配置里暂时移除,或者确保本地服务常驻。
第三类是reading choices相关的解析错误,报错信息里带cannot read property 'choices' of undefined或者unexpected token。这说明请求发出去了,但返回的不是标准 OpenAI 格式。最常见原因是 Base URL 填成了 Ollama 原生的/api/generate,那个接口返回的是{response: "..."},没有choices字段。把 Base URL 改回/v1结尾即可。另一个可能是 Model ID 写错,服务端返回了错误对象,客户端却按成功结构去解析。
第四类是 OAuth 或 token 过期相关的提示。TaoToken 用的是 API Key 模式,不涉及 OAuth 流程,如果你看到 OAuth 字样,多半是 OpenClaw 里某个内置 provider 的残留配置在干扰。检查配置文件里有没有type: "oauth"的 provider,把它删掉或者改成openai-compatible。
第五类是模型返回空内容。请求成功、choices也在,但content是空字符串。这种情况一般是 prompt 触发了模型的拒答,或者 max_tokens 设得太小。在 OpenClaw 里可以临时调大输出长度再试。
排查顺序建议固定下来:先 curl 直连 TaoToken,确认服务端没问题;再openclaw config get确认配置读对了;最后看 gateway 日志。日志路径在~/.openclaw/logs/下,tail -f跟着看,请求和响应都会打出来,比猜快得多。
6. 长期编码与 Agent 场景:把 TaoToken 通道用稳
链路通了之后,真正决定体验的是怎么把这个通道用稳。如果你只是偶尔跑一次对话,那随便配配就行;但如果是拿 OpenClaw 做长期的代码审查、批量重构或者项目问答,有几个点值得提前设置。
首先是模型选择。本地 Ollama 适合做快速草稿和隐私敏感的任务,TaoToken 通道适合做深度分析和长上下文任务。你可以在 OpenClaw 里配置多个 agent,每个 agent 绑定不同的 provider,用的时候按需切换。比如agents.review绑 TaoToken 的强模型,agents.draft绑本地模型,这样既省成本又不牺牲质量。
其次是超时和重试。云端请求偶尔会有网络抖动,OpenClaw 默认超时可能偏短。在 provider 配置里可以加timeout字段,单位毫秒,建议设到 120000 以上,尤其是跑长文本审查的时候。重试次数也可以配,但不要设太高,避免失败请求堆积。
第三是 Key 的管理。不要把 Key 硬编码在会提交到 git 的配置文件里。OpenClaw 支持从环境变量读取,你可以把 Key 放到~/.openclaw/.env或者系统环境变量里,配置文件里写"apiKey": "${TAOTOKEN_API_KEY}",这样配置可以安全地分享和备份。
第四是成本控制。TaoToken 通道按量计费,跑批量任务前先估算一下 token 消耗。OpenClaw 的日志里会记录每次请求的 prompt 和 completion token 数,跑几次之后你就有数了。对于重复性高的任务,可以考虑把结果缓存下来,避免重复调用。
最后,如果你打算把 OpenClaw 接入 CI 或者定时任务,建议单独建一个 agent,绑定固定的 provider 和模型,配置写死在独立的配置文件里,用openclaw run --config指定。这样主配置怎么改都不影响自动化流程。整套配下来,你就有了一条从本地到云端、可切换、可观测的模型调用链路,OpenClaw 的 endpoint 配置这件事,到这里就算彻底落地了。