RAG ソリューションの設計と開発

Azure AI サービス
Azure AI Search
Azure OpenAI Service
Azure Machine Learning

検索拡張生成 (RAG) パターンは、大規模言語モデルを使用して、まだ大規模言語モデルでは認識されない特定のデータまたは独自のデータを推論するアプリケーションを構築する業界標準のアプローチです。 そのアーキテクチャは単純ですが、アーキテクチャに適合する RAG ソリューションの設計、実験、評価には、厳格な科学的アプローチからメリットを得る複雑な考慮事項を多数伴います。

このガイドはシリーズとして提供されています。 シリーズの各記事では、RAG ソリューションの設計における特定のフェーズについて説明します。

このガイドの記事で取り上げる考慮事項は、次のとおりです。

  • 評価中に使用するテスト ドキュメントとクエリの決定
  • チャンク戦略の選択
  • チャンクのエンリッチメント対象とその方法の決定
  • 適切な埋め込みモデルの選択
  • 検索インデックスの構成方法の決定
  • ベクトル、フルテキスト、ハイブリッド、手動マルチなど、実行する検索の決定
  • 各ステップの評価

このガイドの記事では、これらのすべての考慮事項について説明します。

RAG アーキテクチャ

要求フローやデータ パイプラインなど、RAG ソリューションのアーキテクチャの概要を示す図。

図 1. 大まかな RAG アーキテクチャ

RAG アプリケーション フロー

RAG アプリケーションのフローの概要を次に示します。

  1. ユーザーは、インテリジェントなアプリケーションのユーザー インターフェイスでクエリを発行します。
  2. インテリジェントなアプリケーションは、オーケストレーターに対して API 呼び出しを行います。 オーケストレーターは、セマンティック カーネル、Azure Machine Learning プロンプト フロー、LangChain などのツールやプラットフォームを使用して実装できます。
  3. オーケストレーターは、Azure AI 検索で実行する検索を決定し、クエリを発行します。
  4. オーケストレーターは、クエリからの上位 N 個の結果をパッケージ化し、それらをクエリと共にプロンプト内のコンテキストとしてパッケージ化して、大規模言語モデルにプロンプトを送信します。 オーケストレーターは、ユーザーが読み取れるように、インテリジェントなアプリケーションに応答を返します。

RAG データ パイプライン フロー

RAG アプリケーションの基礎データを提供するデータ パイプラインのフローの概要を次に示します。

  1. ドキュメントは、データ パイプラインにプッシュまたはプルされます。

  2. データ パイプラインは、次の手順で各ドキュメントを個別に処理します。

    1. チャンク ドキュメント - 理想的には 1 つのアイデアまたは概念を持つ、意味的に関連する部分にドキュメントを分割します。
    2. チャンクのエンリッチメント - チャンク内のコンテンツから作成されたメタデータ フィールドを、タイトル、概要、キーワードなどの異なるフィールドに追加します。
    3. チャンクの埋め込み - 埋め込みモデルを使用して、ベクトル検索に使用されるチャンクとその他のメタデータ フィールドをベクトル化します。
    4. チャンクの保持 - チャンクを検索インデックスに格納します。

RAG の設計と評価に関する考慮事項

RAG ソリューションの設計時には、実装に関するさまざまな意思決定を行う必要があります。 次の図は、これらの意思決定の一部を示しています。

ソリューションの設計時に持ち上がる質問など、RAG ソリューションのアーキテクチャの概要を示す図。

図 2. RAG ソリューションの設計時に持ち上がる質問

このガイドの一連の記事では、これらの考慮事項などについて説明します。

準備フェーズ

  • ソリューションのドメインを決定する - RAG ソリューションのビジネス要件を明確に定義することの重要性について説明します
  • 代表的なテスト ドキュメントを収集する - コーパスを表す RAG ソリューション用テスト ドキュメントの収集に関する考慮事項とガイダンスについて説明します。
  • テスト クエリを収集する - 収集する必要がある情報と共にテスト クエリについて説明し、合成クエリとドキュメントに含まれていないクエリの生成に関するガイダンスを提供します。

チャンク フェーズ

  • チャンクの経済性を理解する - テキスト コーパスのチャンク ソリューションの全体的なコストを確認する際に考慮すべき要因について説明します
  • ドキュメント分析を実行する - ドキュメント内の何を無視または除外するか、チャンクで何をキャプチャするか、どのようにチャンクするかを決めるのに役立つドキュメントの種類を分析するときに、尋ねることができる質問のリストを提供します。
  • チャンク アプローチを理解する - 機械学習モデルを使用して、文ベース、固定サイズ、カスタム、大規模言語モデル拡張、ドキュメント レイアウト分析など、チャンクに対する異なるアプローチの概要を説明します
  • ドキュメント構造がどのようにチャンクに影響するかを理解する - ドキュメントの構造の程度がチャンク アプローチの選択にどのように影響するかを説明します

チャンク エンリッチメント フェーズ

  • チャンクをクリーンする - テキストのセマンティックに重要ではない潜在的な違いを排除して、近似性の一致をサポートするために実装できるさまざまなクリーニング アプローチについて説明します
  • チャンクを拡張する - チャンク データの拡張を検討する必要のある一般的なメタデータ フィールドと、検索での潜在的な用途に関するガイダンス、およびメタデータ コンテンツの生成に一般的に使用されるツールまたは手法について説明します

埋め込みフェーズ

  • 埋め込みモデルの重要性を理解する - 埋め込みモデルがベクトル検索結果の関連性に大きな影響をどう及ぼすかについて説明します
  • 埋め込みモデルを選択する - 埋め込みモデルの選択に関するガイダンスを提供します
  • 埋め込みモデルを評価する - 埋め込みモデルを評価する 2 つの方法 (埋め込みの視覚化と埋め込み距離の計算) について説明します

情報取得フェーズ

  • 検索インデックスを作成する - ベクトル フィールドに適用されるベクトル検索構成に対して行う必要がある、いくつかの重要な意思決定について説明します
  • 検索オプションを理解する - ベクトル、フルテキスト、ハイブリッド、手動マルチなど、検討できる検索の種類の概要を説明します。 クエリをサブクエリに分割し、クエリをフィルター処理する方法についてガイダンスを提供します
  • 検索を評価する - 検索ソリューションの評価についてガイダンスを提供します

大規模言語モデルのエンド ツー エンドの評価フェーズ

  • 大規模言語モデルの評価メトリックを理解する - 根拠性、完全性、使用率、関連性など、大規模言語モデルの応答を評価するために使用できるいくつかのメトリックの概要を示します
  • 類似性と評価のメトリックを理解する - RAG ソリューションの評価時に使用できる類似性と評価のメトリックについて小さいリストを提供します
  • ドキュメント、レポート、集計の重要性を理解する - ハイパーパラメーターと評価結果の文書化、複数クエリからの結果の集計、結果の視覚化の重要性について説明します
  • RAG 実験アクセラレータ - RAG 実験アクセラレータへのリンクを提供します。これは、チームが複数の実験を実行し、永続化し、結果を評価して RAG 実装に最適な戦略をすばやく見つけるのに役立つツールです。

構造化アプローチ

手順と変数の数により、構造化された評価プロセスを使用して RAG ソリューションを設計することが重要です。 要件を考慮して各ステップの結果を評価し、調整します。 最適化について各ステップを個別に評価する必要はありますが、ユーザーが経験する内容が最終的な結果になります。 ステップごとに独自の受け入れ基準を決定する前に、このプロセスのすべての手順を理解するようにしてください。

共同作成者

次のステップ