从零搭建 AI 模型中转网关:部署、渠道、定价、装修全记录
本文记录了使用 new-api 搭建 AI 模型 API 聚合网关的完整过程,涵盖 Docker 部署、Cloudflare Tunnel 公网接入、多渠道配置、定价体系、前台装修等技术细节,以及踩过的所有坑。适合想自己搭建 API 中转服务的同学参考。new-api 是 one-api 的分支,相比原版主要多了以下能力:
- OpenAI + Anthropic 双协议兼容:用户不用改代码,换 base_url 就能用
- 多渠道负载均衡 + 自动故障转移:同模型多通道,一个挂了自动切
- 完整计费体系:按 token 计费、分组折扣、充值额度
- React 前端 :主页/定价/文档/关于全可自定义```yaml
version: '3'
services:
new-api:
image: calciumion/new-api:latest
container_name: new-api
restart: always
ports:-
"3000:3000"
volumes: -
./data:/data
-
./logs:/app/logs
environment: -
TZ=Asia/Shanghai
-
INITIAL_ROOT_TOKEN=your_initial_token
bashdocker compose up -d
-
启动后访问 http://localhost:3000,默认管理员账号 root / 123456,第一时间改密码。
2.2 坑:数据库
- 默认用 SQLite,数据库文件在
/data/one-api.db(不是new-api.db,后者是空壳) - 直接改 SQLite 不生效------有内存缓存,改完必须重启容器或通过 API 操作
- 量大了可以换 MySQL/PostgreSQL,个人站 SQLite 够用
三、公网接入:Cloudflare Tunnel
3.1 为什么用 Tunnel
- 不用开放公网端口,安全
- 自带 HTTPS,不用管证书续期
- CDN 加速
3.2 部署 cloudflared
bash
docker run -d --name cloudflared \
--restart unless-stopped \
cloudflare/cloudflared:latest \
tunnel --no-autoupdate run
3.3 最大的坑:远程配置 vs 本地配置
cloudflared 有两种配置模式:
- 本地配置 (
config.yml):简单场景 - 远程配置(CF API 管理):cloudflared 从 CF API 拉取
如果 tunnel 开了 allow_remote_config,改本地 config.yml 完全不生效!必须通过 CF API 修改:
bash
curl -X PUT \
"https://api.cloudflare.com/client/v4/accounts/{account_id}/cfd_tunnel/{tunnel_id}/configurations" \
-H "Authorization: Bearer {cf_token}" \
-H "Content-Type: application/json" \
-d '{"config":{"ingress":[{"hostname":"api.yourdomain.com","service":"http://localhost:3000"},{"service":"http_status:404"}]}}'
改完看日志,出现 Updated to new configuration 才生效。
3.4 其他 Tunnel 坑
- 回源必须 HTTP 端口,指 HTTPS 端口会报
400 plain HTTP - DNS 加 CNAME:
api.yourdomain.com → {tunnel_id}.cfargotunnel.com
四、渠道配置
4.1 渠道是什么
一个渠道 = 一个上游 API 供应商。同一个模型可以配置多个渠道实现冗余。
4.2 添加渠道
| 字段 | 说明 |
|---|---|
| 类型 | OpenAI / Anthropic / 自定义 |
| Base URL | 上游 API 地址 |
| 密钥 | 上游 API Key |
| 模型 | 支持哪些模型(逗号分隔) |
| 分组 | 对哪些用户组开放 |
4.3 负载均衡 + 故障转移
同模型多渠道自动轮询。渠道禁用后(余额耗尽、上游报错)自动切到其他渠道,用户无感。
4.4 坑
- 分组字段是 combobox,JS 模拟 Enter 无效,必须真实输入触发下拉
- PUT
/api/channel/传 GET 完整对象有时报「无效的参数」,改用 UI 编辑
4.5 Anthropic 协议
接入 Claude Code 用户需配 Anthropic 协议渠道。端点分类用 OpenAI 兼容 和 Anthropic 兼容------不要写成"OpenAI 兼容"和"Claude Code 接入",前者是协议名后者是工具名。
五、定价体系
5.1 核心参数
| 参数 | 含义 |
|---|---|
| ModelRatio | 输入 token 倍率(1 = $0.002/1K) |
| CompletionRatio | 输出 ÷ 输入倍率 |
| GroupRatio | 用户组折扣(0.5 = 5折) |
| USDExchangeRate | 1 💰 = 多少元 |
| Price | 充 1 💰 付多少钱 |
5.2 定价公式
售价 $/M = ModelRatio × 2
ModelRatio = 官方输入价 $/M × 0.5(海外)
ModelRatio = 官方输入价 ¥/M ÷ 14.4(国内)
CompletionRatio = 官方输出价 ÷ 官方输入价
5.3 货币与充值
货币符号:💰(不要用 🪙,多数字体不渲染)
1 💰 = 1 USD 额度
充值汇率 0.5(充 1 💰 付 0.5 元)
最低充值 10 💰
关键 :Price 必须等于 USDExchangeRate,否则充值金额和展示价格对不上。
5.4 分组折扣
json
GroupRatio = {"default": 1, "lite": 0.5}
default:正常价,新用户默认进这组lite:5 折优惠
5.5 新用户额度
QuotaForNewUser = 5000000(= 10 💰)
QuotaForInviter = 5000000(邀请人得 10 💰)
QuotaForInvitee = 5000000(被邀请人得 10 💰)
六、前台装修
6.1 可自定义内容
| 选项 | 格式 | 说明 |
|---|---|---|
| HomePageContent | HTML | 主页 |
| About | HTML | 关于页 |
| Notice | 纯文本 | 顶部公告条 |
| Footer | 纯文本 | 页脚 |
| announcements | JSON | 公告卡片 |
| faq | JSON | FAQ |
| 用户协议/隐私政策 | Markdown | 不能用 HTML |
6.2 坑
- 协议必须用 Markdown,填 HTML 会露出源码
- 公告 type 只有
success/ongoing/default,没有info - 主页内容区
dangerouslySetInnerHTML渲染,script 不执行 - API 返回 snake_case(
home_page_content),设置用 camelCase(HomePageContent) - 不要写死模型版本号------只写厂商名,加减模型不用改主页
- 不要写"与官方同价"------没有差异化优势
6.3 API 操作
所有配置可通过 API 操作,不用每次登录后台:
python
login = api("POST", "/api/user/login", {"username": "admin", "password": "xxx"})
token = login["data"]["access_token"]
r = api("GET", "/api/option/", token=token)
api("PUT", "/api/option/", {"key": "HomePageContent", "value": "<div>HTML</div>"}, token=to## 七、支付方案对比
### 7.1 支付方案选择注意事项
支付接入是搭建 API 中转站的重要环节,不同方案有不同的资质要求和成本结构。以下是几种常见方案的对比:
### 7.2 各方案对比
| 方案名称 | 是否需要营业执照 | 成本构成(开户费+费率) | 自动化程度 | 适用场景 | 优点 | 缺点 |
|--------|----------------|----------------------|----------|---------|------|------|
| 官方直连 | 是 | 无开户费,费率约0.6% | 全自动(实时到账) | 有营业执照,追求低费率与正规化 | 费率低,用户支付体验好,官方支持稳定 | 必须营业执照,申请流程较长 |
| 第三方支付平台 | 是 | 开户费88-118元,另加1-2%平台费+0.6%官方费率 | 全自动 | 有执照但不愿直接对接官方,想快速接入 | 接入简单,支持多通道 | 实际总成本高于直连,且依赖第三方平台 |
| 卡密充值 | 否 | 0元(自行生成卡密,通过支付手动确认) | 手动(需运营人员后台确认充值) | 无营业执照,个人/小团队测试阶段 | 零成本,无资质门槛,灵活 | 完全手动,用户充值体验差,效率低 |
| 办理执照后接入 | 否→是(办理后获得) | 办执照几十元(自己办)或代办几百元;后续可走直连或第三方费率 | 取得执照后方可全自动 | 希望长远正规运营,愿意先花时间办理执照 | 一次性投入,后续可享受正规支付渠道 | 办理周期 1-2 周,有一定时间成本 |2周后全自动 |
## 八、踩坑总结
- **Docker**:绝不改 systemd docker 配置,不擅自 restart docker,拉镜像用国内源
- **Tunnel**:远程配置模式改本地不生效,回源必须 HTTP
- **API**:分页用 `?page=N`,直接改 SQLite 不生效
- **装修**:协议用 Markdown,不写死型号,不
## 常见问题(FAQ)
**Q1:忘记了管理员密码,如何重置?**
如果邮箱/SMTP 配置可用,可通过「忘记密码」流程重置;如果无法收到邮件,需要通过直接操作数据库来重置。对于默认的 SQLite,执行:
```bash
docker exec -it new-api sqlite3 /data/one-api.db
然后更新 users 表中对应用户的密码字段(需使用 bcrypt 哈希后的值)。也可以重新设置环境变量 INITIAL_ROOT_TOKEN 并重启容器,再用该 token 登录后修改密码。
Q2:如何查看详细的请求日志,方便排查上游 API 错误?
默认情况下 new-api 会将请求日志输出到容器标准输出,通过 docker logs new-api 即可查看。如需更详细的请求/响应内容,可以在 docker-compose.yml 中增加环境变量:
yaml
- LOGGING_LEVEL=debug
重启后日志将包含完整的请求参数与返回体。此外,在管理后台的「系统设置」中开启「日志记录」功能,也可以在界面上查看历史请求。
Q3:如何在不重启服务的情况下新增模型?
只需要在对应渠道的「模型」字段中添加新的模型标识(与上游 API 返回的模型 ID 完全一致),多个模型用英文逗号分隔。添加后无需重启,new-api 会在下一次请求时自动识别新模型并路由到该渠道。
Q4:从 SQLite 切换到 MySQL/PostgreSQL 需要注意什么?
- 在
docker-compose.yml中引入对应的数据库服务(如 MySQL),并配置环境变量:SQL_DRIVER=mysqlSQL_DSN=user:password@tcp(mysql:3306)/newapi?charset=utf8mb4&parseTime=True&loc=Local
- 首次启动前需要手动创建数据库并导入 new-api 的表结构(可从项目中获取 SQL 文件)。
- 如需迁移现有 SQLite 数据,建议先通过 new-api 的 API 导出关键配置,再导入新库,避免直接拷贝数据库文件。
Q5:上游 API 经常触发限流或超时怎么办?
为同一模型配置多个渠道(例如不同供应商的 key 或多个同供应商的子账号)即可。new-api 会自动在同模型的多个渠道间轮询,当一个渠道因限流被禁用后,流量会自动转移到其他可用渠道,用户端无感知。此外,可以在渠道设置中适当调整「超时时间」和「重试次数」## 七、支付方案对比
7.1 支付方案选择注意事项
支付接入是搭建 API 中转站的重要环节,不同方案有不同的资质要求和成本结构。以下是几种常见方案的对比:
7.2 各方案对比
| 方案名称 | 是否需要营业执照 | 成本构成(开户费+费率) | 自动化程度 | 适用场景 | 优点 | 缺点 |
|---|---|---|---|---|---|---|
| 官方直连 | 是 | 无开户费,费率约0.6% | 全自动(实时到账) | 有营业执照,追求低费率与正规化 | 费率低,用户支付体验好,官方支持稳定 | 必须营业执照,申请流程较长 |
| 第三方支付平台 | 是 | 开户费88-118元,另加1-2%平台费+0.6%官方费率 | 全自动 | 有执照但不愿直接对接官方,想快速接入 | 接入简单,支持多通道 | 实际总成本高于直连,且依赖第三方平台 |
| 卡密充值 | 否 | 0元(自行生成卡密,通过支付手动确认) | 手动(需运营人员后台确认充值) | 无营业执照,个人/小团队测试阶段 | 零成本,无资质门槛,灵活 | 完全手动,用户充值体验差,效率低 |
| 办理执照后接入 | 否→是(办理后获得) | 办执照几十元(自己办)或代办几百元;后续可走直连或第三方费率 | 取得执照后方可全自动 | 希望长远正规运营,愿意先花时间办理执照 | 一次性投入,后续可享受正规支付渠道 | 办理周期 1-2 周,有一定时间成本 |