1. 为什么我要折腾 openclaw + ollama 本地模型
openclaw 这类编码 Agent 一旦跑起来,token 消耗速度会超出多数人的预期。我自己的体感是:一个中等复杂度的重构任务,来回几轮对话加上工具调用,几十万 token 就没了。如果全部走云端大模型,账单会很难看。所以「本地模型 + 统一通道」这个组合,对想低成本长期养 openclaw 的开发者来说,几乎是必经之路。
ollama 负责在本地把模型跑起来,openclaw 负责把 Agent 的活干完,中间缺的是一层稳定的统一通道——让 openclaw 不用关心后端到底是本地 ollama 还是远端模型,只认一个 Key、一个 Base URL。TaoToken 在这里扮演的就是这个统一入口:你可以在一个控制台里管理 Key、切换模型、查看调用情况,openclaw 侧只改一处配置就能对接。
这篇面向的是「想低成本养虾」的开发者,也就是愿意花半小时把本地模型接进 openclaw、之后长期省 token 的人。我会给出可复制的 config.toml 与 settings.json 骨架、ollama 本地模型声明片段,以及连通性验证和常见报错排查。目标很明确:一次配置跑通本地模型调用,让 openclaw 真正用上 ollama。
需要提前说明的是,本地模型的能力和云端旗舰模型有差距,适合做代码补全、简单重构、日志分析、批量文本处理这类任务;复杂架构设计仍然建议走云端。把两者通过统一通道混用,才是性价比最高的姿势。
2. TaoToken 统一通道的前置准备
在动 openclaw 配置之前,先把通道这层理顺。TaoToken 的核心价值是「一个 Key 打通多种模型来源」,openclaw 只需要认一个 OpenAI 兼容的 Base URL,就能在本地 ollama 和远端模型之间切换,不用为每个后端单独写适配。
第一步是拿到 API Key。进入控制台后创建 Key,建议按用途分 Key,比如给 openclaw 单独建一个,方便后续排查和限额。创建入口在控制台的 API Keys 页面,地址是 https://taotoken.net/api-keys?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite 。Key 只在创建时完整显示一次,复制后妥善保存。
第二步是确认接入方式。TaoToken 的 API 端点是 https://taotoken.net/api ,兼容 OpenAI 的 chat/completions 协议。openclaw 侧配置时,Base URL 填这个地址即可,不需要额外加路径后缀(具体以接入文档为准)。接入文档在 https://taotoken.net/doc?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite ,里面有各语言的调用示例,配置前扫一眼能少踩很多坑。
第三步是理解模型声明。TaoToken 侧需要知道你要调用哪个模型,本地 ollama 的模型名(比如 llama3.2-vision、qwen2.5-coder)要按通道支持的命名方式声明。如果你不确定某个本地模型名该怎么写,可以先用模型对话页面手动发一条请求验证,页面地址是 https://taotoken.net/chat?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite 。能正常返回,说明模型名和通道都对,再往 openclaw 里写。
注意:本地 ollama 默认监听 127.0.0.1:11434,如果 openclaw 跑在 Docker 里,容器内的 127.0.0.1 指向容器自身,需要改成宿主机的可达地址,或者让两者在同一网络下。这是后面报错排查里最常见的一类问题。
3. 可复制的 openclaw 配置骨架
openclaw 的配置分两块:一块是 Agent 自身的 config.toml,一块是模型供应商的 settings.json。下面给的是骨架,字段名以你实际版本为准,重点是结构和关键值。
先看 config.toml。核心是把默认模型指向通过 TaoToken 暴露的本地模型,并设置好超时和重试,因为本地模型首 token 延迟通常比云端高。
# config.toml [model] # 默认使用的模型,名字要和 settings.json 里声明的 provider 对应 default = "ollama-local" # 请求超时,本地模型冷启动慢,建议给足 request_timeout = 300 # 流式输出,openclaw 交互体验依赖它 stream = true [model.retry] max_attempts = 3 backoff_seconds = 2 [agent] # 工具调用轮次上限,本地模型容易绕圈,适当限制 max_tool_rounds = 12再看 settings.json,这里声明 provider 和模型。关键点是 base_url 指向 TaoToken 的 API 地址,api_key 用你在控制台创建的 Key,models 数组里写本地 ollama 的模型名。
{ "providers": { "taotoken": { "type": "openai-compatible", "base_url": "https://taotoken.net/api", "api_key": "sk-你的TaoTokenKey", "models": [ { "id": "ollama-local", "name": "llama3.2-vision", "context_window": 32768, "max_output_tokens": 4096 } ] } }, "default_provider": "taotoken" }ollama 侧的模型声明片段,确认模型已经拉下来并处于可用状态:
# 拉取模型(示例用 llama3.2-vision,资源紧张可换更小的) ollama pull llama3.2-vision # 查看本地已有模型,确认名字 ollama list # 手动跑一次,确认模型本身能推理 ollama run llama3.2-vision "用一句话说明你是什么模型"如果你本地资源有限,可以选参数量更小的模型,比如 qwen2.5-coder:7b 或 llama3.2:3b,openclaw 的日常补全和简单重构够用。模型越大,首 token 越慢,Agent 交互的体感差距很明显。
提示:settings.json 里的
name字段要和 ollama list 输出的模型名一致,差一个字符都会导致通道侧找不到模型。改完配置后建议先别急着开 Agent,走下一步的连通性验证。
4. 连通性验证与成功结果
配置写完,先做两层验证:先验证 TaoToken 通道本身能通,再验证 openclaw 能通过通道调到本地模型。
第一层,用 curl 直接打通道,确认 Key 和模型名没问题:
curl https://taotoken.net/api/chat/completions \ -H "Authorization: Bearer sk-你的TaoTokenKey" \ -H "Content-Type: application/json" \ -d '{ "model": "llama3.2-vision", "messages": [{"role": "user", "content": "回复:通道连通"}], "stream": false }'如果返回里有正常的 choices 内容和 finish_reason,说明通道这层通了。如果返回 401,是 Key 问题;返回 404 或模型不存在,是模型名没对上;返回超时,多半是 ollama 没起来或者地址不可达。
第二层,启动 openclaw,在聊天页面直接问它用的是什么模型。这一步是原帖里提到的验证方式,很直观:
# 启动 openclaw(按你的实际启动方式) openclaw start # 或者用 docker 方式 docker compose up -d openclaw然后在 openclaw 的对话界面输入「你现在使用的是哪个模型?」,等待它回复类似「使用的是 ollama 上的 llama3.2-vision 模型」。能稳定回复,说明整条链路打通了。
实测下来,第一次调用会有明显的冷启动延迟,本地模型加载进显存需要几秒到几十秒不等。第二次开始就快了。如果你在 openclaw 里看到首轮响应特别慢但后续正常,这是预期行为,不用怀疑配置。
成功之后,你可以让 openclaw 跑一个真实的小任务验证,比如「读取当前目录下的 README.md,总结成三句话」。观察它是否能正常调用工具、读取文件、返回结果。这一步能同时验证模型能力和工具调用链路。
5. 本篇常见报错排查
配置过程中最容易卡住的几个点,我按出现频率排一下。
第一个是连接被拒绝,报错类似connection refused或dial tcp 127.0.0.1:11434。原因是 openclaw 在容器里,而 ollama 在宿主机。解决办法是让 ollama 监听所有网卡,或者把两者放进同一 Docker 网络。ollama 侧可以这样设置:
# Linux/macOS 临时生效 OLLAMA_HOST=0.0.0.0:11434 ollama serve # 确认监听地址 ss -tlnp | grep 11434然后在 settings.json 里把 ollama 地址换成宿主机可达 IP,而不是 127.0.0.1。
第二个是 401 未授权。检查 Key 是否复制完整、是否有多余空格、是否在控制台被禁用。建议重新创建一个 Key 测试,排除旧 Key 的问题。
第三个是模型找不到,报错里带model not found或does not exist。对照 ollama list 的输出,逐字符核对 settings.json 里的 name。注意有些模型带 tag,比如qwen2.5-coder:7b,冒号后面的部分不能省。
第四个是超时。本地模型首 token 慢,如果 request_timeout 设得太小,会在模型还没出结果时就断开。把超时调到 300 秒以上,并确认机器内存/显存足够。如果显存不够,模型会退到 CPU 推理,速度会慢一个数量级,这时候换更小的模型比调参数更有效。
第五个是流式输出中断。openclaw 依赖流式返回,如果通道侧或 ollama 侧不支持流式,会出现回复到一半卡住。确认 settings.json 里 stream 为 true,且 ollama 版本较新。
注意:排查时建议一次只改一个变量,改完立刻用第 4 节的 curl 验证。同时改多处配置,出问题后很难定位是哪一处引起的。
6. 长期养虾的通道与 Key 管理
跑通之后,真正决定你能不能长期低成本养 openclaw 的,是 Key 和通道的管理方式。我的做法是:给 openclaw 单独一个 Key,本地模型和云端模型都通过同一个通道走,日常任务用本地模型,遇到复杂任务再切云端。这样既省 token,又不用维护两套配置。
如果你打算长期跑编码 Agent,可以关注 Coding Plan,地址是 https://taotoken.net/coding-plan?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite ,适合把 openclaw 这类工具作为日常开发助手的场景。Key 的创建和管理仍然在控制台 https://taotoken.net/api-keys?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite ,接入细节看文档 https://taotoken.net/doc?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite 。官网入口是 https://taotoken.net/?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite 。
最后分享一个我踩过的坑:本地模型在长上下文下容易「失忆」,openclaw 的多轮工具调用会把上下文撑得很大,导致模型开始胡言乱语。解决办法是限制 max_tool_rounds,并在 Agent 配置里开启上下文压缩。这个调整比换模型更能提升稳定性。配置改完,直接让 openclaw 跑一个真实任务验证,能稳定完成就说明这套本地模型方案可以长期用了。