LiteLLM 实战:统一代理管理多家大模型

当你的生产系统同时调用 OpenAI、Anthropic、智谱 GLM 和本地 Ollama 时,每家 SDK 的鉴权、超时与返回格式都不一样。LiteLLM 用一层统一代理把多家大模型 API 收口为 OpenAI 兼容协议,既能一行切换模型,又能自动兜底、限流与统计成本,是接入多模型时最省心的那块拼图。

一、为什么需要一个统一 LLM 代理

很多团队在原型阶段只接一家厂商,上线后却被现实教育:某家突发限流、某家价格上调、某家某个能力更强。于是代码里开始出现一堆 if provider == "openai" 的分支,密钥散落在各个服务,成本也成了一笔糊涂账。

LiteLLM 的定位就是这层”适配器”:它把 100+ 家模型(OpenAI、Azure、Anthropic、Google、智谱 GLM、DeepSeek、Ollama 等)统一成 OpenAI 格式,你只需改一个 model 字段就能切换后端。更关键的是,它在代理层提供了兜底(fallback)、重试(retry)、限流(rate limit)和预算(budget)等企业级能力,而这些能力在裸调各家 SDK 时要自己手写。

场景裸接多家 SDK用 LiteLLM 代理
切换模型改代码 + 重编译改一个 model 字符串
某家限流业务自己写兜底代理自动 fallback 到下家
成本统计各平台后台手动汇总统一回调记录 token 与花费
密钥管理散落各服务集中在代理配置

二、用 Docker 快速拉起代理

最稳妥的部署方式是把 LiteLLM 跑成一个独立代理服务,业务侧只跟它打交道。下面这份 docker-compose.yml 挂载一份 config.yaml 作为模型与密钥清单:

version: "3.9"
services:
  litellm:
    image: ghcr.io/berriai/litellm:main-latest
    command: ["--config", "/app/config.yaml", "--port", "4000", "--detailed_debug"]
    ports:
      - "4000:4000"
    volumes:
      - ./config.yaml:/app/config.yaml
    environment:
      - LITELLM_MASTER_KEY=sk-master-3f9a2c7e          # 代理自身的访问密钥
      - LITELLM_LOG=INFO
    restart: unless-stopped

config.yaml 里声明可用模型与对应的厂商密钥。注意密钥只在代理侧存在,业务代码只持有一个 sk-master-* 代理密钥,安全边界清晰:

model_list:
  - model_name: gpt-prod
    litellm_params:
      model: openai/gpt-4o-mini
      api_key: os.environ/OPENAI_API_KEY

  - model_name: glm-prod
    litellm_params:
      model: openai/zhipuai/glm-4-flash
      api_base: https://open.bigmodel.cn/api/paas/v4
      api_key: os.environ/ZHIPU_API_KEY

  - model_name: local-llm
    litellm_params:
      model: ollama/qwen2.5:7b
      api_base: http://host.docker.internal:11434

litellm_settings:
  drop_params: true          # 忽略厂商不支持的字段,避免 400
  request_timeout: 60

三、业务侧一行切换模型

代理跑起来后,业务代码用标准 OpenAI SDK 指向 http://localhost:4000,把 model 换成你在配置里定义的名字即可。要换厂商,只改这一个字符串,其余逻辑不动:

from openai import OpenAI

client = OpenAI(
    api_key="sk-master-3f9a2c7e",        # 代理密钥,不是厂商密钥
    base_url="http://localhost:4000",
)

resp = client.chat.completions.create(
    model="glm-prod",                    # 换成 gpt-prod / local-llm 即可切换后端
    messages=[{"role": "user", "content": "用一句话解释什么是向量数据库"}],
)
print(resp.choices[0].message.content)

这正是把多模型收口的价值:上层应用完全感知不到底层是云厂商还是本地推理。如果你已经在用 Dify + Ollama 搭建私有知识库,也可以把 Dify 的模型供应商直接指向 LiteLLM 代理,实现”一处配置、全局切换”。

