検索拡張生成(RAG)パターン
検索拡張生成 (RAG)パターンを構築して、知識ベースからの情報に基づいた事実出力を生成することができる。
RAGパターンは、知識ベースからコンテンツを検索しやすいベクトル形式に加工する。 ユーザーが質問すると、RAGパターンは関連する文章を検索し、LLMに提供する。 LLMはユーザーの質問に対して事実に基づいた回答を生成する。
RAGパターンの能力とリソース
以下の能力とリソースを持つRAGパターンを作成できる:
- ベクトル埋め込み
- ベクトル埋め込みを作成し、文や文章の意味を数値表現としてエンコードする。 ベクトルは、ユーザが質問した内容に最も近いテキストの文章を、知識ベースから効率的に見つける方法を提供します。 ベクターはベクターデータベースに格納され、ベクターインデックスで検索される。
- 関連項目: ベクトル・インデックスの作成。
- テキストの分類と抽出
- PDFや画像からベクトル化のためのテキストにコンテンツを変換します。
- 理解のための資料を参照。
- 検索されたパスのランキング
- 類似度ではなく、関連性によって検索された結果の上位セットを再ランク付けする。
- 再ランキングを参照。
- ベクトル・ストア
- 自動的に設定されるインメモリのChromaベクトルストアから選択するか、接続を作成した他のベクトルストアから選択します。
- ベクターストアの種類 」を参照。
- エンベッディングとリランキングのためのエンコーダモデル
- エンベッディングの作成とパッセージのリランキングには、 IBM とサードパーティのエンコーダモデルから選択できます。
- 対応エンコーダ基盤モデル を参照。
- 推論のための基盤モデル
- さまざまな基盤モデル選択したり、デプロイ・オンデマンド・モデルを選択したり、カスタム・モデルをインポートしてデプロイしたりできます。
- ユースケースをサポートする基盤モデル を参照。
- 適応するサンプル
- サンプルのRAGパターンから始めて、あなたのユースケースに適合させる。
- サンプルRAGパターンを参照。
様々な自然言語の知識ベース・コンテンツからRAGパターンを作成できる。 以下の表は、RAGパターンを作成するために使用されるさまざまな基盤モデルサポートされている言語の詳細を示している:
| 基盤モデルタイプ | サポート対象言語 |
|---|---|
| 埋め込みモデル | 英語のみ、数ヶ国語、100ヶ国語以上など、モデルによって異なる。 詳細は、 埋め込みモデルの詳細を参照。 |
| 再ランカーモデル | 英語 詳細はリランカーモデルの詳細を参照。 |
| テキスト分類および抽出モデル | 100以上の言語。 詳細は、 テキスト処理APIでサポートされている言語を参照してください。 |
働き方
以下の方法でRAGパターンのコードを書くことができる:
UIのツールを使って、ノー・コードまたはロー・コードで作業することができる:
- Prompt Lab :アップロードされたドキュメント、またはベクターインデックスとチャットすることができます。
- AutoAI for RAG : 最適化されたプロダクション品質のRAGパターンの検索を自動化できます。
- ベクトル・インデックス :1つまたは複数の文書に基づいてベクトルインデックスを作成することができます。
検索拡張生成 パターン・アーキテクチャ
ナレッジベースの情報を使えば、プロンプトにコンテキストを含めるテクニックをスケールアウトできる。
このビデオは、このドキュメントのコンセプトとタスクを学ぶための視覚的な方法を提供します。
ビデオ・チャプター
[ 0:08 ] シナリオの説明
[ 0:27 ] パターンの概要
[ 1:03 ] 知識ベース
[ 1:22 ] 検索コンポーネント
[ 1:41 ] コンテキストで補強されたプロンプト
[ 2:13 ] 出力の生成
[ 2:31 ] 完全なソリューション
[ 2:55 ] 検索に関する考察
[ 3:58 ] プロンプトテキストに関する考察
[ 5:01 ] 説明可能性に関する考察
次の図は、実行時の 検索拡張生成 パターンを示している。 図では質問に答える例を示しているが、同じワークフローは他のユースケースにも対応している。
検索拡張生成 パターンには、以下のステップが含まれます
- 知識ベースは、コンテンツをプレーンテキストに変換し、ベクトル化するために前処理されます。 前処理には、表や画像の情報をLLMが解釈できるテキストに変換するテキスト抽出を含めることができる。
- ユーザーが質問する。
- 質問はテキスト埋め込みに変換されます。
- 知識ベースのベクトル化されたコンテンツを含むベクトルストアは、ユーザーの質問に類似したコンテンツを検索する。
- 最も関連性の高い検索結果は、テキスト形式でプロンプトに追加されます
- 組み合わされたプロンプトテキスト(指示+検索結果+質問)は、 基盤モデルモデルに送信される。
- 基盤モデル、プロンプトからの文脈情報を使用して事実に基づく回答を生成します。
知識ベース
知識ベースは、例えば、情報を含む成果物コレクションであれば何でもよい:
- 社内のWikiページで情報を処理する
- ファイル GitHub
- コラボレーションツールのメッセージ
- 製品ドキュメントのトピック(長いテキストブロックを含むことがある
- Db2 のような構造化クエリ言語 (SQL) クエリをサポートするデータベース内のテキストパッセージ
- PDFファイルとして保存されている法的契約書などのファイルを集めたドキュメントストア
- コンテンツ管理システムのカスタマーサポート・チケット
サポートされるファイルタイプは、ソリューションの実装方法によって異なります:
- ベクターストア。 詳しくは、 ベクター化されたドキュメントの追加を参照してください。
- AutoAI. 詳細は RAGパターンの自動化を参照。
ナレッジベースのコンテンツをAIがより利用しやすいように適合させることで、RAGソリューションを最適化することができる。 知識ベースを検索拡張生成 を参照。
コンテンツの前処理
RAGパターンを設定する際、知識ベース内のドキュメントを前処理する。 前処理は、まずコンテンツをプレーンテキストに変換する。 テキスト抽出を設定して、表や画像の情報をLLMが解釈できるテキストに変換することができます。 次に、埋め込みモデルはテキストをベクトル化し、ベクトルデータベースに格納し、コンテンツを検索するためのベクトルインデックスを作成する。
ユーザーが質問すると、そのテキストは埋め込みモデルによってベクトル化される。
コンテンツ検索とランキング
リトリーバーは、 クエリーベクトル埋め込みに最も近いベクトルデータベースのコンテンツを検索する。 検索された文章は、質問に対する類似度によってランク付けされる。 RAGパターンにリランキングモデルを追加することで、上位に検索された文章が質問の答えに関連しているかどうかを評価することができます。
回答世代
検索された文章、ユーザーの質問、指示は、プロンプトとして基盤モデルモデルに送られる。 基盤モデルモデルは答えを生成し、ユーザーに返す。
RAGパターン例
以下のサンプルは、 検索拡張生成 パターンの適用方法を示しています。
| 例 | フォーマット | 説明 | リンク |
|---|---|---|---|
| 完全なRAGソリューション | プロジェクト | このサンプルプロジェクトは、 検索拡張生成 を使用して質問と回答のソリューションを実装するノートブックとその他の資産含みます。 RAGアクセラレーターとのQ&Aを参照。 | RAG Accelerator サンプル プロジェクトに関する Q&A。 |
| 簡単な紹介 | ノートブック | 基本的なパターンを示すために、小さな知識ベースと簡単な検索コンポーネントを使用する。 | 紹介 検索拡張生成 |
| ディスカバリーと簡単な紹介 | ノートブック | このサンプル・ノートブックでは、IBM Watson Discovery の短い記事を知識ベースとして使用し、Discovery API を使用して検索クエリを実行します。 | 検索拡張生成 の簡単な紹介と watsonx.ai 、ディスカバリー |
| LangChainを使った例 | ノートブック | 検索拡張生成 を LangChain で watsonx.ai でサポートする手順とコードを含んでいます。 データ検索、知識ベースの構築とクエリ、モデルのテストのためのコマンドを紹介している。 | watsonx、Chroma、 LangChain、RAGを使用して質問に答える。 |
| LangChain と Elasticsearch ベクトルデータベースを使った例 | ノートブック | LangChain を使って、Elasticsearch ベクトルデータベースのドキュメントに埋め込みモデルを適用する方法を示します。 その後、ノートブックはデータストアにインデックスを作成し、それを使用して、入力された質問に対する回答を生成する。 | watsonx、Elasticsearch、LangChainて質問に答える(RAG) |
| Elasticsearch Python ライブラリを使った例 | ノートブック | Elasticsearch Python ライブラリを使って、Elasticsearch ベクトルデータベースのドキュメントに埋め込みモデルを適用する方法を示します。 その後、ノートブックはデータストアにインデックスを作成し、それを使用して、入力された質問に対する回答を生成する。 | watsonx「Elasticsearch「Pythonライブラリを使用して質問に答える(RAG) |
| LangChain と SingleStoreDB データベースを使った例 | ノートブック | 検索拡張生成 を watsonx の大型言語モデルに適用する方法を、 SingleStoreDB データベースを使用して説明します。 | SingleStoreDBと watsonxを使ったRAG |
詳細情報
これらのチュートリアルを試してみよう: