Databricks での Retrieval Augmented Generation (RAG)

この記事では、取得拡張生成 (RAG) の概要と、Databricks での RAG アプリケーションのサポートについて説明します。

Retrieval Augmented Generationとは?

RAGは、大規模言語モデル(LLM)と外部知識検索を組み合わせた 生成AI設計パターン です。 RAGは、リアルタイムデータを生成AIアプリケーションに接続するために必要です。 そうすることで、推論時にデータをコンテキストとしてLLMに提供することで、アプリケーションの精度と品質が向上します。

Databricksプラットフォームには、次のRAGシナリオをサポートする統合ツールセットが用意されています。

RAGの種類

説明

使用例

非構造化データ

ドキュメントの使用 - PDF、Wiki、Web サイトのコンテンツ、Google または Microsoft Office ドキュメントなど。

製品ドキュメントに対するチャットボット

構造化データ

表形式データの使用 - デルタ テーブル、既存のアプリケーション APIsからのデータ。

注文状況を確認するチャットボット

ツールと関数呼び出し

サードパーティまたは内部 APIs を呼び出して、特定のタスクを実行したり、ステータスを更新したりします。 たとえば、計算を実行したり、ビジネス ワークフローをトリガーしたりします。

注文するチャットボット

エージェント

LLMを使用して一連のアクションを選択することにより、ユーザーのクエリーに応答する方法を動的に決定します。

顧客サービスエージェントに代わるチャットボット

RAGアプリケーションアーキテクチャ

次に、RAGアプリケーションを構成するコンポーネントを示します。

RAGアプリケーションアーキテクチャのすべて

RAGアプリケーションでは、以下を実行するためにパイプラインとチェーンコンポーネントが必要です。

  • インデキシング ソースからデータを取り込み、インデックスを作成するパイプライン。 このデータは、構造化データでも非構造化データでもかまいません。

  • 検索と生成 これが実際のRAGチェーンです。 これは、ユーザークエリーを受け取り、インデックスから類似したデータを取得し、クエリーとともにそのデータをLLMモデルに渡します。

以下の図は、これらのコアコンポーネントを示しています。

インデックス作成パイプラインと検索と生成、RAGチェーン、RAGの一部のみのRAGアプリケーションアーキテクチャ。 一番上のセクションには、クエリーを消費するRAGチェーンと、クエリーへの応答を生成する前の、クエリーの処理、クエリーの拡張、検索と再ランク付け、プロンプトエンジニアリング、初期応答の生成と後処理の後続のステップが表示されます。 下部は、1の個別のデータパイプラインに接続されたRAGチェーンを示しています。非構造化データには、データの解析、チャンク化、埋め込み、ベクトル検索データベースまたはインデックスへのデータの保存が含まれます。 非構造化データパイプラインでは、RAGチェーンにフィードするために、埋め込みモデルや基本モデルとの相互作用が必要であり、2.構造化データパイプラインには、すでに埋め込まれているデータチャンクを消費し、このデータをRAGチェーンに提供する前にETLタスクと特徴量エンジニアリングを実行することが含まれます。

非構造化データRAGの例

次のセクションでは、非構造化データRAGの例のコンテキストで、インデックス作成パイプラインとRAGチェーンの詳細について説明します。

RAGアプリでのインデックス作成パイプライン

次のステップでは、インデックス作成パイプラインについて説明します。

  1. 独自のデータソースからデータを取り込みます。

  2. データを、基本 LLM のコンテキスト ウィンドウに収まるチャンクに分割します。 このステップには、データの解析とメタデータの抽出も含まれます。 このデータは、一般に、基礎的な LLM がトレーニングされるナレッジ ベースと呼ばれます。

  3. 埋め込みモデルを使用して、データチャンクのベクトル埋め込みを作成します。

  4. 埋め込みとメタデータをベクターデータベースに保存して、RAGチェーンによるクエリからアクセスできるようにします。

RAGチェーンを使用した検索

インデックスが準備されたら、アプリケーションのRAGチェーンを提供して質問に応答できます。 次のステップと図は、RAGアプリケーションが着信要求にどのように応答するかを示しています。

  1. ナレッジ ベースにデータを埋め込むために使用したのと同じ埋め込みモデルを使用して、要求を埋め込みます。

  2. クエリー The Vector Database を使用して、埋め込まれたリクエストと Vector データベース内の埋め込みデータチャンク間の類似性検索を行います。

  3. 要求に最も関連性の高いデータ チャンクを取得します。

  4. 関連するデータチャンクとリクエストをカスタマイズされたLLMにフィードします。 データチャンクは、LLMが適切な応答を生成するのに役立つコンテキストを提供します。 多くの場合、LLMには応答のフォーマット方法のテンプレートがあります。

  5. 応答を生成します。

次の図は、このプロセスを示しています。

RAG ワークフロー after a request