四、自动兜底与重试

生产环境最怕某家厂商临时 429 或超时。LiteLLM 支持在配置里声明 fallback 链和重试策略,某家失败会自动切到下家,对调用方透明:

model_list:
  - model_name: chat
    litellm_params:
      model: openai/gpt-4o-mini
      api_key: os.environ/OPENAI_API_KEY
  - model_name: chat
    litellm_params:
      model: openai/zhipuai/glm-4-flash
      api_base: https://open.bigmodel.cn/api/paas/v4
      api_key: os.environ/ZHIPU_API_KEY

router_settings:
  fallbacks:
    - chat:               # 同名模型组成兜底组,按列表顺序切换
        - openai/gpt-4o-mini
        - openai/zhipuai/glm-4-flash
  num_retries: 3
  timeout: 30
策略配置项作用
兜底router_settings.fallbacks主模型失败时切到备用模型
重试num_retries对 429/5xx 自动指数退避重试
超时timeout单请求上限,避免长尾拖垮线程
降级mock_response全部失败时返回兜底话术而非报错

兜底逻辑和重试边界,与我们在 大模型工具调用可靠性实战 里强调的”超时、重试与降级”是一致的——代理层负责横向兜底,业务层负责纵向降级,两层配合才稳。

五、成本控制与用量统计

多模型最头疼的是算不清账。LiteLLM 在每次响应里都返回 x-litellm-response-cost 头,并支持通过回调把每次调用的模型、token、花费写进数据库或日志,便于做部门分摊与异常告警:

litellm_settings:
  callbacks: ["langfuse"]          # 也可接 prometheus / datadog / 自定义 webhook
  success_callback: ["langfuse"]

# 预算上限:超过后该虚拟密钥被拒绝,防止跑飞
general_settings:
  # 在代理启动时校验预算
  budget_duration: "30d"
  max_budget: 200.0

更细的粒度是按”虚拟密钥”限预算。给每个业务线发一把 sk-... 子密钥,配 max_budget 与 budget_duration,谁超支谁被拦,互不拖累:

# 生成带预算的子密钥
curl -X POST "http://localhost:4000/key/generate" \
  -H "Authorization: Bearer sk-master-3f9a2c7e" \
  -H "Content-Type: application/json" \
  -d '{
    "models": ["glm-prod", "gpt-prod"],
    "max_budget": 50.0,
    "budget_duration": "7d",
    "aliases": {"cheap": "glm-prod"}
  }'

如果你关心底层推理开销,可把贵模型换成 本地量化部署的 GGUF 模型 跑在 Ollama 上,由 LiteLLM 统一代理——高频简单请求走本地、复杂请求走云端,成本直接下一截。

六、与 Spring AI 集成

Java 后端也能无痛接入。在 Spring AI 实战 的基础上,把 base-url 指向 LiteLLM 代理,api-key 填代理密钥,model 填代理里的逻辑名即可复用全部 Spring AI 能力(流式、Function Calling、RAG):

# application.yml
spring:
  ai:
    openai:
      base-url: http://litellm:4000
      api-key: sk-master-3f9a2c7e
      chat:
        options:
          model: glm-prod

七、生产部署检查清单

项要点
密钥厂商密钥只在 config.yaml,靠环境变量注入;代理只暴露 master key
兜底每个核心 model 至少配 1 个 fallback,避免单点
预算按业务线发子密钥并设置 max_budget,防跑飞
可观测接 prometheus/langfuse 回调,盯住成本与失败率
超时设置 request_timeout 与客户端超时,长尾要截断
健康用 /health/liveliness 做探针,代理本身也要高可用

最后提醒一句:LiteLLM 只解决”接入与治理”,模型本身的推理质量仍是底座。若要做高吞吐在线服务,建议先参考 推理引擎选型与部署 把底层算力规划清楚,再让代理层做统一收口,整条链路才既稳又省。

