【技術Tips】Prompt Flow(Azure AI Studio)を使用したRAG入門 第2回

Prompt Flow(Azure AI Studio)を使用したRAG入門 第2回

こんにちは!TECH Street編集部です。
TECH Streetでは、コミュニティメンバーが日々の学びや知見を「技術Tips」カテゴリで発信しています。

導入

本記事について

「Prompt Flow(Azure AI Studio)を使用したRAG入門 第1回 」の続きです。まだお読みでない方は第1回目の記事を先にご確認いただけますと幸いです。

本記事ではPrompt Flow(Azure AI Studio)を使用したRAGのアプリケーション開発の入門として、Azure AI Studioのサンプルアプリや評価機能等の便利な機能についてご紹介できればと思います。

また、本記事が技術ブログへの初投稿のため、温かい目で見守っていただければ思います。Azureの公式ドキュメントの敷居を下げることを意識して執筆しましたので、本記事をきっかけにPrompt FlowやAzure AI Studioに少しでも興味を持っていただければ幸いです。

【第1回】
RAGの概要、On Your Data(Azure AI Studio)の概要/設定、Prompt Flow(Azure AI Studio)の概要/設定 等

www.tech-street.jp

【第2回】
Prompt Flow(Azure AI Studio)の推論エンドポイントのデプロイ、サンプルアプリのデプロイ/カスタマイズ、Azure AI Studioの評価機能、回答精度向上に向けた指針 等

注意事項

①    今回紹介する内容は記事執筆時点(2024/6/7)から更新されている可能性があるため、最新情報は公式ドキュメントのご確認をお願いいたします。
②    今回紹介する内容は一部プレビュー版の内容を含むため、運用環境では推奨されていない機能も含むことに注意してください。
③    ネットワークや認証等のセキュリティ設定については必要に応じて追加で対応をお願いいたします。
④    本記事の内容に関連して発生するいかなる不利益、損害、またはその他の問題につきまして、一切の責任を負いかねます。読者の方々が本記事の情報を用いる際には、自己の責任において実施してください。

実装

全体の流れ

①    サンプルアプリをデプロイ

Azure AI Studioのプレイグラウンドからサンプルアプリをデプロイします。
Azure AI Studio プレイグラウンドでエンタープライズ チャット Web アプリをデプロイする - Azure AI Studio | Microsoft Learn

②    Prompt Flowからフローを推論エンドポイントとしてデプロイ/サンプルアプリの設定変更

続いて、作成したフローを推論エンドポイントとしてデプロイします。その後、①にて作成したサンプルアプリの設定を編集し、推論エンドポイントで動作するようにします。
リアルタイム推論を行うためにマネージド オンライン エンドポイントとしてフローをデプロイする - Azure AI Studio | Microsoft Learn

③    Azure AI Studioの評価機能を使用したプロンプトチューニング

作成したフローでプロンプトを2パターン用意し、Azure AI Studioの評価機能を使用してそれぞれの出力結果の比較を行います。
バッチ実行を送信してフローを評価する - Azure AI Studio | Microsoft Learn

前提条件

「Prompt Flow(Azure AI Studio)を使用したRAG入門 第1回 」の各設定が完了していることを前提とします。 

On Your Dataからサンプルアプリをデプロイ

サンプルアプリのデプロイ手順

①    [チャット セッション] ウィンドウの上にあるメニューから、[Deploy to a web app]を選択し、サンプルアプリをデプロイする。デプロイが完了すれば、[Launch]からアプリにアクセス可能です。

なお、サンプルアプリの認証設定は、下記公式ドキュメントをご参照ください。
Azure AI Studio プレイグラウンドでエンタープライズ チャット Web アプリをデプロイする - Azure AI Studio | Microsoft Learn

②    デプロイしたサンプルアプリに[Launch]からアクセスし、チャットを投げてみると以下の回答が得られました。

以上でサンプルアプリのデプロイが完了しました。お疲れ様でした。

(参考)サンプルアプリのカスタマイズについて

サンプルアプリは、Azure App Serviceの環境変数から一部カスタマイズ可能です。特にメッセージのフィードバック機能は、ユーザーからのフィードバックを簡易に回収することができるため、PoCの段階では本機能を有効にしたうえでチャットの履歴機能※と組み合わせてユーザーの質問や回答の良し悪しの情報を収集することも可能です。

詳細は下記公式ドキュメント若しくはサンプルアプリのGitHubリポジトリのREADMEを参照願してください。

