こんにちは、サイオステクノロジーの遠藤です。
弊社ではこの度、Azure OpenAI サービスを基盤として最短一日でRAG環境を提供するAzure OpenAI Service RAGスターターパックのサービス提供を始めました。
本ブログではAzure OpenAI Service RAGスターターパックを利用して検索機能の評価を行う方法を確認します。
また、より詳細なサービス概要は弊社ソリューションサイト SIOS NEXT TECH SOLUTIONSからもご確認いただけます。ご興味のある方は是非アクセスしてみてください。
Azure OpenAI Service RAGスターターパックとは?
Azure OpenAI Service RAGスターターパック(以下「RAGSP」という)は社内データといった独自情報を外部知識として活用する生成AI技術であるRAG(Retrieval-Augmented Generation)を利用したアプリケーションを提供可能なパッケージとなります。
本パッケージではクラウドインフラからアプリケーションまでを最短一営業日で構築し、チャットUI+回答精度の評価改善までのオールインワン基盤をご提供します。

評価の利用手順の概要
RAGSPでは以下の手順で評価を行うことが出来ます。
- プロンプトフローのインポート
- 評価の実行
- 利用するプロンプトフローの選択
- 評価用のデータセットの追加
- 評価項目の設定
- 評価の実行
- 結果の確認
プロンプトフローとは?

プロンプトフロー(Prompt Flow)は、Azureが提供している生成AIのプロンプト開発・評価・管理を効率化するためのツールです。RAGSPでは概要図のバックエンドAPIに当たる部分がプロンプトフローで構築されています。
プロンプトフローの最大の特徴は「ノード」と言われる処理の単位の流れをグラフィカルに表示し、フローの流れを直感的に追える点にあります。例えば以下の画像の例では、inputノードでアプリの入力を受け取り、LLMノードで入力された質問を処理し、それをpythonできれいな形に整形して最終的にアプリケーションの出力として吐き出している様子が表現されています。

RAGSPでの具体的なノードの構成と処理の流れは以下のような形になっていて、これをAzure Functions上で動作させてBackend APIとして扱っています。

プロンプトフロー単体に関するブログも執筆しておりますので、よりプロンプトフローについての知識を深めたい方は以下の記事も合わせてご拝読ください。
プロンプトフローのインポート
では、実際に評価を行う方法について確認していきましょう。プロンプトフローの評価はAzure AI FoundryまたはAzure Machine Learning Studioを利用して行うことが可能ですが、今回はAzure AI Foundryを利用してプロンプトフローを利用する方法について確認していきます。
また今回インポートを行うプロンプトフローの接続先として、RAGテスト用就業規則をデータソースとして学習させたものを利用しております。
RAGSPで環境を作成すると、「hub-<環境名>」というリソースが作成されます。そのリソースに移動し、「Launch Azure AI Foundry」をクリックしましょう。

クリックすると、Azure AI Foundry 管理センターが表示されます。「新しいプロジェクト」をクリックします。そうするとポップアップでプロジェクト名が求められるので入力します。

完了後、プロジェクト画面に遷移します。遷移後の左のタブの「プロンプトフロー」を選択することでプロンプトフローを利用することが出来ます。

画面が遷移したら、「作成」をクリックします。

「ローカルからアップロード」を選択します。

そうするとポップアップが表示されで、「参照」クリックしてRAGSPのソースコードからプロンプトフローをアップロードします。その後、「フローの種類の選択」から「Chat Flow」を選択し、アップロードを行います。

そうするとRAGSPを構成しているプロンプトフローをAzure AI Foundryにアップロードが完了します。

評価の実行
インポートが完了したら、ここからは実際に評価を行っていきましょう。
利用するプロンプトフローの選択
AI Foundry左側のメニューから「評価」をクリックします。その後、「新しい評価」をクリックしましょう。

そうするとポップアップが表示されるので、一番下のプロンプトフローを選択します。

画面遷移後、「どのフローを評価しますか?」で先ほど作成したフローを選択します。選択できたら、「次へ」をクリックします。

コピーしました!
評価用のデータセットの追加
画面が遷移したら、「データセットの追加」をクリックし、「ファイルをアップロードする」を選んで評価に使用するファイルをアップロードします。

評価にはcsv形式またはJSONL形式のファイルを利用することが出来ます。わかりやすいように一部省略している部分もありますが内容は質問文にあたるquestionと質問に対する正しい答えであるground_truthから構成されています。今回は評価がきちんとされているか判断するために「定年は何歳ですか?」のground_truthとして70歳という誤った内容を入れてみました(真に正しいの答えは65歳)。また、学習に利用したRAGテスト用就業規則には記載されていない内容である「ChatGPTはどの会社が提供するサービスですか?」と「Cosmos DBとはなんですか?」というquestionを入れてみました。これで評価がどうなるのかを確認していきましょう。
question | ground_truth |
---|---|
試用期間は何ヶ月ですか | 3ヶ月 |
1週間の所定労働時間は何時間ですか? | 40時間 |
採用されたときに出す必要のある書類はなんですか | 住民票記載事項証明書、自動車運転免許証の写し、資格証明書の写し、その他会社が指定するもの |
結婚したときに慶弔休暇はありますか? | 1日あります |
試用期間は最初の何日以内であれば即時解雇できますか? | 14日以内です |
定年は何歳ですか? | 70歳 |
ChatGPTはどの会社が提供するサービスですか? | OpenAI |
Cosmos DBとはなんですか? | Cosmos DB は、最新のアプリ開発に対応するフル マネージドの NoSQL およびリレーショナル データベースです |
ファイルのアップロードが完了すると、
①にアップロードしたファイルのプレビューが表示されます。
②ではプロンプトフローのデータセットマッピングを行うことが出来ます。
設定が完了したら③の「次へ」を押しましょう。

