RAGをシンプルに解説:SQLiteでドキュメントQ&Aを構... ノート

RAGをシンプルに解説:SQLiteでドキュメントQ&Aを構築する

言語モデルは、特定のポリシーに関する知識がないため、誤った情報を提供することがよくあります。Retrieval-Augmented Generation (RAG) は、モデルが回答する前に、関連文書をモデルに提供することで、この問題に対処します。このガイドでは、ライブラリのアナロジーを使用して RAG を説明します。優れた司書は、記憶だけに頼るのではなく、特定のページを取得します。RAG は、関連するパッセージを取得し、それらでプロンプトを拡張し、その情報に基づいて回答を生成することを含みます。RAG は、大規模または頻繁に更新されるドキュメントを扱う場合、またはコスト効率が重要な場合に役立ちます。すべてのプロンプトにドキュメント全体を貼り付ける代わりに、RAG はターゲットを絞ったドキュメント取得を可能にします。この記事では、Python と SQLite を使用して、ショップのヘルプセンター用のシンプルな RAG システムを構築する概要を説明します。このシステムは、ドキュメントをチャンク化し、全文検索のためにインデックスを作成し、上位のパッセージを取得し、プロンプトを構築し、回答の引用を確認します。実装には、ドキュメントを意味のあるパッセージに分割し、コンテキストのために見出しを保持する chunk_markdown 関数が含まれます。build_index 関数は、これらのパッセージを格納するための SQLite FTS5 仮想テーブルを作成し、効率的な検索を可能にします。search 関数は、質問を処理し、同義語で拡張し、一般的な単語を削除し、堅牢な方法でインデックスをクエリします。build_prompt 関数は、取得したパッセージを言語モデルの番号付きソースとしてフォーマットします。check_answer 関数は、モデルが既存のソースを引用し、数値をでっち上げないことを確認するために、基本的な検証を実行します。コアの answer 関数はこれらのステップを調整し、最初に適切なパッセージを検索し、関連情報が見つかった場合にのみ言語モデルを呼び出します。テスト用に、実際の言語モデル API なしで extractive_model のプレースホルダーが提供されます。