Docker 里跑着 OpenClaw,你想让它连本地 Ollama,结果卡在 Connection Error 上——这是很多人的第一道坎。其实还有另一条路:在 OpenClaw 旁边加一路统一 API 通道 TaoToken。打开官网 https://taotoken.net/?utm_source=taotoken_aicg_blog_end 先拿到 API Key,再花三分钟把 Provider 配上,就能绕开 host.docker.internal 和 172.17.0.1 的地址之争,也能避开 OLLAMA_NUM_CTX 调不出来的静默截断。下面这套配置步骤仍然保留本地 Ollama 作为离线对照,只是多一个更稳的选择。对于已经部署好 OpenClaw 的人来说,接入成本其实很低:不用重构 Docker Compose,不用改 Ollama 容器,只需要在模型提供商列表里新增一项。对于还没部署的人来说,这套流程也能让你先跑通云上模型,再决定要不要折腾本地推理。

1. Docker 里的 OpenClaw 连 Ollama,卡点不在模型,在网络

1.1 host.docker.internal、172.17.0.1,三个地址选错一个就连不上

Docker 容器之间的通信没有“默认通”这回事。Ollama 在容器里监听 11434 端口,OpenClaw 在另一个容器里,它访问 Ollama 时的地址取决于二者所在的网络。最常用的写法是 host.docker.internal,它在 Docker Desktop for Mac/Windows 上有效,在 Linux 原生 Docker 上必须手动添加 extra_hosts 才有用。

Linux 上更常见的做法是直接填宿主机在 Docker 网桥上的 IP,通常是 172.17.0.1,但这个 IP 会随着 Docker 网络模式变化。比如你用了 docker-compose 且自定义了 network,默认网桥的 172.17.0.1 就不一定可用。另一种情况是 OpenClaw 直接跑在宿主机上,那 localhost:11434 就能通。这三种部署方式,对应三个不同的 Base URL,选错一个就报 Network Error。

如果你用 Docker Compose 部署 OpenClaw,还有一种写法:把 Ollama 和 OpenClaw 放在同一个 compose 文件里,用服务名 ollama:11434 互相访问。这个方案比 host.docker.internal 更稳定,但你得改 compose 文件并重建容器。原文章节里那张“基于 OpenClaw 运行环境选择地址”的表,本质上就是在解决这个问题。这也解释了为什么官方文档总强调“先确定 OpenClaw 在哪运行,再定 API Base URL”。

1.2 401 与静默截断:本地模型源的两个隐形坑

网络通了之后,401 是第二个坎。Ollama 本地 API 通常不需要鉴权,但部分版本或代理配置会要求一个 Key。OpenClaw 的 Provider 表单里 API Key 字段不能完全留空,于是有人填 ollama,有人填任意字符串,总之一顿试。这个问题不是 Ollama 本身复杂,而是 OpenClaw 对“必须填点什么”有要求,本地 API 又没有真正校验,反而造成困惑。

比 401 更隐蔽的是上下文被静默截断。OpenClaw 要求模型上下文窗口至少 16K tokens,而很多本地模型默认只有 2K 到 4K。当你连续交代几轮任务后,前面的内容会悄悄消失,对话表现成“失忆”。原文章节里把它归因于 OLLAMA_NUM_CTX 没设置够,解决方法是重新启动容器并加大这个环境变量。这个方法有效,但它只作用于你当前那一个 Ollama 容器,换一台机器、换一个镜像,又得重新调。

2. 加一路 TaoToken 之前,先准备好 Key 和模型 ID

如果你不想继续在上述三个地址里猜,也不想每次部署都要调 OLLAMA_NUM_CTX,可以给 OpenClaw 加一路云上 API。注意,这不会替代本地 Ollama,只是多一个 Provider。本地 Ollama 仍然适合离线、隐私敏感、纯本地开发场景;TaoToken 适合你临时需要更长上下文、更稳定响应、或者不想折腾 Docker 网络的时候。两种方式可以在 OpenClaw 里共存,按场景切换模型就行。

2.1 从官网创建 API Key 的完整动作

打开 TaoToken,注册后进入控制台,创建 API Key。Key 的格式是一串较长的随机字符,创建后复制保存,后续填进 OpenClaw 时要用。注意控制台可能会把创建好的 Key 只显示一次,建议立即存到本地密码管理器里。这个官网还承担模型广场和用量查看的功能,后面选模型、确认调用次数都会回到这里。如果你已经用惯了本地 Ollama 的免鉴权模式,可能会觉得多一步创建 Key 有点多余;但换个角度想,这一串随机字符也帮你把 OpenClaw 的请求身份区分开了,日志里能明确看到哪一次调用来自你。

