Архив рубрики ~Лента новостей~

Что такое LiteLLM и для чего его едят

Что такое LiteLLM и для чего его едят
Что такое LiteLLM и для чего его едят
7635ca38d08b5ce9a342c740ac3857ad

Если вы или ваша команда уже используете LLM или планируете интегрировать их в проект, то наверняка у вас возникал вопрос, как лучше и красивее написать такой интерфейс, который мог бы общаться с разными моделями. И на такой вопрос уже есть ответ.

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

Для чего нужен LiteLLM

LiteLLM — это прокси‑шлюз (gateway) для LLM, который умеет общаться со 100+ LLM‑провайдерами, переводя все их ответы в формат OpenAI API. Это значит, что можно написать один раз код под паттерн chat/completions, а дальше переключаться в любой момент на нужную модель. Локально, например, можно установить Llama через Ollama, и обращаться к ней, а на продакшене использовать любую облачную модель, например GPT-4o, вообще не меняя код. Вкусно же? Очень даже. 

Этот инструмент также содержит в себе такие полезные функции, как отслеживание расходов, установка лимитов на бюджет по пользователям или группам пользователей, fallback‑механизмы моделей, логирование и другие операционные функции. 

Архитектура LiteLLM: жизненный цикл запроса от пользователя до вызова модели. Источник.
Архитектура LiteLLM: жизненный цикл запроса от пользователя до вызова модели. Источник.

На практике LiteLLM особо проявляется, когда появляется необходимость в использовании нескольких нейросетей. Если у вас несколько микросервисов, которые могут обращаться каждый к своей модели, этот инструмент поможет унифицировать запросы и как‑то следить за всем этим.

Как запустить LiteLLM

Проще и быстрее всего развернуть LiteLLM в виде Docker‑контейнера — этот способ изолирует окружение и избавляет от ручной настройки Python‑зависимостей.

Для начала скачаем актуальный официальный образ шлюза из репозитория:

docker pull docker.litellm.ai/berriai/litellm:latestf8c740dea4def7de394732ba5f649102

Далее нужно создать конфиг со списком нейросетей. Для примера возьмем двух популярных провайдеров — Perplexity и Groq — и подключим по две модели от каждого.

model_list: # — Perplexity (Sonar) — — model_name: sonar litellm_params: model: perplexity/sonar api_key: os.environ/PERPLEXITYAI_API_KEY — model_name: sonar-pro litellm_params: model: perplexity/sonar-pro api_key: os.environ/PERPLEXITYAI_API_KEY # — Groq — — model_name: gpt-oss litellm_params: model: groq/openai/gpt-oss-120b api_key: os.environ/GROQ_API_KEY — model_name: groq-llama-3.1-8b litellm_params: model: groq/llama-3.1-8b-instant api_key: os.environ/GROQ_API_KEY litellm_settings: drop_params: true set_verbose: false request_timeout: 300 router_settings: timeout: 300 fallbacks: — sonar: [‘gpt-oss’] — gpt-oss: [‘sonar’] general_settings: master_key: os.environ/LITELLM_MASTER_KEY

Здесь в model_list находится перечисление всех моделей, которые будут доступны в вашем инстансе LiteLLM. В litellm_settings перечислены параметры, которые применяются ко всем моделям в запросах. В router_settings находятся настройки роутера, которые описывают таймауты, запасные модели, количество попыток при ошибках и тому подобное. А general_settings — это уже настройки самого LiteLLM инстанса.

LiteLLM сам знает, какие базовые адреса у провайдеров, но, если что‑то изменится или вы захотите переопределить базовый адрес, то можно добавить api_base на том же уровне, что и api_key.

Запуск производим через docker run следующим образом:

docker run -d —name litellm -p 4000:4000 -v «$(pwd)/config.yaml:/app/config.yaml:ro» -e PERPLEXITYAI_API_KEY=pplx-… -e GROQ_API_KEY=gsk_… -e LITELLM_MASTER_KEY=sk-litellm-local docker.litellm.ai/berriai/litellm:latest —config /app/config.yaml —port 4000

После запуска можно попробовать сделать запрос через curl:

curl http://127.0.0.1:4000/v1/chat/completions -H «Authorization: Bearer sk-litellm-local» -H «Content-Type: application/json» -d ‘{ «model»: «sonar», «messages»: [{«role»: «user», «content»: «Привет!»}] }’

