Repolode
Raudaschl

Raudaschl/rag-fusion

Эталонная реализация RAG-Fusion на Python: переписывание запросов с помощью LLM, поиск BM25 и векторный поиск, Reciprocal Rank Fusion и инструментарий для оценки на NFCorpus.

Звёзды
960
Форки
113
Открытые issues
0
Последний коммит
28 дней назад

Что это?

RAG-Fusion — метод поиска для генерации с дополненной поиском выдачей. LLM переписывает запрос пользователя в несколько вариантов с разных ракурсов, для каждого варианта выполняется поиск по ключевым словам с BM25 и векторный поиск, а затем ранжированные списки объединяются с помощью Reciprocal Rank Fusion: документы, которые встречаются в нескольких списках, поднимаются выше. Метод подходит для случаев, когда одна формулировка запроса не позволяет найти релевантные материалы, например если пользователь использует термины, отличающиеся от тех, по которым индексирован корпус.

В репозитории есть базовый конвейер в main.py, использующий векторный поиск с ChromaDB и OpenAI, а также инструментарий для оценки в eval/, сравнивающий варианты baseline, hybrid, RAG-Fusion и hybrid-diverse на наборе данных NFCorpus из BEIR. Кроме того, здесь есть этапы переранжирования с cross-encoder и описания экспериментов с измерениями NDCG, precision, recall и MRR, а также стоимости и задержки для каждой конфигурации.

Согласно измерениям в репозитории, добавление переранжировщика после гибридного объединения даёт небольшой, но статистически значимый прирост, тогда как объединение только векторных результатов почти не помогает, если уже используется эффективный переранжировщик.

Ключевые возможности

  • 01Генерирует несколько вариантов переформулировки запроса пользователя с помощью LLM, охватывая разные формулировки.
  • 02Сочетает поиск по ключевым словам с BM25 и векторный поиск для каждого варианта запроса.
  • 03Объединяет ранжированные результаты с помощью Reciprocal Rank Fusion.
  • 04Поддерживает этапы переранжирования с cross-encoder и другими моделями для объединённого набора кандидатов.
  • 05Оценивает варианты поиска на наборе данных NFCorpus с помощью IR-метрик и бутстреп-интервалов доверия.
  • 06Кэширует переформулировки запросов LLM на диске и сохраняет эмбеддинги ChromaDB локально.

Сценарии использования

  • Поиск специализированной литературы, например медицинских или научных статей, где терминология различается.
  • Повышение полноты в поисковых конвейерах, где пропуск релевантного документа обходится дорого.
  • Эксперименты с переформулировкой запросов и объединением ранжированных списков перед внедрением этих методов в систему RAG.

Быстрый старт

  1. 1

    Установите основные зависимости

    pip install openai chromadb python-dotenv tqdm tabulate rank_bm25
  2. 2

    Создайте файл .env на основе шаблона

    cp .env.example .env
  3. 3

    Добавьте ключ API OpenAI в .env, а затем запустите демо

    python main.py

Что важно знать

  • Для запуска демо и перезаписи требуется платный ключ API OpenAI.
  • Демо в main.py использует только векторный поиск; наиболее эффективная конфигурация hybrid-plus-rerank находится в eval/ и требует дополнительных пакетов.
  • Эксперименты зависят от конкретных LLM и моделей принятия решений, некоторые из которых могут быть сняты с поддержки или недоступны.

Темы

#rag#information-retrieval#vector-search#reciprocal-rank-fusion#query-expansion#reranking#chromadb#openai#python#rag-fusion

Частые вопросы

Что такое rag-fusion?
Эталонная реализация RAG-Fusion на Python: переписывание запросов с помощью LLM, поиск BM25 и векторный поиск, Reciprocal Rank Fusion и инструментарий для оценки на NFCorpus. RAG-Fusion — метод поиска для генерации с дополненной поиском выдачей. LLM переписывает запрос пользователя в несколько вариантов с разных ракурсов, для каждого варианта выполняется поиск по ключевым словам с BM25 и векторный поиск, а затем ранжированные списки объединяются с помощью Reciprocal Rank Fusion: документы, которые встречаются в нескольких списках, поднимаются выше. Метод подходит для случаев, когда одна формулировка запроса не позволяет найти релевантные материалы, например если пользователь использует термины, отличающиеся от тех, по которым индексирован корпус.
rag-fusion можно использовать бесплатно? Какая у него лицензия?
rag-fusion распространяется с открытым исходным кодом под лицензией MIT. Перед использованием в коммерческих продуктах проверьте условия лицензии.
rag-fusion всё ещё поддерживается?
Активно поддерживается. Последний коммит в rag-fusion — 10 окт. 2026 г..
Для чего можно использовать rag-fusion?
Поиск специализированной литературы, например медицинских или научных статей, где терминология различается. Повышение полноты в поисковых конвейерах, где пропуск релевантного документа обходится дорого. Эксперименты с переформулировкой запросов и объединением ранжированных списков перед внедрением этих методов в систему RAG.
Как установить rag-fusion?
Установите основные зависимости: pip install openai chromadb python-dotenv tqdm tabulate rank_bm25 Создайте файл .env на основе шаблона: cp .env.example .env Добавьте ключ API OpenAI в .env, а затем запустите демо: python main.py
Где скачать rag-fusion?
Исходный код и инструкции по установке — на GitHub: https://github.com/Raudaschl/rag-fusion

Описание создано ИИ на основе README проекта. Статистика GitHub обновляется ежедневно.

Похожие проекты