DuckDBまたはPostgreSQLでドキュメントを保存・検索できる、Retrieval-Augmented Generation向けのPythonツールキットです。
Raudaschl/rag-fusion
LLMによるクエリ書き換え、BM25とベクトル検索、Reciprocal Rank Fusionを組み合わせて検索精度を高めるRAG-FusionのPythonリファレンス実装。NFCorpus評価用ハーネスも含みます。
- スター
- 960
- フォーク
- 113
- 未解決の Issue
- 0
- 最終コミット
- 28 日前
これは何?
RAG-Fusionは、検索拡張生成(RAG)のための検索手法です。LLMがユーザーのクエリを異なる観点から複数の表現に書き換え、各表現をBM25によるキーワード検索とベクトル検索の両方にかけます。その後、Reciprocal Rank Fusionで順位付きリストを統合し、多くのリストに登場する文書ほど上位に表示します。ユーザーの言葉遣いとコーパスのインデックス作成時の表現が異なる場合など、クエリを一つの表現だけで検索すると関連情報を見落とすケースを対象としています。
このリポジトリには、ChromaDBとOpenAIを使ったベクトル検索の基本的なパイプラインを実装するmain.pyと、BEIRのNFCorpusデータセットでベースライン、ハイブリッド、RAG-Fusion、hybrid-diverseの各方式を比較するeval/内の評価ハーネスがあります。また、cross-encoderによる再ランキング段階や、NDCG、precision、recall、MRRを測定する実験レポートに加え、構成ごとのコストとレイテンシの測定結果も含まれています。
このリポジトリの測定結果によると、ハイブリッド検索による統合の後に再ランキングを加えると、小さいながらも統計的に有意な改善が得られます。一方、強力な再ランキングを導入した後では、ベクトル検索のみの結果を統合しても効果はほとんどありません。
主な機能
- 01ユーザークエリを複数の表現に書き換え、異なる言い回しをカバーします。
- 02クエリの各表現について、BM25によるキーワード検索とベクトル検索を組み合わせます。
- 03Reciprocal Rank Fusionで順位付きの検索結果を統合します。
- 04統合後の候補群に対して、cross-encoderなどの再ランキング処理を利用できます。
- 05NFCorpusデータセットを使い、IR指標とブートストラップ信頼区間で検索方式を評価します。
- 06LLMによるクエリ書き換えをディスクにキャッシュし、ChromaDBの埋め込みをローカルに保存します。
ユースケース
- 医療・科学論文など、専門用語の表記に揺れがある文献を検索する。
- 関連文書を見落とすコストが高い検索パイプラインで、再現率を高める。
- RAGシステムに導入する前に、クエリ書き換えや順位統合を試す。
クイックスタート
- 1
コア依存関係をインストールする
pip install openai chromadb python-dotenv tqdm tabulate rank_bm25 - 2
テンプレートから .env ファイルを作成する
cp .env.example .env - 3
OpenAI API キーを .env に追加してから、デモを実行する
python main.py
使う前に知っておきたいこと
- デモの実行とリライトには、有料の OpenAI API キーが必要です。
- main.py のデモで使われるのはベクトル検索のみです。最も高い性能を発揮する hybrid-plus-rerank の構成は eval/ にあり、追加のパッケージが必要です。
- 実験では特定の LLM と判定モデルに依存しており、その一部は提供終了または利用不可になっている可能性があります。
トピック
よくある質問
- rag-fusion とは?
- LLMによるクエリ書き換え、BM25とベクトル検索、Reciprocal Rank Fusionを組み合わせて検索精度を高めるRAG-FusionのPythonリファレンス実装。NFCorpus評価用ハーネスも含みます。 RAG-Fusionは、検索拡張生成(RAG)のための検索手法です。LLMがユーザーのクエリを異なる観点から複数の表現に書き換え、各表現をBM25によるキーワード検索とベクトル検索の両方にかけます。その後、Reciprocal Rank Fusionで順位付きリストを統合し、多くのリストに登場する文書ほど上位に表示します。ユーザーの言葉遣いとコーパスのインデックス作成時の表現が異なる場合など、クエリを一つの表現だけで検索すると関連情報を見落とすケースを対象としています。
- rag-fusion は無料で使えますか?ライセンスは?
- rag-fusion は MIT ライセンスのオープンソースです。商用製品で使う前にライセンス条件を確認してください。
- rag-fusion は今もメンテナンスされていますか?
- 活発にメンテナンス中。rag-fusion の最終コミットは 2026年10月10日 です。
- rag-fusion は何に使えますか?
- 医療・科学論文など、専門用語の表記に揺れがある文献を検索する。 関連文書を見落とすコストが高い検索パイプラインで、再現率を高める。 RAGシステムに導入する前に、クエリ書き換えや順位統合を試す。
- rag-fusion のインストール方法は?
- コア依存関係をインストールする: pip install openai chromadb python-dotenv tqdm tabulate rank_bm25 テンプレートから .env ファイルを作成する: cp .env.example .env OpenAI API キーを .env に追加してから、デモを実行する: python main.py
- rag-fusion はどこで入手できますか?
- ソースコードとインストール手順は GitHub にあります:https://github.com/Raudaschl/rag-fusion
概要はプロジェクトの README をもとに AI が生成しています。GitHub の数値は毎日更新されます。
関連プロジェクト
Chroma風のインターフェースを備え、サードパーティ依存なしで組み込めるGo向けベクトルデータベース。ディスクへの永続化にも対応。
Azure上で動作するRAGアクセラレーター。独自のドキュメントに基づいてチャットアシスタントが回答し、出典をインライン引用で示します。
pgvector検索とOpenAIモデルを使って、PostgreSQLテーブルの行について自然言語で質問できるAzure対応のRAGチャットアプリ。
会話履歴をそのまま保存し、セマンティック検索で取得するローカルファーストのAIメモリシステム。MCPサーバーとCLIを提供します。
フォルダ内の文書を8種類のベクトルデータベースのいずれかにインデックス化し、ファイルの変更に応じて回答を最新に保つノーコードRAGサーバー。