RouteLLM — это гибкая платформа для обслуживания и оценки маршрутизаторов больших языковых моделей (LLM), разработанная для максимизации производительности при минимальных затратах.
Ключевые особенности:
* Бесшовная интеграция — действует как прямая замена клиента OpenAI или работает как OpenAI-совместимый сервер, интеллектуально направляя более простые запросы к более дешёвым моделям.
* Предварительно обученные маршрутизаторы — доказано, что они сокращают расходы до 85%, сохраняя при этом 95% производительности GPT-4 на широко используемых бенчмарках, таких как MT-Bench.
* Экономичное превосходство — соответствует производительности ведущих коммерческих предложений, будучи при этом более чем на 40% дешевле.
* Расширяемость и настраиваемость — возможность легко добавлять новых маршрутизаторов, настраивать пороговые значения и сравнивать производительность по различным бенчмаркам.
Источник: [GitHub](https://github.com/lm-sys/RouteLLM/tree/main).
Установка и использование
В этом руководстве мы рассмотрим, как:
* загрузить и использовать предварительно обученный маршрутизатор;
* настроить его для вашего случая использования;
* протестировать поведение маршрутизации на разных типах запросов.
Установка зависимостей
“`
!pip install “routellm[serve,eval]”
“`
Загрузка ключа API OpenAI
Чтобы получить ключ API OpenAI, посетите [https://platform.openai.com/settings/organization/api-keys](https://platform.openai.com/settings/organization/api-keys) и сгенерируйте новый ключ. Если вы новый пользователь, вам может потребоваться добавить платёжные данные и совершить минимальный платёж в размере 5 долларов для активации доступа к API.
RouteLLM использует LiteLLM для поддержки завершения чата с помощью широкого спектра моделей как с открытым, так и с закрытым исходным кодом. Вы можете ознакомиться со списком провайдеров на [https://litellm.vercel.app/docs/providers](https://litellm.vercel.app/docs/providers), если хотите использовать другую модель.
Загрузка файла конфигурации
RouteLLM использует файл конфигурации для поиска контрольных точек предварительно обученного маршрутизатора и наборов данных, на которых они были обучены. Этот файл сообщает системе, где найти модели, которые решают, следует ли отправить запрос сильной или слабой модели.
Для большинства пользователей это не требуется. Конфигурация по умолчанию уже указывает на хорошо обученные маршрутизаторы (mf, bert, causal_llm), которые работают «из коробки». Вам нужно изменить его, только если вы планируете:
* обучить собственный маршрутизатор на пользовательском наборе данных;
* полностью заменить алгоритм маршрутизации новым.
Инициализация контроллера RouteLLM
В этом блоке кода мы импортируем необходимые библиотеки и инициализируем контроллер RouteLLM, который будет управлять маршрутизацией запросов между моделями. Мы указываем `routers=[“mf”]`, чтобы использовать маршрутизатор Matrix Factorization, предварительно обученную модель принятия решений, которая прогнозирует, следует ли отправить запрос сильной или слабой модели.
Параметр `strongmodel` установлен на `“gpt-5”`, высококачественную, но более дорогую модель, в то время как параметр `weakmodel` установлен на `“o4-mini”`, более быструю и дешёвую альтернативу. Для каждого входящего запроса маршрутизатор оценивает его сложность по отношению к пороговому значению и автоматически выбирает наиболее экономически эффективный вариант — обеспечивая выполнение простых задач более дешёвой моделью, а более сложных — возможностями сильной модели.
Эта конфигурация позволяет вам сбалансировать экономическую эффективность и качество отклика без ручного вмешательства.
Код для инициализации контроллера RouteLLM:
“`
import os
import pandas as pd
from routellm.controller import Controller
client = Controller(
routers=[“mf”], # Model Fusion router
strong_model=”gpt-5″,
weak_model=”o4-mini”
)
“`
Калибровка порогового значения
Эта команда запускает процесс калибровки порогового значения для маршрутизатора Matrix Factorization (mf) в RouteLLM. Аргумент `–strong-model-pct 0.1` указывает системе найти пороговое значение, которое направляет примерно 10% запросов к сильной модели (а остальные — к слабой модели).
Используя файл конфигурации `config.example.yaml` для настроек модели и маршрутизатора, калибровка определила: для 10% вызовов сильной модели с mf оптимальное пороговое значение составляет 0.24034.
Это означает, что любой запрос со значением сложности, назначенным маршрутизатором, выше 0.24034, будет отправлен к сильной модели, а те, которые ниже — к слабой модели.
Определение переменных порога и запросов
Здесь мы определяем набор тестовых запросов, предназначенных для охвата широкого спектра уровней сложности. Они включают простые фактические вопросы (вероятно, будут направлены к слабой модели), задачи средней сложности (пограничные случаи) и запросы высокой сложности или творческие (больше подходят для сильной модели), а также задачи по генерации кода для проверки технических возможностей.
Код для определения порогового значения и запросов:
“`
threshold = 0.24034
prompts = [
# Easy factual (likely weak model)
“Кто написал роман ‘Гордость и предубеждение’?”,
“Какая планета в нашей солнечной системе самая большая?”,
# Medium reasoning (borderline cases)
“Если поезд отправляется в 3 часа дня и движется со скоростью 60 км/ч, то какое расстояние он преодолеет к 18:30?”,
“Объясните, почему небо кажется синим днём и красным/оранжевым во время заката.”,
# High complexity / creative (likely strong model)
“Напишите 6-строчный рэп-стих о климатических изменениях, используя внутренние рифмы.”,
“Обобщите различия между контролируемым, неконтролируемым и обучением с подкреплением с примерами.”,
# Code generation
“Напишите функцию Python для проверки, является ли заданная строка палиндромом, игнорируя пунктуацию и пробелы.”,
“Сгенерируйте SQL для поиска трёх крупнейших клиентов из таблицы ‘sales’.”
]
“`
Оценка коэффициента выигрыша
Следующий код рассчитывает коэффициент выигрыша для каждого тестового запроса с помощью маршрутизатора mf, показывая вероятность того, что сильная модель превзойдёт слабую модель.
Код для оценки коэффициента выигрыша:
“`
winrates = client.batchcalculatewinrate(prompts=pd.Series(prompts), router=”mf”)
Store results in DataFrame
_df = pd.DataFrame({
“Prompt”: prompts,
“WinRate”: winrates
})
Show full text without truncation
pd.setoption(‘display.maxcolwidth’, None)
“`
Эти результаты также помогают в тонкой настройке стратегии маршрутизации — анализируя распределение коэффициента выигрыша, мы можем настроить пороговое значение для лучшего баланса между экономией затрат и производительностью.
Маршрутизация запросов через откалиброванный маршрутизатор Matrix Factorization (MF)
Этот код перебирает список тестовых запросов и отправляет каждый из них контроллеру RouteLLM, используя откалиброванный маршрутизатор mf с указанным пороговым значением.
Для каждого запроса маршрутизатор решает, использовать ли сильную или слабую модель, на основе рассчитанного коэффициента выигрыша. Ответ включает как сгенерированный вывод, так и фактическую модель, выбранную маршрутизатором.
Код для маршрутизации запросов:
“`
results = []
for prompt in prompts:
response = client.chat.completions.create(
model=f”router-mf-{threshold}”,
messages=[{“role”: “user”, “content”: prompt}]
)
message = response.choices[0].message[“content”]
model_used = response.model # RouteLLM returns the model actually used
results.append({
“Prompt”: prompt,
“Model Used”: model_used,
“Output”: message
})
df = pd.DataFrame(results)
“`
В результатах запросы 2 и 6 превысили пороговое значение коэффициента выигрыша и были направлены к сильной модели gpt-5, в то время как остальные были обработаны более слабой моделью.
Не стесняйтесь посетить нашу [страницу на GitHub для руководств, кодов и ноутбуков](https://github.com/lm-sys/RouteLLM/tree/main). Также подписывайтесь на нас в [Twitter](https://twitter.com) и присоединяйтесь к нашему [ML SubReddit](https://www.reddit.com/r/MachineLearning). Подписывайтесь на наш [Newsletter](https://www.marktechpost.com/newsletter).
1. Какие ключевые особенности RouteLLM способствуют оптимизации использования больших языковых моделей?
Ответ: RouteLLM обладает несколькими ключевыми особенностями, которые способствуют оптимизации использования больших языковых моделей. Среди них — бесшовная интеграция, предварительно обученные маршрутизаторы, которые сокращают расходы до 85%, сохраняя при этом 95% производительности GPT-4, а также расширяемость и настраиваемость платформы.
2. Как RouteLLM обеспечивает экономичное превосходство при сохранении производительности?
Ответ: RouteLLM обеспечивает экономичное превосходство, используя предварительно обученные маршрутизаторы, которые интеллектуально направляют более простые запросы к более дешёвым моделям. Это позволяет сократить расходы до 85%, сохраняя при этом 95% производительности GPT-4 на широко используемых бенчмарках, таких как MT-Bench.
3. Какие шаги включает в себя процесс установки и использования RouteLLM?
Ответ: процесс установки и использования RouteLLM включает в себя несколько шагов:
* установка зависимостей с помощью команды `!pip install “routellm[serve,eval]”`;
* загрузка ключа API OpenAI;
* загрузка файла конфигурации;
* инициализация контроллера RouteLLM;
* калибровка порогового значения;
* определение переменных порога и запросов;
* оценка коэффициента выигрыша;
* маршрутизация запросов через откалиброванный маршрутизатор.
4. Какие параметры используются при инициализации контроллера RouteLLM?
Ответ: при инициализации контроллера RouteLLM используются следующие параметры:
* `routers`: список маршрутизаторов, которые будут использоваться для маршрутизации запросов. В примере используется маршрутизатор Matrix Factorization (`mf`).
* `strong_model`: высококачественная, но более дорогая модель, к которой будут направляться сложные запросы. В примере используется модель `gpt-5`.
* `weak_model`: более быстрая и дешёвая модель, к которой будут направляться простые запросы. В примере используется модель `o4-mini`.
5. Как RouteLLM помогает балансировать экономическую эффективность и качество отклика?
Ответ: RouteLLM помогает балансировать экономическую эффективность и качество отклика путём автоматической маршрутизации запросов между сильной и слабой моделями на основе их сложности. Это позволяет выполнять простые задачи более дешёвой моделью, а более сложные — возможностями сильной модели, обеспечивая оптимальное соотношение затрат и качества.