← 返回文章列表 / Back to list
unified

什么是统一调用 API 网关

What is a Unified API Gateway

⚠️ 待更新·2026-08-29核验 · 更新时间待核验 · 本文信息可能已过期,请以官方文档为准 更新时间:2026-08-29 · 核验状态:待更新 · 官方溯源待补

背景

调用 5 家模型厂商要写 5 套 SDK、5 种鉴权、5 套限流重试;每加一家新模型,业务代码就要改一遍。统一调用 API 网关(Unified API Gateway)就是在客户端与上游模型之间加一层代理,把"多对多"折叠成"多对一":客户端只对接一个端点,网关负责路由、鉴权、重试、流式透传与计费聚合。

核心价值

网关的价值不在"代理转发"这个动作本身,而在它把横切关注点(cross-cutting concerns)集中:

  • 接入归一:对外只暴露 POST /v1/chat/completions,所有模型共用 OpenAI 兼容协议。
  • 密钥托管:上游 Key 全部进网关密钥库,客户端只见一个 token。
  • 路由策略:按模型能力、价格、剩余额度选端点,免费优先、付费兜底。
  • 可观测性:延迟、token、成功率统一上报到 metrics 后端。
  • 降级与熔断:上游 5xx 自动切到备用模型,避免雪崩。

代价是多一跳延迟(通常 <20ms)和一个需要运维的新组件。对小项目可能 over-engineering,对多模型业务几乎是必选项。

代码示例

# 最小化统一网关:按 model 字段路由到不同上游
from fastapi import FastAPI, Request
import httpx

app = FastAPI()
UPSTREAMS = {
    "default": "https://api.groq.com/openai/v1",
    "deepseek": "https://api.deepseek.com/v1",
}
KEYS = {"default": "gsk_...", "deepseek": "sk-..."}

@app.post("/v1/chat/completions")
async def proxy(req: Request):
    body = await req.json()
    route = body.get("model", "default").split("-")[0]
    base = UPSTREAMS.get(route, UPSTREAMS["default"])
    async with httpx.AsyncClient(timeout=30) as cli:
        r = await cli.post(f"{base}/chat/completions",
            json=body, headers={"Authorization": f"Bearer {KEYS[route]}"})
        return r.json()

部署形态选择

网关可以做 Sidecar(与业务同 Pod,延迟最低,适合服务网格)或独立服务(多语言、多团队共享,10 个内部消费方以上推荐)。Sidecar 模式下 Envoy、APIShare client SDK 直接驻留业务进程旁,延迟几乎为零;独立服务则让所有客户端共享一份路由表与密钥库,治理更集中。权衡是延迟与治理成本的互换,小团队 Sidecar 更省事,大组织独立服务更可控。

最佳实践

网关保持无状态,密钥与路由表存到外部 KV;水平扩容不带 session。上下游超时统一设 30s,流式 120s。配置即代码:路由表 YAML 入 Git,变更走 PR Review,杜绝生产环境偷偷改路由。金丝雀发布:新 Provider 上线先挂 1% 流量,观察 30 分钟延迟与错误率再灰度扩量。生产前必备三件套:健康检查、限流、metrics 暴露。把模型差异都封在网关内,网关之外的代码看到的永远是一个干净的 OpenAI 形状。

相关文章 / Related

Groq 渠道正式上线:13 个免费模型极速推理(6 对话 + 7 专项)用 APIShare 统一接入多家免费 API缓存层设计OpenAI 兼容格式统一调用流式响应统一处理