3,583 papers
arXiv:2509.09713 70 8 сент. 2025 г. FREE

HANRAG: умная маршрутизация multi-hop запросов и фильтрация шума в RAG

КЛЮЧЕВАЯ СУТЬ
Если RAG начинает врать после 2-3 раундов поиска — это потому что в контексте накопился шум. За 3 раунда модель получает 21 мусорный документ против 9 полезных и теряется. HANRAG решает проблему multi-hop вопросов (требующих нескольких шагов поиска) через классификацию типа запроса + фильтрацию документов между раундами. Метод различает два типа: составные запросы (compound) с независимыми подвопросами — поиск параллельно, сложные (complex) с логической цепочкой — последовательно с уточнением. Точность +16-20%, шагов поиска в 1.5-2 раза меньше.
Адаптировать под запрос

TL;DR

HANRAG — фреймворк для работы с multi-hop вопросами (требующими нескольких шагов поиска) в RAG-системах. В центре — агент Revelator, который классифицирует запросы, разбивает составные вопросы на подвопросы, уточняет сложные цепочки рассуждений и фильтрует нерелевантные документы перед передачей в LLM. Ключевая идея: разделять compound и complex queries — для первых использовать параллельный поиск, для вторых — последовательный с уточнением.

Исследователи нашли три слабости существующих RAG для multi-hop: (1) избыточная итеративность — даже независимые подвопросы решаются последовательно, тратя лишние раунды поиска; (2) использование оригинального запроса для всех раундов поиска вместо уточнённых подвопросов — результаты размытые; (3) накопление шума — нерелевантные документы из каждого раунда поиска мешают LLM генерировать правильный ответ. Без фильтрации за 3-4 раунда модель получает кашу из релевантного и мусора.

HANRAG решает это через маршрутизацию: straightforward вопросы (ответ знает LLM) → прямо к генерации; single-step → один поиск; compound (несколько независимых подвопросов) → параллельный поиск каждого; complex (подвопросы связаны логически) → последовательный поиск с уточнением seed question на каждом шаге. После каждого поиска Revelator фильтрует документы по релевантности, пропуская только чистый контент в LLM. Результат: точность выше на 16-20%, шагов поиска меньше в 1.5-2 раза.

🔬

Схема метода

Система требует:

  • Обученную модель Revelator (Llama-3.1-8B fine-tuned)
  • Retriever (BM25 или векторный поиск)
  • Пайплайн для управления раундами

Workflow для разных типов:

STRAIGHTFORWARD запрос → LLM напрямую

SINGLE-STEP запрос:
1. Retriever → топ-10 документов
2. Revelator фильтрует → релевантные
3. LLM генерирует ответ

COMPOUND запрос (независимые подвопросы):
1. Revelator разбивает → [q1, q2, ..., qn]
2. Параллельно для каждого qi:
 - Retriever → документы
 - Revelator фильтрует
 - LLM отвечает → yi
3. LLM собирает финальный ответ из всех yi

COMPLEX запрос (связанные подвопросы):
1. Revelator уточняет seed question q1
2. Retriever → документы для q1
3. Revelator фильтрует
4. LLM отвечает → y1
5. Revelator проверяет: достаточно ли y1 для исходного запроса?
 - Да → стоп
 - Нет → уточняет следующий seed question q2 с учётом y1 → повтор с шага 2
📌

Ключевые принципы (extractable)

Хотя сама система требует инфраструктуры, принципы можно применить вручную:

⚖️

1. Различай Compound vs Complex

Compound — независимые подвопросы про один субъект:

  • "Когда родился Майкл Фелпс? Когда он ушёл из спорта?"
  • Можно искать параллельно

Complex — подвопросы связаны логически:

  • "Кто сменил первого президента Намибии?"
  • Нужна цепочка: сначала узнать кто первый → потом кто сменил
📌

2. Фильтруй шум после поиска

После веб-поиска в Claude/ChatGPT:

Из результатов поиска оставь только документы, 
релевантные вопросу: [твой вопрос]

[результаты поиска]

Убери нерелевантное, выдай только чистый контент.
📌

3. Уточняй seed questions для complex

Для "Кто сменил основателя SpaceX на посту CEO Tesla?":

  • Seed q1: "Кто основатель SpaceX?" → Илон Маск
  • Seed q2: "Кто сменил Илона Маска на посту CEO Tesla?" → [поиск]
📌

4. Для compound — разбивай и параллель

Вместо одного запроса "Расскажи про Яндекс и Озон":

  • Два отдельных запроса с поиском
  • Результаты собери в финале
🧠

Почему это работает

Слабость LLM: RAG-системы с веб-поиском часто возвращают много нерелевантных документов вместе с полезными. Если на каждом раунде поиска модель получает 10 документов, из которых 7 мусорных, за 3 раунда в контексте 21 мусорный документ против 9 полезных. LLM теряется в шуме, генерирует ответы на основе случайных фрагментов.

