GPTsのための検索拡張生成(RAG)とセマンティック検索
概要
GPTs開発者にとって、Retrieval Augmented Generation (RAG) とは何で、なぜ価値があるのでしょうか?
RAGとは、データソースから関連する文脈情報を検索し、その情報をユーザーのプロンプトとともに大規模言語モデルに渡すプロセスのことです。この情報は、モデルの基礎知識を拡張することで、モデルの出力(生成されたテキストや画像)を改善するために使用されます。 基本的なRAGのワークフロー:
https://scrapbox.io/files/660f751883c056002334b0c0.png
RAGは、モデルが学習した情報に含まれていない知識をモデルが必要とするユースケースで価値があります。例えば、サポートチームが顧客の問い合わせに答えるのを支援するGPTを構築しているとしましょう。GPT-4は基礎知識を使って顧客の問題について推論することができますが、特定の製品やサービスに関する最新の事実を知ることはできません。チケットシステムへのアクセスをGPTに与えることで、同様の問題に関する過去のチケットを取得し、そのコンテキストを使用してより適切な回答を生成できるため、はるかに良い結果が得られます。GPTの知識検索機能を使用すると、RAGが自動的に実行されます。
セマンティック検索とは何ですか?
セマンティック検索は、キーワード検索(検索入力に特定のインデックス単語の出現に依存)を超えて、入力文字列の概念的類似性に基づいて文脈的に関連するデータを見つけ出します。 https://scrapbox.io/files/660f75a9deebee00249c9f33.png
その結果、GPT-4のようなモデルにより多くの文脈を提供するのに適しています。 セマンティック検索では、ベクトルDBを使用します。これは、(ドキュメントから派生した)テキストチャンクとそのベクトルを格納します。ベクトルデータベースにクエリを実行すると、検索入力(ベクトル形式)が保存されているすべてのベクトルと比較され、最も類似したテキストチャンクが返されます。 セマンティック検索の例
顧客サポートチャットボットを構築していると仮定しましょう。ナレッジベースの記事でベクトルデータベースを入力したい場合は、次のようにします。
1. 各記事をチャンクに分割する
これは、文、段落、またはページレベルで行うことができます。
チャンク化戦略が異なれば、結果も異なります。
2. OpenAI Embedding APIを使用して、これらのチャンクを処理し、埋め込み(すなわち、ベクトル空間におけるチャンクの性質の数学的表現)を返す
例:[ -0.006929283495992422,-0.005336422007530928, … -4.547132266452536e-05, -0.024047505110502243]
3. チャンクとその埋め込みをデータベースに格納する
1. ユーザーが「OpenAI APIをどのように使用できますか?」のようなクエリを送信する
2. OpenAI Embedding APIを使用して、クエリ文字列のベクトル表現を生成する
3. そのベクトルを、ベクトルDBに関連付けられた検索エンドポイントに送信する 4. クエリに類似した1つ以上のテキストチャンクを取得する
その後、チャットボットアプリケーションは、テキストチャンクと最初のユーザープロンプトをOpenAI Chat Completions APIに送信して、応答を取得します。
関連記事