Привет, Хабр!
Базовые RAG-системы уже научились неплохо справляться с прямыми вопросами по тексту. Но только если ответ лежит в одном конкретном абзаце, а вопрос сформулирован почти так же, как сам исходный документ. Попробуйте заставить систему связать факты из трёх разных источников или сделать банальный логический вывод. В большинстве случаев результат будет неутешительным. А уж про поиск скрытых связей я даже спрашивать боюсь.
Сегодня рассмотрим open-source RAG-фреймворкHippoRAG 2. В сфере RAG главным преимуществом данного фреймворка является качество ответов, потому что принципы его работы основаны нареальном человеческом мозге. Давайте разберёмся, откуда он взялся, как устроен изнутри и как его запустить.
Принципы работы
Префикс «Hippo» в названии — это отсылка кгиппокампу, структуре мозга, которая отвечает за формирование и извлечение долговременных воспоминаний.
Разработчики из Ohio State University взяли за основутеорию гиппокампального индексирования Тейлера и Дисченна. Согласно ей, мозг хранит не сами воспоминания целиком, а лишь некоторые связи между ними, и при запросе восстанавливает полную картину через цепочку ассоциаций.
В архитектуре HippoRAG каждый компонент соответствует своему нейробиологическому аналогу:
- LLMиграет рольнеокортекса. Отвечает за извлечение структурированных представлений из текста.
- Retrieval-энкодерберёт на себя функциюпарагиппокампальных областей мозга, обнаруживая семантические связи.
- Knowledge графвместе с алгоритмомPPR(Personalized PageRank) имитирует сам гиппокамп. Он хранит сеть знаний и фактов и умеет строить в ней ассоциативные цепочки при поиске.
В HippoRAG подобный механизм долговременной памяти позволяет выявить скрытые связи между фактами. Речь идёт омногошаговом рассуждении (multi-hop reasoning). Это процесс, при котором система последовательно сопоставляет факты из разных источников по контексту и выстраивает цепочку связей, чтобы ответить на абстрактный вопрос.
Факты внутри системы называютсятриплетами. Этоструктурированное представление знаний в виде «субъект — отношение — объект».
К примеру:
- (Оливер Бэдмен, является, политик).Или:
- (Монтебелло, часть округа, Рокленд Каунти).
За извлечение триплетов отвечаетOpenIE (Open Information Extraction) с помощью LLM.При индексации фреймворк отправляет каждый чанк документа в языковую модель с инструкцией извлечь все структурированные утверждения в виде троек. Результаты кэшируются вopenie_cache/, чтобы при повторном запуске не тратить токены снова.
Зачем это нужно? Потому что для многошагового вопроса вроде:«В каком округе родился политик, который…»— обычный RAG просто найдёт документ про политика и отдельно про округ, а связь не уловит. А HippoRAG 2 склеивает два триплета через общую сущность (политик → место рождения → округ). Это и есть так называемая «скрытая связь».
Из всех извлечённых триплетов строитсяknowledge граф. Не такой огромный, как в GraphRAG, а более компактный(HippoRAG на датасете MuSiQue использует около 9 млн токенов — против 115 млн у GraphRAG).
При загрузке документов помимо создания эмбеддингов для чанков проводится извлечение упомянутых триплетов. Из извлечённых фактов строится knowledge-граф. Соответственно, при ответе на вопрос используется как стандартный проход по эмбеддированным документам с косинусным подобием, так и ранжирование фактов по графу. В этот момент задействуетсяPPRалгоритм.PPR — это вариация PageRank, где вместо случайного блуждания по всему графу, релевантность узлов измеряется относительно конкретного набора начальных (seed) узлов.
Установка и первый запуск
Установить фреймворк можно через pip или клонироваврепозиторий.
Далее — пара экспортов (API-ключи и пути к кэшу) из env:
Допустим, у нас есть три документа:
Кстати говоря, фреймворк позволяет переопределятьbase_urlдля работы с локальными серверами. То есть ничто не мешает поднять собственные FastAPI-серверы с локальными LLM и моделями эмбеддингов или в Google Colab, используя библиотекуtransformers, и затем просто указать эндпоинты с их выводом в openai-совместимом формате.
Пример эмбеддинг-модели
Ниже — самописный FastAPI-сервер для эмбеддингов.
Теперь этот сервер можно передать вembedding_base_url="http://localhost:8001/v1".
Более простой и производительный вариант — использоватьSentenceTransformer. Сервер остаётся полностью совместимым с OpenAI API.
Индексация документов
Индексация запускается одной командой:
Что происходит внутри?
- Документы режутся на чанки (стандартно — по предложениям).
- Каждый чанк эмбеддится.
- Одновременно LLM обрабатывает каждый чанк через OpenIE и извлекает из него все смысловые триплеты.
- Триплеты превращаются в узлы и рёбра knowledge-графа.
- Эмбеддинги узлов графа тоже вычисляются (чтобы потом искать похожие факты).
Где хранится?
В папкеmy_rag_memory(которую мы передали вsave_dir) создаётся структура:
- embeddings/— плоские файлы с эмбеддингами чанков и узлов графа (обычно.npyили черезfaissиндекс).
- graph/— сериализованный граф (узлы, рёбра, веса).
- openie_cache/— результаты извлечения триплетов, чтобы при повторном запуске не жечь токены заново.
На данном этапе фреймворк хранит эмбеддинги в формате.parquet. Но ничего не мешает дописать совместимость с векторными БД, особенно в наше время.
Важный нюанс: если вы перезапускаете индекс с теми же документами, HippoRAG 2не будетзаново дёргать OpenIE и LLM, а проверит кэш по хешу текста. Так что за токены, хотя бы тут, можете не переживать.
Что возвращает каждая функция?
retrieve— поиск без генерации ответа:
На выходе — список списков. Для каждого запроса:
Важный момент:typeможет быть"chunk"(найденный чанк) или"fact"(найденный триплет из графа) — зависит от того, что победило в ранжировании.
rag_qa— выполняет полный цикл:поиск → передача найденного контекста в LLM → генерация ответа
Вернёт список строк с ответами, например:["Rockland County"]. В ответе также возвращается список использованных чанков.
Оценка с gold-данными
Один из самых приятных моментов, это когда у вас есть золотые ответы и поддерживающие документы для оценки:
Тогда вeval_resultsупадёт словарь с метриками:
- "retrieval_hit_rate"(попали ли нужные чанки в топ-N),
- "answer_accuracy"(точность ответа, часто через F1 или EM),
- "latency_seconds"— чтобы потом бенчмаркать.
Удаление и добавление документов
Если понадобится удалить документ, естьhipporag.delete_docs(doc_indices=[0,2]).
Граф перестраивается инкрементально, не с нуля. Для добавления новых данных вызываетсяhipporag.index(docs=new_docs). Система сама определит, что уже проиндексировано, а что нет.
Заключение
Признаюсь, я обожаюHippoRAG 2. Для меня это максимально удобный инструмент, который ещё и справляется лучше своих аналогов. Естественно, он не универсальная затычка для любой проблемы, но в задачах контекста, рассыпанного по множеству документов, ему нет равных.
Я советую обратить внимание на фреймворк уже за то, что авторам удалось решить задачу ассоциативного рассуждения без многократного роста стоимости запросов.Это ли не чудо?
© 2026 ООО «МТ ФИНАНС»