公式ドキュメント
Azure OpenAI Web アプリの使用 - Azure OpenAI | Microsoft Learn

サンプルアプリのGitHubリポジトリ
GitHub - microsoft/sample-app-aoai-chatGPT: Sample code for a simple web chat experience through Azure OpenAI, including Azure OpenAI On Your Data.

 

また、リポジトリが更新された場合はAzure App Serviceのデプロイセンターから同期をかけることでApp Service側も更新可能です。

※デフォルトではUIからの履歴削除は物理削除となるため、履歴を削除しない運用にするかサンプルアプリの機能の修正が必要となります。

Prompt Flowからフローを推論エンドポイントとしてデプロイ/サンプルアプリの設定変更

Prompt Flowからフローを推論エンドポイントとしてデプロイ

①    フローエディターで[Start compute session]をクリックし、コンピューティングセッションを開始したうえで[deploy]をクリックします。その後、添付画像の通り、設定したうえで[Review+Create]をクリックします。


②    デプロイ完了後に推論エンドポイントにアクセスし、[Test]から試しにチャットを投げてみると以下の回答が得られました。

以上で推論エンドポイントのデプロイが完了しました。お疲れ様でした。

サンプルアプリの設定変更

①    サンプルアプリのAzure App Serviceの環境変数からプロンプトフローの設定を実施します。先ほどデプロイしたサンプルアプリにアクセスします。

②    環境変数を以下の通り、追加します。その後、App Serviceを再起動([停止]→[開始])します。
USE_PROMPTFLOW        :True
AZURE_OPENAI_STREAM    :False
PROMPTFLOW_ENDPOINT    :(推論エンドポイントのRESTエンドポイント)
PROMPTFLOW_API_KEY    :(エンドポイントのAPIキー)
PROMPTFLOW_RESPONSE_TIMEOUT:500
PROMPTFLOW_REQUEST_FIELD_NAME:query
PROMPTFLOW_RESPONSE_FIELD_NAME:reply 

③     デプロイしたサンプルアプリで試しにチャットを投げてみると以下の回答が得られました。エラーが発生した際はブラウザをリロードして再度試してみてください。

なお、プロンプトフローの履歴機能は、記事執筆時点(2024/6/7)では機能しないことにご注意ください。

以上でサンプルアプリの設定が完了しました。お疲れ様でした。

Azure AI Studioの評価機能を使用したプロンプトチューニング

Azure AI Studioの評価機能とは

Azure AI Studioでは、評価機能をノーコードで簡易に使用可能です。大きく「組み込みの評価機能」と「カスタムの評価機能」があります。
Azure AI Studio を使用して生成 AI アプリを評価する方法 - Azure AI Studio | Microsoft Learn 

 

評価機能の設定手順

上記で作成したフローに対して評価機能を用いてプロンプトチューニングを実施します。具体的には、generateReplyノードに対して、バリアントを生成し、デフォルトのプロンプトとそれを日本語に翻訳したプロンプト(GPTに翻訳してもらったうえで整形しています)の出力結果を比較します。なお、使用するプロンプトは省略いたします。

バリアントを使用してプロンプトを調整する - Azure AI Studio | Microsoft Learn
バッチ実行を送信してフローを評価する - Azure AI Studio | Microsoft Learn

①    generateReplyノードの右上にある[Show variants]を選択します。その後、デフォルトのvariant_0の[Clone]を選択し、variant_1として複製します。

②    variant_1にアクセスし、Promptを日本語訳したものに編集します。 

③    編集が完了しましたらPrompt下部の[Validate and parse input]をクリックし、検証を完了させます。

④    フローエディターの[Evaluate] >[Custom evaluation]の順に選択します。添付画像のとおり設定を進めます。
 

なお、テストデータは履歴機能を加味しない形で.jsonl形式で用意しました。あくまで動作確認用のデータとして用意しているため、内容については参考程度に留めていただけますと幸いです。

 

.jsonlファイル

