自社のデータを基に回答をさせるRAG(Retrieval Augmented Generation)の仕組み

自社のデータを基に回答をさせるAzure OpenAI Serviceを利用したChatシステムを作る際の最適な方法について、今回はRAG(Retrieval Augmented Generation)の仕組みを中心に解説します。

※ 本記事は、以前にハイブリットクラウド研究会で発表した資料をベースに、ブログ用に再編集したものとなります

アプローチの比較

自社のデータを基に回答をさせるAzure OpenAI Serviceベースのチャットシステムを作る際には、大きく分けて以下の2つのアプローチがあると考えています。

  1. データを参照して回答を生成する
  2. モデルに学習させる

データを参照して回答を生成する

  • RAG(Retrieval Augmented Generation)
    • 直訳すると検索拡張生成となる
    • 入力プロンプトのキーワードやベクトルからDBを検索して入力プロンプトの回答を生成する
  • Azure OpenAI Service On Your Data
    • 基本的な仕組みはRAGだが、Azure OpenAI ServiceのAPIにAI Searchの検索やクエリのベクトル化などが含まれており、RAGに必要なプロンプトを書く必要はない

モデルに学習させる

  • Fine-Tuning
    • 事前にモデルに自社のデータを学習させる
    • レスポンスは良いがコストがかかる

比較表

  RAG Azure OpenAI Service On Your Data Fine-tuning
難易度
自身でデータを検索したり、回答を生成するコードを書く必要がある

検索や回答の部分は書かなくてもAPIで使える

学習用データを作る必要があり、どのくらいの量を作ればよいかのノウハウが必要
コスト
ApplicationとAI SearchとAzure OpenAI Serviceが必要

ApplicationとAI SearchとAzure OpenAI Serviceが必要

学習と学習済みモデル(インスタンス)の稼働にかなりのコストがかかる
トレーニング:¥14,507.971/h ホスティング:¥995.646/h
2024年1月17日

Azure OpenAI Service - 価格 | Microsoft Azure

ハルシネーション低減の工夫
プロンプトの工夫で低減できる
不可
すでにされていて個別の工夫は難しい

学習量次第だがかなりのコストがかかる

RAGのアーキテクチャ

こちらは閉域網を想定していますが。ExpressRouteを使わない構成も可能です。

Microsoft社のAzure OpenAI Service リファレンスアーキテクチャにも掲載していますのでそちらもご覧ください。

Azure OpenAI Service リファレンスアーキテクチャ

RAGの流れ

利用者からの「JBSの売上は?」という質問に対して、あらかじめAI Searchに格納されているドキュメントから回答する、というシナリオで流れを解説します。

  1. 利用者が「JBSの売上は?」という質問をフロントからFunctionに対して送信
  2. Functionは質問をAzure OpenAI Serviceに対してキーワード抽出とベクトル化を実施
  3. Azure OpenAI Serviceから返ってきたキーワードとベクトルでAI Searchに対して該当コンテンツを検索
  4. AI Searchから返ってきたコンテンツと最初の質問をAzure OpenAI Serviceへ送信して適切な回答をユーザーへ返す

RAGのプロンプト

重要になるプロンプトはキーワードと回答生成になります。

特に回答生成の部分で”出典にないことは回答しないでください”などこの部分を強く書いたり、ロールを指定したりすることで、ハルシネーションの低減につながると考えます。

まとめ

RAGとAzure OpenAI Service On Your Dataとの違いですが、プロンプトの修正やチャンクサイズやオーバーラップの調整、日本語への対応などがブラックボックスになっています。

それに対して、自身でRAGの仕組みを構築すると、カスタマイズが可能になるのでより精度が高い仕組みを作る事が出来ると考えます。

また、RAGを構築するうえで、プロンプトや日本語やファイルの種類によって、最適なチャンクサイズや引用の見せ方など、考慮することはたくさんありますのでそれぞれの企業で工夫が必要となります。

執筆担当者プロフィール
上田 英治

上田 英治(日本ビジネスシステムズ株式会社)

エンジニアとしてインフラ構築、システム開発やIoT基盤構築等を経験し、現在はクラウドアーキテクトとして先端技術の活用提案や新規サービスの立ち上げを担当。

担当記事一覧