Сильная сторона LLM: Модели отлично оценивают релевантность текста к конкретному вопросу, если задачу поставить явно. Вместо "ответь на основе этих документов" можно сначала спросить "какие из этих документов отвечают на вопрос?" — модель точно отберёт нужное.

Как метод использует это: HANRAG добавляет промежуточный шаг фильтрации — после каждого поиска Revelator проверяет каждый документ: "релевантен ли он вопросу?" Только прошедшие фильтр документы попадают к генератору ответа. Это убирает накопление шума через несколько раундов.

Вторая находка: разделение типов multi-hop. Существующие системы используют последовательный поиск для всех multi-hop вопросов. Но если подвопросы независимы (compound), последовательность не нужна — можно искать параллельно, экономя шаги. HANRAG классифицирует тип и выбирает стратегию: параллель для compound, последовательность для complex.

🔍

Как исследовали

Команда взяла 6 бенчмарков: 3 single-hop (SQuAD, Natural Questions, TriviaQA) и 3 multi-hop complex (HotpotQA, 2WikiMultihopQA, MuSiQue). Для compound вопросов создали свой бенчмарк из 10,000 примеров, генерируя их из Wikipedia: брали сущность, извлекали факты, комбинировали в составные вопросы типа "Когда X родился и когда ушёл из спорта?"

Обучили Revelator на синтетических данных для каждой функции:

  • Router: 50k примеров каждого типа запросов
  • Decomposer: составные вопросы + их подвопросы
  • Refiner: seed questions из цепочек рассуждений MuSiQue/2Wiki
  • Relevance filter: пары (вопрос, документ, релевантен?)
  • Ending discriminator: решение "хватит ли инфы для ответа?"

Сравнивали с Adaptive-RAG (NAACL 2024), IRCoT (ACL 2023), Self-RAG (ICLR 2024). Измеряли точность (EM, F1, Accuracy) и эффективность (среднее число шагов поиска).

Результаты удивили: на single-hop бенчмарках HANRAG выиграл +20% accuracy против Adaptive-RAG, хотя это "простые" задачи. Оказалось, даже single-hop запросы страдают от шума — BM25 возвращает 5 документов, но только 1-2 релевантны. Фильтрация решила проблему.

На complex бенчмарках выигрыш +16% accuracy при -0.5 шагах поиска. Уточнение seed questions вместо использования оригинального запроса дало точные результаты на каждом раунде.

На compound бенчмарке самый драматичный скачок: +19.6% accuracy, -1.5 шага. Adaptive-RAG делал 2.76 раунда поиска (последовательно), HANRAG — 1.24 (почти параллельно).

Инсайт: Router с точностью 83.93% — это уже даёт огромный буст. Ablation study показал: без Relevance filter точность падает на 6%, без Refiner — на 10%, без Ending discriminator — шаги взлетают до лимита (4.5).

⚠️

Ограничения

⚠️ Требует инфраструктуры: Система НЕ работает в обычном чате "из коробки". Нужна обученная модель Revelator, retriever (BM25/векторный), пайплайн для управления раундами поиска и фильтрации. Это RAG-архитектура для разработчиков, не техника промптинга.

⚠️ Высокая стоимость обучения: Для каждой функции Revelator создавали синтетические датасеты (50k+ примеров). Адаптация под новый домен требует переобучения или хотя бы fine-tuning.

⚠️ Зависимость от retriever: Если BM25 или векторный поиск возвращает полный мусор, даже Revelator не спасёт — фильтровать нечего. Качество входа = потолок качества выхода.

⚠️ Ручное применение трудозатратно: Принципы (разбивать compound, фильтровать шум) можно использовать вручную в Claude/ChatGPT с web search, но это много копипаста и внимательности. Не для каждого запроса.

💡

Адаптации и экстраполяции

💡 Принцип для работы с web search в Claude/ChatGPT:

Хотя HANRAG — это система с кодом, логику можно применить вручную при работе с встроенным поиском:

Шаг 1: Определи тип вопроса

  • Прямой → сразу спрашивай
  • Один факт → один поиск
  • Несколько независимых фактов → разбей на отдельные вопросы
  • Цепочка логики → веди пошагово

Шаг 2: Фильтруй шум

После того как Claude/ChatGPT сделал web search, попроси:

Из результатов поиска выше оставь только документы, 
которые ПРЯМО отвечают на вопрос: [твой вопрос]

Убери всё нерелевантное. Выдай очищенный список.

Теперь ответь на вопрос, используя только очищенные результаты.

Шаг 3: Для сложных цепочек — пошагово

Вместо "Кто сменил основателя компании X на посту CEO?":

  1. "Кто основатель компании X?" → получи ответ
  2. "Кто сменил [имя из ответа] на посту CEO компании X?" → поиск

🔧 Техника: Явная фильтрация для compound вопросов

Для вопроса типа "Когда родился Пушкин и когда родился Лермонтов?":

Задача разбита на два подвопроса:
1. Когда родился Пушкин?
2. Когда родился Лермонтов?