{"content":"ストレスチェックは年に何回程度実施する必要がありますか。20文字以内に回答してください。", "ground_truth":"1年に1回実施する必要があります。", "chat_history":""}
{"content":"退職金制度は必ず設置する必要がありますか?20文字以内で回答してください。", "ground_truth":"必ず設置する必要はありません。", "chat_history":"
"}
{"content":"割増賃金について深夜に労働させた場合の割増率について簡潔に教えてください。", "ground_truth":"2割5分以上。", "chat_history":""}
{"content":"慶弔休暇は必ず定める必要がありますか。", "ground_truth":"必ず定める必要はありません。", "chat_history":"
"}
{"content":"職場のパワーハラスメントを防止するために必要な措置を定めた法律を正式名称で教えてください。", "ground_truth":"労働施策の総合的な推進並びに労働者の雇用の安定及び職業生活の充実等に関する法律です。", "chat_history":"[]"}

なお、今回使用する評価指標としては、「QnA Ada Similarity Evaluation(LLMを使用し、ユーザーが提供した正解データとモデルの回答の類似性を5段階で測定)」及び「QnA GPT Similarity Evaluation(Embeddingモデルを使用し、ユーザーが提供した正解データとモデルの回答の類似度をコサイン類似度で測定)」を使用します。詳細は以下のリンクをご参照ください。
バッチ実行を送信してフローを評価する - Azure AI Studio | Microsoft Learn 

⑤    [Prompt Flow]>[Runs]から評価結果を確認します。フローを選択するとより詳細な結果が確認できます。Metricsを比較する限りでは同じ結果ですが、Tokensでは日本語のプロンプトの方が若干多く消費しています。

こちらの結果からは、精度は同程度であったため、コスト(トークン量)観点からデフォルトのプロンプトの方が良さそうです。以上で評価が完了しました。お疲れ様でした。コストが発生し続けてしまうため、必要に応じてコンピューティングの停止やリソースの削除を実施してください。

 

ここからはAzure AI Studioの便利な機能をご紹介します。
[Visualize outputs] から各フローのメトリックや出力結果を一覧で表示することが可能です。

また、精度向上に向けてボトルネックになっていそうな処理を発見するためにノード単位で入出力を一覧で詳細に確認できるTrace機能も便利です。Azure AI Studioのtracingタブからアクセス可能です。
Tracing — Prompt flow documentation (microsoft.github.io)

 


回答精度向上に向けた指針について

以下の内容を実践すればある程度の精度向上は図ることができると考えております。

検索精度向上(回答生成に必要なドキュメントを取得できるか?)
・ Azure AI Searchのセマンティックハイブリッド検索を導入する。
・ Azure AI Searchのアナライザー等の言語設定をドキュメントに合わせて設定する。
・ Azure AI Searchのチャンクサイズ、オーバーラップをドキュメントに合わせて設定する。
・ メタデータをAzure AI Searchのインデックスに埋め込み検索時に活用する。
・ ドキュメントのノイズを除去する。
・ 検索クエリ作成時のプロンプトやモデルを工夫する。
   ・ 高精度なモデルを利用する。
   ・ ユースケースに合わせて、ドキュメントの種類や独自情報の定義等をプロンプトに記載する。
   ・  CoTやFew-Shot等のプロンプトエンジニアリングの手法を使用し、ユースケースに応じたRAGのプロセスを提示する。

回答精度向上(取得したドキュメントから上手く回答を作成できるか?)
・ 回答生成時のプロンプトやモデルを工夫する。
   ・ 高精度なモデルを利用する。
   ・ ユースケースに合わせて、ドキュメントの種類や独自情報の定義等をプロンプトに記載する。
   ・ CoTやFew-Shot等のプロンプトエンジニアリングの手法を使用し、ユースケースに応じたRAGのプロセスを提示する。
・ 利用するドキュメント数の上限や検索スコアの閾値を最適化する。

 

また、前述の通り、サンプルアプリの機能やAzure AI Studioの評価機能を活用して、利用者の意見を吸い上げたり、細かいチューニングを実施していったりすると良いと思われます。

最後に

本記事では、Azureが提供するRAGを実現するサービスである「Prompt Flow」や「Azure AI Studio」を紹介しました。本記事で紹介させていただいた内容でPrompt FlowやAzure AI Studioの活用イメージを少しでも掴んでいただければと思います。
本記事の内容が少しでもRAGの導入やPrompt Flowの活用にお役に立てていただけましたら幸いです。

記事執筆者

*

雨谷 健司 さん

パーソルキャリア株式会社
デジタルテクノロジー統括部 デジタルビジネス部 アナリティクスグループ

前職は鉄道会社で駅係員をはじめとした現業研修後にテクノロジー部門で社内DXの推進やデータ利活用組織の基盤作りに従事。パーソルキャリア入社後はアナリストとして、データ分析、機械学習モデルの開発、施策設計・評価、データマネジメント、生成系AIに関連するアプリケーション開発/検証に携わっている。