Retrieval-augmented generation (RAG; 検索拡張生成) は、大規模言語モデル (LLM) の応答を外部情報で強化する技術です。 RAGでは、生成時に意味的検索を用いてデータベースから最も文脈に適した情報を取得します。この手法は、汎用チャット向けにファインチューニングされた既成のLLMでも、元の訓練データに含まれない内容の質問に答えられるようにするのに効果的です。また、再学習なしで最新情報へのアクセスを可能にし、hallucination (幻覚) の発生を抑えることができます。

ワークフローのステップ

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

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

CSV、Markdown、PDFなど、特定のファイル形式に対応したドキュメントローダーを使用して、データを読み込み、デジタルテキスト形式に変換します。元データのコンテンツや、出典・ページ番号などのメタデータも抽出されます。ファイルの品質や形式に応じて、データクリーニングやカスタマイズが必要になることもあります。
2

分割

モデルのコンテキストウィンドウの制限に対応するため、文書を小さなチャンク (断片) に分割します。チャンクサイズ、オーバーラップサイズ、スライディングウィンドウといったハイパーパラメータを調整することで、さまざまなチャンク化の戦略を実行できます。
3

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

各テキストチャンクを、Embeddingモデルを用いてベクトル表現に変換します。このベクトルは意味的類似度に基づく検索を可能にします。
4

Vector store (ベクトルストア)

変換されたベクトルと、それに対応する元コンテンツやメタデータを、ベクトルデータベースに格納します。インデックスとして埋め込みベクトルが使用されます。FAISS、ChromaDB、Qdrant、Milvusなど、さまざまなベクトルデータベースが利用可能です。
5

Retrieval (検索)

クエリもEmbedding (ベクトル化) した上で、retriever関数により、意味的類似度に基づいて最も近いチャンクがベクトルデータベースから取得されます。この処理では、前半のステップで保存されたベクトル情報を活用します。
6

Reranking (再ランク付け)

取得されたチャンクの中から、関連性の高い順に並び替えたり、不要なチャンクを取り除いたりするために、Rerankingモデルを使用することができます。こちらはオンライン処理におけるオプションのステップです。
7

Q&A生成

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