Databricks生成AIクックブック - 1. RAGの概要

[1\. RAG overview — Databricks Generative AI Cookbook](https://ai-cookbook.io/nbs/1-introduction-to-rag.html) [2024/6/20時点]の翻訳です。

:::note warn
本書は著者が手動で翻訳したものであり内容の正確性を保証するものではありません。正確な内容に関しては原文を参照ください。
:::

> [Databricks生成AIクックブック](https://qiita.com/taka_yayoi/items/36c51bce8f33a70cf204)のコンテンツです。

# RAGの概要

このセクションではRetrieval-augmented generation (RAG)の概要を説明します: 何であるのか、どのように動作するのか、キーコンセプトを説明します。

## Retrieval-augmented generationとは何か？

Retrieval-augmented generation (RAG)は、外部の情報ソースから取得されるサポートデータでユーザーのプロンプトを拡張することで、大規模言語モデル(LLM)が補強されたレスポンスを生成できるようにするテクニックです。この収集情報を組み込むことで、追加コンテキストでプロンプトを拡張しない場合と比べて、RAGはより正確で品質の高いレスポンスをLLMに生成させることができます。

例えば、あなたの企業固有の文書に関する従業員の質問に回答する支援を行うQ&Aチャットbotを構築しているとしましょう。企業文書でトレーニングされていない場合、LLM単体ではそれらの文書のコンテンツに関する質問に正確に回答することができません。このLLMは情報不足によって回答を拒否し、さらに悪いケースでは、間違ったレスポンスを生成するかもしれません。

RAGは、最初にユーザーのクエリーに基づき企業文書から適切な情報を収集し、追加のコンテキストとしてLLMに収集した情報を提供することでこの問題に対応します。これによって、LLMは適切な文書に含まれる特定の詳細情報から導出することで、より正確なレスポンスを生成できるようになります。本質的には、RAGによって、LLMは回答を生成するために、収取した情報に"相談"できるようになります。

## RAGアプリケーションのコアコンポーネント

RAGアプリケーションは[複合AIシステム](https://qiita.com/taka_yayoi/items/287ad22441d6abc7e07e)の一例です: モデル単体の言語能力を他のツールや手順と組み合わせることで拡張します。

スタンドアローンのLLMを使う際は、ユーザーは質問のようなリクエストをLLMに送信し、LLMはトレーニングデータのみに基づいた回答をレスポンスします。

最も基本的な形態では、RAGアプリケーションでは以下のステップを踏みます:

1. **収集(Retrieval):** 外部の情報源にクエリーするために**ユーザーのリクエスト**が使用されます。これは、ベクトルストアへのクエリー、いくつかのテキストに対するキーワード検索の実行、SQLデータベースへのクエリーかもしれません。この収集ステップのゴールは、LLMが有用なレスポンスを生成する助けとなる**サポートデータ**を取得することです。
1. **拡張(Augmentation):** 収集ステップで得られた**サポートデータ**は、**ユーザーのリクエスト**と組み合わされます。多くの場合、**プロンプト**を作成するために、追加のフォーマット情報を含むテンプレートとLLMへの指示を用いることになります。
1. **生成(Generation):** 得られた**プロンプト**がLLMに入力され、LLMは**ユーザーリクエスト**に対するレスポンスを生成します。

![](https://ai-cookbook.io/_images/1_img.png)
これは、簡素化されたRAGプロセスの概要ですが、RAGアプリケーションの実装には、数多くの複雑なタスクが関係することに注意することが重要です。RAGでの使用に適するようにするためのソースデータの前処理、効果的なデータ収集、拡張されたプロンプトのフォーマット、生成されたレスポンスの評価などこれらすべてで、注意深い検討と取り組みが必要となります。これらのトピックは、このガイドの後ほどのセクションで詳細にカバーされます。

## なぜRAGを使うのか？

以下の表では、スタンドアローンのLLMと比較したRAGの利点を説明しています。

| LLM単体 | RAGとLLM |
|:--|:--|
|**企業固有の知識なし:** LLMは通常公開データでトレーニングされるので、企業の内部データ、専有データに対する質問に正確に回答することができません。   |**RAGアプリケーション固有のデータを組み込むことができます:** RAGアプリケーションではメモ、メール、設計文書のような企業固有の文書をLLMに供給することができ、これらの文書に対する質問に回答することができます。   |
|**リアルタイムで更新されない知識:** LLMはトレーニング以降に生じたイベントに対する情報にアクセスできません。例えば、LLM単体では今日の株価の変動に関する情報を提供することができません。  | **RAGアプリケーションはリアルタイムデータにアクセスできます:** RAGアプリケーションでは、更新されるデータソースからタイムリーな情報をLLMに供給でき、トレーニングのカットオフ時点以降のイベントに対する有用な回答を提供できます。  |
|**引用の欠如:** LLMはレスポンスの際に情報のソースを引用できず、ユーザーはレスポンスが事実に基づく正確なものなのか[ハルシネーション](https://ja.wikipedia.org/wiki/%E3%83%8F%E3%83%AB%E3%82%B7%E3%83%8D%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3_(%E4%BA%BA%E5%B7%A5%E7%9F%A5%E8%83%BD))なのかを検証することができません。  | **RAGはソースを引用できます:** RAGアプリケーションの一部として活用する際、LLMにソースを引用するように指示できます。  |
|**データアクセスコントロール(ACL)の欠如:** LLM単体では、特定のユーザー権限に基づいて様々なユーザーに対する回答を信頼性を持って提供することができません。   | **RAGではデータセキュリティ/ACLを可能にします:** アクセスするユーザーに権限がある情報のみを検索するように収集ステップを設計することができ、RAGアプリケーションが個々のユーザーの資格情報に基づいて、個人情報、独自の情報を選択的に収集できるようになります。 |

## RAGの種類

RAGアーキテクチャは2つのタイプの**サポートデータ**と動作します:

|  | 構造化データ | 非構造化データ |
|:--|:--|:--|
| **定義**  | 特定のスキーマを持つ行と列で整理される表形式のデータ。データベースのテーブルなど  | 特定の構造や組織を持たないデータ。テキストや画像を含む文書や音声、動画のようなマルチメディアコンテンツ  |
| **データソースの例**  | <ul><li>BI、データウェアハウスシステムにある顧客レコード<li>SQLデータベースの取引データ<li>アプリケーションAPI(SAP、Salesforceなど)から得られるデータ</ul>  | <ul><li>PDF<li>Google/Office文書<li>Wiki<li>画像<li>動画</ul>  |

RAGでどのデータを使うのかは、あなたのユースケースに依存します。このガイドの残りのパートでは非構造化データのRAGにフォーカスします。

- [目次](https://qiita.com/taka_yayoi/items/36c51bce8f33a70cf204#%E7%9B%AE%E6%AC%A1)
- 前のセクション: [生成AIクックブック](https://qiita.com/taka_yayoi/items/36c51bce8f33a70cf204)
- 次のセクション: [2. RAGの基礎](https://qiita.com/taka_yayoi/items/45cb187666242fcb542f)

### はじめてのDatabricks

[はじめてのDatabricks](https://qiita.com/taka_yayoi/items/8dc72d083edb879a5e5d)

### Databricks無料トライアル

[Databricks無料トライアル](https://databricks.com/jp/try-databricks)