Для каждого:
- Найди информацию через web search
- Отфильтруй нерелевантные результаты
- Выдай только факт с датой

В конце объедини оба ответа.

Эффект: модель не смешивает результаты по двум персонам, каждый подвопрос решается изолированно.

🔗

Ресурсы

HANRAG: Heuristic Accurate Noise-resistant Retrieval-Augmented Generation for Multi-hop Question Answering

[arXiv:2507.XXXXX - точный номер не указан в статье]

Duolin Sun, Dan Yang, Yue Shen, Yihan Jiao, Zhehao Tan, Jie Feng, Lianzhen Zhong, Jian Wang, Peng Wei, Jinjie Gu

Ant Group, Hangzhou, China


📋 Дайджест исследования

Ключевая суть

Если RAG начинает врать после 2-3 раундов поиска — это потому что в контексте накопился шум. За 3 раунда модель получает 21 мусорный документ против 9 полезных и теряется. HANRAG решает проблему multi-hop вопросов (требующих нескольких шагов поиска) через классификацию типа запроса + фильтрацию документов между раундами. Метод различает два типа: составные запросы (compound) с независимыми подвопросами — поиск параллельно, сложные (complex) с логической цепочкой — последовательно с уточнением. Точность +16-20%, шагов поиска в 1.5-2 раза меньше.

Принцип работы

Не делай так: все multi-hop запросы → последовательный поиск → исходный вопрос для каждого раунда → весь контекст в LLM. Делай так: сначала определи тип. Составной запрос (несколько независимых вопросов про один субъект) — разбивай и ищи параллельно. Сложный (подвопросы связаны логически) — последовательно, но для каждого раунда уточняй seed question (промежуточный вопрос). После каждого поиска фильтруй: модель оценивает релевантность каждого документа к конкретному вопросу, мусор не попадает дальше.

Почему работает

LLM отлично оценивает релевантность текста к вопросу, если задачу поставить явно. Вместо «ответь на основе этих документов» можно сначала спросить «какие из этих документов отвечают на вопрос?» — модель точно отберёт нужное. Промежуточная фильтрация убирает накопление шума через раунды. Без фильтрации: веб-поиск возвращает 10 документов (7 мусорных + 3 полезных) → за 3 раунда в контексте 21 мусорный против 9 полезных → модель генерирует ответ на основе случайных фрагментов. С фильтрацией: каждый раунд пропускает только релевантное → контекст чистый → LLM видит только суть.

Когда применять

RAG-системы с веб-поиском → конкретно для multi-hop вопросов (требующих 2-4 шагов поиска), особенно когда после нескольких раундов точность проседает. Работает для составных запросов («Когда родился и когда ушёл из спорта Майкл Фелпс?») и для сложных цепочек («Кто сменил первого президента Намибии?»). НЕ подходит для simple вопросов — добавляет лишний шаг классификации там где хватит одного поиска.

Мини-рецепт

1. Определи тип запроса: составной (compound) — несколько независимых подвопросов про один субъект, или сложный (complex) — подвопросы связаны логически (ответ на один нужен для следующего).
2. Для составных — разбивай и параллель: Разбей вопрос на независимые подвопросы. Для каждого: [поиск] → [фильтрация релевантных документов] → [ответ]. Собери финальный ответ из всех частей.
3. Для сложных — уточняй seed question: Сформулируй первый промежуточный вопрос (seed question) для цепочки. После каждого раунда: [поиск по уточнённому вопросу] → [фильтруй: оставь только релевантные документы] → [получи ответ] → проверь достаточно ли для исходного вопроса. Если нет — уточни следующий seed question с учётом предыдущего ответа.
4. Фильтруй после каждого поиска: Из результатов поиска оставь только документы релевантные вопросу: [твой seed question]. Убери нерелевантное, пропусти только чистый контент дальше.

Примеры

[ПЛОХО] : Кто сменил основателя SpaceX на посту CEO Tesla? [веб-поиск] [все 10 документов в контекст] [генерация ответа] — исходный вопрос размытый (SpaceX или Tesla?), поиск возвращает микс релевантных и мусора, модель путается.
[ХОРОШО] : Определяю тип: сложный (нужна цепочка). Seed question 1: Кто основатель SpaceX? [поиск] → фильтрую документы → Илон Маск. Seed question 2: Кто сменил Илона Маска на посту CEO Tesla? [поиск по уточнённому вопросу] → фильтрую релевантные → получаю точный ответ — каждый seed question конкретный, после поиска только чистый контент, LLM не видит шум.
Источник: HANRAG: Heuristic Accurate Noise-resistant Retrieval-Augmented Generation for Multi-hop Question Answering
ArXiv ID: 2509.09713 | Сгенерировано: 2026-01-12 06:11

Работа с исследованием

Адаптируйте исследование под ваши задачи или создайте готовый промпт на основе техник из исследования.

0 / 2000
~0.5-2 N-токенов ~10-30с
~0.3-1 N-токенов ~5-15с