自建一个 AI 模型中转站
手上有好几个模型来源:Gemini 的反代、某东家送的 GPT 额度、智谱清言的游客接口、还有一堆开源模型。 每个客户端都配一遍 key、协议还各不相同,非常难受。于是用一个 New API 把它们收口成 一个兼容 OpenAI 的地址 —— 也就是导航里的那个「AI 模型中转站」。
为什么需要一个中转层
- 统一协议:上游有 OpenAI 兼容的、有 Anthropic 的、有 Gemini 原生的,中转站负责翻译。
- 统一鉴权:对外只发一种 key,随时能吊销、限额、查账。
- 统一计费:每个模型按倍率计价,谁用了多少一目了然。
- 故障转移:同一条渠道挂了自动换下一条,客户端无感。
几个真实踩坑
1. 分组是「渠道级」的,不是「模型级」的
New API 里「分组」决定某个用户能用哪些渠道,进而能用哪些模型。
路由表本质是 (分组, 模型, 渠道) 三元组。所以想做「某个分组只能用某几个模型」,
得单独建一条只列那几个模型的渠道 —— 直接改渠道的 models 是最省事的做法。
现象:模型广场里列了 100 多个模型,但用户选其中一大半会直接 503「无可用渠道」。 原因就是广场不按分组过滤,而路由严格按分组找渠道。
2. 倍率口径要对齐
默认 QuotaPerUnit = 500000,也就是 1 美元 = 50 万额度。
倍率 ratio = 1 大致对应 2 美元 / 百万 token。
先把这个口径固定下来,之后所有模型的定价都用同一把尺子,账才对得上。
3. 新模型一定要补价
新加的渠道如果没有对应的 ModelRatio,调用会直接报
模型价格未配置。补价一句话就够:
PUT /api/option/
{"key":"ModelRatio","value":"{\"某模型\": 0.5, ...}"}
4. 首字延迟很多时候不怪你
同一套链路,flash-lite 系 0.5 秒就能出首字,而某些「思考型」模型要 10~20 秒。
先用 stream: true 把「首字节」和「首个有内容的分片」分开计时,
再对比同链路的快模型,就能判断慢是链路问题还是上游固有。
我现在的用法
客户端只管填两个东西:base_url 指向中转站、api_key 用发的那种。
至于背后是 Gemini 还是 GLM,客户端完全不用关心。空闲时再去面板看看哪个渠道额度快用完了,
把它的分组收紧一点即可。
小结
中转站的价值不在「转发」,而在于把一团乱麻的来源变成一个可管理的东西: 统一的入口、统一的账、统一的排障视角。搭一次,能省下后面无数次的重复配置。