Azure OpenAI入門基礎講座 Part6 - データを追加する(RAG)

この記事の内容

  • Azure OpenAI Studio のチャットプレイグラウンドに独自データを追加し、そのデータに基づいて回答するチャットボットを構築します
  • いわゆる RAG(Retrieval-Augmented Generation)を、コードを書かずに全自動で構成する方法を解説します
  • Azure Blob Storage・Azure AI Search・埋め込みモデルの3つのリソースを組み合わせる仕組みを理解します
  • ベクトル検索・ハイブリッド検索・チャンクサイズなど、RAG特有のパラメーターの意味を学びます
  • 動作確認を通じて、RAGの限界と精度チューニングの考え方を把握します

RAGとは何か

RAG(Retrieval-Augmented Generation)とは、LLMが元々持っていない独自の情報をドキュメントとして与え、そのドキュメントを参照しながら回答を生成する仕組みです。Azure OpenAI Studio のチャットプレイグラウンドには「データを追加する」という機能があり、この RAG 構成を全自動で組み立てることができます。

まず前提として、GPT-4 に対して「胡田昌彦という人物について教えてください」と質問すると、以下のような回答が返ってきます。

つまり、GPT-4 はあらかじめ学習していない情報については答えられません。これに対して独自のドキュメント(今回は自己紹介の Word ファイル)を追加することで、その内容に基づいた回答が返るようになります。


必要なリソースの全体像

データを追加する機能を使うには、以下の3つの Azure リソースが必要です。

リソース役割
Azure Blob Storageドキュメントファイルのアップロード先
Azure AI Searchドキュメントのインデックスを作成し、検索を担当
埋め込みモデル(Embedding Model)テキストをベクトルに変換し、ベクトル検索を可能にする

質問が来ると、まず AI Search がその質問の意図に関連するドキュメントを検索・取得し、取得した内容をもとに LLM が回答を生成します。この検索フローが RAG の核心部分です。


Azure Blob Storage の作成

チャットプレイグラウンドの「データを追加する」→「データソースの追加」から、「ファイルのアップロード(Upload files)」を選択します。

ファイルのアップロード先として Azure Blob Storage が必要なため、新規作成します。主な設定例は以下の通りです。

  • パフォーマンス: Standard
  • 冗長性: ローカル冗長ストレージ(LRS)※テスト用途のため
  • リージョン: Japan East(または任意のリージョン)

作成後、ストレージアカウントを選択するとCORS(クロスオリジンリソース共有)の有効化を求める警告が表示されます。この警告は、Azure AI Search リソースを作成した後に対応します。


Azure AI Search リソースの作成

次に、ドキュメントの検索を担う Azure AI Search リソースを作成します。

価格レベルについての注意点:

  • Free(無料)レベル: チャットプレイグラウンドからはサポートされていないため選択できません
  • Basic レベル: 月額約 1 万円前後(リージョンにより異なります)
  • Standard レベル: 月額約 4,500 円前後(リージョンにより異なります)

また、Japan East リージョンでリソース不足によりデプロイが失敗する場合があります。その際は West US 2 など別リージョンへ変更して再試行してください。

Azure AI Search リソースが作成できたら、チャットプレイグラウンドに戻り「更新」ボタンをクリックしてリソースを選択します。その後、CORS をオンに設定します。


埋め込みモデル(Embedding Model)のデプロイ

ベクトル検索を利用するには、テキストをベクトルに変換する「埋め込みモデル」を Azure OpenAI にデプロイしておく必要があります。

Azure OpenAI Studio の「デプロイ」から新規デプロイを作成し、モデルの選択で text-embedding-* 系のモデルを選びます。

モデルの選択について:

  • text-embedding-ada-002: 従来からある標準的なモデル。チャットプレイグラウンドの UI が対応している
  • text-embedding-3-large: より新しく高性能だが、執筆時点ではプレイグラウンド UI からの選択に対応していない場合がある

動作確認の段階では text-embedding-ada-002 を選択することを推奨します。

デプロイ後、チャットプレイグラウンドに戻ると「ベクトル検索をこの検索リソースに追加する」チェックボックスが押せるようになります。


データソースの設定手順

