Первый пост - что такое RAG
Второй пост - чанки для RAG
Чтобы RAG не стрелял из пушки по воробьям, научим его сначала понимать запрос.
Зачем нужен роутер?
LLM-бот 📜 ≠ универсальный ответчик.
• «Где ссылка на PR?» — хватит dense-поиска по коду.
• «Собери отчёт по продажам» — лучше SQL-tool.
• «Как на испанском будет “chunk”?» — достаточно встроенных знаний модели.
Router-LLM читает запрос и решает, какой инструмент (retriever/SQL/web/agent) нужен — экономим токены и время.
Как определить intent?
1. Маленький LLM-классификатор (≈ 1-3 ¢/к) выдаёт JSON:
{ "intent":"fact", "contains_code":false, "lang":"ru" }.
2. Правила fallback:
есть «http» ➜ веб-поиск
есть “SELECT” ➜ SQL
⌘-символы ➜ code-help
3. Можно подключить LangChain SelfQueryRetriever — он сам превращает вопрос в фильтр по метаданным.
Пример схемы
User query
│
▼
Router-LLM
├── fact / how-to → hybrid dense+BM25
├── code-help → code-vector + Reranker (DeepSeek и bge-reranker-m3-v3)
├── analytics → SQL-tool + summarizer
└── unknown → fallback LLM
Быстрый чек-лист
✅- Язык детектируем за 1 проход (bcp-47 tag).
✅- contains_code — RegExp на \`\`\`,
{}, ;, `class`… ✅- pickRerank:
- есть exact id / номер → ↑BM25, ↓dense.
- запрос ≥ 70 симв. и без спец. слов → ↑dense.
✅- Отдавать Top-k = 10, потом Rerank (example: BGE-reranker-m3-v2) только если overlap < 0.4.
Что почитать
- LangChain Self-Querying Retriever — умеет писать фильтры сам.
- LlamaIndex Router Query Engine — пример на 3 хранилища.
- DeepSieve — роутит под-вопросы на лету.
Зачем именно так:
1️⃣ - Semantic routing повышает точность RAG-чат-ботов на 15–30 %.
2️⃣ - Self-Querying Retriever генерирует структурный filter → сокращает токены на 40 %.
3️⃣ - В LlamaIndex RouterQueryEngine достаточно 5–7 примеров, чтобы LLM стабильно выбирал нужный retriever.
4️⃣ - Свежая работа DeepSieve показывает sub-question routing между локальным и глобальным индексом.
💬 Следующий пост
- Гибридный поиск dense + BM25 + rerank — почему одного вектора мало.
