LiteLLM 多模型 API 中转

2 mins to read

前言

随着大语言模型(LLM)应用场景的不断扩展,管理和统一调用多个 AI 模型接口的需求日益突出。目前市面上有多种解决方案,每个都有其独特的优势和适用场景:

  • one-api/new-api: 这类项目提供完整的 Web UI 界面,支持多用户管理、使用量统计等功能,适合团队或小型组织使用。
  • uni-api: 采用 Provider-First 的配置思路,通过简单的配置文件启动,特别适合个人用户快速配置多个模型服务。
  • openrouter: 作为一个集中式的 AI 模型网关,支持多个主流服务商,但对某些区域性服务(如国内的 siliconflow)支持有限,且无法配置同一服务商的多个账号。
  • LiteLLM: 既可作为 SDK 使用,也可作为独立的 LLM Gateway 部署。采用 Model-First 的配置方式,虽然在多模型配置上略显繁琐,但提供了更细粒度的模型控制能力,而且代码质量也比 uni-api 更好。

所以我使用了一段时间的 new-api 和 uni-api 之后,现在切换到 LiteLLM。本文将介绍 LiteLLM 的部署方案和一些实用的配置技巧。

Docker Compose 部署

LiteLLM 支持多种部署方式,使用 Docker Compose 是最简单和可靠的方案之一。以下是一个基础的部署配置:

name: litellm
services:
  litellm:
    image: ghcr.io/berriai/litellm:main-latest # 或者选用 stable
    volumes:
     - ./config.yaml:/app/config.yaml
    command:
     - "--config=/app/config.yaml"
    ports:
      - "4000:4000" # Map the container port to the host, change the host port if necessary
    environment:
        DATABASE_URL: "postgresql://llmproxy:dbpassword9090@db:5432/litellm"
        STORE_MODEL_IN_DB: "True" # allows adding models to proxy via UI
  db:
    image: postgres
    restart: always
    environment:
      POSTGRES_DB: litellm
      POSTGRES_USER: llmproxy
      POSTGRES_PASSWORD: dbpassword9090
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -d litellm -U llmproxy"]
      interval: 1s
      timeout: 5s
      retries: 10

配置技巧

LiteLLM 采用 Model-First 的配置方式,这在配置多个相同提供商的模型时可能会显得重复。虽然官方推荐使用环境变量来复用配置:

model_list:
  - model_name: gpt-3.5-turbo
    litellm_params:
      model: azure/gpt-turbo-small-e
      api_base: https://my-endpoint-europe-berri-992.openai.azure.com/
      api_key: "os.environ/AZURE_API_KEY_EU"

但这种方式会导致配置信息分散在配置文件和环境变量中。对于个人用户来说,我们可以利用 YAML 的锚点(anchor)特性来实现更优雅的配置:

my_providers:
  gemini_1: &gemini_1
    api_key: xxx
  gemini_2: &gemini_2
    api_key: yyy
  provider_1: &provider_1
    api_key: zzz
    api_base: 'http://example.com/v1/chat/completions'

model_list:
  - model_name: gemini-1.5-pro
    litellm_params:
      model: gemini/gemini-1.5-pro
      <<: *gemini_1
  - model_name: gemini-1.5-pro
    litellm_params:
      model: gemini/gemini-1.5-pro
      <<: *gemini_2
  - model_name: gpt-4
    litellm_params:
      model: openai/gpt-4
      <<: *provider_1

这种配置方式有以下优势:

  1. 配置集中管理,易于维护
  2. 减少重复代码,提高配置效率
  3. 方便快速切换或更新 API 密钥
  4. 清晰的配置结构,便于理解和修改

结语

LiteLLM 作为一个灵活的 LLM 网关解决方案,能够很好地满足个人用户和小型团队的需求。通过合理使用 YAML 的高级特性,我们可以构建出更加优雅和易维护的配置。在选择 LLM 网关工具时,建议根据实际使用场景、规模和管理需求来权衡不同方案的优劣。