把 Cloud Ollama 接进 OpenClaw:通过 One API 单源打通全流程

把 Cloud Ollama 接进 OpenClaw:通过 One API 单源打通全流程

前几天我在 OpenClaw 上折腾模型源,目标很简单:只用 One API 一个网关,不要散落一堆直连 provider。但过程中遇到一个典型问题——”Cloud Ollama 用不了”。这篇文章记录我是怎么定位、修复并验证的,希望对同样用 One API 做 LLM 网关的同学有帮助。

一、背景与目标

我的架构是这样的:

  • One API:跑在 Docker 里(端口 3000),作为统一的 OpenAI 兼容网关,后端挂各家的渠道。
  • OpenClaw:客户端,只配置一个 provider 指向 One API。

OpenClaw 侧配置形如:

{
  "models": {
    "providers": {
      "one-api": {
        "baseUrl": "http://<one-api-host>:3000/v1",
        "api": "openai-completions"
      }
    }
  }
}

目标:所有模型(包括 Ollama Cloud 上的 gpt-oss、gemma 等)都通过 One API 走,客户端无需感知。

二、症状:Cloud Ollama “不工作”

表现有两个层面:

  1. 直连失败:任何 ollama-cloud/... 调用都报 model_not_found,提示需要设置 OLLAMA_API_KEY。
  2. 流式失败:模型列表里能看到 gpt-oss:20b 等,但一带上流式就报 bad_response_status_code,非流式却正常。

三、定位:关键在 One API 的渠道配置

排查后发现两个真相:

真相 1:Ollama Cloud 其实已经配在 One API 里了。直接查 One API 的 sqlite 数据库(channels 表),能看到一条渠道:

name = 'Ollama Cloud'
models = 'gpt-oss:20b,gpt-oss:120b,gemma4:31b'
type = 1  (OpenAI 兼容)
base_url = 'https://ollama.com'
status = 1  (启用)

也就是说,Cloud Ollama 是通过 One API 的 OpenAI 兼容渠道接入的,根本不是 OpenClaw 直连。所以 OpenClaw 侧那个”直连 Ollama Cloud”的插件纯属多余。

真相 2:流式报错来自上游。用 curl 直测 One API:

curl http://<host>:3000/v1/chat/completions \
  -H "Authorization: Bearer $KEY" \
  -d '{"model":"gpt-oss:20b","messages":[{"role":"user","content":"hi"}],"stream":true}'

HTTP 状态返回 200,但 body 里是错误对象;非流式则完全正常返回。这是 OpenAI 兼容网关在”流式 + 工具调用”下的典型兼容性问题——上游渠道对 stream 的处理有缺陷。

四、修复:两步搞定

第一步:确认 Cloud Ollama 渠道在 One API 中启用且模型列全。如果 /v1/models 里看不到,多半是 token 的模型白名单(model_limits)限制,或渠道 status 不是 1。

第二步:对不支持的模型关闭流式。这是最关键的 workaround。在 OpenClaw 的模型配置里给这些模型加参数:

{
  "agents": {
    "defaults": {
      "models": {
        "one-api/gpt-oss:20b": {
          "alias": "gpt-oss-20b",
          "params": { "streaming": false }
        }
      }
    }
  }
}

OpenClaw 支持在单个模型条目上通过 params.streaming 覆盖流式行为(默认 true;对 Ollama 类渠道默认建议关闭以规避已知问题)。设置后,请求改走非流式通道,稳定返回。

五、顺手清理的隐患

修复过程中还发现一个被忽略的问题:死 fallback 会拖慢一切。原本的 fallback 链里混着两个上游已挂的模型(NVIDIA NIM 渠道异常,返回 401/超时/403)。主模型一旦失败,会先在这些死模型上各卡满超时才轮到一个能用的。

清理要点:

  • fallback 链只保留实测可用的模型;
  • 同步更新 modelPolicy.allow 与方法白名单;
  • 重点:检查子 agent、图片模型(mediaModels)等一切引用模型的地方——删一个模型可能连带搞挂好几个子 agent;
  • 移除多余的直连 provider 插件(本案例是 ollama 插件及其 web 工具)。

六、验证清单

  • openclaw models list:只列出实际可用模型,Auth 列正常;
  • 非流式调用主模型:HTTP 200,正常返回内容;
  • 流式调用主模型:确认 delta 正常吐出(本案例主模型流式健康);
  • 对关闭流式的模型再测一次:非流式稳定返回;
  • JSON/schema 校验通过,doctor 无新增错误。

七、结论

“Cloud Ollama 用不了”这个问题的真相是:它本来就该通过 One API 走,而不是直连。真正要解决的是两点——确认 One API 里 Ollama Cloud 渠道配置正确,以及对流式有缺陷的模型用 params.streaming:false 兜底。再加上一次”死 fallback”清理,整个链路就清爽了。

如果你也在用 One API + OpenClaw 的组合,建议优先用兼容性更好的模型做主力,把有流式问题的模型显式降级为非流式,并定期体检 fallback 链——省下的都是等待时间。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注