重要
この記事で "(プレビュー)" と付記されている項目は、現在、パブリック プレビュー段階です。 このプレビューはサービス レベル アグリーメントなしで提供されており、運用環境ではお勧めしません。 特定の機能はサポート対象ではなく、機能が制限されることがあります。 詳細については、「 Microsoft Azure プレビューの追加使用条件」を参照してください。
運用環境にデプロイされるアプリケーションのモニターは、生成 AI アプリケーションのライフサイクルの不可欠な部分です。 データとコンシューマーの動作の変化は、時間の経過と同時にアプリケーションに影響を与える可能性があります。 この変更により、ビジネス成果に悪影響を及ぼし、組織がコンプライアンス、経済的、評判のリスクにさらされる古いシステムになる可能性があります。
注
デプロイされたアプリケーション (プロンプト フロー以外) の継続的な監視を実行する改善された方法については、 Azure AI オンライン評価の使用を検討してください。
生成型 AI アプリケーションに対して Azure AI 監視を使用すると、運用環境のアプリケーションでトークンの使用、生成品質、運用メトリックを監視できます。
プロンプト フローのデプロイをモニターする統合を使用すると、次のことが可能になります。
- デプロイされたプロンプト フロー アプリケーションから運用環境の推論データを収集します。
- 現実性、一貫性、流暢性、関連性などの責任ある AI 評価メトリックを適用します。これらは、プロンプト フロー評価メトリックと相互運用可能です。
- プロンプト フロー内の各モデル デプロイ全体にわたって、プロンプト、入力候補、およびトークンの使用量合計をモニターします。
- 要求数、待機時間、エラー率などの運用メトリックをモニターします。
- 構成済みのアラートと既定値を使用して、定期的にモニターを実行します。
- Azure AI Foundry ポータルでデータの視覚化を使用し、高度な動作を構成します。
[前提条件]
この記事の手順に従う前に、次の前提条件があることを確認してください。
注
この機能には ハブ ベースのプロジェクト を使用する必要があります。 Foundry プロジェクトはサポートされていません。 「 自分が持っているプロジェクトの種類を確認する方法 」と 「ハブ ベースのプロジェクトを作成する」を参照してください。
- Azure サブスクリプション。 Azure サブスクリプションをお持ちでない場合は、無料アカウントを作成してください。
- ない場合は、 ハブ ベースのプロジェクトを作成します。
- デプロイ用に準備されたプロンプト フロー。 ない場合は、「プロンプト フローの開発」を参照してください。
- Azure ロールベースのアクセス制御は、Azure AI Foundry ポータルで操作へのアクセスを許可するために使用されます。 この記事の手順を実行するには、ユーザー アカウントにリソース グループの Azure AI 開発者ロールが割り当てられている必要があります。 アクセス許可の詳細については、 Azure AI Foundry ポータルのロールベースのアクセス制御に関するページを参照してください。
メトリックをモニターするための要件
生成前トレーニングトランスフォーマー (GPT) 言語モデルは、特定の評価手順 (プロンプト テンプレート) で構成された監視メトリックを生成します。 これらのモデルは、シーケンス間タスクの評価モデルとして機能します。 この手法を使用してモニター メトリックを生成すると、標準的な生成 AI 評価メトリックと比べて、強力な実証に基づく結果と、人間の判断との高い相関関係が示されます。 プロンプト フローの評価の詳細については、「バッチ テストを送信し、フローを評価する」および「生成 AI の評価と監視のメトリック」を参照してください。
次の GPT モデルでは、監視メトリックが生成されます。 監視では次の GPT モデルがサポートされており、Azure OpenAI リソースとして構成されます。
- GPT-3.5 ターボ
- GPT-4
- GPT-4-32k
モニターに対してサポートされるメトリック
監視では、次のメトリックがサポートされています。
メトリック | 説明 |
---|---|
地に足のついた状態 | モデルの生成された回答がソース データ (ユーザー定義のコンテキスト) からの情報とどの程度合致しているかを測定します。 |
関連性 | モデルの生成された応答が、与えられた質問に対してどの程度適切で、直接的な関連性があるかを測定します。 |
一貫性 | モデルの生成された応答がどの程度論理的に一貫しており接続されているかを測定します。 |
流暢性 | 生成 AI の予測した回答の文法的な熟練度を測定します。 |
列名のマッピング
フローを作成するときは、列名がマップされることを確認する必要があります。 次の入力データ列名は、生成の安全性と品質を測定するために使用されます。
入力列の名前 | 定義 | 必須/任意 |
---|---|---|
質問 | 指定された元のプロンプト ("入力" または "質問" とも呼ばれます)。 | 必須 |
答え | 返される API 呼び出しからの最終的な完了 ("出力" または "回答" とも呼ばれます)。 | 必須 |
コンテキスト | 元のプロンプトと共に API 呼び出しに送信されるコンテキスト データ。 たとえば、特定の認定情報ソースまたは Web サイトからのみ検索結果を取得する場合は、評価手順でこのコンテキストを定義できます。 | オプション |
メトリックに必要なパラメーター
この表に従って、データ資産で構成されているパラメーターによって、生成できるメトリックが決まります。
メトリック | 質問 | 答え | コンテキスト |
---|---|---|---|
一貫性 | 必須 | 必須 | - |
流暢性 | 必須 | 必須 | - |
地に足のついた状態 | 必須 | 必須 | 必須 |
関連性 | 必須 | 必須 | 必須 |
各メトリックの特定のデータ マッピング要件の詳細については、クエリと応答のメトリックの要件を参照してください。
プロンプト フローの監視を設定する
プロンプト フロー アプリケーションの監視を設定するには、まず、推論データ収集を使用してプロンプト フロー アプリケーションをデプロイする必要があります。 その後、デプロイされたアプリケーションの監視を構成できます。
推論データ収集機能を持つプロンプト フロー アプリケーションをデプロイする
このセクションでは、推論データ収集を有効にしてプロンプト フローをデプロイする方法について説明します。 プロンプト フローをデプロイする方法の詳細については、「 リアルタイム推論のためのフローのデプロイ」を参照してください。
ヒント
Azure AI Foundry ポータルで 左側のウィンドウをカスタマイズ できるため、これらの手順に示されている項目とは異なる項目が表示される場合があります。 探しているものが表示されない場合は、左側のペインの下部にある… もっと見るを選択してください。
Azure AI Foundry にサインインします。
まだプロジェクトを開いていない場合は選びます。
注
この機能には ハブ ベースのプロジェクト を使用する必要があります。 Foundry プロジェクトはサポートされていません。 「 自分が持っているプロジェクトの種類を確認する方法 」と 「ハブ ベースのプロジェクトを作成する」を参照してください。
左側のウィンドウで、[ プロンプト フロー] を選択します。
前に作成したプロンプト フローを選びます。
この記事では、デプロイの準備ができているプロンプト フローを作成したことを前提としています。 ない場合は、「プロンプト フローの開発」を参照してください。
フローが正常に実行されていること、および 評価するメトリックに必要な入力と出力が構成されていることを確認します。
必要最低限のパラメーター (質問/入力と回答/出力) を指定すると、"一貫性" と "流暢性" の 2 つのメトリックのみが提供されます。 「メトリックをモニターするための要件」セクションの説明どおりにフローを構成する必要があります。 この例では、フロー入力として
question
(質問) とchat_history
(コンテキスト) を使用し、フロー出力としてanswer
(回答) を使用します。[デプロイ] を選択して、フローのデプロイを開始します。
デプロイ ウィンドウで、推論 データ収集 が有効になっていることを確認して、アプリケーションの推論データを Azure Blob Storage にシームレスに収集します。 このデータ収集はモニターに必須です。
展開ウィンドウの手順に進み、詳細設定を完了します。
[ 確認 ] ページで、デプロイ構成を確認し、[ 作成 ] を選択してフローをデプロイします。
既定では、デプロイされたプロンプト フロー アプリケーションのすべての入力と出力が BLOB ストレージに収集されます。 ユーザーがデプロイを呼び出すと、モニターが使用するためにデータが収集されます。
デプロイ ページの [ テスト ] タブを選択します。 次に、デプロイをテストして、正常に動作していることを確認します。
モニターするには、デプロイの [テスト] タブ以外のソースから 1 つ以上のデータ ポイントを取得する必要があります。 デプロイにサンプル要求を送信するには、[ 使用 ] タブで使用できる REST API を使用することをお勧めします。 デプロイにサンプル要求を送信する方法の詳細については、「オンライン デプロイを作成する」を参照してください。
監視の構成
このセクションでは、デプロイされたプロンプト フロー アプリケーションのモニターを構成する方法について説明します。
左側のウィンドウで、[ マイ アセット>Models + エンドポイント] に移動します。
作成したプロンプト フローのデプロイを選びます。
[ 生成品質の監視を有効にする ] ボックスで、[ 有効にする] を選択します。
必要なメトリックを選択して、監視の構成を開始します。
列名が、「列名のマッピング」の定義どおりにフローからマップされていることを確認します。
プロンプト フロー アプリケーションの監視を実行するために使用する Azure OpenAI 接続 と デプロイ の値を選択します。
[詳細オプション] を選ぶと、構成するその他のオプションが表示されます。
構成したメトリックのサンプリング レートとしきい値を調整します。 特定のメトリックの平均スコアがしきい値を下回ったときにアラートを受信する電子メール アドレスを指定します。
デプロイでデータ収集が有効になっていない場合、モニターを作成すると、BLOB ストレージへの推論データの収集が有効になります。 このタスクでは、デプロイが数分間オフラインになります。
[作成] を選択してモニターを作成します。
監視結果を使用する
モニターを作成すると、毎日実行され、トークンの使用状況と生成品質メトリックが計算されます。
デプロイの [ 監視 (プレビュー)] タブに移動して、監視結果を表示します。 ここに、選択した時間枠内のモニター結果の概要が表示されます。 日付ピッカーを使用して、監視しているデータの時間枠を変更します。 この概要では、次のメトリックを入手できます。
- 合計要求数: 選択した時間枠内にデプロイに送信された要求の合計数。
- 合計トークン数: 選択した時間枠内にデプロイによって使用されたトークンの合計数。
- プロンプト トークン数: 選択した時間枠内にデプロイによって使用されたプロンプト トークンの合計数。
- 入力候補トークン数: 選択した時間枠内にデプロイによって使用された入力候補トークンの合計数。
[ トークンの使用状況 ] タブでメトリックを表示します (このタブは既定で選択されています)。ここでは、時間の経過に伴うアプリケーションのトークンの使用状況を表示できます。 時間の経過に伴うプロンプト トークンと入力候補トークンの分布も確認できます。 Trendline スコープの値を変更して、アプリケーション全体のすべてのトークン、またはアプリケーション内で使用される特定のデプロイ (GPT-4 など) のトークンの使用状況を監視できます。
[Generation quality] (生成品質) タブに移動して、時間の経過に伴うアプリケーションの品質をモニターします。 タイム チャートには、次のメトリックが表示されます。
- 違反数: 特定のメトリックの違反数 (流暢など) は、選択した時間枠での違反の合計です。 "違反" は、メトリックが計算されたとき (既定では毎日) にメトリックに対して計算された値が設定されたしきい値を下回った場合に、そのメトリックに対して発生します。
- 平均スコア: 特定のメトリックの平均スコア (流暢性など) は、すべてのインスタンス (または要求) のスコアの合計を、選択した時間枠のインスタンス (または要求) の数で割った値です。
[生成品質違反] カードには、選択した時間枠での違反率が表示されます。 違反率は、違反の数を、考えられる違反の合計数で割った値です。 設定でメトリックのしきい値を調整できます。 既定では、メトリックは毎日計算されます。 設定でこの頻度を調整することもできます。
[ 監視 (プレビュー)] タブでは、選択した時間枠内にデプロイに送信されたすべてのサンプリングされた要求の包括的なテーブルを表示することもできます。
モニターは、既定のサンプリング レートを 10% に設定します。 たとえば、デプロイに 100 件の要求が送信された場合、10 個の要求がサンプリングされ、生成品質メトリックの計算に使用されます。 設定で、サンプリング レートを調整できます。
テーブル内の行の右側にある [トレース] ボタンを選択すると、特定の要求のトレースの詳細が表示されます。 このビューには、アプリケーションへの要求に関する包括的なトレースの詳細が表示されます。
トレース ビューを閉じます。
[ 操作 ] タブに移動して、デプロイの運用メトリックをほぼリアルタイムで表示します。 次の運用メトリックがサポートされています。
- 要求数
- 遅延
- エラー率
デプロイの [ 監視 (プレビュー)] タブの結果は、プロンプト フロー アプリケーションのパフォーマンスを事前に向上させるために役立つ分析情報を提供します。
SDK v2 を使用した高度なモニター構成
モニターは、SDK v2 を使用した高度な構成オプションもサポートします。 次のシナリオがサポートされています。
トークンの使用量のモニターを有効にする
デプロイされたプロンプト フロー アプリケーションに対してトークン使用状況の監視のみを有効にする場合は、次のスクリプトをシナリオに合わせて調整します。
from azure.ai.ml import MLClient
from azure.ai.ml.entities import (
MonitorSchedule,
CronTrigger,
MonitorDefinition,
ServerlessSparkCompute,
MonitoringTarget,
AlertNotification,
GenerationTokenStatisticsSignal,
)
from azure.ai.ml.entities._inputs_outputs import Input
from azure.ai.ml.constants import MonitorTargetTasks, MonitorDatasetContext
# Authentication package
from azure.identity import DefaultAzureCredential
credential = DefaultAzureCredential()
# Update your Azure resources details
subscription_id = "INSERT YOUR SUBSCRIPTION ID"
resource_group = "INSERT YOUR RESOURCE GROUP NAME"
project_name = "INSERT YOUR PROJECT NAME" # This is the same as your Azure AI Foundry project name
endpoint_name = "INSERT YOUR ENDPOINT NAME" # This is your deployment name without the suffix (e.g., deployment is "contoso-chatbot-1", endpoint is "contoso-chatbot")
deployment_name = "INSERT YOUR DEPLOYMENT NAME"
# These variables can be renamed but it is not necessary
monitor_name ="gen_ai_monitor_tokens"
defaulttokenstatisticssignalname ="token-usage-signal"
# Determine the frequency to run the monitor, and the emails to recieve email alerts
trigger_schedule = CronTrigger(expression="15 10 * * *")
notification_emails_list = ["test@example.com", "def@example.com"]
ml_client = MLClient(
credential=credential,
subscription_id=subscription_id,
resource_group_name=resource_group,
workspace_name=project_name,
)
spark_compute = ServerlessSparkCompute(instance_type="standard_e4s_v3", runtime_version="3.3")
monitoring_target = MonitoringTarget(
ml_task=MonitorTargetTasks.QUESTION_ANSWERING,
endpoint_deployment_id=f"azureml:{endpoint_name}:{deployment_name}",
)
# Create an instance of a token statistic signal
token_statistic_signal = GenerationTokenStatisticsSignal()
monitoring_signals = {
defaulttokenstatisticssignalname: token_statistic_signal,
}
monitor_settings = MonitorDefinition(
compute=spark_compute,
monitoring_target=monitoring_target,
monitoring_signals = monitoring_signals,
alert_notification=AlertNotification(emails=notification_emails_list),
)
model_monitor = MonitorSchedule(
name = monitor_name,
trigger=trigger_schedule,
create_monitor=monitor_settings
)
ml_client.schedules.begin_create_or_update(model_monitor)
生成品質のモニターを有効にする
デプロイされたプロンプト フロー アプリケーションに対して生成品質監視のみを有効にする場合は、次のスクリプトをシナリオに合わせて調整します。
from azure.ai.ml import MLClient
from azure.ai.ml.entities import (
MonitorSchedule,
CronTrigger,
MonitorDefinition,
ServerlessSparkCompute,
MonitoringTarget,
AlertNotification,
GenerationSafetyQualityMonitoringMetricThreshold,
GenerationSafetyQualitySignal,
BaselineDataRange,
LlmData,
)
from azure.ai.ml.entities._inputs_outputs import Input
from azure.ai.ml.constants import MonitorTargetTasks, MonitorDatasetContext
# Authentication package
from azure.identity import DefaultAzureCredential
credential = DefaultAzureCredential()
# Update your Azure resources details
subscription_id = "INSERT YOUR SUBSCRIPTION ID"
resource_group = "INSERT YOUR RESOURCE GROUP NAME"
project_name = "INSERT YOUR PROJECT NAME" # This is the same as your Azure AI Foundry project name
endpoint_name = "INSERT YOUR ENDPOINT NAME" # This is your deployment name without the suffix (e.g., deployment is "contoso-chatbot-1", endpoint is "contoso-chatbot")
deployment_name = "INSERT YOUR DEPLOYMENT NAME"
aoai_deployment_name ="INSERT YOUR AOAI DEPLOYMENT NAME"
aoai_connection_name = "INSERT YOUR AOAI CONNECTION NAME"
# These variables can be renamed but it is not necessary
app_trace_name = "app_traces"
app_trace_Version = "1"
monitor_name ="gen_ai_monitor_generation_quality"
defaultgsqsignalname ="gsq-signal"
# Determine the frequency to run the monitor and the emails to receive email alerts
trigger_schedule = CronTrigger(expression="15 10 * * *")
notification_emails_list = ["test@example.com", "def@example.com"]
ml_client = MLClient(
credential=credential,
subscription_id=subscription_id,
resource_group_name=resource_group,
workspace_name=project_name,
)
spark_compute = ServerlessSparkCompute(instance_type="standard_e4s_v3", runtime_version="3.3")
monitoring_target = MonitoringTarget(
ml_task=MonitorTargetTasks.QUESTION_ANSWERING,
endpoint_deployment_id=f"azureml:{endpoint_name}:{deployment_name}",
)
# Set thresholds for the passing rate (0.7 = 70%)
aggregated_groundedness_pass_rate = 0.7
aggregated_relevance_pass_rate = 0.7
aggregated_coherence_pass_rate = 0.7
aggregated_fluency_pass_rate = 0.7
# Create an instance of a gsq signal
generation_quality_thresholds = GenerationSafetyQualityMonitoringMetricThreshold(
groundedness = {"aggregated_groundedness_pass_rate": aggregated_groundedness_pass_rate},
relevance={"aggregated_relevance_pass_rate": aggregated_relevance_pass_rate},
coherence={"aggregated_coherence_pass_rate": aggregated_coherence_pass_rate},
fluency={"aggregated_fluency_pass_rate": aggregated_fluency_pass_rate},
)
input_data = Input(
type="uri_folder",
path=f"{endpoint_name}-{deployment_name}-{app_trace_name}:{app_trace_Version}",
)
data_window = BaselineDataRange(lookback_window_size="P7D", lookback_window_offset="P0D")
production_data = LlmData(
data_column_names={"prompt_column": "question", "completion_column": "answer", "context_column": "context"},
input_data=input_data,
data_window=data_window,
)
gsq_signal = GenerationSafetyQualitySignal(
connection_id=f"/subscriptions/{subscription_id}/resourceGroups/{resource_group}/providers/Microsoft.MachineLearningServices/workspaces/{project_name}/connections/{aoai_connection_name}",
metric_thresholds=generation_quality_thresholds,
production_data=[production_data],
sampling_rate=1.0,
properties={
"aoai_deployment_name": aoai_deployment_name,
"enable_action_analyzer": "false",
"azureml.modelmonitor.gsq_thresholds": '[{"metricName":"average_fluency","threshold":{"value":4}},{"metricName":"average_coherence","threshold":{"value":4}}]',
},
)
monitoring_signals = {
defaultgsqsignalname: gsq_signal,
}
monitor_settings = MonitorDefinition(
compute=spark_compute,
monitoring_target=monitoring_target,
monitoring_signals = monitoring_signals,
alert_notification=AlertNotification(emails=notification_emails_list),
)
model_monitor = MonitorSchedule(
name = monitor_name,
trigger=trigger_schedule,
create_monitor=monitor_settings
)
ml_client.schedules.begin_create_or_update(model_monitor)
SDK からモニターを作成したら、Azure AI Foundry ポータルで 監視結果を使用 できます。
関連コンテンツ
- Azure AI Foundry でできることについて、詳細を確認します。
- よく寄せられる質問に対する回答については、 Azure AI Foundry に関する FAQ を参照してください。