八、负载均衡与多副本路由

当同一个模型部署了多个副本——比如本地多卡 Ollama、或者你手握多家同模型账号想做负载分摊——可以在 model_list 里用同一个 model_name 列出多份部署。LiteLLM 会按权重轮询,并支持 rpm/tpm 限速,避免单个账号触发厂商限频:

model_list:
  - model_name: gpt-prod
    litellm_params:
      model: openai/gpt-4o-mini
      api_key: os.environ/OPENAI_KEY_A
      rpm: 50
  - model_name: gpt-prod
    litellm_params:
      model: openai/gpt-4o-mini
      api_key: os.environ/OPENAI_KEY_B
      rpm: 50

router_settings:
  model_group_retry_policy:
    gpt-prod:
      Timeout: 30
      RetryCount: 2

这样业务侧仍只写 model="gpt-prod",流量却会被均匀打到两个账号上。配合上一节的 fallback,你就同时拥有了”横向扩容”与”纵向兜底”两道防线。

九、常见误区与排障

现象根因处理
401 Unauthorized代理 master key 错,或厂商 key 缺失/失效核对 config 里 api_key 与代理 Authorization 头
400 Bad Request请求字段不被该厂商支持开 drop_params: true 丢弃多余字段
429 Too Many Requests触发厂商限频配 fallback + rpm 限速 + num_retries
成本对不上没接回调,用量未记录开启 success_callback 接 prometheus/langfuse
切换模型无反应model 名与 config 不一致确认业务侧 model 等于 config 里 model_name

这些坑大多集中在鉴权与字段兼容两层。建议上线前先用 curl 直连代理的 /chat/completions 验证一次,确认响应头里带有 x-litellm-response-cost,且切换 model 能正确落到不同后端,再接入正式业务,能省掉大半联调时间。

总结:当你需要从”接一家”走向”接多家”,LiteLLM 用统一 OpenAI 协议消除了 SDK 差异,用 fallback、retry、budget 补齐了生产必需的韧性。把它当作多模型时代的流量入口,你的业务代码就能专注在 Prompt 与产品,而不是被各家 API 的细节拖住。

上一篇 远程工作实战:程序员高效居家办公与协作指南
下一篇 Envoy 实战:用高性能代理与 API 网关治理微服务流量
最新评论
Docker 网络模式详解:bridge/host 生产选型 - FSData
Docker 网络模式详解:bridge/host 生产选型 - FSData
8月20日
[…] 注意最后那条:把端口绑定到 127.0.0.1,再由宿主机上的 Nginx 反代进来,比直接 -p 80:80 暴露安全得多,也方便统一做
Vue3 + TypeScript 工程化:类型安全的前端架构 - FSData
Vue3 + TypeScript 工程化:类型安全的前端架构 - FSData
8月20日
[…] Pinia 的工程化用法,可以参考我们之前的实战文章 《Vue3 组合式 API + Pinia:状态管理从入门到实战》,那里覆盖了 Sto
2026 年最值得装的 10 个 VS Code 插件(AI/前端/后端/效率全覆盖) - FSData
2026 年最值得装的 10 个 VS Code 插件(AI/前端/后端/效率全覆盖) - FSData
8月19日
[…] 状态,点一下就能起停容器,配合我们讲过的 Docker Compose 编排 […]
Redis 缓存设计:穿透、击穿、雪崩与最佳实践 - FSData
Redis 缓存设计:穿透、击穿、雪崩与最佳实践 - FSData
8月19日
[…] 缓存三大坑的本质都是”缓存失效导致请求穿透到数据库”。记住口诀:穿透用布隆、击穿用锁、雪崩用错峰。配合合理的过期策略
GitHub Actions 实战:从零搭建 CI/CD 流水线 - FSData
GitHub Actions 实战:从零搭建 CI/CD 流水线 - FSData
8月19日
[…] Docker 镜像部署。结合我们之前写的 Docker Compose 一键编排实战,可以在 CI […]