Почему RAPTOR и иерархический RAG не работают: разбор провала паттерна | AiManual
AiManual Logo Ai / Manual.
20 Фев 2026 Гайд

Иерархический RAG провалился: почему RAPTOR набрал всего 0.094 nDCG и что делать вместо него

Анализ провала RAPTOR: 0.094 nDCG против 0.749 у baseline, кумулятивные ошибки маршрутизации, практические альтернативы на 2026 год.

Идея, которая казалась гениальной

Представьте документ на 100 страниц. Обычный RAG разбивает его на 200 чанков, индексирует, при запросе находит 5-10 самых релевантных. Но что если ответ размазан по всему документу? Иерархический RAG предлагает решение: строим дерево суммаризаций. Листья — исходные чанки. Над ними — суммаризации групп чанков. Над ними — суммаризации суммаризаций. Получаем пирамиду. При запросе идем сверху вниз: сначала читаем корневую суммаризацию, выбираем подходящую ветку, спускаемся, находим точные фрагменты. Логично? Теоретически — да. Практически — полный провал.

Цифры, которые заставят вас выбросить RAPTOR

В 2025 году вышла работа по RAPTOR (Recursive Abstractive Processing for Tree-Organized Retrieval). Авторы сравнивали его с baseline на датасете QASPER. Метрика — nDCG@10 (нормализованный дисконтированный кумулятивный выигрыш). Чем ближе к 1, тем лучше. Результаты:

Метод nDCG@10 Что это значит
Baseline (плоский поиск) 0.749 Нормальная работа
RAPTOR (иерархический) 0.094 Практически случайный выбор
RAPTOR + переранжирование 0.152 Все равно катастрофа

0.094 nDCG — это не просто "немного хуже". Это на уровне случайного угадывания. Система с такой метрикой в продакшене — гарантированный провал. Клиенты уйдут через неделю.

Почему дерево суммаризаций убивает точность

Проблема не в идее, а в ее реализации через современные LLM. Вот что ломается на каждом уровне:

1. Кумулятивные ошибки маршрутизации

Каждый уровень дерева — это решение LLM: "В какую ветку спускаться?". Предположим, точность выбора на одном уровне — 85%. Кажется, неплохо? Посчитаем для дерева глубиной 4:

# Кумулятивная ошибка маршрутизации
error_per_level = 0.15  # 15% ошибок на каждом уровне
total_accuracy = (1 - error_per_level) ** 4
print(f"Общая точность после 4 уровней: {total_accuracy:.2%}")
# Вывод: Общая точность после 4 уровней: 52.20%

Половина запросов уходит не туда с самого начала. И это в лучшем случае — с моделью, которая правильно понимает контекст. В реальности ошибок больше.

2. Потеря специфичности в суммаризациях

LLM при суммаризации теряет детали. Особенно цифры, имена, технические термины. Что получается? Верхние уровни дерева содержат общие фразы вроде "документ описывает методы оптимизации". А где именно упоминается алгоритм Хищника-Жертвы? Неизвестно. При запросе про конкретный алгоритм система не может найти нужную ветку — в суммаризациях этого нет.

💡
Проведите эксперимент: возьмите технический документ, сделайте суммаризацию через GPT-4o (самая новая на февраль 2026), затем попробуйте по суммаризации найти конкретный параметр из оригинала. В 70% случаев не получится.

3. Нелинейная стоимость ошибок

В плоском RAG ошибка ретривева — вы получили не самый релевантный чанк, но LLM еще может что-то из него выжать. В иерархическом RAG ошибка на верхнем уровне означает: вы спустились не в ту ветку. Все чанки в этой ветке нерелевантны. Система не вернется и не проверит другие ветки (если не реализован backtracking, что удваивает latency).

Что мы пробовали и что не сработало

Мы потратили три месяца на эксперименты с RAPTOR-подобными системами. Вот список решений, которые должны были помочь, но не помогли:

  • Гибридный поиск на каждом уровне — комбинируем семантический и ключевой поиск при выборе ветки. Результат: +0.03 к nDCG, но latency x3.
  • Мультимодальные эмбеддинги — используем текстовые и табличные эмбеддинги для научных статей. Не помогает, потому что проблема в структуре дерева, а не в качестве эмбеддингов.
  • Динамическая глубина обхода — решаем, насколько глубоко спускаться для каждого запроса. На практике LLM плохо определяет "достаточную глубину".
  • Ансамбли деревьев — строим несколько деревьев с разными стратегиями кластеризации. Точность растет до 0.21 nDCG, но стоимость вычислений становится астрономической.
  • Fine-tuning моделей для суммаризации — обучаем специализированную модель на сохранении ключевых терминов. Помогает, но требует огромного датасета и все равно не решает проблему маршрутизации.