埋め込みモデルが準備できたら、改めてデータを追加する設定を進めます。

1. データソースの選択

「ファイルのアップロード」を選択し、Blob Storage と AI Search のリソースを指定します。インデックス名は任意の名前(例: index)を入力します。

2. 検索の種類の選択

種類内容
ベクトル検索ベクトル(意図)のみで検索
ハイブリッド検索ベクトル検索+キーワード検索を組み合わせてランキング
ハイブリッド+セマンティック上記に加えて質問の意図で再ランキング(最も高精度)

精度を優先する場合は「ハイブリッド+セマンティック」を選択します。

3. チャンクサイズの設定

チャンクサイズとは、ドキュメントをどの程度の大きさで分割するかを決める設定です。LLM に渡せるトークン数には上限があるため、長いドキュメントは適切なサイズに分割して処理します。

  • 大きくする: 文脈を保ちやすいが、トークン上限に引っかかるリスクが増える
  • 小さくする: 確実に収まるが、文章の意図が途切れる可能性がある

初めのうちはデフォルト値のまま進めて問題ありません。

4. データ接続の認証方法

ドキュメントへのアクセス権限の設定方法は2種類あります。

方法特徴
マネージド IDセキュアで本番環境に推奨。事前設定が必要
API キー文字列で認証するためシンプル。動作確認に向いている

初回の動作確認では API キーを選択すると確実に進められます。本番環境ではマネージド ID の利用を検討してください。

5. ファイルのアップロード

設定を進めるとファイルアップロード画面が表示されます。対象のドキュメント(Word ファイル等)を選択してアップロードします。アップロード後、Blob Storage へのファイル保存・ドキュメントの前処理・AI Search のインデックス作成が自動で実行されます。


動作確認

インデックスの作成が完了したら、チャットプレイグラウンドで質問してみます。

質問例:

回答例(データ追加後):

3-退123...

回答の末尾に参照元のドキュメントが表示されます。どのチャンク(ドキュメントの断片)から回答が生成されたかが確認できます。


RAGの精度パラメーター

データ追加後に表示される設定画面では、以下のパラメーターを調整できます。

パラメーター内容
データコンテンツへの応答制限追加データの範囲のみで回答するか否か
厳格度質問への関連性が高いドキュメントのみをソースとする厳しさ
取得ドキュメントの数検索結果から何件のドキュメントを回答生成に使うか(3〜20)

取得ドキュメント数は、ドキュメントの量やチャンクサイズに応じて調整します。情報が細かく分割されている場合は多めに設定するのが有効です。


RAGの限界について

チャットプレイグラウンドの RAG 機能は万能ではありません。たとえばドキュメントに記載されていた情報でも、以下の理由で回答できない場合があります。

  • チャンクの分割箇所が不適切で、関連する情報が別々のチャンクに分断された
  • 検索インデックスで該当チャンクが上位にランキングされなかった
  • 取得ドキュメント数の上限に引っかかった

この課題への対処として「チャンクのオーバーラップ」があります。前後のチャンクの内容を少し重複させて保持することで、分断による情報欠落を防ぎます。ただし、チャットプレイグラウンドの UI 上にはこのオプションは現時点では表示されません。

チャットプレイグラウンドの RAG 機能は「ポチポチするだけで70〜80点のものが素早く作れる」という位置づけです。100点の精度が求められる場合は、自前でパイプラインを実装することを検討する必要があります。


まとめ

今回は Azure OpenAI Studio のチャットプレイグラウンドを使って、独自ドキュメントを追加し RAG チャットボットを構成する手順を確認しました。

  • Azure Blob StorageAzure AI Search埋め込みモデル の3つを組み合わせることで、RAG 環境が構築できます
  • ファイルのアップロードからインデックス作成までの処理は全自動で行われるため、バックエンドの詳細を意識せずに動作確認が可能です
  • ベクトル検索チャンクサイズはRAG特有の概念であり、精度に大きく影響します
  • チャットプレイグラウンドの RAG は手軽に作れる反面、100点の精度は保証されないため、用途に応じた精度チューニングが必要です

次回は、構築したチャットボットを Web アプリとして公開し、誰でも利用できる形にデプロイする方法を紹介します。