検索強化生成 (RAG)パターン
知識ベースの情報に基づいた事実に基づいた出力を生成するために、 検索強化生成 (RAG)モデルを構築することができます。
RAGモデルは、ナレッジベースのコンテンツを、検索しやすいベクトル形式に変換します。 ユーザーが質問をすると、RAGパターンは関連する文章のセットを取得し、それをLLMに提供します。 LLMは、ユーザーの質問に対して事実に基づいた回答を生成します。
RAGパターンの機能とリソース
以下の機能とリソースを使用して、RAGパターンを作成できます:
- ベクトル埋め込み
- ベクトル埋め込みを作成し、文や文章の意味を数値表現として符号化する。 ベクトルを使用することで、ユーザーが投げかけた質問に最も類似したナレッジベース内のテキスト箇所を効率的に見つけることができます。 ベクトルはベクトルデータベースに格納され、ベクトルインデックスを使用して検索されます。
- 「ベクトルインデックスの作成」 を参照してください。
- テキストの分類と抽出
- PDFや画像のコンテンツをテキストに変換し、ベクトル化します。
- 「ドキュメントの理解」 を参照してください。
- 抽出された文の再ランク付け
- 類似度ではなく関連度に基づいて、検索された上位の結果を再ランク付けする。
- 「文書の一部の再ランク付け」 を参照してください。
- ベクトル・ストア
- 自動的に設定されるインメモリのChromaベクトルストア、または接続を設定した他のベクトルストアから選択してください。
- 「ベクトルストアの種類」を参照してください。
- 埋め込みと再ランク付けのためのエンコーダーモデル
- 埋め込みの生成やパッセージの再ランク付けを行うために、 IBM およびサードパーティ製のエンコーダーモデルから選択してください。
- 「対応しているエンコーダー基盤モデル」 を参照してください。
- 推論のための基盤モデル
- さまざまな基盤モデルから選択するか、オンデマンド展開モデルを選択するか、あるいはカスタムモデルをインポートして展開してください。
- ご利用のユースケースに対応する基盤モデルをご覧ください。
- 修正するサンプル
- まず、サンプルとなるRAGパターンを用意し、それを自分のユースケースに合わせて調整してください。
- RAGパターンの例をご覧ください。
さまざまな自然言語で書かれたナレッジベースのコンテンツから、RAGパターンを作成できます。 次の表は、RAGパターンの作成に使用されるさまざまな基盤モデルがサポートする言語の詳細を示しています:
| 基盤モデルの種類 | サポート対象言語 |
|---|---|
| 埋め込みモデル | モデルによって異なりますが、英語のみ、複数言語、あるいは100以上の言語に対応しています。 詳細については、 「モデルの埋め込みに関する詳細」 を参照してください。 |
| 再ランク付けモデル | 英語。 詳細については、 「Rerankerモデルの詳細」 を参照してください。 |
| テキスト分類および抽出モデル | 100以上の言語。 詳細については、 「テキスト処理APIでサポートされている言語」 を参照してください。 |
働き方
RAGパターン用のコードは、以下の方法で記述できます:
UI上のツールを使用して、ノーコードまたはローコード環境で作業することができます:
- Prompt Lab :アップロードされたドキュメントやベクターインデックスと対話することができます。
- AutoAI 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)のためのナレッジベースの最適化」 を参照してください。
コンテンツの前処理
RAGパターンを設定する際は、ナレッジベース内のドキュメントを前処理します。 前処理では、まずコンテンツをプレーンテキストに変換します。 テキスト抽出の設定を行うことで、表や画像内の情報を、LLMが解釈できるテキストに変換することができます。 その後、埋め込みモデルがテキストをベクトル化し、ベクトルデータベースに保存し、コンテンツを検索するためのベクトルインデックスを作成します。
ユーザーが質問をすると、そのテキストは埋め込みモデルによってベクトル化されます。
コンテンツの検索と順位付け
リトリーバーは、クエリテキストのベクトル埋め込みに最も類似したコンテンツをベクトルデータベース内で検索します。 抽出された文章は、質問との類似度に基づいて順位付けされます。 RAGパターンに再ランク付けモデルを追加することで、検索された上位の文章が質問への回答として適切かどうかを評価することができます。
解答の生成
検索された文章、ユーザーの質問、および指示は、プロンプトとして基盤モデルに送信されます。 基盤モデルは回答を生成し、それをユーザーに返す。
RAGパターンの例
以下のサンプルノートブックでは、「検索機能による生成 」パターンの適用方法について解説しています。
これらのサンプルノートブックをご利用になる前に、利用規約のサンプルをご確認ください。
| サンプル | 説明 | リンク |
|---|---|---|
| クロマを使用した例 | このサンプルノートブックには、 watsonx.ai のChromaデータベースで 検索拡張生成 をサポートする手順とコードが含まれています。 データ検索、知識ベースの構築とクエリ、モデルのテストのためのコマンドを紹介している。 | watsonx、Chroma を使用して質問に回答する(RAG) |
| LangChainを使った例 | このサンプルノートブックには、 検索拡張生成 を LangChain で watsonx.ai でサポートする手順とコードが含まれています。 データ検索、知識ベースの構築とクエリ、モデルのテストのためのコマンドを紹介している。 | watsonx、Chroma、 LangChain を使用して、RAGを活用して質問に回答する |
| LangChain と Elasticsearch ベクトルデータベースを使った例 | このサンプルノートブックでは、LangChain を使って、Elasticsearch ベクトルデータベース内のドキュメントにエンベッディングモデルを適用する方法を示します。 その後、ノートブックはデータストアにインデックスを作成し、それを使用して、入力された質問に対する回答を生成する。 | 質問に答える際は、 watsonx、 Elasticsearch、および LangChain を活用してください(RAG) |
| Elasticsearch Python ライブラリを使った例 | このサンプルノートブックでは、Elasticsearch Python ライブラリを使って、Elasticsearch ベクトルデータベースのドキュメントに埋め込みモデルを適用する方法を示します。 その後、ノートブックはデータストアにインデックスを作成し、それを使用して、入力された質問に対する回答を生成する。 | watsonx、 Elasticsearch、および Python SDKを使用して質問に回答する(RAG) |
詳細情報
これらのチュートリアルを試してみよう: