AI-инжиниринг
Model Routing: выбор модели на лету - GPT-4 vs Claude vs local models
Цели урока
- Понять почему model routing экономит 60-80% бюджета без потери качества
- Реализовать complexity-based routing: keyword routing, LLM classifier, embedding KNN
- Построить cost-based router с cost per request tracking через Redis
- Внедрить latency-based routing с sliding window p95 и fallback chains
- Собрать универсальный Model Router: complexity × cost × latency → weighted score
70% запросов к LLM - простые: перефразировать, перевести, извлечь поле. GPT-4o на них - как Ferrari за хлебом. gpt-4o-mini справится за 16x меньше денег. Model routing - это маршрутизатор, который знает разницу. Один TypeScript-класс с routing логикой сократил счёт AI-стартапа с `47,000 USD` до `18,000 USD` в месяц. Stanford RouteLLM доказал: 60-80% экономии при деградации качества менее 1%.
- OpenRouter - 10M+ ARR на одной идее: unified API + model routing для 100+ моделей
- Cursor (IDE) - routing: автокомплит → fast local model, код-генерация → GPT-4o/Claude Sonnet
- ChatGPT Plus - внутренний routing: простые вопросы → GPT-4o-mini, сложные → GPT-4o (o1)
- LiteLLM - open-source router с fallback chains, cost tracking, budget limits из коробки
Предварительные знания
Маршрутизация моделей и многомодельная эра
К 2024 году у инженеров появился выбор из десятков моделей с разной ценой и качеством: семейства GPT, Claude, Gemini и открытые модели. Платить за топовую модель на каждом запросе дорого, поэтому возникла идея маршрутизации: простые запросы отдавать дешёвой модели, сложные - сильной. В июне 2024 команда LMSYS (та, что ведёт Chatbot Arena) опубликовала статью RouteLLM (arXiv 2406.18665), а в июле вышел открытый фреймворк и блог-пост. RouteLLM обучает роутеры на данных о предпочтениях и динамически выбирает между сильной и слабой моделью; по их замерам это сильно снижает затраты при сохранении большей части качества топовой модели на популярных бенчмарках. Так маршрутизация по цене и качеству стала отдельной инженерной темой многомодельной эры.
Зачем нужен model routing
70% запросов к LLM - простые: перефразировать, перевести, извлечь поле из JSON, ответить на FAQ. GPT-4o на них - как Ferrari за хлебом. gpt-4o-mini справится за 16x меньше денег. Model routing - это маршрутизатор, который знает разницу.
Январь 2025. AI-стартап открывает счёт от OpenAI: **`47,000 USD`**. Аналитик смотрит логи: 68% запросов - "What's the status of order #1234?". GPT-4o обрабатывает каждый за `0.01 USD.` GPT-4o-mini сделал бы то же самое за `0.0003 USD` - в 33 раза дешевле. После внедрения routing счёт упал до `18,000 USD.` Один TypeScript-класс сэкономил `29,000` в месяц.
Модели различаются по трём осям, и разрыв между ними **огромен**:
| Модель | Cost (input/1M) | Cost (output/1M) | Latency (TTFT) | Quality (MMLU) |
|---|---|---|---|---|
| GPT-4o | 2.50 | 10.00 | ~500ms | 88.7% |
| GPT-4o-mini | 0.15 | 0.60 | ~200ms | 82.0% |
| Claude 3.5 Sonnet | 3.00 | 15.00 | ~600ms | 88.7% |
| Claude 3.5 Haiku | 0.80 | 4.00 | ~300ms | 84.0% |
| Llama 3.1 70B (local) | 0.00 | 0.00 | ~150ms | 82.0% |
| Llama 3.1 8B (local) | 0.00 | 0.00 | ~50ms | 68.0% |
GPT-4o стоит в **17 раз дороже** GPT-4o-mini. При 100K запросов в день математика неумолима:
Model routing - это не компромисс между стоимостью и качеством. Это **оптимизация без потери качества**. GPT-4o-mini обрабатывает простые запросы с тем же результатом, что GPT-4o. Разница появляется только на сложных задачах: многоходовое рассуждение, сложный код, деликатная коммуникация. Stanford RouteLLM и LiteLLM router подтверждают: 60-80% экономии достижимо при MMLU-деградации менее 1%.
Три стратегии routing - они не конкурируют, а дополняют друг друга:
- **Complexity-based** - оценить сложность запроса и выбрать модель (рассмотрим далее)
- **Cost-based** - бюджетный лимит на пользователя/сессию, переключение при приближении к лимиту
- **Latency-based** - для real-time приложений выбирать быструю модель, для batch - качественную
При 100K запросов в день, 70% из которых простые, model routing экономит ~66% бюджета. За счёт чего?
Complexity-Based Routing: оценка сложности запроса
Сложность запроса - субъективное понятие. "Переведи 'hello' на французский" - простой. "Проанализируй trade-offs между microservices и monolith для стартапа с 3 инженерами" - сложный. Как научить систему различать - без участия человека, до миллисекунды?
Три подхода к оценке сложности. Они выстраиваются в каскад - от быстрого к точному:
Подход 1: Heuristic-Based (rule-based) - keyword routing
Подход 2: LLM-Based Classifier - LLM routing
Именно этот подход исследовал Stanford RouteLLM (2024): дешёвый классификатор (gpt-4o-mini) решает, нужна ли мощная модель. ROI классификации - 400x: стоимость вызова `0.000024 USD,` экономия на одном правильно сроутированном запросе - `0.01+ USD`.
Подход 3: Embedding-Based Classifier
На практике работает **каскад**: heuristic как fast path (бесплатно, 0ms) - если score < 10 или score > 70, решение принято мгновенно. Если 10-70 - вызываем LLM classifier. LiteLLM router реализует именно такую схему из коробки - fallback chains с cost tracking на каждом шаге.
Запрос 'What is the capital of France?' проходит через complexity router. Какой подход определит его сложность быстрее и дешевле всего?
Cost-Based Routing: бюджетный контроль
Complexity routing оптимизирует отдельный запрос. Но есть сценарии, где важен **бюджет на уровне пользователя, сессии или дня**. Freemium-сервис даёт 10 GPT-4o запросов бесплатно, потом переключает на mini. Enterprise-клиент имеет месячный бюджет `500,` после которого деградация.
Cursor делает именно так: бесплатный план - local model, Pro - GPT-4o-mini, Business - GPT-4o. Разница не в коде, а в бюджетном лимите, переданном в router. Cost per request tracking в Redis - стандарт для B2C AI SaaS.
В production cost per request tracking реализуется через Redis - атомарно и быстро:
Cost routing критичен для **B2C SaaS**: ChatGPT, Notion AI, Cursor. Пользователь платит `20 USD/мес`, а стоимость GPT-4o - `0.03 USD` за запрос. При 100 запросах в день - `90/мес` убытка на одного пользователя. Cost router переключает на mini после порога и делает unit economics сходящимися.
Пользователь на тарифе Pro (5 USD/день) потратил 4.85 USD. Приходит сложный запрос на 0.03 (GPT-4o). Что должен сделать cost router?
Latency-Based Routing: выбор по скорости
В real-time приложениях - чатботах, IDE-ассистентах, голосовых помощниках - latency важнее качества. Пользователь примет ответ чуть хуже, но через 200ms, а не через 3 секунды. **Latency routing** выбирает модель на основе допустимого времени ответа.
| Use Case | Target Latency | Оптимальная модель | Почему |
|---|---|---|---|
| Autocomplete в IDE | <200ms | Local Llama 8B | Мгновенный ответ, приемлемое качество |
| Chat reply (первый токен) | <500ms | GPT-4o-mini / Haiku | Быстрый TTFT, хорошее качество |
| Document analysis | <5s | GPT-4o / Claude Sonnet | Качество важнее скорости |
| Batch processing | No limit | GPT-4o / Claude Opus | Максимальное качество, время не критично |
| Voice assistant | <300ms | GPT-4o-mini + streaming | UX требует мгновенной реакции |
Latency провайдеров **нестабильна**. GPT-4o отвечает за 500ms утром и за 3000ms вечером (peak traffic в US timezone). Router должен использовать **sliding window p95** последних запросов - не фиксированные значения из документации. Один таймаут не сломает статистику. Средняя latency - сломает.
Продвинутая стратегия - **Adaptive Routing** на алгоритме **UCB1 (Upper Confidence Bound)** из multi-armed bandit теории. Система автоматически балансирует exploitation (лучший провайдер) и exploration (пробовать другие - вдруг стали быстрее):
Voice assistant требует TTFT < 300ms. GPT-4o показывает p95 = 600ms, GPT-4o-mini - p95 = 250ms. Какое решение router?
Реализация универсального Model Router
Все три стратегии - complexity, cost, latency - объединяются в одном **Model Router**. Это центральный компонент: принимает запрос и метаданные, возвращает оптимальную модель. LiteLLM router и Portkey делают именно это - только с прослойкой SaaS поверх. Ниже - production-ready реализация без vendor lock-in.
Использование router в NestJS-сервисе:
Сервисы, которые реализуют model routing как продукт - и которые стоит знать:
| Сервис | Что делает | Модель ценообразования |
|---|---|---|
| OpenRouter | Единый API к 100+ моделям, routing по цене/качеству | Pass-through + markup |
| Martian | AI-router с автоматическим выбором модели | SaaS, per-request |
| Portkey | Gateway с fallback, load balancing, caching | Open-source + cloud |
| LiteLLM | Unified API + budget management + routing | Open-source |
Начинать просто: heuristic complexity scorer + 2 модели (GPT-4o и GPT-4o-mini). Это покрывает 90% выгоды model routing. Embedding classifiers, adaptive UCB1, multi-provider fallback chains - оптимизация второго порядка. Специализация + routing > одна лучшая модель для всего.
Model Router получает запрос: complexity=15, бюджет пользователя исчерпан на 95%, target latency не задан. Какую модель выберет корректная реализация?
Нужна одна лучшая модель для всего - она справится с любым запросом
Специализация + routing бьёт универсальность: разные модели оптимальны для разных задач
GPT-4o-mini на простых вопросах достигает 98% качества GPT-4o за 6% стоимости. Stanford RouteLLM, LiteLLM router и реальные кейсы показывают: 60-80% экономии при правильном routing без ощутимой деградации. 'Одна лучшая модель' - это платить за Ferrari, чтобы ездить за хлебом.
Итоги
- Model routing - маршрутизатор запросов: простые → дешёвая модель, сложные → мощная. Экономия 60-80%
- Complexity routing: keyword routing (0ms, бесплатно) → LLM classifier (точно, 0.00002) → embedding KNN
- Cost routing: cost per request tracking в Redis, downgrade при приближении к лимиту
- Latency routing: sliding window p95, fallback chains. Нестабильность latency - главный враг
- Universal Router: complexity × cost × latency → weighted score → оптимальная модель
- Начало: heuristic + 2 модели (GPT-4o/mini). Это 90% выгоды. Специализация + routing > одна лучшая модель
Что дальше
Model routing оптимизирует выбор модели. Следующие темы - оптимизация самих вызовов: кеширование ответов, сжатие промптов, управление rate limits.
- Caching и Optimization — Semantic cache для LLM-ответов, prompt compression, KV-cache - ещё 30-50% экономии
- Cost Management — Полная стратегия управления расходами: routing + caching + prompt optimization
- Rate Limiting для AI — Token bucket, sliding window, per-user limits - защита от перерасхода
Связанные уроки
- aie-21-orchestration-patterns — Роутинг это конкретный паттерн оркестрации
- aie-28-caching-optimization — Роутинг и кэширование вместе режут стоимость
- aie-29-cost-management — Роутинг это главный рычаг управления стоимостью
- aie-30-rate-limiting-ai — Решения роутинга взаимодействуют с лимитами по моделям
- net-37-load-balancing — Роутинг моделей это балансировка нагрузки между бэкендами моделей
- ml-05-evaluation — Роутинг по сложности требует классификатора запросов