2.2 本地 Ollama 配置先别删,留着做离线对照

原文推荐的 Ollama 配置仍然有效:如果你要继续用本地模型,docker run 启动 Ollama 容器、ollama run qwen2.5:14b 拉取模型这些步骤可以保留。我建议你把本地 Ollama 当作 OpenClaw 的“离线对照组”,保持 docker-compose 或 docker run 命令不变。这样当云上 API 出现网络波动时,你随时能切换回本地模型,OpenClaw 的整体流程不会断。

# 仍然保留:启动 Ollama 容器并设置较长上下文
docker run -d \
  -v ollama_data:/root/.ollama \
  -p 11434:11434 \
  -e OLLAMA_NUM_CTX=24576 \
  --name ollama \
  ollama/ollama

这段命令和原文一致,对应的是本地对照那一路。真正需要改的,只是在 OpenClaw 的模型提供商列表里新增一项,而不是推翻原有部署。

3. 在 OpenClaw 的 Model Providers 里新增 TaoToken

登录 OpenClaw Web 管理界面,进入 设置 -> 模型提供商。点击 添加提供商。这里不再从提供商列表里选 Ollama,而是新增一个自定义 Provider,按下面的表格填写。填好后 OpenClaw 通常会自动测试连接;如果没自动测,保存后发起一条对话也能触发验证。

3.1 Web UI 表单:Provider Name、API Key、Base URL 的填法

配置项填写值(示例)重要说明
Provider NameTaoToken自定义名称,用于在 OpenClaw 中标识这一路 API。
API KeyYOUR_API_KEY在 https://taotoken.net/?utm_source=taotoken_aicg_blog_end 创建。
API Base URLhttps://taotoken.net/api末尾不要加 /v1。
Model Name以模型广场返回为准选择上下文窗口 ≥16K 的型号。

这里面最容易写错的是 API Base URL。TaoToken 的 Base URL 是 https://taotoken.net/api,不要在末尾补 /v1,也不需要补任何路径。如果你之前配过其他服务商,习惯性写成 /api/v1,保存后会直接连不上。这个规则与很多云厂商的 OpenAI-compatible 端点不一样,切记先确认。

3.2 模型名去模型广场挑,别凭记忆写

在 OpenClaw 里填 Model Name 时,不要凭印象填一个类似 qwen2.5:14b 的 ID。它是 Ollama 风格的模型名,不一定存在于 TaoToken 的模型广场。正确做法是到 https://taotoken.net/?utm_source=taotoken_aicg_blog_end 的模型广场,看当前可用的模型列表,复制其官方给出的模型 ID,再回到 OpenClaw 表单里粘贴。

选模型时优先挑上下文窗口大于等于 16K 的型号,这样能避开 OpenClaw 对上下文的最低要求。模型广场里一般会标注参数量、上下文长度、擅长任务,按你的实际使用场景选一个即可。如果你的项目里大量使用工具调用,就选指令跟随和 Function Calling 训练得更充分的模型;如果你只是做长文本总结,优先看上下文长度。不同模型在同一通道下的延迟也会有差异,先选一个主力的,剩下几个备用。

4. 上下文长度:TaoToken 不背 OLLAMA_NUM_CTX 的锅

OpenClaw 要求模型上下文窗口至少 16K tokens,这来自它的任务设计:Agent 会把历史对话、工具定义、环境信息一起塞进上下文。本地 Ollama 要满足这一点,需要你在容器启动时设 OLLAMA_NUM_CTX=24576 之类的大值,同时还要确保机器显存装得下。用 TaoToken 则不需要调整任何容器环境变量,你只需要在选模型时注意上下文长度这一栏。

4.1 OpenClaw 要求 16K 起步,选模型时先看这一点

为什么是 16K?因为 OpenClaw 这类 Agent 框架不只是“问一句答一句”,它要把多轮对话、用户意图、工具返回结果全部打包给模型。2K 上下文的模型在简单问答里看不出问题,一旦对话超过三轮,前面的内容就会被截断,模型会突然“忘记”你最开始给的指令。这不是模型笨,而是上下文窗口不够。选 16K 及以上,能在大多数真实任务里留出余量,不会对话到一半就丢失信息。

4.2 用官网控制台确认返回长度,而不是只靠观感

判断上下文是否真的够用,最好去 TaoToken 控制台看每次请求的 token 用量记录。对话变短、回答答非所问,可能是上下文窗口被占满,也可能是模型本身能力问题。控制台会显示每次请求的输入 token 数和输出 token 数,这个数据比主观感受准确。拿到数据后,你才能判断是该换更长的上下文模型,还是该精简对话历史。

