1. 企业多团队共用 API 的真实痛点
如果你所在的公司有研发一部、产品二部、算法组、外包团队同时要用大模型,大概率会遇到这几个问题:采购回来的 API Key 散落在各个负责人手里,谁用了多少 Token 完全靠自觉;某个团队把 Key 泄露出去,账单暴涨却查不到源头;不同项目组调用同一个模型,但计费口径、模型命名五花八门,月底对账像破案。
NewAPI 网关就是来解决这类问题的。它本身是一个开源的 OpenAI 兼容网关,能把上游各家模型厂商的 Key 统一收口,再按分组、令牌、配额的方式分发给内部用户,同时记录每一次调用的 Token 消耗。适合谁?适合有 5 人以上团队、需要做 API 成本归因和权限隔离的技术负责人或运维同学。
这篇聚焦两件事:一是用 Docker Compose 把 NewAPI 网关在企业内网跑起来,二是把 TaoToken 的统一 Key 接进网关,让多团队共用一套入口。整个过程我会给出可直接复制的docker-compose.yml骨架、settings.json/config.toml示例,以及启动后验证 Token 计量和限额是否生效的具体命令。踩过的坑我也会标出来,比如端口映射、模型映射写错导致 404、令牌配额单位看错这类高频问题。
2. TaoToken 前置准备:统一 Key 与接入信息
在把网关跑起来之前,先把上游的接入信息准备好。TaoToken 在这里扮演的是「统一 Key 提供方」的角色——你从它这里拿到一个 Key 和 Base URL,填进 NewAPI 的渠道配置里,网关就能通过它去调用背后的模型。
需要提前确认三样东西:
第一是 API Key。登录控制台后在 API Keys 页面创建,建议按「网关专用」命名,方便后续审计时区分是网关在调用还是个人在调用。创建入口在 https://taotoken.net/api-keys ,创建后只显示一次,记得立刻复制保存。
第二是 Base URL。TaoToken 的 API 端点是https://taotoken.net/api,注意这里不要加任何 UTM 参数,直接用它作为渠道的代理地址即可。NewAPI 里填的 Base URL 要精确到版本路径,OpenAI 兼容模式通常填https://taotoken.net/api/v1,Claude 模式填https://taotoken.net/api,具体以你选的渠道类型为准。
第三是模型清单。在 https://taotoken.net/doc 里能看到当前支持的模型 ID,比如glm-4.7、kimi-k2.5这类。这些真实 ID 后面要填进 NewAPI 的模型映射右侧,写错了会直接返回模型不存在。
提示:企业场景建议单独申请一个「网关专用 Key」,不要和个人开发用的 Key 混在一起。这样在 TaoToken 侧的用量统计里,网关消耗和个人消耗是分开的,对账时省事。
如果你还想先验证一下 Key 能不能通,可以打开 https://taotoken.net/model-conversation 用模型对话页面发一条测试消息,确认返回正常再往下走。这一步能排除掉 Key 本身无效、余额不足这类低级问题。
3. Docker Compose 部署 NewAPI 网关
3.1 前置条件与目录准备
一台 Linux 服务器,Ubuntu 22.04 或 CentOS 7+ 都行,已经装好 Docker 和 Docker Compose 插件。配置建议最低 4 核 8G,因为 postgres 和 Redis 会一起吃内存。磁盘留 40G 以上,日志和调用记录会持续增长。
先建目录并拉代码:
mkdir -p /opt/newapi && cd /opt/newapi git clone https://github.com/QuantumNous/new-api.git . git checkout v1.0.0-rc.4版本号以仓库最新 release 为准,这里只是示例。checkout 完先别急着up,下一步要改配置。
3.2 可复制的 docker-compose.yml 骨架
项目自带的 compose 文件已经包含 postgres、Redis、NewAPI 三个服务,但默认密码是 123456,端口也未必符合你的内网规划。下面是我调整过的骨架,你可以直接覆盖:
version: "3.8" services: new-api: image: calciumion/new-api:latest container_name: new-api restart: always ports: - "3000:3000" environment: - SQL_DSN=postgresql://newapi:YourStrongPass@postgres:5432/newapi - REDIS_CONN_STRING=redis://redis:6379 - TZ=Asia/Shanghai depends_on: - postgres - redis volumes: - ./data:/data postgres: image: postgres:15 container_name: new-api-pg restart: always environment: - POSTGRES_USER=newapi - POSTGRES_PASSWORD=YourStrongPass - POSTGRES_DB=newapi volumes: - ./pgdata:/var/lib/postgresql/data redis: image: redis:7-alpine container_name: new-api-redis restart: always volumes: - ./redisdata:/data几个关键点:SQL_DSN里的密码要和 postgres 服务的POSTGRES_PASSWORD完全一致,否则网关起不来会一直重连数据库;端口映射3000:3000左边是宿主机端口,内网如果走 80 就改成80:3000;TZ设成上海时区,不然日志时间对不上,排查问题时很痛苦。
改完执行:
docker compose up -d docker compose ps三个服务都显示running或healthy才算成功。如果 new-api 反复重启,先看日志:
docker logs --tail=100 new-api常见报错是password authentication failed,那就是 DSN 密码和 postgres 密码不一致。
3.3 初始化与基础安全设置
浏览器访问http://服务器IP:3000,首次进入是初始化引导,设置管理员账号密码。这个密码后面所有管理操作都要用,记牢。
初始化完成后,按企业内网的要求做几项收紧:
在「系统设置」→「速率限制设置」里启用用户模型请求速率限制,限制周期 1 分钟,每周期最多请求次数按团队规模设,50 次是个保守起点。
在「系统设置」→「系统设置」的登录注册处,关闭「允许通过免密码进行注册」和「允许新用户注册」。企业内网账号统一由管理员创建,不允许自助注册。
在「系统设置」→「顶栏管理」里关闭模型广场和关于页面,减少普通用户误操作入口。绘图功能如果不用,在「绘图设置」里全部关掉。
4. TaoToken 统一 Key 接入配置
4.1 添加渠道并填入 TaoToken Key
管理员登录后进入「渠道」页面,点新建。服务商类型选 OpenAI 或 Claude,取决于你打算用哪种接入方式。名称按来源构建,比如taotoken-gw-01,方便后面识别。
密钥字段填入你在 TaoToken 创建的网关专用 Key。高级配置里的 Base URL 必须填,OpenAI 兼容模式填https://taotoken.net/api/v1,Claude 模式填https://taotoken.net/api。模型列表里手动勾选或输入你要开放的模型 ID,比如glm-4.7、kimi-k2.5。
保存后可以点渠道旁边的测试按钮,返回成功说明 Key 和地址都对。
4.2 模型映射:统一内部叫法
企业内部通常不希望用户直接看到上游那串原始模型 ID,而是用统一命名。NewAPI 的模型映射就是干这个的。编辑渠道 → 高级配置 → 模型映射,填入 JSON:
{ "corp-glm-4.7": "glm-4.7", "corp-kimi-k2.5": "kimi-k2.5", "corp-kimi-k2.6": "kimi-k2.6" }左边是用户调用时传的模型名,右边是 TaoToken 侧的真实模型 ID。注意右侧必须是真实存在的 ID,写错会返回模型不存在。映射只在当前渠道生效,不同渠道可以有不同的规则。
4.3 分组与令牌分发
在「系统设置」→「分组与模型定价设置」里添加部门分组,比如「研发一部」「产品二部」。倍率都按 1 设计,避免内部结算时还要换算。
然后创建令牌。进入「令牌管理」,按使用人命名,比如「张三-研发一部」。令牌分组选对应部门,过期时间按需设,配额上限初始给一个合理值,模型限制选「所有配置模型」。令牌创建后只显示一次,复制给对应同事。
4.4 客户端接入示例
OpenCode 用户修改~/.config/opencode/opencode.jsonc:
{ "provider": { "corp": { "name": "corp", "npm": "@ai-sdk/openai-compatible", "models": { "corp-glm-4.7": { "limit": { "context": 200000, "output": 65536 }, "name": "corp-glm-4.7" } }, "options": { "baseURL": "http://你的服务器IP:3000/v1", "apiKey": "在NewAPI创建的令牌" } } }, "$schema": "https://opencode.ai/config.json" }Claude Code 用户修改~/.claude/settings.json:
{ "env": { "ANTHROPIC_DEFAULT_HAIKU_MODEL": "corp-glm-4.7", "ANTHROPIC_DEFAULT_SONNET_MODEL": "corp-kimi-k2.5", "ANTHROPIC_AUTH_TOKEN": "在NewAPI创建的令牌", "ANTHROPIC_BASE_URL": "http://你的服务器IP:3000", "API_TIMEOUT_MS": "3000000" } }Base URL 指向网关地址,不是 TaoToken 地址。这一点容易搞混——网关才是统一入口,TaoToken 是网关背后的上游。
5. 验证请求与 Token 计量生效
配置完别急着交付,先做一轮验证。用 curl 直接打网关的 OpenAI 兼容接口:
curl http://你的服务器IP:3000/v1/chat/completions \ -H "Authorization: Bearer 你的令牌" \ -H "Content-Type: application/json" \ -d '{ "model": "corp-glm-4.7", "messages": [{"role": "user", "content": "只回复两个字:收到"}] }'返回里应该有正常的choices结构。如果返回 404 且提示模型不存在,检查模型映射右侧的真实 ID 是否写对;如果返回 401,检查令牌是否复制完整。
调用成功后,回到 NewAPI 后台「使用」页面,应该能看到刚才这条调用记录:时间、用户、模型、Token 消耗量、配额扣减详情都在。这一步是验证 Token 计量生效的关键——如果记录里 Token 消耗是 0,说明上游返回的 usage 字段没被正确解析,需要检查渠道类型是否选对。
再验证限额:把某个令牌的配额上限临时改成一个很小的值,比如 1000 Token,然后连续调用几次,观察是否在超出后被拒绝。返回 429 或配额不足提示,说明限额生效。
6. 本篇常见错排查
网关启动后访问 502:多半是 new-api 容器没起来,docker logs new-api看是不是数据库连接失败。DSN 密码和 postgres 密码不一致是最常见原因。
调用返回模型不存在:模型映射右侧写错了,或者渠道的模型列表里没勾选这个模型。右侧必须是 TaoToken 侧真实存在的 ID,可以在渠道的模型下拉列表里核对。
Token 消耗显示为 0:渠道类型选错了。OpenAI 兼容接口和 Claude 接口返回的 usage 结构不同,选错会导致解析不到。确认你填的 Base URL 和渠道类型匹配。
令牌配额扣减不对:检查模型定价设置里的倍率,如果倍率不是 1,扣减量会按倍率放大。内部结算建议统一倍率为 1。
客户端连不上网关:Base URL 末尾的/v1有没有漏。OpenAI 兼容模式需要/v1,Claude 模式不需要。另外确认客户端所在网络能访问网关的宿主机端口。
排障过程中如果怀疑是上游 Key 的问题,可以到 https://taotoken.net/api-keys 确认 Key 状态和余额;接入配置的细节可以对照 https://taotoken.net/doc 里的说明逐项核对。长期做编码和 Agent 场景的团队,可以考虑用 Coding Plan 把配额和模型绑定得更细,入口在 https://taotoken.net/coding-plan 。