Суть
Типичная ошибка — одна (самая мощная) модель на всё: «который час?» и «напиши алгоритм» стоят одинаково дорого. Роутер оценивает сложность запроса и выбирает модель.
Зачем это нужно
Разница цены Tier 1 vs Tier 3 — 17–19×, а на простых задачах (классификация/FAQ) gap качества < 2%. Без роутинга платишь флагман-цену за тривиальное.
Как работает (3 способа + cascade)
- Rule-based — ключевые слова/длина/тип задачи → cheap/expensive. Просто, предсказуемо, негибко.
- Classifier-based — мини-модель оценивает simple/complex/ambiguous. Гибко, нужны данные. ⚠️ Оговорка для security: классификатор, годный для роутинга по сложности, не годен для безопасности как есть. Конкретно PromptGuard-2 (Meta ~100M) даёт F1 ~0.35 — но причина не в размере, а в калибровке: recall у него близок к 1.0 при FPR 96% на доброкачественном агентном трафике. Специализированный энкодер на 184M выигрывает все injection-бенчмарки у 8B-модели, а универсальная 30B проигрывает ему на этой оси. Выбирать детектор нужно по паре «recall на своей атаке / FPR на своём нормальном трафике», а не по размеру — разбор в Injection Detection.
- Cascade (самый популярный в проде): cheap-модель → возвращает ответ + confidence score (0.0–1.0) → если ≥ порога отдаём, иначе эскалируем на дорогую. Разбор целиком — Cascade Routing: там четыре типа гейта (эвристики, logprobs, LLM-верификатор, фидбэк) в порядке возрастания цены, четырёхрубежный пайплайн и способы сломать каскад слишком мягким или слишком строгим порогом. Само-репортируемый confidence, описанный здесь, — только один из этих гейтов и не самый надёжный.
- Порог (старт 0.85) калибруется экспериментом на 100–200 реальных запросах (LLM-judge), не «на глаз». Это порог само-репортируемой уверенности отвечающей модели, и с порогом 0.7 из LangGraph Intent Router он не сравним: там величину выдаёт эмбеддинг-классификатор намерения, у которого своя шкала и своя калибровка. Переносить число между ними нельзя — как и порог семантического кэша, который живёт на третьей шкале (Semantic Cache).
- Confidence получают через structured output (JSON:
{answer, confidence, reason}). Триггеры эскалации на дорогую модель: confidence < 0.85, агент запросил tool >3 раз, ответ содержит «I'm not sure» (подход «trust or escalate»). - Готовые semantic-router'ы: vLLM Semantic Router (прослойка на Rust между фронтом и LLM: смотрит на запрос → дешёвая 8B или SOTA) даёт −48% токенов, −47% задержки, +10% точности; альтернативы —
musistudio/claude-code-router,lm-sys/RouteLLM. - Budget-aware (см. Agent CostControl): при остатке бюджета <30% — форсим cheap + уведомляем; <10% — только простые запросы.
- Реализация в LangGraph: роутинг = условное ребро (
add_conditional_edges), где функция-маршрутизатор возвращает имя следующего узла; решением может быть и выбор LLM. Практический intent-router двухуровневый (intent → ветка, затем внутри ветки — следующее решение) — см. LangGraph Intent Router, LangGraph Nodes and Edges.
Альтернативный взгляд: роутер намерения вместо роутера цены
В основной линии заметки роутер — про экономику (cascade по confidence, 80% на дешёвую модель). В прикладной оптике роутер — это Intent / Task Router: лёгкая классификация запроса («объясни термин», «дай план», «сделай отчёт», «найди в документах», «диагностика») → выбор сценария ответа, шаблона и источника контекста, а не модели. Плюс роутер работает как guardrail: отсекает вредные запросы и prompt-injection ещё до «мозга» (policy before reasoning, см. Guardrails). Цена ошибки: ошибся роутер → ассистент «делает не то» (вместо отчёта выдаёт теорию).
Связано с
- Cascade Routing — каскад по уверенности как отдельный паттерн: гейты, пороги, режимы отказа
- Model Selection — роутинг оперирует выбором моделей
- Reasoning Effort — модель + усилие = рычаги цены/качества
- Agent CostControl — роутер и бюджет работают вместе
- LangGraph Intent Router — роутинг как условные рёбра графа