为什么走「自建网关」这条路
聚合中转站的问题在于:额度规则、模型白名单、封号风险都由别人掌握。自建网关把控制权拿回自己手里——上游仍然是各家官方 Free Tier 或试用金,但你对外只暴露一个 OpenAI 兼容端点,随时可以换上游、加 Key、切模型。
2026 年这套方案已经相当成熟:LiteLLM Proxy、One API / New API、Portkey Gateway 都支持多上游、按权重路由、失败重试。
操作步骤
1. 选一个网关
- LiteLLM Proxy:Python 生态,配置文件
config.yaml描述 model_list,原生支持 OpenAI / Anthropic / Gemini / Groq / Mistral 等 100+ 上游,自带/key/info用量统计和虚拟 Key。 - One API / New API:Go 写的单二进制,Docker 一键起,中文界面友好,适合给团队分配子 Key 并做额度上限。
- Portkey Gateway:更偏可观测性,适合已有一定流量、想看延迟和成本分布的场景。
个人和小团队首选 LiteLLM 或 New API,前者配置化更强,后者面板更直观。
2. 先攒上游 Key,再写配置
关键顺序不能反:先把能合法拿到的免费额度拿齐,再统一接入。常见来源包括:
- 各厂商官方 Free Tier(通常有 RPM/TPM 限制,额度按日或按月刷新);
- 云厂商新用户试用金开通的模型服务(如 Bedrock、Vertex AI 侧);
- 开源模型托管平台的免费推理额度(如 Groq、Cerebras 等,通常有速率上限);
- 自己本地跑的 Ollama / vLLM 作为兜底。
把每个 Key 记成一行,标注:上游名、模型、速率限制、额度周期、是否允许生产使用。
3. 配置多上游与故障转移
LiteLLM 的典型做法是同一逻辑模型名下列多个 deployment,用 rpm、tpm、weight 描述各自容量,网关自动做负载均衡和重试:
```yaml
model_list:
- model_name: gpt-4o-mini
litellm_params:
model: openai/gpt-4o-mini
api_key: os.environ/OPENAI_KEY_1
rpm: 3
- model_name: gpt-4o-mini
litellm_params:
model: groq/llama-3.3-70b
api_key: os.environ/GROQ_KEY_1
rpm: 30
router_settings:
routing_strategy: usage-based-routing-v2
num_retries: 2
fallbacks: [{"gpt-4o-mini": ["local-llama"]}]
```
把 rpm 填成真实值非常重要——填大了会持续触发上游 429,填小一点反而整体吞吐更稳。
4. 用虚拟 Key 隔离调用方
给每个应用或同事发一个虚拟 Key,设置 max_budget 和 rpm_limit。这样即使某个 Key 被滥用,也只影响它自己的额度,不会把上游免费池打穿。
5. 加一层本地缓存和降级
- 对重复 prompt 用 LiteLLM 的 Redis 缓存或自建语义缓存,能显著省额度;
- 把本地 vLLM 配成 fallback,上游全部 429 时仍能返回结果,只是质量下降;
- 开启
/metrics,用 Prometheus 看每个上游的失败率,及时摘掉不稳定的 Key。
注意事项
- 合规优先:免费额度通常写明「仅限开发测试」。把免费额度接到对外收费产品上,可能违反条款;生产流量请用付费 Key 或自托管模型。
- 不要多账号刷额度:用脚本批量注册同一平台通常会被判定滥用,导致 IP 或支付方式被封。
- 速率限制是硬约束:免费层的 RPM/TPM 很低,网关只能帮你平滑流量,不能凭空造出额度。
- 密钥安全:所有 Key 走环境变量或密钥管理服务,别写进
config.yaml提交到 Git。 - 额度会变:各家 Free Tier 的模型白名单和速率经常调整,建议每月核对一次上游可用性。
- 地域限制:部分上游对某些地区不开放注册或调用,部署前先确认。
适用场景
- 个人开发者做原型、跑评测、写小工具,调用量不大但需要多个模型对比;
- 小团队内部工具(客服草稿、文档摘要、代码补全),想把零散额度集中管理;
- 需要在多个模型间做 A/B 测试,又不想为每个上游单独写适配层;
- 已有本地 GPU,想把自托管模型作为兜底混进同一个端点。
一个最小可跑的验证流程
pip install 'litellm[proxy]',写好上面那份config.yaml;litellm --config config.yaml --port 4000;- 用
curl打/v1/chat/completions,确认返回正常; - 故意把某个上游 Key 改错,验证 fallback 是否生效;
- 打开
/ui,看用量面板是否按虚拟 Key 分开统计。
跑通这五步,你就有了一个不依赖任何单一中转站的 Token 管道。