你公司是不是同时接了 GPT-4o、Claude Sonnet、DeepSeek-V3、通义千问、文心一言?每次换模型改代码改到崩溃?今天这篇文章帮你一劳永逸。
为什么你需要一个 AI Gateway?
先看一个真实的场景:你花了两周时间接入了 OpenAI 的 API,代码里写满了 openai.ChatCompletion.create()。结果老板说”GPT 太贵了,换成 DeepSeek 吧”。你一脸懵逼——所有调用逻辑都得重写。
更惨的是,你以为换完就完事了?不是的。公司内部可能有 5 个不同的项目,分别接了 5 个大模型。每个项目的调用方式、错误处理、重试逻辑都长得不一样。出问题了排查半天,日志格式五花八门。
AI Gateway 就是来解决这个问题的——它像一个”翻译官”,你在代码里只写一种调用方式,它自动帮你路由到不同的模型,还顺带做了负载均衡、成本追踪、速率限制。
| 场景 | 不用 Gateway | 用 LiteLLM Gateway |
|---|---|---|
| 切换模型 | 改核心代码 | 改一行配置 |
| 多模型负载 | 自己写轮询逻辑 | 内置负载均衡 |
| 成本追踪 | 手动算 | Dashboard 实时看 |
| 速率限制 | 自己实现令牌桶 | 配置即生效 |
| 错误重试 | 各项目各自实现 | 统一 fallback |
LiteLLM 是什么?
LiteLLM 是目前 GitHub 上最火的 AI Gateway 开源项目(50K+ Star)。它支持 100+ 大模型提供商,包括 OpenAI、Anthropic、Google、Azure、Cohere、Hugging Face,以及国产的通义千问、DeepSeek、文心、智谱等。
核心原理很简单:它实现了一套和 OpenAI API 完全兼容的接口格式。你的代码只需要调 OpenAI 格式的请求,LiteLLM 在背后帮你翻译成各个模型的真实调用。
更牛的是,它提供 Proxy Server 模式——部署一个独立服务,你公司所有项目都指向这个 Gateway,统一管理所有大模型 API。
5 分钟上手:Docker 部署 LiteLLM Proxy
# 1. 拉取镜像
docker pull ghcr.io/berriai/litellm:main-latest
# 2. 创建配置目录
mkdir -p ~/litellm && cd ~/litellm
# 3. 创建一个 .env 文件放 API Key
cat > .env << 'EOF'
OPENAI_API_KEY=sk-your-openai-key
ANTHROPIC_API_KEY=sk-ant-your-anthropic-key
DEEPSEEK_API_KEY=sk-your-deepseek-key
DASHSCOPE_API_KEY=sk-your-dashscope-key
EOF
# 4. 创建 litellm_config.yaml 配置文件
cat > litellm_config.yaml << 'EOF'
general_settings:
master_key: "sk-litellm-admin-key"
model_list:
- model_name: gpt-4o
litellm_params:
model: openai/gpt-4o
api_key: os.environ/OPENAI_API_KEY
rpm: 500 # 每分钟请求限制
tpm: 100000 # 每分钟 token 限制
- model_name: claude-sonnet
litellm_params:
model: anthropic/claude-sonnet-4-20250514
api_key: os.environ/ANTHROPIC_API_KEY
rpm: 200
- model_name: deepseek-v3
litellm_params:
model: deepseek/deepseek-chat
api_key: os.environ/DEEPSEEK_API_KEY
rpm: 300
- model_name: qwen-max
litellm_params:
model: dashscope/qwen-max
api_key: os.environ/DASHSCOPE_API_KEY
rpm: 100
# 定义一个路由组:优先用 deepseek,失败则降级到 gpt-4o
- model_name: smart-router
litellm_params:
model: deepseek/deepseek-chat
rpm: 300
model_info:
mode: single
fallbacks: ["gpt-4o"]
litellm_settings:
set_verbose: true
request_timeout: 60
num_retries: 3
fallbacks: [{"deepseek-v3": ["gpt-4o"]}]
router_settings:
routing_strategy: "latency-based-routing"
enable_pre_call_checks: true
EOF
# 5. 启动
docker run -d \
--name litellm-proxy \
--env-file .env \
-v $(pwd)/litellm_config.yaml:/app/config.yaml \
-p 4000:4000 \
ghcr.io/berriai/litellm:main-latest \
--config /app/config.yaml --port 4000
# 6. 验证:打开 http://localhost:4000 看到 Swagger UI
echo "Gateway 已启动,访问 http://localhost:4000"
代码调用:和调 OpenAI 一模一样
Gateway 部署好之后,你所有服务的代码都指向 http://localhost:4000,API 格式和 OpenAI 完全兼容。
Python 示例
from openai import OpenAI
# 把 base_url 指向你的 Gateway
client = OpenAI(
base_url="http://localhost:4000/v1",
api_key="sk-litellm-admin-key" # master_key
)
# 调用 GPT-4o
response = client.chat.completions.create(
model="gpt-4o",
messages=[{"role": "user", "content": "用一句话解释什么是容器化"}]
)
print(response.choices[0].message.content)
# 调用 DeepSeek —— 只改一个 model 参数!
response = client.chat.completions.create(
model="deepseek-v3",
messages=[{"role": "user", "content": "用一句话解释什么是容器化"}]
)
print(response.choices[0].message.content)
# 使用智能路由 —— 自动 fallback
response = client.chat.completions.create(
model="smart-router",
messages=[{"role": "user", "content": "给我写一段 Python 快速排序代码"}]
)
print(response.choices[0].message.content)
其他语言的兼容性
因为 LiteLLM 是 OpenAI 兼容的,你在任何语言中直接用 OpenAI SDK 就行:
// Node.js
import OpenAI from 'openai';
const client = new OpenAI({
baseURL: 'http://localhost:4000/v1',
apiKey: 'sk-litellm-admin-key'
});
# curl 也行
curl http://localhost:4000/v1/chat/completions \
-H "Authorization: Bearer sk-litellm-admin-key" \
-H "Content-Type: application/json" \
-d '{"model":"deepseek-v3","messages":[{"role":"user","content":"Hello"}]}'
进阶玩法:负载均衡 + 成本控制
1. 多实例负载均衡
同一个模型部署多个 Key,自动轮询:
model_list:
- model_name: gpt-4o
litellm_params:
model: openai/gpt-4o
api_key: os.environ/OPENAI_API_KEY_1
- model_name: gpt-4o
litellm_params:
model: openai/gpt-4o
api_key: os.environ/OPENAI_API_KEY_2
router_settings:
routing_strategy: "usage-based-routing" # 按用量分配
LiteLLM 支持四种路由策略:
| 策略 | 说明 | 适用场景 |
|---|---|---|
simple-shuffle |
随机轮询 | 简单场景 |
usage-based-routing |
根据 TPM/RPM 用量分配 | 多 Key 配额管理 |
latency-based-routing |
选延迟最低的实例 | 追求速度 |
cost-based-routing |
选成本最低的模型 | 预算优先 |
2. 按预算限额控制成本
model_list:
- model_name: gpt-4o
litellm_params:
model: openai/gpt-4o
api_key: os.environ/OPENAI_API_KEY
max_budget: 100 # 日预算 $100
budget_duration: "1d"
3. 为不同用户/团队设置不同权限
general_settings:
master_key: "sk-admin-xxx"
litellm_settings:
enable_jwt_auth: true
# 创建虚拟 Key,不同团队不同限额
# 通过 Admin UI 或 API 创建
# curl http://localhost:4000/key/generate \
# -H "Authorization: Bearer sk-admin-xxx" \
# -d '{"models": ["gpt-4o"], "max_budget": 50, "team_id": "backend-team"}'
真实场景:一个调用 5 个模型的完整工作流
假设你在开发一个”AI 批量文档处理”系统,需要同时用到多个模型做不同的事:
import asyncio
from openai import AsyncOpenAI
client = AsyncOpenAI(
base_url="http://localhost:4000/v1",
api_key="sk-litellm-admin-key"
)
async def process_document(text):
"""一个文档,三个任务,两种模型"""
# 任务1:用 DeepSeek-V3 做摘要(便宜)
summary = await client.chat.completions.create(
model="deepseek-v3",
messages=[{"role": "user", "content": f"请用3句话总结以下内容:\n{text}"}]
)
# 任务2:用 Claude Sonnet 做深度分析(推理强)
analysis = await client.chat.completions.create(
model="claude-sonnet",
messages=[{"role": "user", "content": f"分析这段文字的核心观点,输出 JSON 格式:\n{text}"}]
)
# 任务3:用 GPT-4o 做翻译(多语言强)
translation = await client.chat.completions.create(
model="gpt-4o",
messages=[{"role": "user", "content": f"把以下内容翻译成英文:\n{text}"}]
)
return {
"summary": summary.choices[0].message.content,
"analysis": analysis.choices[0].message.content,
"translation": translation.choices[0].message.content
}
# 批量处理
async def batch_process(documents):
tasks = [process_document(doc) for doc in documents]
results = await asyncio.gather(*tasks)
return results
# 运行
results = asyncio.run(batch_process(["文档1内容...", "文档2内容..."]))
print(f"处理完成,共 {len(results)} 份文档")
看,代码里没有任何 if model == "gpt" 或 elif model == "claude" 的分支判断。你只需要改 model= 参数,Gateway 自动完成路由、重试、日志记录。
踩坑经验(我替你先踩了)
坑1:环境变量不生效
Docker 启动时如果没用 --env-file,容器内读不到宿主机变量。务必用 --env-file .env,或者在 docker run 里逐个 -e 传。
坑2:中国大陆访问 OpenAI API
如果你在国内部署 LiteLLM,需要配置代理。在 litellm_config.yaml 里加上 ssl_verify: false:
litellm_settings:
ssl_verify: false
坑3:模型名称必须和配置文件的 model_name 一致
我在代码里写了 model="deepseek",但配置里定义的是 model_name: deepseek-v3,调了半天才发现是对不上。
总结
| 维度 | LiteLLM Gateway 能力 |
|---|---|
| 模型兼容 | 100+ 提供商,OpenAI 格式统一 |
| 部署方式 | Docker 一条命令 |
| 负载均衡 | 4 种策略可选 |
| 成本控制 | 按 Key / 用户 / 模型设预算 |
| 速率限制 | RPM/TPM 双层限制 |
| 监控 | 内建 Dashboard,可接 Prometheus |
用 LiteLLM 之前,你管 3 个大模型要维护 3 套调用代码。用了 LiteLLM 之后,任何模型切换都变成改一行配置。如果你公司的微服务里散落着各种大模型 API Key,是时候建一个统一的 AI Gateway 了。
👤 作者简介
一枚在大中原腹地(河南)卖公有云的从业者,主营腾讯云/阿里云/火山云,曾踩坑无数,现专注AI大模型应用落地。关注公众号「公有云cloud」,围观AI前沿动态~
博客:y1cloud.cn
