Question Answering Over Documents | 🦜️🔗 LangChainの翻訳です。
本書は抄訳であり内容の正確性を保証するものではありません。正確な内容に関しては原文を参照ください。
LLMはパワフルですが、トレーニングしていない情報についての知識を持っていません。トレーニングされていないドキュメントに対する質問に回答するためにLLMを活用したいのであれば、ドキュメントに関する情報を提供しなくてはなりません。これを行う最も一般的な方法は、「収集拡張生成(retrieval augmented generation)」を通じたものです。
収集拡張生成のアイデアは、質問があった際には、最初に適切なドキュメントの収集ステップを行うというものです。そして、これらのドキュメントをとオリジナルの質問を言語モデルに引き渡し、レスポンスを生成させます。しかし、これを行うためには、最初にドキュメントをこのような方法で検索できるようなフォーマットに変換しなくてはなりません。このページでは、これら二つのステップ:(1)ドキュメントを検索可能なフォーマットで取り込み(2)収集拡張生成チェーンにおけるハイレベルなアイデアをウォークスルーします。
取り込み
皆様のデータとやり取りを行うために言語モデルを活用するには、最初に適切なフォーマットにしなくてはなりません。このようなフォーマットはIndex
となるでしょう。データをインデックスにすることで、やり取りを行ういかなる後段のステップを簡単なものにします。
インデックスにはいくつかのタイプがありますが、現時点で最も一般的なものはベクトルストアです。ドキュメントのベクトルストアへの取り込みは以下のステップで行うことができます:
- (Document Loaderを用いた)ドキュメントのロード
- (Text Splitterを用いた)ドキュメントの分割
- (Text Embedding Modelを用いた)ドキュメントのエンベディングの作成
- ドキュメントとエンベディングをベクトルストアに格納
生成
これでインデックスができたのですが、生成を行うためにどのようにこれを活用するのでしょうか?これは、以下のステップにブレークダウンすることができます:
- ユーザーの質問の受け付け
- 質問に適したインデックス内のドキュメントを検索
- (PromptTemplateを用いて)質問とすべての適切なドキュメントからPromptValueを構築
- PromptValueをモデルに引き渡し
- 結果を取得し、ユーザーに返却