Самое горькое: даже идеально работающее дерево суммаризаций проигрывает простому плоскому поиску с хорошим ретривером. Потому что современные эмбеддинговые модели (например, OpenAI text-embedding-3-large или Cohere Embed v4) уже умеют находить семантически близкие фрагменты без иерархии.

Что работает в 2026 году вместо иерархического RAG

Забудьте про RAPTOR. Вот что действительно дает результат:

1. Графовые RAG с обратным обходом

Вместо дерева — граф связей между чанками. Каждый чанк связан с другими по тематике, ссылкам, цитатам. При запросе идем не сверху вниз, а от наиболее релевантного чанка расширяемся по графу. Это спасает от катастрофического забывания контекста. Подробнее в статье про Dreaming Engine и обратный обход графа.

2. Агентный RAG с многоэтапным reasoning

Не пытайтесь засунуть всю логику в одну архитектуру. Разделите: один агент ищет, другой анализирует, третий проверяет консистентность. Каждый агент использует подходящий ему инструмент. В 2025 году такой подход показал рост точности на 40% по сравнению с монолитными системами. Полное руководство по локальной сборке есть в статье про Agentic RAG.

3. Гибридный поиск с адаптивным взвешиванием

Простое, но эффективное: векторный поиск + полнотекстовый + метаданные. Ключ — динамическое взвешивание. Для технических запросов увеличиваем вес ключевых слов, для концептуальных — семантики. Современные библиотеки вроде Weaviate или Qdrant делают это из коробки.

4. Рерайтинг запросов и чанков

Вместо сложной архитектуры — улучшаем то, что есть. Переписываем запрос пользователя в 3-5 вариантах, ищем по всем, объединяем результаты. Переписываем чанки перед индексацией, добавляя контекст. Дешево и сердито. Подход подробно разобран в roadmap по RAG на 2026 год.

Когда иерархический подход МОЖЕТ работать

Есть два узких сценария, где дерево не полностью бесполезно:

  1. Очень большие документы с четкой структурой — например, многостраничные юридические контракты с разделами и подразделами. Но даже здесь граф работает лучше.
  2. Интерактивное исследование документов — когда пользователь хочет "побродить" по документу, а не найти конкретный ответ. Дерево дает хороший overview.

Но для production RAG, где нужны точные ответы на конкретные вопросы — забудьте. Не тратьте время.

Практический чеклист: что делать, если вас тянет на RAPTOR

Чувствуете соблазн попробовать иерархический подход? Пройдите этот чеклист:

Шаг Вопрос Если ответ "да"
1 Ваши документы имеют строгую иерархическую структуру (как код с классами и методами)? Попробуйте AST-based RAG вместо дерева суммаризаций
2 Запросы пользователей требуют понимания контекста всего документа? Используйте GraphRAG или другие графовые подходы
3 Вы уже достигли потолка с гибридным поиском? Сначала попробуйте рерайтинг запросов и чанков. Это даст +20-30% бесплатно
4 Готовы к 10x росту latency и стоимости? Если нет — остановитесь прямо сейчас

Что будет дальше с иерархическими подходами

Идея не умерла полностью. В исследованиях на 2026 год появляются гибриды: графы с иерархическими метаузлами, деревья с перекрестными связями, динамические иерархии, которые строятся под запрос. Но это уже не классический RAPTOR.

Главный урок: не усложняйте архитектуру ради красоты концепции. Начинайте с простого гибридного поиска, добавляйте агентов только когда уперлись в потолок, используйте графы вместо деревьев. И помните цифру: 0.094 nDCG. Столько стоит красивая теория без практической проверки.

Следующая большая веха в RAG — не новые архитектуры, а улучшение базовых компонентов. Лучшие эмбеддинги (уже есть в OpenAI text-embedding-3), умный чанкинг с сохранением контекста, многопроходный reasoning. Об этом читайте в прогнозах по RAG на 2026 год.

P.S. Если все же решитесь на RAPTOR — сразу закладывайте в бюджет на 30% больше времени на отладку маршрутизации. И держите под рукой fallback в виде обычного векторного поиска. Проверено.