控制台里如果没有逐条用量,至少能看到累计消耗和失败请求数。对比你发消息的时间点,如果失败请求数同步上涨,说明配置或者模型选择有问题;如果只有成功请求,说明链路正常,只是模型输出质量或上下文策略需要调。这里的重点是把“看起来没回好”和“链路没通”分开,避免在错误的方向上反复重启容器。

5. 验证对话链路:先在 OpenClaw 里聊一句

保存 Provider 配置后,接下来验证整个链路。在 OpenClaw 的会话界面选择刚才添加的 TaoToken Provider,随便发一条能观察上下文效果的消息。如果回复正常,说明 API Key、Base URL、模型 ID 三项都配对了。此时再发一个较长的多轮任务,确认长上下文的稳定性。

5.1 在 OpenClaw 会话里发消息并查 Docker 日志

OpenClaw 的日志输出在 Docker 容器一侧。执行 docker logs <openclaw-container-name> 2>&1 | grep -i "401\|404\|200",看到 200 说明网关接受了请求,看到 401 说明 Key 无效,看到 404 多半是 Base URL 写错。日志里的错误信息比界面上的提示更具体,是定位问题最直接的入口。

5.2 如果没通,用 docker logs 与 curl 定位

如果对话一直转圈,先把范围缩小:是不是只有 TaoToken 这个 Provider 不通?用本地 Ollama 发一条消息,如果正常,说明 OpenClaw 本身没问题,问题出在 TaoToken 配置上。此时回到第 3 章表格,逐项核对。还有一个容易被忽略的点:OpenClaw 的 Provider 配置修改后,可能需要重启容器或重新加载页面才会生效。改完配置先重启,再测试。

如果你同时在多个环境里跑 OpenClaw,比如本地 Docker 和远程服务器各一套,记得每个环境都单独配一遍。API Key 可以复用,但 Base URL 的可用性取决于目标服务器能否访问外网。远程服务器如果只能内网访问,那这一路云上 API 也连不通;这种情况还是用本地 Ollama 或部署在内网的模型服务更实际。

6. OpenClaw 连 TaoToken 的排障清单与解决动作

这一章对应原文章节“常见问题与解决方案”,但报错场景已经从 Ollama 的端口/鉴权变成了云上 API 的常见配置错误。假设你已经把 Provider 填好,下面是按出现频率排序的问题与动作。

6.1 Connection Error / Network Error

现象是 OpenClaw 提示无法连接到统一 API。先检查网络出口:OpenClaw 所在容器是否能访问外网。本地 Ollama 不需要外网,所以这个错误在原来配置 Ollama 时不会出现。再检查 API Base URL 是否写成 https://taotoken.net/api/v1,多一个 /v1 就会导致路由找不到。最后检查 Key 是否带有多余空格,复制粘贴时很容易带入换行符。

6.2 401 Unauthorized

现象是请求被拒绝,提示认证失败。多数情况是 API Key 没填对,或者填成了 ollama 这种占位符。回到 https://taotoken.net/?utm_source=taotoken_aicg_blog_end 控制台重新复制 Key,确认没有漏字符。如果 Key 确认无误,检查它是否已启用。部分控制台支持创建多个 Key,逐个启停,确保当前 Key 处于启用状态。

6.3 Model Not Found 与上下文被截断

现象分两种:一是保存 Provider 后测试连接报模型不存在,二是对话中途答非所问。前者是模型 ID 没对上,去模型广场复制官方 ID 重新填。后者要分清是 OpenClaw 上下文控制参数过小,还是所选模型本身上下文短。OpenClaw 侧可以调大单次请求的最大 token 上限;模型侧则换一个上下文长度更大的型号。如果控制台显示输入 token 接近上限,就说明确实是模型窗口不够。

补一句和原文的对比:在 Ollama 环境下,上下文被截断通常是 OLLAMA_NUM_CTX 没设置够,你需要在 Docker 启动参数里加 -e OLLAMA_NUM_CTX=24576 并重建容器。换到 TaoToken 后,这个环境变量不再有意义,你只需要把模型 ID 换成模型广场里标注长上下文的那个,再观察控制台用量即可。本地容器变量只管本地推理进程,云上 API 的上下文长度由模型自身决定,两者不要混着调。

配置到这里就完成了。接下来回到 TaoToken 控制台,看刚才那轮对话是否记上账、延迟多少、输入输出 token 分别是多少。把这些数字记下来,作为你这套 OpenClaw 环境的基准。后续如果哪天觉得响应变慢,先看控制台数据,再决定是切换备选模型还是优化自己的提示词。顺手再创建一两个 Key,按不同项目分开管理,这样做日志审计时能直接定位到具体项目,而不用在共用 Key 里猜。

更多推荐