LLM-роутер: дорогая модель только там, где она нужна
Большинство команд гоняет один премиум-LLM на всё — от классификации до архитектурных решений. Умный роутер сначала классифицирует запрос, потом диспетчеризует в дешёвую/среднюю/премиум-модель — и режет счёт на 30-80% без потери качества.
СреднийDevOps с AI20 минClaude Haiku/Sonnet/Opus, OpenAI o3/gpt-4o/gpt-4o-mini, Classifier model
1
Одна модель на всё — антипаттерн 2026
Премиум-модели (Opus, GPT-4o) стоят $30-60 за миллион токенов. Haiku и gpt-4o-mini — $0.50-2. Разница тридцатикратная. При этом 80% реальных запросов — это классификация, реформулирование, извлечение полей, короткие ответы на FAQ. На масштабе вы платите в 30 раз больше за тот же ответ.
Аналогия: представьте компанию, где всё делает senior-инженер — от багрепортов до архитектуры. Junior-задачи идут по senior-ставке. Команда с грейдами дешевле на порядок и быстрее — потому что junior не застревает в senior-совещаниях. LLM-роутер — та же идея: правильный уровень на правильную задачу.
❌ Одна модель — Opus для всего
- Предсказуемая цена, но дорого
- Простые задачи идут по премиум-ставке
- Плато по latency — Opus всегда медленнее Haiku
- Нет рычага для оптимизации
✅ Роутер — Haiku / Sonnet / Opus
- 30-80% экономии на реальной нагрузке
- Быстрее на простых запросах (Haiku <1s)
- Сложные задачи по-прежнему идут в премиум
- Можно крутить баланс по метрикам
Считайте не «стоимость на запрос», а «стоимость на класс запроса». 90% реальных запросов — классификация и реформулирование, они не требуют Opus. Одна цифра среднего чека прячет всю экономию.
2
Классификатор запроса — это тоже запрос
Чтобы роутить умно, нужно понять, какой это запрос. Ловушка: если классификатор слишком умный (= дорогой), экономия съедается им самим. Если слишком простой — он ошибается, и запросы улетают не в ту модель.
Правильный баланс — дешёвая модель + structured output + fallback-политика. Haiku с JSON-выходом классифицирует за <200ms и <$0.0001 за запрос. Это копеечный налог на маршрутизацию, который окупается первым же корректным dispatch в Haiku вместо Opus.
По каким сигналам классифицировать: (1) тип задачи — summarize, code, reason, classify; (2) длина входа — на длинный контекст дешёвая модель тратит деньги впустую; (3) ожидаемая длина выхода; (4) нужны ли tools/function calls; (5) уровень доменной экспертизы — юридический совет и «перефразируй» это разные планеты.
Что должен проверять classifier
Тип задачи (summarize / code / reason / classify)
Длина входа и ожидаемая длина выхода
Нужны ли tools / function calls
Уровень пользователя (free / paid) — для приоритета
Confidence классификации — ниже порога → эскалация
Blacklist ключевых слов для форс-премиума (безопасность, юристика)
Классификатор должен стоить <1% от стоимости дорогой модели. Иначе это не оптимизация, а переодевание расходов в другой счёт.
3
Каскад Haiku → Sonnet → Opus: дешёвый пробует первым
Каскадный паттерн: начинаем с самой дешёвой модели, проверяем качество, эскалируем только при провале. Haiku пробует первым, Sonnet подхватывает сложные случаи, Opus включается на действительно трудных. Большая часть трафика оседает на Haiku — туда же уходит бюджет.
Почему это побеждает параллельный voting (когда три модели отвечают одновременно и голосуют): в voting вы всегда платите за все три. В каскаде — за дорогую платите только на провалах. Разница для типичной нагрузки 70/20/10 между tiers: voting стоит сумму всех трёх моделей на каждом запросе, каскад — Haiku + 30% Sonnet + 10% Opus. Разница в 3-5 раз.
Важный нюанс: когда каскад эскалирует, передавайте ответ младшей модели как hint старшей. Opus видит, на чём Haiku споткнулся — это и контекст задачи, и явный анти-пример. Качество финального ответа выше, чем если бы Opus решал задачу с нуля.
Запрос
Haiku
Quality gate
OK
Ответ
fail — эскалация
Sonnet
Quality gate
fail — эскалация
Opus
cascade(запрос):
ответ_1 = Haiku(запрос)
если quality_gate(ответ_1) == "ok":
вернуть ответ_1
ответ_2 = Sonnet(запрос, hint=ответ_1) # использует контекст
если quality_gate(ответ_2) == "ok":
вернуть ответ_2
вернуть Opus(запрос, hints=[ответ_1, ответ_2])
# Opus видит, где младшие ошиблись — больше шансов не повторить4
Quality gate: без него каскад превращается в лотерею
Quality gate — функция, которая решает: сделала ли дешёвая модель свою работу. Без gate вы вернули плохой ответ и сэкономили $0.01 — это не оптимизация, это ухудшение продукта за копейки.
Три типа gate, от простого к сложному. Первый — программатический: проверка по схеме, regex, длине, структуре JSON. Стоит ноль, ловит грубые провалы. Подходит для structured output: classification, extraction, form-filling.
Второй — self-critique: дешёвая модель сама оценивает свой ответ по строгому промпту. «Этот ответ полон? Есть ли противоречия?» Стоит ещё один вызов Haiku, но ловит семантические провалы — ответ синтаксически верный, но фактологически пустой.
Третий — retrieval grounding: проверка, что ответ опирается на реальные источники. Для RAG-пайплайнов must-have. Сослалась на источник, которого нет в ретриве — придумала, эскалируем.
Метрика здоровья gate — fallback rate, доля эскалированных запросов. <20% — экономим хорошо. 20-60% — норма. >60% — младшая модель слишком низко, стартуйте каскад с Sonnet. Плохой gate хуже отсутствия роутера: Haiku-качество по Opus-цене.
Логируйте пары (input → model_used → escalated?). Через неделю вы увидите, какие классы запросов стабильно эскалируются, и сможете отправлять их сразу в Sonnet, минуя Haiku — это убирает один лишний вызов и ускоряет их.
5
Метрики роутера: чтобы не откатиться на один Opus
Без метрик история всегда одна: через две недели кто-то скажет «качество упало», руководство запаникует, и вы откатываетесь на один премиум. Роутер похоронен. С метриками — видите, какой именно класс запросов страдает, и чините точечно, не трогая остальное.
Пять метрик ниже — минимальный набор. Снимайте их по классам запросов, не в среднем: общий средний скроет проблему в 10% трафика, которая ломает ключевой сценарий. И всегда держите baseline — цифры того же трафика на одном премиуме — иначе не с чем сравнивать.
| Метрика | Что измеряет | Целевое значение |
|---|---|---|
| Cost per request | Средняя стоимость запроса в $ | Снижение 30-80% vs baseline |
| Escalation rate | Доля запросов, ушедших в премиум | 10-30% — нормально |
| Quality score (by class) | User rating или auto-eval по классу | Не ниже single-model baseline |
| Routing accuracy | Правильно ли classifier выбрал tier | >90% |
| p95 latency | Скорость 95-го перцентиля | Не хуже single-model |
Запускайте роутер на 5% трафика параллельно основной модели 1-2 недели. Сравнивайте качество по классам запросов, а не общее. Только после этого — переключайте 100%. Это окупает себя одним предотвращённым откатом.
Результат
Работающий LLM-роутер с классификатором и каскадом Haiku → Sonnet → Opus, который режет расходы на 30-80% без деградации качества. Quality gate отсекает плохие ответы дешёвой модели, метрики по классам запросов защищают от слепого отката на один премиум.