LiteLLM 模型网关:多 Provider 路由的统一层

少于 1 分钟阅读

直接对接 OpenRouter / Anthropic / Google 每个 provider,意味着每个客户端都得处理:限流、fallback、计费、模型下架。LiteLLM 把这些都吞掉,对外只暴露 OpenAI 兼容接口。

我的部署形态

单实例 + systemd --user 服务——轻量,跟 OpenClaw Gateway 同主机。

  • 端口 4000
  • 配置 ~/ai-workspace/litellm/config.yaml
  • 跑 5 天,0 故障
  • 已稳定接 OpenRouter 免费档 + 几个付费 fallback

model_list 分区

按”付费区 / 免费区”组织:

model_list:
  # 付费区(真花钱)
  - model_name: deepseek-flash
    litellm_params:
      model: deepseek/deepseek-v4-flash
      api_key: os.environ/DEEPSEEK_API_KEY

  # 免费区主力(每天限速,fallback 兜底)
  - model_name: main
    litellm_params:
      model: openrouter/<provider>/<model>:free
      api_key: os.environ/OPENROUTER_API_KEY

  - model_name: backup
    litellm_params:
      model: openrouter/<provider2>/<model>:free
      api_key: os.environ/OPENROUTER_API_KEY

关键是别名 + env 解耦——litellm/main 这个名字不直接绑定到具体模型,只绑定”主要免费档”。模型下架了,改 config.yaml 重启就行,所有引用 litellm/main 的客户端零改动。

现实中的免费档生命周期

免费的午餐不会永远免费。OpenRouter 免费档最近半年:

  • 模型 A:用 3 个月,被限流到接近不可用
  • 模型 B:用 1 个月,直接下架
  • 模型 C:用 2 个月,迁移到付费档
  • 模型 D:现役,每天还有配额

所以:

  • main 别名必须留 1 个 backup 别名——main 挂掉自动 fallback
  • 不要在 openclaw.json 里写具体模型名(只写 litellm/main 别名)
  • 每月初跑一次 openrouter-free-models-check cron,扫一遍还能用的免费档

cron 的模型选择

定时任务统一走 litellm/main 别名(快 + 免费),不要每条 cron 单独绑模型——main 别名换模型,所有 cron 自动跟进。

但有 1 个例外:金融专用——单独走 litellm/finance 别名(专门调了一个擅长金融场景的免费档)。原因:持仓复盘每天跑,需要稳定输出格式。

API Key 管理

单一来源 = 共享 secrets store。所有 API Key 走 ~/.openclaw/.env,systemd 用 EnvironmentFile 加载,不在 LiteLLM config 里明文写。

LiteLLM 配置里用 os.environ/OPENROUTER_API_KEY 引用——env 没设,启动直接报错,不会静默跑成匿名。

写在最后

LiteLLM 在我这里的角色不是”模型网关”,而是”配置变更的稳定边界“——客户端永远引用别名,真实模型变化只发生在 config.yaml 一处。

更新时间: