在 ONE-API 中接入本地 Ollama,本质上是把 Ollama 当作一个 OpenAI 兼容的渠道注册进 ONE-API,再由 ONE-API 的令牌机制对外暴露。Ollama 默认不校验请求密钥,因此渠道密钥这里通常只是占位;真正对客户端生效的鉴权,是后续在 ONE-API 中创建的访问令牌。
前置准备
开始前先确认四件事:
- Ollama 服务正常运行,并已拉取至少一个模型。可用
curl http://localhost:11434/api/tags看到模型列表。 - ONE-API 已经部署并可访问管理后台。默认管理地址通常是
http://localhost:3000,登录后进入渠道管理页。 - 如果 ONE-API 和 Ollama 分别运行在 Docker 容器中,注意 localhost 指向容器自身;需要把渠道地址改为宿主机可访问的地址,例如
http://host.docker.internal:11434(仅本机 Docker Desktop 环境可用)。 - 确定要在 ONE-API 中使用的模型名称,例如
llama3或qwen2.5,这个名称要同时出现在 Ollama 模型中。
在 ONE-API 中新增 Ollama 渠道
- 登录 ONE-API 管理后台,进入“渠道”页面,点击“添加渠道”。
- 渠道类型选择 Ollama。
- “名称”可填
local-ollama,用于区分。 - “代理地址”填写 Ollama 的 Base URL,注意不要写
/v1。例如http://localhost:11434。 - “密钥”一项,如果 Ollama 本身没有开启鉴权,可以先填任意值,例如
ollama;若你的 Ollama 部署已通过环境变量或反向代理要求 API Key,这里填对应的 Key。 - “模型”里填入你已经在 Ollama 中拉取好的模型名,多个模型用逗号或换行分隔。
- 保存后,在渠道列表里看到该渠道状态为“已启用”。如果 ONE-API 会做连通性测试,观察是否通过;即使未自动测试,也可用下一步验证。
配置令牌鉴权和访问令牌
这一步是外部调用真正使用的鉴权层。客户端请求应打到 ONE-API 的 OpenAI 格式地址,并用 ONE-API 生成的令牌来认证,而不是直连 Ollama 的 11434。
- 在 ONE-API 左侧菜单进入“令牌”页,点击“添加令牌”。
- 选择该令牌可访问的模型范围。为测试方便,可以先选择“所有模型”。
- 创建后,页面会展示完整的令牌字符串,例如
sk-abc123...,只在本次显示,请立即复制并保存。 - 如果你希望 Ollama 本身也能校验一个固定密钥,需要在 Ollama 侧额外配置。一个通用做法是在 Ollama 启动时设置 API Key 环境变量(具体变量名取决于部署环境),或者在其前置 Nginx 中校验请求头。ONE-API 渠道密钥只负责与 Ollama 通信,不能代替这一层。
用 curl 验证请求链路
推荐先验证 Ollama 直连,再验证 ONE-API 转发。
curl http://localhost:11434/api/tags返回模型列表后,再通过 ONE-API 调用一个补全请求。注意替换地址、端口、令牌和模型名。
curl http://localhost:3000/v1/chat/completions -H "Authorization: Bearer sk-abc123..." -H "Content-Type: application/json" -d '{"model":"llama3","messages":[{"role":"user","content":"你好"}]}'如果返回包含 choices 字段,说明渠道链路和令牌鉴权都已生效。若返回 401,先检查令牌是否有效、是否过期;若返回 404,检查 ONE-API 中渠道模型名是否和 Ollama 中的模型名完全一致。
失败时的回退与排查
- Ollama 无法访问:先执行
curl http://localhost:11434/api/tags,确认服务本身正常;若 ONE-API 在容器内,把渠道地址改为宿主机 IP 或host.docker.internal。 - ONE-API 返回“上游渠道错误”:查看 ONE-API 运行日志,通常可以看到实际错误码。常见原因是模型名不匹配、Ollama 的 API 格式差异、或者密钥被 Ollama 拒绝。
- 令牌鉴权失败:确认请求头格式为
Authorization: Bearer sk-...,且在 ONE-API 中该令牌未被删除或限制。 - 如果只是想在本地临时用,不打算暴露给其他机器,可以保持 Ollama 不对本地局域网开放;让 ONE-API 绑定在回环地址,避免外部直接访问 11434。