
1. Docker 部署 one-api 后多模型 Key 为什么还是散的one-api 这个项目简单说就是一个「模型调用网关」你在它后台把各家大模型的 Key 录进去对外只暴露一个地址、一套 OpenAI 兼容格式业务代码不用再关心背后是哪个厂商。它适合谁适合手里同时用着好几个模型、又不想在每个项目里写一堆 SDK 分支的人也适合小团队想统一管理调用入口的场景。但很多人把 one-api 用 Docker 跑起来之后会发现一个尴尬的事网关是有了可 Key 还是散的。你在 one-api 里配了 A 平台的 Key、B 平台的 Key每个平台单独维护额度、单独看账单、单独处理限流哪天某个平台要换 Key你还得进 one-api 后台一个个改。更麻烦的是如果你自己还有别的服务直接调模型那这些 Key 就同时散落在 one-api 和业务代码两处时间一长根本对不上账。我试过把 one-api 当成唯一入口但上游渠道本身还是多平台拼起来的问题只是从「业务层散」变成了「网关层散」。真正省事的做法是让 one-api 的上游渠道也收敛到一个统一通道上这样 one-api 里只维护一个渠道、一个 Key多模型切换交给上游通道去路由。这篇就按这个思路走先用 docker-compose 把 one-api 跑起来再把 TaoToken 的统一 Key 接进去当上游最后用 curl 把多模型调用验证一遍。需要先说明的是one-api 负责的是「对外统一」TaoToken 负责的是「对上统一」两者是叠加关系不是替代关系。one-api 的渠道配置里填的是上游地址和 Key这个上游地址就填 TaoToken 的 API 地址Key 填 TaoToken 的 Key。这样 one-api 后台只需要维护一个渠道模型名按需填调用时 one-api 会把请求转发到 TaoToken由它去完成实际的模型路由。2. 前置准备TaoToken 统一 Key 与通道参数在动 Docker 之前先把上游通道准备好不然后面 one-api 配渠道时没东西可填。TaoToken 的定位是一个统一的模型调用通道你拿到一个 Key 之后可以用同一套 OpenAI 兼容接口去请求不同的模型不用为每个模型单独申请账号、单独记地址。对 one-api 来说这就是一个标准的上游渠道。第一步是拿 Key。打开控制台地址 https://taotoken.net/console 登录后进 API Keys 页面创建一个新的 Key。创建时建议给它起个能认出来的名字比如one-api-upstream方便以后在 one-api 后台对照。Key 只在创建时完整显示一次复制下来先存到安全的地方别直接贴在聊天记录或者公开仓库里。第二步是确认接入参数。TaoToken 的 API 基础地址是 https://taotoken.net/api 注意这个地址不带任何查询参数one-api 的渠道配置里「代理地址」或「Base URL」就填它。模型名这块你按实际要用的填比如常见的对话模型、代码模型都可以one-api 的渠道里支持填多个模型名用逗号分隔或者一行一个都行具体看你的 one-api 版本。如果你后面还要做更细的调用管理比如看每个 Key 的用量、给不同项目分不同的 Key可以在控制台里多建几个 Key 分别用。但就打通链路这件事来说一个 Key 就够了。文档地址在 https://taotoken.net/doc 渠道配置遇到字段不确定的时候可以对着看尤其是模型名和地址的写法。这里有个容易踩的点one-api 的渠道类型要选「OpenAI」或者「自定义 OpenAI 兼容」不要选成别的厂商专属类型否则它会按那个厂商的协议去拼请求和 TaoToken 的 OpenAI 兼容接口对不上。地址填https://taotoken.net/api之后one-api 通常会自动补/v1/chat/completions这类路径如果发现请求 404先检查是不是地址多写或少写了/v1。3. 可复制配置docker-compose 跑 one-api 并接入统一通道先给一份 docker-compose 骨架比docker run好维护改配置不用重敲一长串参数。新建一个目录比如one-api-stack在里面建docker-compose.ymlservices: one-api: image: songquanpeng/one-api:latest container_name: one-api restart: always ports: - 3000:3000 volumes: - ./data:/data environment: - TZAsia/Shanghai - SQL_DSN - SESSION_SECRETchange_me_to_a_random_string几个字段说明一下。ports把容器 3000 映射到宿主机 3000你访问http://宿主机IP:3000就是 one-api 后台。volumes把./data挂到容器/dataone-api 的数据库和配置都在这里容器删了数据还在所以这个目录别乱删。SESSION_SECRET建议换成一串随机字符不然登录态可能不稳。SQL_DSN留空时 one-api 默认用 SQLite单机够用要上 MySQL 再填。启动命令cd one-api-stack docker compose up -d docker compose logs -f one-api日志里看到监听 3000 端口、没有报错就说明起来了。第一次访问后台默认账号是root密码123456登录后它会提示你改密码务必改掉这个默认密码是公开的。接下来是接 TaoToken 渠道。登录后台进「渠道」页面点「添加新的渠道」。关键字段这么填字段填写内容类型OpenAI 或自定义 OpenAI 兼容名称taotoken-upstream随意能认出来即可代理地址https://taotoken.net/api密钥你在 TaoToken 控制台创建的 Key模型按需填如 gpt-4o-mini,claude-3-5-sonnet 等填完保存渠道列表里这条渠道的状态应该是启用。如果显示「已禁用」或者测试失败先别急着怀疑 Key多半是地址或模型名写法的问题下一节验证时会具体说。渠道建好之后还要在「令牌」页面建一个 one-api 自己的令牌这个令牌是给业务代码用的不是上游 Key。建的时候可以设额度、设过期时间建完复制出来格式一般是sk-开头的一串。到这里链路是业务代码 → one-api 令牌 → one-api 渠道 → TaoToken Key → 实际模型。4. 验证请求用 curl 确认多模型调用走通配置对不对curl 一跑就知道。先验证 one-api 本身活着curl -s http://127.0.0.1:3000/api/status返回一段 JSON里面有success: true之类的字段说明服务正常。然后验证通过 one-api 调模型这里用 one-api 的令牌不是 TaoToken 的 Keycurl -s http://127.0.0.1:3000/v1/chat/completions \ -H Authorization: Bearer sk-你的one-api令牌 \ -H Content-Type: application/json \ -d { model: gpt-4o-mini, messages: [{role: user, content: 只回复两个字通了}] }如果返回里有choices字段、内容是你预期的回复说明整条链路走通了。注意model这个值必须和你在 one-api 渠道里填的模型名对得上one-api 会拿它去匹配渠道匹配不到就会报「无可用渠道」。再换一个模型验证多模型是不是都能走curl -s http://127.0.0.1:3000/v1/chat/completions \ -H Authorization: Bearer sk-你的one-api令牌 \ -H Content-Type: application/json \ -d { model: claude-3-5-sonnet, messages: [{role: user, content: 回复第二个模型也通了}] }两个模型都返回正常就说明 one-api 里虽然只有一个上游渠道但通过 TaoToken 这个统一通道多模型调用是通的。这时候你回 one-api 后台看「日志」能看到这两次请求的记录包括用的哪个渠道、消耗了多少 token。以后要加新模型只要 TaoToken 那边支持你在 one-api 渠道的模型列表里补上名字就行不用新建渠道、不用再配一套 Key。如果你还想直接在 TaoToken 侧验证模型可用性可以打开模型对话页面 https://taotoken.net/model-chat 手动发一条消息确认 Key 和模型本身没问题再回到 one-api 排查转发层的问题这样能把问题范围缩小。5. 本篇常见错排查报错「无可用渠道」one-api 拿请求里的model去匹配渠道的模型列表没匹配上。检查渠道里填的模型名和 curl 里的是否完全一致大小写、连字符都算。比如渠道里写的是gpt-4o-mini请求里写gpt-4o就匹配不到。报错 401 或 invalid api key分两种情况。如果是 one-api 返回的说明你 curl 里用的 one-api 令牌不对去「令牌」页面重新复制。如果是上游返回的说明 one-api 渠道里填的 TaoToken Key 有问题去控制台确认 Key 没被删、没过期。报错 404 或路径不对多半是渠道代理地址写错了。正确写法是https://taotoken.net/api不要自己加/v1one-api 会按渠道类型补路径。如果加了/v1变成/api/v1/v1/...就会 404。容器起来但访问不了 3000先docker compose ps看容器是不是 Up再docker compose logs one-api看有没有启动报错。如果是云服务器检查安全组有没有放行 3000 端口。本地的话确认没被别的程序占用 3000。改了渠道配置不生效one-api 有缓存改完渠道后在后台点一下渠道的「测试」或者重启容器docker compose restart one-api让它重新加载。日志里 token 数和预期对不上one-api 记的是它自己估算的 token和上游实际计费可能有差异这是正常的以 TaoToken 控制台的用量为准。6. 后续怎么用把统一通道固定下来链路打通之后日常维护就简单了。业务代码里只认 one-api 的地址和令牌模型名按需传不用再关心背后是哪家。要换模型、加模型改 one-api 渠道的模型列表要换上游 Key改渠道里的密钥字段。两处改动都不碰业务代码。如果你后面要做长期编码或者接 Agent 类工具频繁调模型、对稳定性和额度管理要求更高可以看下 Coding Plan 这类方案 https://taotoken.net/coding-plan 把调用通道和额度规划一起考虑。接入文档在 https://taotoken.net/doc 渠道字段、模型名写法这些细节都能查到。API Keys 管理在 https://taotoken.net/api-keys 多项目分 Key 的时候从这里建。最后提醒一句one-api 的./data目录记得定期备份渠道配置和令牌都在里面丢了就得重配。TaoToken 的 Key 也别只存一份控制台里可以随时新建和吊销真泄露了第一时间去吊销再重建比到处找哪里泄露了快得多。