ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

Windows 环境下 OpenClaw 接入 Ollama 本地模型实践:TaoToken 统一 Key 打通 qwen2.5 调用链

Windows 环境下 OpenClaw 接入 Ollama 本地模型实践:TaoToken 统一 Key 打通 qwen2.5 调用链 1. Windows 下 OpenClaw 接 Ollama 本地模型为什么还要 TaoToken 统一 Key先说清楚这套组合到底解决什么问题。OpenClaw 是一个跑在 Docker 里的 AI 网关/Agent 框架Ollama 是本地模型运行时qwen2.5 是你要跑的具体模型。三者拼起来目标就是在 Windows 上不依赖任何外部网络让 OpenClaw 通过一个统一的 Key 和 API 通道调用本机 Ollama 里的 qwen2.5。那 TaoToken 在这里扮演什么角色很多人第一反应是本地模型不是直接连 11434 就行了吗为什么还要中间加一层。我一开始也这么想直到遇到几个现实问题第一OpenClaw 的 provider 配置是按 OpenAI 兼容协议设计的它期望一个标准的/v1/chat/completions端点和一个 Bearer Key。Ollama 原生接口是/api/chat字段格式不一样直接填进去会报reading choices之类的解析错误。第二你可能有多个模型来源——本地 qwen2.5、云端备用模型、团队共享的模型池。如果每个都单独配一套 Key 和 Base URLOpenClaw 的配置文件会变成一团乱麻切换模型要改好几处。第三TaoToken 提供的是统一 Key 统一 API 通道你可以在它的控制台里把本地 Ollama 作为一个上游挂进去也可以把云端模型挂进去OpenClaw 只认一个 Base URL 和一个 Key。这样本地验证和云端开发用的是同一套接入代码切换只改 Model ID。所以这套架构实际是三层OpenClaw (Docker) → TaoToken 统一 API 通道 (Base URL Key) → Ollama 本地运行时 (host.docker.internal:11434) → qwen2.5:7b适合谁适合在 Windows 上做私有化验证、断网测试、或者想把本地模型和云端模型统一管理的开发者。如果你只是临时跑一句ollama run那不需要这么麻烦但如果你要让 OpenClaw 这类 Agent 框架稳定调用本地模型统一通道能省掉大量排障时间。下面按实际部署顺序走一遍每一步都给可复制的命令和配置。2. TaoToken 前置准备Key、Base URL 与 Ollama 上游配置在动 OpenClaw 之前先把 TaoToken 这一层准备好。这一步的核心是拿到两个东西API Key和Base URL然后在 TaoToken 控制台里确认 Ollama 已经作为上游可用。2.1 获取 API Key打开 TaoToken 控制台进入 API Keys 页面创建一个新 Key。建议命名带上用途比如openclaw-local-qwen方便后面区分本地验证和云端调用的 Key。创建后复制这串 Key格式通常是sk-开头的一长串。只显示一次先贴到记事本里备用。控制台入口https://taotoken.net/console?utm_sourcetaotoken_aicg_blog_endutm_contentconsoleutm_campaignrewriteAPI Keys 页面https://taotoken.net/api-keys?utm_sourcetaotoken_aicg_blog_endutm_contentapi-keysutm_campaignrewrite2.2 确认 Base URLTaoToken 的 API 根地址是https://taotoken.net/api注意这里不带UTM 参数也不带/v1。OpenClaw 或任何 OpenAI 兼容客户端会自动在末尾拼/v1/chat/completions。如果你手动填了/v1会出现双/v1/v1的路径错误报 404。2.3 在 TaoToken 里挂 Ollama 上游这一步是关键。TaoToken 支持把自定义上游接入统一通道。你需要在控制台的上游/模型管理里添加一个指向本机 Ollama 的上游上游类型OpenAI 兼容 或 自定义上游地址http://host.docker.internal:11434如果你是从 Docker 里的服务访问宿主机 Ollama模型 IDqwen2.5:7b这里有个容易踩的坑TaoToken 服务本身如果跑在云端它是访问不到你本机 11434 的。所以有两种正确姿势姿势 ATaoToken 只做 Key 管理OpenClaw 直连本地 Ollama这种模式下TaoToken 提供统一 Key 用于云端模型本地 Ollama 由 OpenClaw 单独配一个 provider。适合本地和云端分开管理的场景。姿势 BTaoToken 本地网关模式如果你在 Windows 本机也跑一个 TaoToken 的本地转发层那它就能访问host.docker.internal:11434OpenClaw 只连本地 TaoToken 网关网关再分流到 Ollama 或云端。这是真正的统一 Key 打通调用链。本文按姿势 B展开因为标题说的就是统一 Key 打通 qwen2.5 调用链。如果你只想快速验证姿势 A 也能跑通把下面配置里的 Base URL 换成http://host.docker.internal:11434即可但那样就没有统一 Key 的意义了。2.4 确认 Ollama 在 Windows 上已就绪在 PowerShell 里执行ollama pull qwen2.5:7b ollama run qwen2.5:7b 用一句话介绍你自己如果能看到中文回复说明 Ollama 本体没问题。接着确认它监听的地址netstat -ano | findstr 11434正常应该看到0.0.0.0:11434或127.0.0.1:11434。如果是127.0.0.1Docker 容器通过host.docker.internal可能连不上需要设置环境变量让 Ollama 监听所有网卡setx OLLAMA_HOST 0.0.0.0:11434设置后重启 Ollama 服务。这一步不做后面 Docker 里 curl 会一直超时。3. 可复制配置OpenClaw 的 JSON 与 Docker 端口映射这一节给完整可复制的配置片段。路径按 OpenClaw 默认的 compose 目录结构来你如果改过目录名对应替换即可。3.1 Docker 端口映射检查清单OpenClaw 的docker-compose.yml里gateway 服务需要暴露 18789 端口同时要能访问宿主机。检查这几项services: openclaw-gateway: image: openclaw/gateway:latest ports: - 18789:18789 extra_hosts: - host.docker.internal:host-gateway environment: - NODE_ENVproductionextra_hosts这行在 Windows Docker Desktop 上通常自动生效但显式写上更稳。Linux 上必须写Windows 上写了也不冲突。检查清单检查项期望值不满足时的现象18789 端口映射0.0.0.0:18789-18789/tcp浏览器打不开 localhost:18789host.docker.internal 解析能 ping 通curl 报 could not resolve hostOllama 监听地址0.0.0.0:11434Docker 内 curl 超时容器网络模式bridge默认用 host 模式时 host.docker.internal 失效验证 Docker 能否访问 Ollamadocker run --rm curlimages/curl:latest curl -s http://host.docker.internal:11434/api/tags返回 JSON 且包含qwen2.5:7b就说明网络通了。这一步不通后面全白搭。3.2 OpenClaw 的 openclaw.json 配置在 OpenClaw 的配置目录里找到openclaw.json通常在~/.openclaw/或 compose 挂载的 config 卷里。核心配置如下{ agents: { defaults: { model: { primary: taotoken/qwen2.5:7b }, models: [ { id: taotoken/qwen2.5:7b, provider: taotoken, baseUrl: https://taotoken.net/api, apiKey: sk-你的TaoTokenKey, modelId: qwen2.5:7b } ] } }, providers: { taotoken: { type: openai-compatible, baseUrl: https://taotoken.net/api, apiKey: sk-你的TaoTokenKey } } }三个关键字段必须对齐baseUrlhttps://taotoken.net/api不带/v1apiKeyTaoToken 控制台创建的 KeymodelIdqwen2.5:7b必须和 Ollama 里的模型名完全一致如果你走的是本地 TaoToken 网关模式baseUrl换成http://host.docker.internal:你的网关端口其余不变。3.3 用命令行写入配置不想手改 JSON 的话OpenClaw 提供了 onboard 和 config 命令。在 compose 目录执行docker compose run --rm --entrypoint node openclaw-gateway dist/index.js onboard \ --non-interactive \ --mode local \ --no-install-daemon \ --skip-health \ --accept-risk \ --auth-choice openai-compatible \ --custom-base-url https://taotoken.net/api \ --custom-model-id qwen2.5:7b然后设置默认模型docker compose run --rm --entrypoint node openclaw-gateway dist/index.js config set agents.defaults.model.primary taotoken/qwen2.5:7b重启 gatewaydocker compose restart openclaw-gateway3.4 模型白名单不能漏这是最容易忽略的一步。primary设了不代表 UI 下拉里会出现。必须在agents.defaults.models数组里显式登记否则模型选择器不渲染这个模型。上面 3.2 的 JSON 里已经包含models数组如果你只改了primary没加models界面会显示空白或只有默认模型。4. 验证请求一次对话的完整动作与预期返回配置写完重启完接下来做端到端验证。分三步命令行验证、UI 验证、断网验证。4.1 命令行直接打 TaoToken 通道先用 curl 确认 TaoToken 这一层通不通curl -s https://taotoken.net/api/v1/chat/completions \ -H Authorization: Bearer sk-你的TaoTokenKey \ -H Content-Type: application/json \ -d { model: qwen2.5:7b, messages: [{role: user, content: 用一句话介绍你自己}], stream: false }预期返回是一个标准 OpenAI 格式的 JSON包含choices[0].message.content字段内容是 qwen2.5 的中文回复。如果返回401是 Key 问题返回404是路径问题多半多写了/v1返回reading choices相关错误是上游返回格式不对检查 Ollama 上游配置。4.2 从 Docker 容器内验证docker compose run --rm --entrypoint node openclaw-gateway dist/index.js config get agents.defaults.model.primary应该输出taotoken/qwen2.5:7b。再跑一次实际请求docker compose run --rm --entrypoint node openclaw-gateway dist/index.js chat --message 你好测试本地模型预期看到流式或非流式的回复日志里出现providertaotoken和modelIdqwen2.5:7b。4.3 UI 验证浏览器打开http://localhost:18789新建一个 Chat在模型下拉里选qwen2.5:7b发一句中文。预期回复是中文日志里provider字段是taotoken或你配的 provider 名任务管理器里 Ollama 进程有 CPU/GPU 负载4.4 断网验证关键一步把 WiFi 关掉但不要关 Docker。再发一句。如果还能正常回复说明请求确实走的是本地 Ollama没有偷偷走云端。如果断网后报错说明配置里还有 fallback 指向云端或者模型实际没走本地。这一步是区分看起来像本地和真的走本地的唯一可靠方法。5. 本篇常见错排查401、local proxy failed、reading choices、OAuth这一节按真实报错对照排查。每个错误给现象、原因、修复。5.1 401 Unauthorized现象curl 或 OpenClaw 返回401body 里带invalid api key。原因Key 写错、Key 过期、或者 Key 前后有空格。从控制台复制时容易带上换行。修复重新复制 Key确认Authorization: Bearer sk-xxx里 Bearer 后面只有一个空格。在 OpenClaw 配置里检查apiKey字段没有多余引号嵌套。5.2 local proxy failed现象OpenClaw 日志出现local proxy failed或ECONNREFUSED。原因Docker 容器访问不到host.docker.internal:11434。常见于 Ollama 只监听 127.0.0.1或者 Docker 网络模式不对。修复setx OLLAMA_HOST 0.0.0.0:11434重启 Ollama再用 4.1 的 curl 从容器内测。如果还不行检查docker-compose.yml里有没有extra_hosts。5.3 reading choices 报错现象日志里出现Cannot read properties of undefined (reading choices)。原因上游返回的不是 OpenAI 格式。Ollama 原生/api/chat返回的是{message: {...}}没有choices数组。说明请求打到了 Ollama 原生接口而不是经过 TaoToken 的 OpenAI 兼容层。修复确认baseUrl是https://taotoken.net/api不是http://host.docker.internal:11434。如果确实要直连 Ollama需要用支持 Ollama 原生协议的 provider 类型而不是openai-compatible。5.4 OAuth 相关报错现象出现OAuth token expired或refresh token failed。原因OpenClaw 某些版本默认走 OAuth 登录流程如果你用的是 API Key 模式OAuth 相关配置是多余的可能干扰。修复在 onboard 时加--auth-choice openai-compatible跳过 OAuth。检查openclaw.json里没有残留的oauth字段。5.5 模型下拉不显示现象primary已设为taotoken/qwen2.5:7bUI 下拉里没有。原因agents.defaults.models白名单没登记。修复按 3.2 的 JSON把模型对象加进models数组重启 gateway。5.6 回复变英文、web_search 报错现象qwen2.5 回复英文或者日志里web_search工具调用失败。原因7B 模型默认tools.profile是coding容易乱调工具。修复改成messagingdocker compose run --rm --entrypoint node openclaw-gateway dist/index.js config set agents.defaults.tools.profile messaging现阶段只聊天的话这个改动能明显减少工具误调用。5.7 界面像本地日志还在云端现象UI 显示本地模型但日志里 provider 还是云端。原因旧会话绑定了老模型或者配了 fallback。修复New Chat清掉 fallback 配置重启 gateway。日志里稳定出现providertaotoken或providerollama才算对。6. 统一 Key 打通后的下一步从验证到长期编码走到这里你应该已经能在 Windows 上让 OpenClaw 通过 TaoToken 统一 Key 调用本地 qwen2.5 了。回顾一下这条链路的关键点统一 Key 的价值不在于省一个 Key而在于接入代码只写一次。OpenClaw 里配的baseUrl和apiKey是固定的换模型只改modelId。今天跑 qwen2.5:7b明天想试 qwen2.5:14b或者切到云端模型做对比都不用动 provider 配置。如果你后面要把这套用于长期编码或 Agent 任务建议把模型来源在 TaoToken 控制台里分组管理本地 Ollama 一组云端模型一组OpenClaw 通过不同的 Model ID 前缀区分。这样日志里一眼能看出请求走了哪条路。验证模型对话效果可以直接在模型对话页测试https://taotoken.net/models?utm_sourcetaotoken_aicg_blog_endutm_contentmodelsutm_campaignrewrite如果你打算把 OpenClaw 用于日常编码、跑 Agent 任务Coding Plan 的额度模型更适合长期使用https://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_contentcoding-planutm_campaignrewrite接入文档里有完整的 provider 配置说明和错误码对照https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_contentdocutm_campaignrewrite最后记一个实用技巧每次改完openclaw.json先跑config get确认值写进去了再重启 gateway。直接重启不看配置出问题时你分不清是配置没生效还是服务没起来。7B 做复杂 Agent 确实一般后面接 RAG 做文档问答是更实际的方向先把这条本地调用链跑稳再往上叠。
返回列表