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?":
- "Кто основатель компании X?" → получи ответ
- "Кто сменил [имя из ответа] на посту 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
