BestRAG - ハイブリッド RAG ストレージ・検索 チートシート
BestRAG(Best Retrieval Augmented Generation)は ハイブリッド RAG パイプライン構築向け Python ライブラリ。Dense、Sparse、後期相互作用エンベディングをベクトルストアとして Qdrant で結合、効率的にドキュメント保存・検索。考えは単純:各チャンク 1 回ストアで複数表現を保有、融合関連性でリトリーブして Dense ベクトル意味的リコール + Sparse(BM25 スタイル)正確語精度を両立。
インストール
| 方法 | コマンド |
|---|
| pip | pip install bestrag |
| 要件 | Qdrant インスタンス(ローカル Docker または Qdrant Cloud) |
| エンベディング | FastEmbed を内部使用 |
| 確認 | python -c "import bestrag; print('ok')" |
ハイブリッドな理由
| リトリーバルタイプ | 強み | 弱み |
|---|
| Dense(ベクトル) | 意味、パラフレーズ | 正確 ID、数字、稀語 |
| Sparse(BM25) | 正確語、識別子 | 同義語、パラフレーズ |
| 後期相互作用 | 細粒度トークンマッチング | コスト |
| 融合(ハイブリッド) | Dense + Sparse 最良 | — |
BestRAG はすべての表現を保存して 1 つクエリが すべての恩恵受ける。
基本的な使用
from bestrag import BestRAG
rag = BestRAG(
url="http://localhost:6333", # Qdrant
api_key="...", # Qdrant Cloud 使用時
collection_name="docs",
)
# ドキュメント取り込み(Dense + Sparse + 後期相互作用 埋め込み、Qdrant にアップサート)
rag.store_pdf("handbook.pdf")
rag.store_text("Nick prefers concise answers.", metadata={"source": "prefs"})
# 融合ハイブリッド関連性でリトリーブ
results = rag.search("what does the refund policy say?", limit=5)
for r in results:
print(r.score, r.text)
| メソッド | 説明 |
|---|
BestRAG(url, collection_name, ...) | Qdrant 接続、collection 指定 |
store_pdf(path) | PDF 解析 + チャンク + 埋め込み + アップサート |
store_text(text, metadata=...) | 生テキスト取り込み |
search(query, limit=k) | ハイブリッド(融合)リトリーバル |
delete(...) | ドキュメント削除 |
取り込み時の処理
| ステップ | 詳細 |
|---|
| Parse | テキスト抽出(例 PDF から) |
| Chunk | パッセージに分割 |
| Embed | Dense + Sparse + 後期相互作用ベクトル / チャンク |
| Upsert | すべてベクトル + payload を Qdrant に保存 |
検索時の処理
| ステップ | 詳細 |
|---|
| Embed query | Dense + Sparse(+後期相互作用) |
| Query Qdrant | 表現毎に候補リトリーブ |
| Fuse | ランキング融合(RRF スタイル)1 つリストに |
| Return | Top-k パッセージ(スコア + メタデータ) |
LLM にフィードバック結果
# リトリーブ、then グラウンドプロンプト構築
hits = rag.search(user_question, limit=5)
context = "\n\n".join(h.text for h in hits)
prompt = f"Answer using only this context:\n{context}\n\nQ: {user_question}"
# → LLM に prompt を送信
チューニング
| レバー | 効果 |
|---|
| Chunk size/overlap | リトリーバル粒度 |
| Dense model | セマンティック品質(FastEmbed 経由) |
| Sparse model | 正確語マッチング(BM25) |
limit(k) | Recall vs prompt サイズ |
| メタデータフィルター | 検索スコープ制限 / アクセス制御 |
BestRAG vs 自作
| 項目 | BestRAG | 手動(LangChain/LlamaIndex) |
|---|
| ハイブリッド設定 | ビルトイン(Dense+Sparse+LI) | 手動配線 |
| ストア | Qdrant、意見的 | 任意、柔軟 |
| 制御 | シンプル、少ないノブ | 完全制御 |
| 最適用途 | 高速ハイブリッド RAG スタート | カスタムパイプライン |
FastEmbed と Qdrant に基づく。完全パイプライン制御が必要な場合は LangChain または LlamaIndex に。
リソース