自建 New API 模型网关:统一管理 Claude、OpenAI 和 Gemini,并接入 Claude Code 与 Codex
用 Zenavo 在自己的服务器上部署 New API,把多个模型服务商统一成一个接口,按人发放密钥和额度,再让 Claude Code、Codex CLI 和 Open WebUI 通过它调用模型。
本文亦提供 English、繁體中文、日本語、Español 和 Bahasa Indonesia。
团队里有人用 Claude Code,有人用 Codex CLI,还有人在 Open WebUI 里聊天。每个工具各填一份服务商密钥,用量分散在不同账单里,谁用了多少、哪把密钥该收回,都很难说清。
New API 是一个开源的模型网关:你把 OpenAI、Anthropic、Gemini 等服务商的 API Key 配在它后面,再给每个人或每个工具发一把它自己签发的密钥,并设置可用模型和额度。它同时提供 OpenAI Chat Completions、Responses、Anthropic Messages 和 Gemini 格式的接口,所以常见的编码工具都能直接接入。
这篇文章用 Zenavo 的 New API 模板,把网关部署到你租用或自有的服务器上。服务器、Zenavo 平台和上游模型 API 分别计费;New API 只负责转发和记账,不会让模型调用变便宜。New API 侧重团队多成员的密钥分发与额度记账;如果主要是给自己或小团队的编码代理(Claude Code、Codex)做多协议翻译与故障切换,也可以看更轻量的 Magpie。
部署 New API
先在 Zenavo 中连接一台 Linux 服务器,再打开 New API 模板,选择服务器并部署。
当前模板的配置如下:
| 配置 | 值或用途 |
|---|---|
| 镜像 | calciumion/new-api:latest |
| HTTP 端口 | 3000 |
| 持久化目录 | /data,默认的 SQLite 数据库和日志都在这里 |
SESSION_SECRET |
项目创建时自动生成,用于登录会话 |
TZ |
UTC,可改成你习惯的时区 |
latest 会随上游更新。准备长期使用时,在服务 设置 的 来源 中把镜像标签改成你验证过的固定版本,并记录下来。
绑定域名,立刻完成初始化
在 new-api 服务的 网络 页为 3000 端口绑定域名,例如 ai.example.com,在 DNS 添加指向服务器的 A 记录,等待 HTTPS 生效。步骤见域名文档。
第一次打开网站时,New API 会进入初始化向导,由你创建管理员账号。网关拿到上游密钥后就能花钱,所以域名一生效就自己完成初始化,再检查系统设置里是否允许新用户自行注册:只给自己和团队用时,关闭公开注册,由管理员创建账号。
添加渠道:接入上游服务商
New API 把每个上游连接叫作 渠道。在 渠道 页新增一个,选择服务商类型,填入该服务商的 API Key 和要开放的模型,保存后点 测试,确认能返回结果。
几点建议:
- 上游密钥只填在渠道里,不要写进 Zenavo 的变量,也不要出现在截图和聊天记录中。
- 为渠道取清楚的名字,比如“Anthropic 官方”,方便以后看日志和停用。
- 只开放实际要用的模型。界面能列出模型,不代表你的上游账号都有权限调用。
- 使用服务商的正式 API 密钥,并遵守其使用条款。不要把个人聊天订阅账号包装成 API 分发给别人。
发放密钥和额度
在 令牌 页为每个人或每个工具创建一把密钥,设置可用模型、额度和有效期。这把 sk- 开头的密钥由 New API 签发,泄露时只需在这里删除它,不必去上游服务商轮换主密钥。
建议按“人 × 工具”分开发放,例如“小王的 Claude Code”和“小王的 Open WebUI”。这样用量统计一目了然,收回权限时也不会误伤别的工具。
接入 Claude Code
Claude Code 支持通过环境变量把请求发给自定义的 Anthropic Messages 兼容地址。在你的电脑上设置:
export ANTHROPIC_BASE_URL="https://ai.example.com"
export ANTHROPIC_AUTH_TOKEN="sk-你在 New API 创建的令牌"
claude
ANTHROPIC_BASE_URL 只写域名,不要加 /v1,Claude Code 会自己拼上 /v1/messages。如果请求的模型名与渠道里配置的不一致,可以在 New API 的渠道中设置模型映射,或用 Claude Code 的 /model 选择网关提供的模型。如果你想直接在 Claude Code 里用 MCP 和 Skills 查看日志、部署与回滚 Zenavo 服务,可以接着看用 Claude Code 部署和调试 Zenavo 项目。
接入 Codex CLI
Codex CLI 在 ~/.codex/config.toml 中定义自定义服务商。下面的模型名换成你在渠道里开放的模型:
model = "你在渠道里开放的模型名"
model_provider = "newapi"
[model_providers.newapi]
name = "New API"
base_url = "https://ai.example.com/v1"
env_key = "NEWAPI_API_KEY"
wire_api = "responses"
然后在终端设置 export NEWAPI_API_KEY="sk-…" 再运行 codex。注意这里的 base_url 要带 /v1,与 Claude Code 不同。
接入 Open WebUI 与 LobeHub
如果已经按这篇文章部署了 Open WebUI,在 Settings → Admin → Connections 添加 OpenAI 兼容连接:Base URL 填 https://ai.example.com/v1,API Key 填一把专门给 Open WebUI 的令牌。如果用的是 LobeHub,同样在服务商设置或 OPENAI_PROXY_URL 中填入 https://ai.example.com/v1 即可。
两者在同一个 Zenavo 项目里时(用 添加服务 → 模板 把 New API 加进 Open WebUI 所在项目),也可以走私有网络:http://new-api.zenavo.internal:3000/v1。这样请求不经过公网,详见私有网络。
备份与升级
New API 的账号、渠道和令牌都在 /data 卷里,其中包括上游服务商的密钥,备份文件要按密钥同等级别保管。
在维护窗口停止项目,在 new-api 服务的 备份与恢复 中备份数据卷,完成后启动项目,并下载一份自行保存。升级前先读目标版本的发行说明,先备份再更换镜像版本。升级如果改动了数据库结构,单纯换回旧镜像不一定能回退,需要恢复升级前的备份。
常见问题
Claude Code 报 404 或连接失败?
先检查 ANTHROPIC_BASE_URL 是否多写了 /v1,再在 New API 的日志里看请求是否到达、用的是哪个模型名。
Codex 提示模型不存在?
config.toml 中的 model 必须是渠道里开放、且令牌允许使用的模型名。也确认 wire_api 设为 responses。
New API 会保存对话内容吗? 它会记录调用日志和用量,具体记录哪些字段取决于版本和设置。请求内容仍会发送给上游服务商,网关部署在自己的服务器上,不代表数据只留在本机。
一台小服务器够用吗? New API 本身很轻,主要压力来自并发请求数。多人同时长时间流式输出时,留意服务器的内存和带宽。
从 New API 模板开始:先完成初始化和关闭公开注册,再接入渠道、发放令牌,最后把编码工具指向它。
这是 coding agent 读到的内容,地址是 https://zenavo.app/zh-CN/blog/self-host-new-api.md。
无法加载 Markdown,请直接打开: https://zenavo.app/zh-CN/blog/self-host-new-api.md