搭建一个 AI API 网关——统一管理多个模型 API 的调用、限流和成本统计
用着多个模型的 API,Key 散落在各处、成本不好统计、某个 API 挂了没备选。这篇文章做个AI API 网关,统一入口管理所有模型调用。
网关做什么
多个模型 API → 网关(统一入口)→ 路由 + 限流 + 统计 + 降级 → 返回结果
核心实现
# aigateway.py
import time, os, hashlib, json
from fastapi import FastAPI, HTTPException, Request
from fastapi.responses import StreamingResponse
from pydantic import BaseModel
from openai import OpenAI
from dotenv import load_dotenv
load_dotenv()
app = FastAPI(title="AI API Gateway")
# 模型配置
MODELS = {
"deepseek": OpenAI(api_key=os.getenv("DEEPSEEK_API_KEY"), base_url="https://api.deepseek.com/v1"),
"doubao": OpenAI(api_key=os.getenv("DOUBAO_API_KEY"), base_url="https://ark.cn-beijing.volces.com/api/v3"),
}
MODEL_MAP = {"deepseek": "deepseek-chat", "doubao": "doubao-2.1-pro"}
# 降级链:主模型挂了自动切备选
FALLBACK = {"doubao": "deepseek", "deepseek": "doubao"}
# 限流:每 IP 每分钟最多 30 次
rate_limits = {}
PRICES = {"deepseek": 2, "doubao": 6} # ¥/M tokens
class ChatRequest(BaseModel):
model: str = "deepseek"
messages: list
stream: bool = False
def check_rate(ip: str) -> bool:
now = time.time()
key = f"{ip}:{int(now//60)}"
rate_limits[key] = rate_limits.get(key, 0) + 1
return rate_limits[key] = today_start // 60}}
if __name__ == "__main__":
import uvicorn
uvicorn.run(app, port=8000)
使用方式
pip install fastapi openai uvicorn python-dotenv
python aigateway.py
# 调用方式跟 OpenAI 完全一样,只改 base_url
from openai import OpenAI
client = OpenAI(
api_key="any", # 网关不验证 key
base_url="http://localhost:8000/v1",
)
resp = client.chat.completions.create(
model="deepseek", # 指定要用的模型
messages=[{"role": "user", "content": "你好"}],
)
print(resp.choices[0].message.content)
网关提供的能力
| 功能 | 说明 |
|---|---|
| 🔀 模型路由 | 一个入口调用多个模型 |
| 🛡️ 限流保护 | 每个 IP 每分钟最多 30 次 |
| 📉 自动降级 | 主模型挂了自动切备选 |
| 💰 成本统计 | 每次调用返回费用 |
| 📊 OpenAI 兼容 | 客户端代码不用改 |
总结
AI API 网关的核心价值:统一管理、自动降级、成本可控。一个 FastAPI 服务、150 行代码解决所有模型 API 的管理问题。
本文由 Zyentor(智元界)原创发布