評価項目の設定
画面遷移後、どのようなメトリックで評価を行うかを設定します。評価できる項目としてはプレビューなものも含めて16種類の項目から評価することが出来ます。今回はその中でもRAGの評価に使用されるものに絞ってご紹介します。
項目 | 評価内容 |
---|---|
根拠性 | 生成 AI アプリケーションで生成された回答が、入力ソースからの情報とどの程度一致しているかを計測します。 |
関連性 | 生成 AI アプリケーションで生成された回答がどの程度適切で、提示された質問に直接関連するかを計測します。 |
類似性 | ソース データ (グラウンド トゥルース) 文と生成 AI アプリケーションで生成された応答の間の類似性を計測します。 |
F1スコア | F1 スコアは、生成 AI アプリケーションの予測とソース データ (グラウンド トゥルース) の間で共有される単語の数の比率を測定します。 |
ROUGEスコア | ROUGE は、モデルの出力を参照サマリと比較してテキスト生成の品質を測定します。 |
今回の評価対象は比較的取り回しのよい、「根拠性」「関連性」「類似性」について評価を行ってみます。画面から「根拠性」「関連性」「類似性」にチェックをつけたら、その下の「接続」と「デプロイ名/モデル」を選択し、評価に利用するモデルを設定します。

画面を下にスクロールすると評価に必要な項目とデータセットのマッピング画面があるのでマッピングを行います。今回はcontextとしてアプリのcontext、responseとしてアプリのoutput、queryとしてデータセットのquestion、ground_truthとしてデータセットのground_truthを設定します。

評価の実行
評価の確認画面が表示されるので画面下部の「送信」をクリックすると評価が始まります。

結果の確認
評価が完了したら、評価レポートを見てみましょう。メトリックダッシュボードから評価項目として設定したグラフを見ることが出来ます。今回のデータでは「根拠性」と「関連度」に関しては二極化傾向があり、「類似性」に関しては偏りの少ない分布が見られますね。

個別の評価結果を見る方法についても確認しましょう。各データに対する評価内容を詳しく見るには画面上部の「データ」タブをクリックすることで見ることが出来ます。
①では質問文に対して作成したアプリがどのような結果を返したのかを確認することが出来ます。
②では「生成 AI アプリケーションで生成された回答がどの程度適切で、提示された質問に直接関連するかを計測」してくれる関連度の点数と、関連度の理由が説明されています。
③では「生成 AI アプリケーションで生成された回答が、入力ソースからの情報とどの程度一致しているかを計測」してくれる根拠性の点数と、根拠性の理由が説明されています。
④では回答の根拠として使用される文であるコンテキストが表示されています。RAGSPではコンテキストはAzure AI Searchから受け取っています。
⑤では「ソース データ (グラウンド トゥルース) 文と生成 AI アプリケーションで生成された応答の間の類似性を計測」してくれる類似性の点数が表示されています。

では、いくつかの評価をピックアップして個別に確認してみましょう。まずは「採用されたときに出す必要のある書類はなんですか」という質問の評価を見てみます。
この場合には、Azure AI Searchからしっかりコンテキストが渡され、それをもとに正しく応答が生成されていることにより、ground_truthの内容とも一致しているため根拠性、類似性ともに最高評価である5となっています。また、生成された回答が適切で、提示された質問に関連する回答を生成出来ているため、関連度も5になっています。

続いて、あえてground_truthとして「70歳」と誤った値を入れてみた「定年は何歳ですか」という質問の回答を見てみます。(正しい答えは65歳)
この場合ではクエリと応答の関連度は高いため関連度は高くなっています。また、応答がコンテキストに基づいて生成出来ているため、根拠性は高くなっています。ただ、類似性については応答とあえて間違った内容を設定したground_truthに違いがあるため低い値となっています。

最後にRAGのデータソースとして利用したRAGテスト用就業規則にない答えを設定した「ChatGPTはどの会社が提供するサービスですか?」と「Cosmos DBとはなんですか?」という質問に対する回答を見てみます。
この場合は応答が特徴的で、RAGSPではハルシネーションを避けるためにコンテキストを参照した答えを作成できない場合には、「ご質問に一致するデータが無く回答出来ませんでした。」と出力するように設定しています。このような出力がなされた場合には、回答の生成に必要なデータソースが登録されていなかったり、プロンプトの設定が悪いなどが考えられますので、評価結果に応じてデータソースの追加やチューニングを行っていくことが必要になります。評価に戻りますが、「ご質問に一致するデータが無く回答出来ませんでした。」応答を設定しているため、「関連度」「根拠性」「類似度」については最低値の1が出るようになっています。

AIが事実と異なる情報をもっともらしく生成してしまう現象のこと。特に、大規模言語モデル(LLM)では、学習データにない内容を補完しようとして誤った回答をすることがある。
例:
- 「日本の首都は大阪です」と誤った情報を回答する。
- 「田中太郎は2020年にノーベル賞を受賞しました」と、実在しない事実を作り出す。
まとめ
今回は弊社からリリースしたAzure Open AI Service RAGスターターパック(RAGSP)を利用し、アプリケーションが正しく動作しているかの評価を行いました。Azureが提供するプロンプトフローを利用した評価を提供しているため、安心してアプリケーションの品質をチェックすることができます。
改めての紹介になりますが、以下のページからより詳細なサービス概要をご確認いただけますので是非一度ご覧いただければと思います。お問い合わせをお待ちしております。
「Azure OpenAI Service RAGスターターパック」 サービス概要ページ
https://nextech-solutions.sios.jp/genai/azure-openai-service-ragsp.html