Когда вы одновременно подключаете OpenAI, Claude, DeepSeek и Gemini, сложнее всего обычно не выбрать модель, а разобраться с форматами запросов, ключами и правилами биллинга у каждого SDK. LiteLLM — открытый проект, созданный именно для этой задачи: он приводит модели разных поставщиков к OpenAI-совместимому интерфейсу и даёт шлюз, который можно развернуть самостоятельно.

Ниже — что такое LiteLLM, минимальная рабочая конфигурация, маршрутизация и управление ключами, способы развёртывания и критерии выбора между собственным и управляемым шлюзом.

Примечание: LiteLLM — открытый проект его правообладателя; OpenAI, Anthropic, DeepSeek и другие названия — товарные знаки соответствующих правообладателей. Примеры отражают распространённые версии на октябрь 2026 года; конкретные параметры сверяйте с официальной документацией.

1. Что представляет собой LiteLLM

У LiteLLM две формы:

  • Python SDK: единая функция completion в коде для вызова моделей разных поставщиков.
  • Прокси-шлюз: отдельный сервис, публикующий OpenAI-совместимый /v1/chat/completions; к нему подключается любой клиент с поддержкой собственного Base URL.

Проект решает три задачи — адаптацию протокола, маршрутизацию и учёт расходов — но не делает сами модели лучше. Иными словами, это трубопровод, а не модель.

Основные возможности:

Возможность Назначение
Единый протокол Модели разных поставщиков через формат OpenAI
Маршрутизация и балансировка Одно имя модели распределяется между несколькими развёртываниями
Переключение при сбое При отказе основной модели запрос уходит на резервную
Виртуальные ключи Отдельные ключи и бюджеты для команд или проектов
Расход и стоимость Учёт запросов, токенов и затрат
Колбэки журналов Интеграция с Langfuse, OpenTelemetry и другими системами

2. Минимальный запуск через pip

Сначала создайте виртуальное окружение и установите пакет с прокси:

python3 -m venv .venv
source .venv/bin/activate
pip install "litellm[proxy]"

Минимальный config.yaml:

model_list:
  - model_name: claude-sonnet
    litellm_params:
      model: anthropic/claude-sonnet-4-5
      api_key: os.environ/ANTHROPIC_API_KEY

  - model_name: deepseek-chat
    litellm_params:
      model: deepseek/deepseek-chat
      api_key: os.environ/DEEPSEEK_API_KEY

litellm_settings:
  drop_params: true

general_settings:
  master_key: os.environ/LITELLM_MASTER_KEY

Запуск:

export ANTHROPIC_API_KEY="sk-ant-ваш-ключ"
export DEEPSEEK_API_KEY="sk-ваш-ключ"
export LITELLM_MASTER_KEY="sk-litellm-локальный-ключ"
litellm --config config.yaml --port 4000

model_name — имя, которое видит клиент, а litellm_params.model — реальная вышестоящая модель, обычно в формате «поставщик/модель». Запись os.environ/XXX означает чтение из переменной окружения; не вписывайте ключи прямо в yaml и не коммитьте файл в репозиторий.

После запуска направьте OpenAI SDK на локальный шлюз:

from openai import OpenAI

client = OpenAI(
    api_key="sk-litellm-локальный-ключ",
    base_url="http://127.0.0.1:4000",
)
resp = client.chat.completions.create(
    model="claude-sonnet",
    messages=[{"role": "user", "content": "Ответь только OK"}],
)
print(resp.choices[0].message.content)

3. Маршрутизация моделей и отказоустойчивость

В производстве редко обходятся одним вышестоящим поставщиком. Типичная конфигурация:

router_settings:
  routing_strategy: simple-shuffle
  num_retries: 2
  timeout: 600
  fallbacks:
    - claude-sonnet: ["deepseek-chat"]

Значение параметров:

  • routing_strategy — как выбирать между несколькими развёртываниями одной модели; simple-shuffle — распространённый вариант для старта.
  • num_retries — число повторов при сбое; помните, что каждый повтор создаёт реальные расходы.
  • timeout — тайм-аут одного запроса; задавайте по самому медленному участку бизнес-процесса.
  • fallbacks — переход на резервную модель, когда основная недоступна.

Переключение при сбое не бесплатно. У резервной модели могут отличаться стиль вывода, длина контекста и поддержка вызова инструментов, и бизнес-логика должна это выдерживать. Там, где формат ответа критичен, лучше явно вернуть ошибку, чем молча деградировать.

4. Виртуальные ключи и бюджеты

Общий master key на всю команду — начало эксплуатационной аварии. Правильный подход: выдавать каждому проекту виртуальный ключ с ограничением моделей и бюджета:

curl -X POST "http://127.0.0.1:4000/key/generate" \
  -H "Authorization: Bearer $LITELLM_MASTER_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "models": ["claude-sonnet"],
    "max_budget": 20,
    "duration": "30d",
    "metadata": {"project": "demo"}
  }'

Полученный ключ передаётся бизнес-подразделению, master key остаётся только у эксплуатации. Единицы и валюта бюджета определяются документацией LiteLLM; здесь показана лишь структура полей, а не какая-либо цена.

5. Развёртывание в Docker и проверка перед запуском

Для одиночного теста можно запустить контейнер:

docker run -d --name litellm \
  -p 4000:4000 \
  -v "$(pwd)/config.yaml:/app/config.yaml" \
  -e ANTHROPIC_API_KEY \
  -e DEEPSEEK_API_KEY \
  -e LITELLM_MASTER_KEY \
  ghcr.io/berriai/litellm:main-latest \
  --config /app/config.yaml

