ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

One-API 部署教程:用 Sealos 统一管理你的所有大模型密钥,TaoToken 统一 Key 通道怎么接

One-API 部署教程:用 Sealos 统一管理你的所有大模型密钥,TaoToken 统一 Key 通道怎么接 1. 为什么你的大模型密钥越管越乱如果你同时用 OpenAI、Claude、Gemini、通义千问、文心一言大概率经历过这种场景项目 A 的.env里塞了三个 Key项目 B 的config.yaml里又抄了一份团队新人入职第一件事是找你要一串密钥某天某个 Key 额度跑满你翻遍五个仓库才定位到是哪个服务在调用。这就是典型的「大模型密钥分散管理」问题。One-API 解决的就是这件事。它是一个开源的 API 管理与分发系统把市面上几乎所有主流大模型的接口统一成标准 OpenAI 格式。你只需要记住一个地址、一个密钥就能调用所有已接入的模型。它的核心能力包括统一 API 格式、多渠道负载均衡、渠道级禁用与启用、令牌额度与用量统计。但自己部署 One-API 需要服务器、Docker、反向代理、数据库持久化对只想「把密钥收拢起来」的开发者来说门槛偏高。Sealos 应用商店把这一步压缩成了一次点击搜索 One-API、部署、拿到公网地址一两分钟就能进入管理后台。这篇教程聚焦的不是「怎么点部署按钮」而是部署完成之后更关键的一步如何把散落在各处的多平台密钥收拢到一条统一 Key 通道里并且让调用日志和计费口径对得上。我会给出可复制的环境变量、渠道配置片段并演示用 TaoToken 统一 Key/API 通道替换原有分散密钥的完整验证流程。适合已经在用 One-API、或者正准备把多个模型接入统一入口的开发者。2. Sealos 部署 One-API 后的统一 Key 通道准备Sealos 上部署 One-API 的过程很直接登录 Sealos 账号进入应用商店搜索 One-API点击部署等待状态变为「运行中」然后点公网地址进入登录页。默认管理员账号是root密码123456第一件事就是改密码。部署完成后你会拿到一个形如https://xxxx.xxx.sealos.run的公网地址。这个地址就是你未来所有应用要填的 Base URL。但此时它还是空的——没有任何渠道也没有任何令牌。这里要先理清 One-API 的两个核心概念很多人第一次用会混淆渠道Channel指的是「上游模型服务」。比如你有一个 OpenAI 的 Key、一个 Claude 的 Key、一个通义千问的 Key它们各自是一条渠道。渠道负责告诉 One-API请求要转发到哪里、用哪个上游密钥。令牌Token指的是「你自己对外发放的密钥」。你的代码、你的团队成员、你的各种应用用的都是这个令牌而不是上游的真实 Key。令牌可以设额度、设过期时间、设可用模型范围。所以统一 Key 通道的本质是上游密钥只存在于 One-API 的渠道配置里对外只暴露一个令牌。团队成员拿到令牌就能调用所有模型但永远看不到你的真实上游 Key。这就是「收拢」的意义。那 TaoToken 在这里扮演什么角色它是一个统一 Key/API 通道服务提供兼容 OpenAI 格式的接口。你可以把它理解为一个「已经帮你聚合好的上游」与其在 One-API 里逐个添加 OpenAI、Claude、Gemini 的渠道不如把 TaoToken 作为一条渠道接进来用它的统一 Key 覆盖多个模型。这样你的 One-API 渠道列表更干净密钥轮换也只在一个地方操作。具体来说TaoToken 的 API 地址是https://taotoken.net/api你需要在 One-API 里新建一条渠道类型选 OpenAIBase URL 填这个地址密钥填你在 TaoToken 控制台生成的 Key。这样 One-API 转发请求时会先到你部署的 One-API再到 TaoToken最后到具体模型。如果你还没有 TaoToken 的 Key可以先到官网了解https://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content 注册后在控制台生成 API Key。生成 Key 的入口在 https://taotoken.net/console?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content 模型列表和对话测试可以在 https://taotoken.net/models?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content 里先验证。这里有个容易踩的坑One-API 的渠道「根URL」字段不同版本叫法不一样有的叫「代理地址」有的叫「Base URL」。填的时候要注意One-API 通常会自动拼接/v1所以如果你填的是https://taotoken.net/api实际请求会变成https://taotoken.net/api/v1/chat/completions。这个拼接规则因版本而异建议填完后用「测试」按钮验证不要凭感觉。另外Sealos 部署的 One-API 默认可能没有持久化数据库重启后渠道和令牌会丢失。如果你打算长期用建议在 Sealos 里挂载一个 PostgreSQL或者用 One-API 支持的外部数据库配置。这一点在「渠道配置」之前就要确认否则你辛苦配好的统一通道一次重启就没了。3. 可复制的 One-API 渠道与令牌配置片段这一节给出可以直接抄的配置。分两部分一是 One-API 的环境变量如果你用 Docker 或 Sealos 自定义部署二是渠道和令牌的 JSON 配置通过管理后台或 API 导入。先看环境变量。One-API 支持通过环境变量控制数据库、端口、日志等。如果你在 Sealos 上用的是应用商店默认模板这些大多已经配好但如果你要接外部数据库或调整会话密钥可以参考下面这份# One-API 核心环境变量 SQL_DSNpostgresql://oneapi:passwordyour-pg-host:5432/oneapi REDIS_CONN_STRINGredis://your-redis-host:6379 SESSION_SECRETreplace-with-a-random-32-char-string CRYPTO_SECRETreplace-with-another-random-string PORT3000 LOG_LEVELinfoSQL_DSN指向你的 PostgreSQLSESSION_SECRET和CRYPTO_SECRET一定要换成随机字符串前者用于会话签名后者用于加密存储的上游密钥。如果你不接外部数据库Sealos 默认可能用 SQLite数据存在容器里重启有丢失风险。接下来是渠道配置。One-API 的渠道可以通过管理后台手动添加也可以通过 API 批量导入。下面是一个把 TaoToken 作为统一上游的渠道配置 JSON 片段字段名对应 One-API 的渠道模型{ name: taotoken-unified, type: 1, key: sk-your-taotoken-key, base_url: https://taotoken.net/api, models: gpt-4o,claude-3-5-sonnet-20241022,gemini-1.5-pro, group: default, priority: 10, weight: 1, status: 1 }这里type: 1代表 OpenAI 兼容类型key填你在 TaoToken 控制台生成的 Keybase_url填https://taotoken.net/apimodels列出你希望这条渠道支持的模型名。priority和weight用于多渠道时的负载均衡单渠道可以不管。如果你更习惯用管理后台操作路径是左侧菜单「渠道」→「添加新的渠道」→ 类型选 OpenAI → 名称填taotoken-unified→ 密钥填 TaoToken Key → 根URL 填https://taotoken.net/api→ 模型填上面那串 → 提交。然后是令牌配置。令牌是你对外发放的密钥建议按用途拆分而不是所有人共用一个。比如给生产环境一个、给本地开发一个、给团队成员各一个。令牌配置片段{ name: prod-app, remain_quota: 5000000, expired_time: -1, unlimited_quota: false, model_limits_enabled: true, model_limits: gpt-4o,claude-3-5-sonnet-20241022, allow_ips: }remain_quota是剩余额度单位是 One-API 内部的 quota通常 500000 对应 1 美元左右具体换算看你的倍率设置。expired_time: -1表示永不过期。model_limits可以限制这个令牌只能用哪些模型生产环境建议开启避免误调用高价模型。创建令牌后One-API 会生成一个形如sk-xxxxxxxx的密钥。这个就是你未来在代码里填的 API Key。注意这个 Key 和上游的真实 Key 完全不同泄露了可以在 One-API 里直接删除重建不影响上游。最后如果你用的是 Claude Code 这类工具它的配置文件和 One-API 的对接方式略有不同。Claude Code 需要设置ANTHROPIC_BASE_URL和ANTHROPIC_API_KEY但 One-API 默认走 OpenAI 格式所以你需要确认 One-API 是否开启了 Anthropic 格式的兼容端点。如果没有建议通过 TaoToken 的 Claude Code 专用接入方式参考 https://taotoken.net/claude-code?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content 里的说明。如果你用的是 Cline、Cursor 这类支持 OpenAI 格式的工具直接填 One-API 的地址和令牌即可。4. 验证请求与调用日志计费口径配置完成后不要急着改生产代码。先用一条 curl 命令验证整条链路是否通。假设你的 One-API 公网地址是https://oneapi-xxxx.sealos.run令牌是sk-oneapi-token请求如下curl -X POST https://oneapi-xxxx.sealos.run/v1/chat/completions \ -H Authorization: Bearer sk-oneapi-token \ -H Content-Type: application/json \ -d { model: gpt-4o, messages: [{role: user, content: 只回复两个字通了}], max_tokens: 20 }如果返回类似下面的结构说明链路通了{ id: chatcmpl-xxxx, object: chat.completion, model: gpt-4o, choices: [ { index: 0, message: {role: assistant, content: 通了}, finish_reason: stop } ], usage: {prompt_tokens: 12, completion_tokens: 2, total_tokens: 14} }重点看usage字段。这个字段是 One-API 计费的依据。如果usage为空或者全是 0说明上游没有返回用量信息One-API 可能无法准确计费。TaoToken 作为上游会返回标准的 usage所以正常情况下这里应该有值。接下来验证日志。进入 One-API 管理后台左侧菜单「日志」你应该能看到刚才那条请求的记录包含令牌名称、模型、消耗额度、耗时。如果日志里显示「无可用渠道」或者「渠道错误」说明渠道配置有问题回到上一节检查 base_url 和 key。这里有一个关键验证点计费口径一致性。One-API 的日志里会显示这次请求消耗了多少 quota而 TaoToken 控制台也会显示这次请求的消耗。两边应该能对上。如果对不上常见原因是 One-API 的模型倍率设置和 TaoToken 的计费倍率不一致。你可以在 One-API 的「运营设置」→「模型倍率」里调整让两边口径一致。我实测下来最容易出问题的是模型名映射。比如你在 One-API 渠道里填的模型名是claude-3-5-sonnet-20241022但 TaoToken 那边实际接受的模型名可能是claude-3-5-sonnet-latest。这种不一致会导致请求转发到上游后报「模型不存在」。解决办法是在 One-API 的「模型映射」里做一层转换或者在渠道的 models 字段里填上游实际接受的名称。验证通过后再改你的应用代码。以 Python OpenAI SDK 为例from openai import OpenAI client OpenAI( base_urlhttps://oneapi-xxxx.sealos.run/v1, api_keysk-oneapi-token ) resp client.chat.completions.create( modelgpt-4o, messages[{role: user, content: 你好}] ) print(resp.choices[0].message.content)注意base_url要带/v1api_key填 One-API 令牌不是上游 Key。改完这两处你的应用就从「直连多个上游」变成了「走统一通道」。如果你用的是 Claude Code配置方式不同。Claude Code 读的是环境变量ANTHROPIC_BASE_URL和ANTHROPIC_API_KEY而且它走的是 Anthropic 的 Messages API 格式不是 OpenAI 的 Chat Completions 格式。所以你不能直接把 One-API 的地址填进去除非 One-API 开启了 Anthropic 兼容模式。更稳妥的做法是参考 TaoToken 的 Claude Code 接入文档用它的专用端点。同理Codex 的auth.json配置也需要对应的格式不能直接套用 OpenAI 的配置。5. 常见报错排查401、local proxy failed、reading choices这一节列出我在配置过程中真实遇到过的报错以及对应的排查路径。这些报错在 One-API Sealos TaoToken 的组合里出现频率很高。报错一401 Unauthorized{error:{message:invalid api key,type:invalid_request_error}}这个报错有两个可能的位置。一是你的应用填的 One-API 令牌不对检查Authorization: Bearer sk-xxx里的 Key 是否和 One-API 后台生成的令牌一致。二是 One-API 转发到 TaoToken 时渠道里填的 TaoToken Key 不对。区分方法看 One-API 日志。如果日志里显示请求进来了但渠道报错就是渠道 Key 的问题如果日志里根本没有这条请求就是应用侧的令牌问题。还有一种情况是 One-API 的CRYPTO_SECRET变了。One-API 用这个密钥加密存储上游 Key如果你改了它之前存的渠道 Key 全部解不开就会报 401。解决办法是重新填一遍渠道 Key或者把CRYPTO_SECRET改回去。报错二local proxy failed{error:{message:local proxy failed: dial tcp: lookup taotoken.net: no such host}}这个报错说明 One-API 容器无法解析taotoken.net这个域名。常见原因是 Sealos 部署的 One-API 容器 DNS 配置有问题或者你的渠道 base_url 填错了。先检查 base_url 是不是https://taotoken.net/api注意不要多填或少填/api。如果地址没错可能是容器网络问题尝试重启 One-API 应用。另一个变体是connection refused说明域名解析通了但端口连不上。检查你的 base_url 是不是写成了http://而不是https://TaoToken 的 API 端点走 HTTPS。报错三reading choices{error:{message:reading choices: unexpected end of JSON input}}这个报错通常出现在 One-API 转发请求后上游返回了非 JSON 格式的响应One-API 解析失败。原因可能是 TaoToken 返回了错误页比如 502、503而 One-API 期望的是标准 JSON。排查方法直接 curl TaoToken 的端点看返回什么。如果 TaoToken 本身正常那可能是 One-API 的模型名和 TaoToken 支持的模型名不匹配导致上游返回错误。还有一种可能是流式请求streamtrue时One-API 的版本对 SSE 解析有问题。尝试先用非流式请求验证如果非流式正常、流式报错就是版本兼容问题升级 One-API 到最新版。报错四OAuth 相关错误如果你在配置 Claude Code 或 Codex 时看到 OAuth 报错比如OAuth token exchange failed说明你用的工具走的是 OAuth 流程而不是简单的 API Key 认证。One-API 默认不支持 OAuth 代理你需要用支持 API Key 直连的方式。Claude Code 可以通过设置ANTHROPIC_API_KEY绕过 OAuthCodex 则需要在auth.json里配置 API Key 模式。具体格式参考 TaoToken 的文档不要自己猜。排查通用步骤遇到任何报错按这个顺序排查第一步直接 curl TaoToken 端点确认上游本身可用第二步curl One-API 端点确认 One-API 本身可用第三步看 One-API 日志确认请求是否到达、渠道是否命中第四步看 TaoToken 控制台的调用记录确认请求是否到达上游。这四步能定位 90% 的问题。另外提醒一点One-API 的渠道「测试」按钮有时候会误报。它发的是一个简单的请求如果模型名不对或者上游限流会显示失败但实际调用可能是通的。所以测试按钮失败不代表渠道一定有问题以实际 curl 结果为准。6. 把统一 Key 通道用起来从验证到长期使用走到这里你应该已经完成了 Sealos 部署 One-API、配置 TaoToken 统一渠道、生成令牌、验证请求、排查报错的完整流程。最后说几个长期使用时的实用建议。第一令牌按环境拆分。生产环境一个令牌本地开发一个令牌CI/CD 一个令牌。这样某个令牌泄露或额度异常时你能快速定位是哪个环节也能单独禁用而不影响其他环境。One-API 的令牌支持设置额度上限和过期时间生产令牌建议设额度告警。第二渠道配置做好备份。Sealos 部署的 One-API 如果没接外部数据库容器重启可能丢数据。你可以通过 One-API 的「渠道」页面导出配置或者直接用它的 API 拉取渠道列表存下来。更稳妥的做法是接一个 PostgreSQL把SQL_DSN指向它。第三模型名映射要维护好。One-API 的模型名和上游实际模型名不一致是高频问题。建议在渠道的「模型映射」里做一层转换把对外暴露的模型名统一成你团队习惯的叫法内部映射到上游实际名称。这样即使上游改了模型名你只需要改映射不用改所有应用的代码。第四计费口径定期对账。One-API 的日志和 TaoToken 控制台的消耗应该能对上。如果发现偏差先检查模型倍率设置再检查是否有请求绕过了 One-API 直连上游。长期来看统一通道的价值之一就是让计费可追溯别浪费这个能力。如果你还在用分散的密钥直连各个上游建议先把最常用的两三个模型接到 One-API 里跑通验证流程再逐步迁移其他模型。迁移过程中保持旧通道可用确认新通道稳定后再下线旧的。这样风险最小。需要生成 TaoToken Key 的话入口在 https://taotoken.net/api-keys?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content 接入文档在 https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content 。如果你打算长期做编码类 Agent 或需要稳定的统一通道可以了解 Coding Planhttps://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content 。模型对话测试用 https://taotoken.net/models?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content 就够了。
RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进