Набор инструментов на Python для Retrieval-Augmented Generation: хранение и поиск документов в DuckDB или PostgreSQL.
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
Установите основные зависимости
pip install openai chromadb python-dotenv tqdm tabulate rank_bm25 - 2
Создайте файл .env на основе шаблона
cp .env.example .env - 3
Добавьте ключ API OpenAI в .env, а затем запустите демо
python main.py
Что важно знать
- Для запуска демо и перезаписи требуется платный ключ API OpenAI.
- Демо в main.py использует только векторный поиск; наиболее эффективная конфигурация hybrid-plus-rerank находится в eval/ и требует дополнительных пакетов.
- Эксперименты зависят от конкретных LLM и моделей принятия решений, некоторые из которых могут быть сняты с поддержки или недоступны.
Темы
Частые вопросы
- Что такое 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 обновляется ежедневно.
Похожие проекты
Встраиваемая в Go векторная база данных с интерфейсом, похожим на Chroma, без сторонних зависимостей и с поддержкой сохранения на диск.
RAG-решение для Azure, которое отвечает на вопросы по вашим документам и снабжает ответы встроенными ссылками на источники.
RAG-чат-приложение отвечает на вопросы на естественном языке о строках таблицы PostgreSQL с помощью поиска через pgvector и моделей OpenAI; приложение можно развернуть в Azure.
Локальная AI-система памяти: хранит историю диалогов без изменений и находит нужное с помощью семантического поиска; доступна как MCP-сервер и CLI.
No-code RAG-сервер, который индексирует документы из папки в одной из 8 векторных баз данных и обновляет ответы при изменении файлов.