Перед вводом в эксплуатацию проверьте как минимум следующее:

  1. Шлюз не должен быть напрямую доступен из интернета; поставьте перед ним Nginx или Caddy для TLS и контроля доступа.
  2. Master key должен быть длинным случайным значением и не храниться в репозитории.
  3. Если нужен учёт расходов в базе, подключите PostgreSQL, иначе часть статистики потеряется после перезапуска.
  4. Настройте ротацию журналов и оповещения о заполнении диска: журналы запросов растут быстро.
  5. Оставьте проверку работоспособности: curl http://127.0.0.1:4000/health.
  6. Перед обновлением читайте changelog и фиксируйте тег образа; не используйте latest постоянно.

Ещё один часто упускаемый момент: шлюз становится новой единой точкой отказа. Если он упал, недоступны все модели. Нужны как минимум супервизор процесса, автоперезапуск и отдельный канал оповещений.

6. Журналы и стоимость: не ждите счёта

Скрытая ценность шлюза — запись вызовов. LiteLLM фиксирует модель, токены, задержку и стоимость каждого запроса и агрегирует их по ключу, команде и меткам. Чтобы это работало полностью, нужны три шага:

  1. Настроить базу данных, чтобы записи о расходах сохранялись, а не жили только в памяти.
  2. Помечать запросы, например указывать имя проекта в metadata, иначе в конце месяца расходы не разделить по проектам.
  3. Подключить систему наблюдаемости и собрать трассировку и журналы в одном месте.

Пример конфигурации:

litellm_settings:
  success_callback: ["langfuse"]
  failure_callback: ["langfuse"]

general_settings:
  database_url: os.environ/DATABASE_URL

Два замечания. Во-первых, сервис колбэков сам должен быть отказоустойчивым: блокировка колбэка может замедлить основной запрос. Во-вторых, журналы могут содержать исходный текст пользователя, поэтому сроки хранения и права доступа нужно определить заранее и не хранить производственные журналы бессрочно.

Что касается стоимости, шлюз позволяет её увидеть, но не уменьшить. Реальная экономия достигается выбором подходящей модели, сокращением контекста и контролем числа повторов.

7. Свой шлюз или управляемый сервис

Критерий Собственный LiteLLM Управляемый AI-шлюз
Путь данных Полностью под вашим контролем Проходит через поставщика услуг
Начальные затраты Низкие, установили и запустили Регистрация и сразу работа
Долгосрочная эксплуатация Обновления, резервные копии и мониторинг на вас Отвечает поставщик
Биллинг и счета Самостоятельно к вышестоящим поставщикам Единый счёт в юанях
Гибкость Высокая, можно менять код и маршруты Ограничена возможностями платформы
Ответственность за сбои Полностью на вас По условиям обслуживания

Практический критерий:

  • Если есть эксплуатационная команда, требования комплаенса и потребность в глубокой настройке маршрутов — выбирайте собственный шлюз.
  • Если команда небольшая, нужно лишь объединить ключи и счета и не хочется ночью чинить контейнеры — выбирайте управляемый сервис.
  • Можно начать с управляемого варианта, а собственный шлюз оценить после стабилизации объёма вызовов.

Командам в Китае стоит отдельно учитывать сеть. Собственный шлюз сам по себе не решает проблему доступности вышестоящих поставщиков: при нестабильном доступе он лишь усилит сбои. В такой ситуации реалистичнее «свой шлюз плюс доступный вышестоящий поставщик» либо управляемый шлюз.

Если менять исходный код не нужно и требуется лишь OpenAI-совместимый вход, единые ключи и счёт в юанях, управляемый шлюз обычно запускается в день регистрации; LiteLLM больше подходит как инфраструктура, которую команда готова долго обслуживать. Оба варианта могут сосуществовать: внутри — маршрутизация LiteLLM, снаружи — единый управляемый вход.

8. Частые вопросы

LiteLLM бесплатен?

Открытую часть можно развернуть самостоятельно, но вызовы вышестоящих моделей по-прежнему тарифицируются; цены корпоративных функций и управляемого сервиса смотрите у правообладателя.

Чем он отличается от One API и New API?

One API и New API больше ориентированы на распределение квот между пользователями, LiteLLM — на маршрутизацию между моделями и унификацию SDK. Оба варианта дают OpenAI-совместимый вход; выбор зависит от того, нужен ли вам биллинг с распределением или маршрутизация.

Поддерживается ли нативный вызов инструментов Claude?

Степень поддержки зависит от версии и адаптера вышестоящего поставщика. Сложный вызов инструментов и кэширование лучше проверять реальными запросами, а не только по документации.

Экономит ли собственный шлюз деньги?

Не обязательно. Вы экономите на плате за платформу, но платите сервером, эксплуатацией и временем простоев. При небольших объёмах управляемый вариант обычно выгоднее.

Что минимально нужно настроить в производстве?

TLS, master key, виртуальные ключи, лимиты бюджета, журналы, резервное копирование базы и проверку работоспособности — без любого из этих пунктов конфигурация неполна.

Что дальше

Если сначала нужно проверить вызовы нескольких моделей и не хочется обслуживать контейнеры, зарегистрируйтесь в ZSQH AI Gateway и отправьте первый запрос через OpenAI-совместимый вход. Модели и цены смотрите на странице цены на модели. Когда объём и требования комплаенса станут ясны, решите, нужен ли собственный LiteLLM.

Похожие материалы: