在 One API 里接入 Ollama 作为后备 LLM 渠道
起因
我用 One API 作为 LLM 网关,给 n8n 工作流提供模型调用。主力是 NVIDIA 的免费 API(nemotron-3-ultra、kimi-k3),质量好、速度快。
但有个问题:NVIDIA 免费层有限流。一旦触发 429,n8n 工作流就断了。我需要一个后备方案。
目标:给 One API 加两层后备——Ollama Cloud(云端大模型)和本地 Ollama(完全离线兜底)。
架构设计
最终的 One API 渠道架构:
| 优先级 | 渠道 | 模型 | 特点 |
|---|---|---|---|
| 1 | NVIDIA API | nemotron、kimi | 质量最高,但可能限流 |
| 2 | Ollama Cloud | gpt-oss:120b | 云端大模型,不占本地资源 |
| 3 | Local Ollama | gemma:2b | 完全本地,最终兜底 |
三层降级,任何一层出问题都有下一层顶上。
第一部分:本地 Ollama 作为最终兜底
让 Ollama 监听所有网卡
One API 是 Docker 容器,Ollama 是宿主机进程。默认情况下 Ollama 只监听 127.0.0.1,容器访问不到。
bash
export OLLAMA_HOST=0.0.0.0 export OLLAMA_ORIGINS=* pkill -f "ollama serve" sleep 2 nohup ollama serve > /var/log/ollama.log 2>&1 & sleep 3 # 确认监听地址 ss -tlnp | grep 11434
应该看到 *:11434 而不是 127.0.0.1:11434。
放行 iptables
这是最容易踩的坑。你的 VPS 上 K3s 和 UFW 把 INPUT 链的策略设成了 DROP,Docker 容器到宿主机的流量会被拦截。
bash
iptables -I INPUT 1 -s 172.17.0.0/16 -p tcp --dport 11434 -j ACCEPT iptables -I INPUT 1 -s 172.18.0.0/16 -p tcp --dport 11434 -j ACCEPT iptables -I INPUT 1 -s 172.19.0.0/16 -p tcp --dport 11434 -j ACCEPT iptables -I INPUT 1 -s 172.20.0.0/16 -p tcp --dport 11434 -j ACCEPT netfilter-persistent save
验证连通性
bash
docker exec one-api sh -c "wget -qO- http://172.17.0.1:11434/api/tags 2>&1 | head -c 200"
应该返回模型列表的 JSON。
在 One API 添加渠道
| 字段 | 值 |
|---|---|
| 类型 | Ollama |
| 名称 | Local-Ollama-Backup |
| 代理地址 | http://172.17.0.1:11434 |
| 密钥 | ollama(随便填,Ollama 不鉴权) |
| 模型 | gemma:2b |
⚠️ 代理地址不要加 /v1。
内存优化
gemma:2b 加载后占用约 1.6GiB 内存。我的 VPS 只有 5.8GiB,可用约 2GiB。为了不让它常驻,设置了空闲自动卸载:
bash
export OLLAMA_KEEP_ALIVE=5m
这样模型在空闲 5 分钟后自动从内存卸载。
第二部分:Ollama Cloud 作为云端后备
本地 gemma:2b 是 20 亿参数的小模型,中文能力有限。更好的后备是 Ollama Cloud,它提供 120B 级别的大模型,而且不占本地资源。
获取 API Key
访问 ollama.com/settings/keys,注册后生成一个 API Key。
确认哪些模型在免费范围内
不是所有 Ollama Cloud 模型都免费。我测试了几个:
| 模型 | 状态 |
|---|---|
gpt-oss:20b | ✅ 免费 |
gpt-oss:120b | ✅ 免费 |
gemma4:31b | ✅ 免费 |
deepseek-v4-flash | ❌ 需要订阅 |
测试方式:
bash
curl -s -X POST "https://ollama.com/api/chat" \
-H "Authorization: Bearer 你的KEY" \
-H "Content-Type: application/json" \
-d '{"model":"gpt-oss:120b","messages":[{"role":"user","content":"hi"}],"stream":false}' | head -c 200
返回 "content" 字段的就是可用;返回 "this model requires a subscription" 的就是需要付费。
在 One API 添加渠道
| 字段 | 值 |
|---|---|
| 类型 | Ollama |
| 名称 | Ollama-Cloud-Backup |
| 代理地址 | https://ollama.com(不要加 /v1) |
| 密钥 | 你的 Ollama Cloud API Key |
| 模型 | gpt-oss:120b,gpt-oss:20b,gemma4:31b |
多个模型用逗号分隔。
踩坑:402 Payment Required
第一次配置后测试,返回 402。原因是渠道里填的模型(deepseek-v4-flash)不在免费范围内。改成 gpt-oss:120b 后测试通过。
注意:如果 Ollama Cloud 返回 402,One API 可能会把整个渠道标记为”信用耗尽”,导致后续即使调用免费模型也失败。需要在 One API 后台手动重新启用渠道。
验证三层渠道
在 VPS 上用 curl 测试:
bash
# 测试 Ollama Cloud
curl -s -X POST http://172.17.0.1:3000/v1/chat/completions \
-H "Authorization: Bearer sk-你的OneAPI令牌" \
-H "Content-Type: application/json" \
-d '{
"model": "gpt-oss:120b",
"messages": [{"role": "user", "content": "说你好"}],
"max_tokens": 1024,
"stream": false
}' | python3 -m json.tool
# 测试本地 Ollama
curl -s -X POST http://172.17.0.1:3000/v1/chat/completions \
-H "Authorization: Bearer sk-你的OneAPI令牌" \
-H "Content-Type: application/json" \
-d '{
"model": "gemma:2b",
"messages": [{"role": "user", "content": "说你好"}],
"max_tokens": 50,
"stream": false
}' | python3 -m json.tool
两个都返回正常回答,说明配置成功。
在 n8n 里实现降级
有了三层渠道,n8n 工作流可以这样配置:
text
HTTP Request(调 NVIDIA nemotron)
↓
IF(status != 200 或 content 为空)
↓ 是
HTTP Request(调 Ollama Cloud gpt-oss:120b)
↓
继续后续流程
这样当 NVIDIA 限流时,自动切到 Ollama Cloud,工作流不中断。
踩坑记录
1. iptables 拦截 Docker 到宿主机的流量
K3s 和 UFW 把 INPUT 链设为 DROP,导致 One API 容器访问不到宿主机的 Ollama。需要显式放行 Docker 网段到 11434 端口。
2. Ollama Cloud 的 402 错误
不是所有模型都在免费范围内。部分大模型(如 deepseek-v4-flash)需要订阅。配置前先用 curl 测试哪些模型可用。
3. 推理模型需要更大的 max_tokensgpt-oss:120b 是推理模型,会在 thinking 字段消耗 token。max_tokens: 50 会导致 content 被截断。建议设 1024 或更高。
4. 本地 Ollama 的内存占用gemma:2b 加载后占用约 1.6GiB,对内存紧张的 VPS 是负担。用 OLLAMA_KEEP_ALIVE=5m 让模型空闲后自动卸载。
5. One API 的 Ollama 渠道不支持流式
已知问题:One API 通过 stream 方式调用 Ollama 时可能返回空白。用 "stream": false 即可。
最终架构
| 优先级 | 渠道 | 模型 | 用途 |
|---|---|---|---|
| 1 | NVIDIA API | nemotron、kimi | 主力 |
| 2 | Ollama Cloud | gpt-oss:120b | 第一后备 |
| 3 | Local Ollama | gemma:2b | 最终兜底 |
核心价值:主力 LLM 限流或宕机时,n8n 工作流自动降级到后备渠道,服务不中断。
