LLM-роутинг -- это техника автоматического выбора оптимальной языковой модели для каждого конкретного запроса на основе критериев стоимости, качества, скорости и сложности задачи. Вместо того чтобы отправлять все запросы на одну модель, роутер анализирует запрос и направляет его к наиболее подходящей модели.
Зачем это нужно? Отправлять простой вопрос «Какая столица Франции?» на GPT-4o -- это как ездить на Ferrari за хлебом. GPT-4o-mini справится не хуже, но в 15 раз дешевле. LLM-роутинг автоматизирует этот выбор.
Стратегии роутинга: от простых к продвинутым
Существует несколько подходов к LLM-роутингу, от базовых до интеллектуальных:
1. Rule-based роутинг -- самый простой подход: правила на основе метаданных запроса.
def route_request(messages: list, task_type: str = None) -> str:
"""Выбирает модель на основе типа задачи и длины контекста."""
total_chars = sum(len(m["content"]) for m in messages)
# Длинный контекст -> Gemini (2M токенов)
if total_chars > 200_000:
return "gemini-2.0-pro"
# Кодогенерация -> Claude (лучшее качество кода)
if task_type == "code":
return "claude-3.5-sonnet"
# Простые запросы -> дешёвая модель
if total_chars < 500 and task_type in ("qa", "classification"):
return "gpt-4o-mini"
# По умолчанию -> универсальная модель
return "gpt-4o"
2. Classifier-based роутинг -- лёгкий классификатор (маленькая модель или ML-модель) определяет сложность запроса и выбирает модель.
from openai import OpenAI
client = OpenAI(
base_url="https://api.modelswitch.ru/v1",
api_key="msk_ваш_ключ"
)
def classify_and_route(user_message: str) -> str:
"""Использует дешёвую модель для классификации сложности."""
classification = client.chat.completions.create(
model="gpt-4o-mini", # ~$0.15/1M tokens -- очень дёшево
messages=[{
"role": "system",
"content": "Оцени сложность запроса: SIMPLE, MEDIUM, COMPLEX. Ответь одним словом."
}, {
"role": "user",
"content": user_message
}],
temperature=0,
max_tokens=10
)
complexity = classification.choices[0].message.content.strip()
routing_map = {
"SIMPLE": "gpt-4o-mini", # $0.15/1M input
"MEDIUM": "gpt-4o", # $2.50/1M input
"COMPLEX": "claude-3.5-sonnet" # $3.00/1M input
}
return routing_map.get(complexity, "gpt-4o")
3. Cascading (каскадный) -- сначала отправляем запрос дешёвой модели; если ответ некачественный (низкий confidence), эскалируем на более мощную.
Критерии выбора модели: баланс трёх факторов
При проектировании LLM-роутера нужно балансировать три фактора:
| Фактор | Дешёвая модель (GPT-4o-mini) | Мощная модель (GPT-4o/Claude) |
|---|---|---|
| Стоимость | $0.15--0.60/1M | $2.50--15.00/1M |
| Скорость | ~150 tok/sec | ~80 tok/sec |
| Качество | Хорошее для простых задач | Отличное для сложных задач |
Оптимальный роутер минимизирует стоимость при заданном уровне качества. На практике 60--80% запросов типичного приложения могут обрабатываться дешёвой моделью без потери качества.
Fallback и retry: отказоустойчивый роутинг
Помимо оптимизации стоимости, роутер обеспечивает отказоустойчивость:
import time
FALLBACK_CHAIN = [
"gpt-4o",
"claude-3.5-sonnet",
"gemini-2.0-pro",
]
def resilient_request(messages: list, max_retries: int = 3) -> str:
"""Запрос с автоматическим fallback на альтернативную модель."""
for model in FALLBACK_CHAIN:
for attempt in range(max_retries):
try:
response = client.chat.completions.create(
model=model,
messages=messages,
timeout=30
)
return response.choices[0].message.content
except Exception as e:
if attempt < max_retries - 1:
time.sleep(2 ** attempt) # exponential backoff
continue
break # Переходим к следующей модели
raise Exception("Все модели недоступны")
Результаты: сколько можно сэкономить
Реальные данные клиентов ModelSwitch показывают впечатляющие результаты:
- Чат-бот для e-commerce -- перевод 70% запросов на GPT-4o-mini сократил расходы на 55% без заметного снижения удовлетворённости пользователей
- RAG-система документации -- каскадный роутинг (mini -> 4o для сложных вопросов) снизил стоимость на 40%
- Кодогенерация -- направление генерации на Claude, а ревью на GPT-4o-mini сократило расходы на 35% при улучшении качества кода
LLM-роутинг -- это не преждевременная оптимизация, а архитектурный паттерн, который стоит закладывать с самого начала. С ModelSwitch реализовать роутинг просто: все модели доступны через один API, переключение -- одна строка кода, а аналитика в дашборде покажет, какие модели работают эффективнее для ваших задач.