В ответе получаем большой JSON, содержащий в себе контент ответа, использованное количество токенов и другую полезную информацию:

{ «id»:»12e3374a-7ea7-4eac-b744-0f6013b06366″, «created»:1782896750, «model»:»sonar», «object»:»chat.completion», «choices»:[…], «usage»:{…}, «citations»:[…], «search_results»:[…] }

Хорошо, LiteLLM поднят и базовые запросы на него проходят. Но в чем его главная суть? Она как раз в том, что можно написать один код, который будет работать под все модели. Даже если у ИИ‑провайдеров будут разные схемы запросов и ответов, LiteLLM сам подгонит все под один формат.

21a12253d8180f9a72e817118ab2c557

ИИ‑роутер — доступ к 300+ моделям из одной панели

Подключите OpenAI‑совместимый шлюз по единому API‑ключу. Настраивайте сквозную аналитику, отслеживайте лимиты и квотируйте ресурсы.

Запустить ИИ‑роутер →

Тестируем возможности

Для реализации этого на практике у LiteLLM есть библиотека на Python. Давайте протестируем ее и заодно проверим, как разные модели справляются с поиском актуальной информации. Для этого зададим им специфический вопрос о компании Selectel.

Минимальный рабочий код выглядит следующим образом:

import os from litellm import completion response = completion( model=»perplexity/sonar», messages=[ {«role»: «user», «content»: «Кто маскот в Selectel»} ], api_base=»http://localhost:4000″, api_key=»sk-litellm-local», ) print(response.choices[0].message.content)

Здесь импортируется функция completion из библиотеки LiteLLM, добавляется ключ для perplexity в переменные окружения, отправляется запрос и выводится ответ:

Маскот компании Selectel — это динозавр Тирекс (T‑Rex).[1][2][3]

По брендбуку Selectel, Тирекс описывается как любознательный, самоироничный персонаж с маленькими ручками и большим сердцем, открытый к общению и новым идеям. В материалах компании и партнеров он напрямую назван «маскотом Selectel» и талисманом компании.

Теперь можно просто поменять модель, например, на groq/gpt-oss и проверить, какой вывод будет при другой модели:

У Selectel официального маскота нет.

В публичных материалах компании иногда встречается стилизованный персонаж ‑ простая графическая «зубчатая» иконка‑робот в фирменных синих тонах, который служит лишь визуальным акцентом к логотипу. Но это не персонализированный маскот в привычном понимании (как, например, «Пингвин» у Linux). Если бы у Selectel появился собственный персонаж‑талисман, об этом обычно объявляют в пресс‑релизах или на официальных страницах, а пока такой информации нет.

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

Хорошо, основную фишку разобрали, теперь пойдем дальше. 

Интерфейс

Помимо работы через код, у LiteLLM есть встроенный веб‑интерфейс. В нем можно смотреть расходы, логировать запросы и управлять группами пользователей. Чтобы UI заработал, необходимо подключить базу данных для хранения пользователей, иначе просто не сможем залогиниться.

Для этого необходимо в general_settings в конфиге добавить переменную DATABASE_URL.

general_settings: master_key: os.environ/LITELLM_MASTER_KEY # Database settings database_url: os.environ/DATABASE_URL

И перезапустить контейнер с пробросом переменной:

docker run -d —name litellm -p 4000:4000 -v «$(pwd)/litellm-config.yaml:/app/config.yaml:ro» -e PERPLEXITYAI_API_KEY=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 -e GROQ_API_KEY=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 -e LITELLM_MASTER_KEY=sk-litellm-local -e DATABASE_URL=postgresql://postgres:postgres@host.docker.internal:5432/litellm docker.litellm.ai/berriai/litellm:latest —config /app/config.yaml —port 4000

Вот и все. Теперь, если перейти по адресу localhost:4000/ui, то увидим страницу логина.

e163003424cbd26e9cde6a73d7c97dd1

Тут сразу указаны дефолтные логин и пароль, будем использовать их, так как не переопределяли.

После авторизации нас встречает страница со списком виртуальных ключей, пока она не интересна.

9fc95fe9cfbb00b9c8e0783193a8cdd6

Если перейти на вкладку Usage, то сразу видим учет расхода:

c9093f79927b7ab646d5b78d5ffc1c44
b13d35ba7e542509190eecee3bc37cc6

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

Включаем кэширование запросов

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

Для начала обновим конфиг LiteLLM, добавив в блок litellm_settings следующие параметры:

litellm_settings: drop_params: true set_verbose: false request_timeout: 300 cache: true cache_params: type: local ttl: 600

Как видите, мы просто включили параметр cache и задали локальный тип хранения (cache_params) на 10 минут. Этого уже достаточно, чтобы кэширование начало работать.

Теперь давайте наглядно проверим результат. Для этого мы слегка обновим наш Python‑код, добавив отслеживание времени ответа от LiteLLM.

import time from litellm import completion start = time.perf_counter() response = completion( model=»perplexity/sonar», messages=[ {«role»: «user», «content»: «Кто маскот в Selectel»} ], api_base=»http://localhost:4000″, api_key=»sk-litellm-local», ) elapsed = time.perf_counter() — start print(response.choices[0].message.content) print(f»nВремя выполнения: {elapsed:.2f} с»)

Теперь, после ответа, будет выводиться время, за которое LiteLLM выдал ответ.

При первом запуске скрипта системе нужно достучаться до провайдера, дождаться генерации текста и получить его обратно. У меня этот процесс занял почти 5 секунд:

Маскот компании Selectel — это добрый и обаятельный динозавр Тирекс (T‑Rex) [1][2]. Основные характеристики маскота: * Внешность: У него маленькие ручки и большое сердце [1]. * Характер: Тирекс любознателен, склонен к самоиронии, обожает приключения и всегда открыт новым знаниям [1][2]. * Роль в компании: Он занимает должность «самого зубастого автора» Академии Selectel и помогает объяснять (разжёвывать) новые сложные темы или устранять поломки [2]. * Церезия: maschot появился впервые в комментариях к статье на Хабре о причинах даунтайма [3]. * Детали: Тирекс родился в год Дракона, за свою карьеру написал 381 статью для Академии Selectel, а его плюшевые копии раздаются хорошим людям под руководством котёнка Хрума [4]. Тирекс является частью бренда и талисманом компании, каждый новый сотрудник получает его стикер или игрушку при трудоустройстве [5][6]. Время выполнения: 4.82 с

А второй раз запрос уже выполнился быстрее, и ответ был тот же. Это указывает на то, что кэширование работает и теперь при одинаковых запросах не будут расходоваться лишние токены.

Маскот компании Selectel — это добрый и обаятельный динозавр Тирекс (T‑Rex) [1][2]. Основные характеристики маскота: * Внешность: У него маленькие ручки и большое сердце [1]. * Характер: Тирекс любознателен, склонен к самоиронии, обожает приключения и всегда открыт новым знаниям [1][2]. * Роль в компании: Он занимает должность «самого зубастого автора» Академии Selectel и помогает объяснять (разжёвывать) новые сложные темы или устранять поломки [2]. * Церезия: maschot появился впервые в комментариях к статье на Хабре о причинах даунтайма [3]. * Детали: Тирекс родился в год Дракона, за свою карьеру написал 381 статью для Академии Selectel, а его плюшевые копии раздаются хорошим людям под руководством котёнка Хрума [4]. Тирекс является частью бренда и талисманом компании, каждый новый сотрудник получает его стикер или игрушку при трудоустройстве [5][6]. Время выполнения: 0.27 с

Стоит учесть, что для использования кэширования в продакшене рекомендуется подключать Redis. Для этого необходимо изменить cache_params в litellm_settings следующим образом:

cache_params: type: redis host: os.environ/REDIS_HOST port: os.environ/REDIS_PORT password: os.environ/REDIS_PASSWORD ttl: 600 namespace: litellm.cache

После обновления конфига необходимо просто перезапустить LiteLLM с переданными переменными окружения, и кэширование будет работать через Redis.

Заключение

Будем честны: ввязываться в ИИ‑разработку и жестко привязываться к API одного вендора (тот самый Vendor Lock) — это технический долг, который вы берете на себя с первого же дня. Рынок штормит, провайдеры то и дело меняют схемы запросов, обновляют тарифы. 

В этом плане LiteLLM работает как локальный ИИ‑роутер, который забирает на себя всю рутину с маршрутизацией, авторизацией через админку и экономией токенов через кэш. Архитектура вашего приложения остается чистой и независимой.

Правда, когда дело доходит до продакшена, удобство open‑source начинает требовать внимания. Вам придется самостоятельно администрировать Docker‑контейнеры, следить за базой пользователей, настраивать и поддерживать кластер Redis для кэша, а главное — как‑то решать проблемы (в том числе и с безопасностью) с оплатой зарубежных API‑ключей. 

Если идея «единого окна» для сотен моделей вам близка, но тратить время команды на поддержку еще одного куска инфраструктуры не хочется, можно использовать готовый ИИ‑роутер. 

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

Источник: habr.com

❌ Нет тегов для этой статьи

Оцените материал:

Поделиться
Понравилась статья? Расскажите другим
ВКонтакте
Читайте также
Архив рубрики ~Обо всем~ ChatGPT как терапевтическая платформа? Новое исследование выявляет серьезные этические риски. Архив рубрики ~Коротко из Telegram~ Американский стартап Veterans Recovery Network Inc. анонсировал концепт проекта «цифрового… Архив рубрики ~Коротко из Telegram~ Энергетики «нанимают» овец, а технологии спасают экосистему На пустынном плато… Архив рубрики ~Коротко из Telegram~ Подборку топовых курсов по ИИ от Microsoft нашли в сети… Архив рубрики ~Коротко из Telegram~ 🎮 Roblox запускает Build Roblox анонсировал Build — новый AI-инструмент, встроенный прямо в… Архив рубрики ~Коротко из Telegram~ Microsoft представила два новых ИИ-движка: MAI Image 2.5 Pro и… Архив рубрики ~Коротко из Telegram~ 📊 Как тестируют ИИ-модели — и почему рейтингам верить с… Архив рубрики ~Коротко из Telegram~ Runway упростил жизнь контент-мейкерам: Media Router выбирает модель за вас… Архив рубрики ~Коротко из Telegram~ Suno подвинули от колонки — Google пару часов назад выкатили модель… Архив рубрики ~Коротко из Telegram~ Xiaomi представила свой «Range Rover» — внедорожник Skynomad N90 Max… Архив рубрики ~Коротко из Telegram~ ☀️ 1Password запустила интеграцию с Claude — теперь агент может… Новости робототехники Бои без правил будущего: робот потерял голову на турнире по ММА, но продолжил бой! ?? Архив рубрики ~Коротко из Telegram~ Дуров переодел аватарку в вахаббита  — основатель Telegram подхватил волну… Архив рубрики ~Коротко из Telegram~ Авито Подработка помогает бизнесу стабильнее закрывать смены  — платформа запустила инструмент… Архив рубрики ~Обо всем~ ChatGPT как терапевтическая платформа? Новое исследование выявляет серьезные этические риски. Архив рубрики ~Коротко из Telegram~ Американский стартап Veterans Recovery Network Inc. анонсировал концепт проекта «цифрового… Архив рубрики ~Коротко из Telegram~ Энергетики «нанимают» овец, а технологии спасают экосистему На пустынном плато… Архив рубрики ~Коротко из Telegram~ Подборку топовых курсов по ИИ от Microsoft нашли в сети… Архив рубрики ~Коротко из Telegram~ 🎮 Roblox запускает Build Roblox анонсировал Build — новый AI-инструмент, встроенный прямо в… Архив рубрики ~Коротко из Telegram~ Microsoft представила два новых ИИ-движка: MAI Image 2.5 Pro и… Архив рубрики ~Коротко из Telegram~ 📊 Как тестируют ИИ-модели — и почему рейтингам верить с… Архив рубрики ~Коротко из Telegram~ Runway упростил жизнь контент-мейкерам: Media Router выбирает модель за вас… Архив рубрики ~Коротко из Telegram~ Suno подвинули от колонки — Google пару часов назад выкатили модель… Архив рубрики ~Коротко из Telegram~ Xiaomi представила свой «Range Rover» — внедорожник Skynomad N90 Max… Архив рубрики ~Коротко из Telegram~ ☀️ 1Password запустила интеграцию с Claude — теперь агент может… Новости робототехники Бои без правил будущего: робот потерял голову на турнире по ММА, но продолжил бой! ?? Архив рубрики ~Коротко из Telegram~ Дуров переодел аватарку в вахаббита  — основатель Telegram подхватил волну… Архив рубрики ~Коротко из Telegram~ Авито Подработка помогает бизнесу стабильнее закрывать смены  — платформа запустила инструмент…

Оставить комментарий