Skip to main content
検索拡張生成 (Retrieval-augmented generation; RAG) は、外部情報を取り込むことで LLM の応答を強化する技術です。 RAG は、生成時にセマンティック検索を用いて、データベースから最も文脈に適した結果を取得します。この手法は、汎用チャット向けにファインチューニングされた既製の LLM へのプロンプティングに特に有効で、元の学習データの範囲を超えるクエリへの対応を可能にします。また、再学習なしで最新情報にアクセスできるようになり、hallucination (幻覚) を抑制できます。

ワークフローのステップ

一般的な RAG ワークフローは、取り込みとオンライン処理という 2 つの主要フェーズで構成されます。取り込み (前処理、ステップ 1〜4) は RAG システム向けにデータを準備する工程で、通常はオフラインで実行されます。オンライン処理 (ステップ 5〜7) は、データの検索と応答生成を中心とした、RAG システムのリアルタイム処理を担います。
1

Document parsing (ドキュメント解析)

CSV、Markdown、PDF など、特定のファイル形式に対応したドキュメントローダーを使用して、データを読み込み、デジタルテキストに整形します。このステップでは、コンテンツに加えて、出典やページ番号などの関連メタデータも抽出します。ファイルの品質や形式によっては、ユースケースの要件に合わせてデータクリーニングやカスタマイズが必要になる場合があります。
2

分割

モデルのコンテキストウィンドウの制限に対応するため、ドキュメントを小さなチャンク (断片) に分割します。チャンク化にはさまざまな戦略があり、チャンクサイズ、オーバーラップサイズ、スライディングウィンドウが、調整可能な主要ハイパーパラメータです。
3

Vector embeddings (ベクトル埋め込み)

各テキストチャンクを、Embedding (埋め込み) モデルを用いてベクトル表現に変換します。これらの埋め込みにより、意味的類似度に基づくコンテンツ検索が可能になります。
4

Vector store (ベクトルストア)

埋め込みを、対応するコンテンツおよびメタデータとともにベクトル DB に格納します。インデックスには埋め込みが使用されます。ベクトル DB には、FAISS、ChromaDB、Qdrant、Milvus など、さまざまな選択肢があります。
5

Retrieval (検索)

クエリも同様に埋め込み、retriever 関数を使用して、特定の類似度指標に基づき、クエリベクトルに最も近いチャンクベクトルをベクトル DB から特定します。このステップでは、取り込みワークフローで保存した埋め込みを活用します。
6

Reranking (再ランク付け)

オンライン処理フェーズにおけるオプションのステップです。Reranker モデルを使用して、取得したチャンクを関連度順に並べ替え、不要なチャンクを取り除くこともできます。
7

Q&A 生成

LLM がユーザークエリと最終的に取得されたチャンクを受け取り、根拠のある応答を生成します。
LangChain と SambaNova を使用したエンドツーエンドの RAG アプリケーションの実装は、Enterprise Knowledge Retriever (EKR) キットでぜひお試しください。

連携ツールを使った RAG 構築

以下の連携ツールを使用して、SambaNova のモデルで RAG ワークフローを実装できます。

LangChain

LangChain の検索およびチェーンの抽象化を使用して RAG パイプラインを構成。

LlamaIndex

LLM 向けデータフレームワークである LlamaIndex で RAG アプリケーションを構築。

Haystack

Haystack のコンポーネントベースのフレームワークによる、本番環境対応の RAG パイプライン。

Neo4j

ナレッジグラフ RAG アプリケーションのためのグラフベース検索。

Milvus

スケーラブルな RAG デプロイメントのための高性能ベクトル DB。

LangFlow

ドラッグ&ドロップでパイプラインを構築できるビジュアル RAG ワークフロービルダー。