メインコンテンツまでスキップ

生成AIアプリを監視する方法

備考

ベータ版

この機能は ベータ版です。

このページでは、 Mosaic AI Agent Frameworkを使用してデプロイされた生成 AIアプリを監視する方法について説明します。

Databricksの生成AI モニタリングは、 Mosaic AI エージェント評価 AI ジャッジを使用して、ボリューム、レイテンシ、エラー、コストなどの運用メトリクスと、正確性やガイドラインの遵守などの品質メトリクスを追跡するのに役立ちます。

モニタリング UI Hero

必要条件

Python
%pip install databricks-agents>=0.17.0
dbutils.library.restartPython()
  • サーバレス ジョブを有効にする必要があります。
  • LLM ジャッジ のメトリクスでは、パートナーが提供する AI 支援機能 を有効にする必要があります。レイテンシなどの他のメトリクスは、この設定に関係なくサポートされます。

制限

important
  • トレースがモニタリングUIで利用可能になるまでに最大2時間かかる場合があります。
  • Quality メトリクスは、モニタリング UI にトレースが表示され てから コンピュートまでさらに 30 分かかる場合があります。

詳細については、「 実行とスケジューリングの監視」を参照してください。

より低いレイテンシーが必要な場合は、Databricks のアカウント担当者にお問い合わせください。

モニタリングの設定

エージェントモニタリングは、 Mosaic AI Agent Framework を使用してデプロイされたエージェントをサポートします。

エージェントフレームワーク

ChatAgent または ChatModel で作成されたエージェントを agents.deployを使用してデプロイすると、基本的なモニタリングが自動的に設定されます。これには以下が含まれます。

  • ボリューム追跡の要求
  • レイテンシメトリクス
  • エラーロギング

この自動モニタリングには、ガイドラインの遵守や安全性などの特定の評価メトリクスは含まれていませんが、エージェントの使用状況とパフォーマンスを追跡するために不可欠なテレメトリーを提供します。

ヒント

モニターにエンドユーザー👍/👎フィードバックを含めるには、 デプロイされたエージェントに関するフィードバックの提供 (実験的) を参照して、推論テーブルにフィードバックを添付する手順を確認してください。

エージェントモニタリング メトリクスの設定

自動モニタリングに評価メトリクスを追加するには、 update_monitor 方法を使用します。

important

MLflowモニターは エクスペリメントに取り付ける 必要があります 。各エクスペリメントには、(1 つのエンドポイントに対して) 1 つのモニターのみをアタッチできます。 By デフォルト, update_monitorcreate_monitor はノートブックの MLflow エクスペリメントを使用します。 この動作をオーバーライドして別のエクスペリメントを選択するには、 experiment_id パラメーターを使用します。

Python
from databricks.agents.evals.monitors import update_monitor

monitor = update_monitor(
endpoint_name = "model-serving-endpoint-name",
monitoring_config = {
"sample": 0.01, # Sample 1% of requests
"metrics": ['guideline_adherence', 'groundedness', 'safety', 'relevance_to_query'],
"global_guidelines": {
"english": ["The response must be in English"],
"clarity": ["The response must be clear, coherent, and concise"],
}
}
)

自動モニタリングでデプロイされていないエージェントの場合は、 create_monitor 方法でモニタリングを設定できます。

Python
from databricks.agents.evals.monitors import create_monitor

monitor = create_monitor(
endpoint_name = "model-serving-endpoint-name",
monitoring_config = {
"sample": 0.01, # Sample 1% of requests
"metrics": ['guideline_adherence', 'groundedness', 'safety', 'relevance_to_query'],
"global_guidelines": {
"english": ["The response must be in English"],
"clarity": ["The response must be clear, coherent, and concise"],
}
}
)

どちらの方法でも、次の入力を受け取ります。

  • endpoint_name: str - 監視するモデルサービングエンドポイントの名前。

  • monitoring_config: dict - モニターの設定。次のパラメーターがサポートされています。

    • sample: float - 評価する要求の割合 (0 から 1 の間)。
    • metrics: list[str] - 評価するメトリクスの一覧。 サポートされているメトリクスは、 guideline_adherencegroundednesssafetyrelevance_to_querychunk_relevanceです。これらのメトリクスの詳細については、「 組み込み AI ジャッジ」を参照してください。
    • [Optional] global_guidelines: dict[str, list[str]] - エージェントの応答を評価するためのグローバルガイドライン。ガイドラインの遵守を参照してください。
    • [Optional] paused: str - PAUSED または UNPAUSED.
  • [Optional] experiment_id: モニター結果が表示される MLflow エクスペリメント。 指定しない場合、モニターは、エージェントが最初にログに記録されたのと同じエクスペリメントを使用します。

セル出力にモニタリング UI へのリンクが表示されます。 評価結果はこの UI で表示でき、 monitor.evaluated_traces_table.評価された行を表示するには、次のコマンドを実行します。

Python
display(spark.table(monitor.evaluated_traces_table).filter("evaluation_status != 'skipped'"))

評価済みトレース・テーブル

評価結果は、次のスキーマを持つ評価済みトレーステーブルに保存されます。

列名

列のタイプ

説明

databricks_request_id

文字列

「A215652C-0464-49EB-8138-FC190B9C5B25」

Databricks で生成された要求識別子は、推論テーブルにも格納されます

日付

DATE

“2024-12-16”

リクエスト日

status_code

INT

200

モデルから返された HTTP 状態コード

execution_time_ms

LONG

1239

エージェントの実行時間 (ミリ秒単位)。これには、オーバーヘッド・ネットワーク・レイテンシは含まれず、エージェントの呼び出しにかかった時間のみを表します。

timestamp

TIMESTAMP

2024-12-16T03:36:42.270+00:00

要求が受信されたときのタイムスタンプ

assessment_timestamp

TIMESTAMP

2024-12-16T05:00:15.220+00:00

モニターがこの要求を評価したときのタイムスタンプ

trace

文字列

{“info”:{“request_id”:”a215652c-0464-49eb-8138-fc190b9c5b25”,”experiment_id”: …}, … }

この要求の MLflow トレース

request

文字列

「Mosaic AIエージェント評価とは?」

エージェントへのユーザー要求

request_raw

文字列

{"messages": [{"role": "user", "content": "Mosaic AIエージェント評価とは何ですか?"}]}

OpenAI チャット完了スキーマに従ったエージェントへの未加工のユーザー要求

response

文字列

「Mosaic AI Agent Evaluationは、開発者がエージェントAIアプリケーションの品質、コスト、およびレイテンシを評価するのに役立ちます」

エージェントの応答

evaluation_status

文字列

“processed”

行がサンプリングされた場合は“processed” です。行がサンプリングされなかった場合は "skipped" です。「to_process」は、モニタリング ジョブがまだ行を評価していない場合です。

以下の列は、モニターによって実行されているメトリクスによって異なります。 各メトリクスには、評価と根拠の列があります。

列名

列のタイプ

説明

response/llm_judged/safety/rating

文字列

“yes”

LLM判定の安全性評価

response/llm_judged/safety/rationale

文字列

“No harmful content detected in response”

評価のためのLLMの理論的根拠

モニタリング結果の表示

モニタリング結果を表示する前に、以下のものが必要です。

これらの前提条件が満たされると、次の手順に従って、モニターによって生成された結果をまとめたページを表示できます。

  1. 機械学習 セクションの下のサイドバーにある エクスペリメント をクリックします。

  2. モニターに関連付けられている MLflow エクスペリメントをクリックします。

    関連するエクスペリメントの名前を見つける方法がわからない場合は、「 モニターメタデータの取得 」の手順に従って、エクスペリメント ID を取得し、ノートブックでエクスペリメント名を検索する mlflow.get_experiment(experiment_id=$YOUR_EXPERIMENT_ID) を実行してください。

  3. モニタリング タブをクリックします。

  4. SQLウェアハウスを選択する ドロップダウンを使用して、 SQLウェアハウス を選択します。

  5. ページが更新され、モニタリング結果が表示されます。 結果の読み込みには数分かかる場合があります。

モニタリング UI を使用する

モニタリング UI のすべてのデータは、 チャート タブと ログ タブの両方で、時間枠に制限されます。 ウィンドウを変更するには、 時間範囲 ドロップダウンを使用します。

[グラフ] タブ

チャートタブは、リクエスト、メトリクス、レイテンシー、エラー の 4 つのセクションで構成されています。

モニタリング結果をまとめたページのスクリーンショット。

リクエスト セクションには、時間の経過に伴うトレース量が表示されます。

[リクエスト] セクションのスクリーンショット。

メトリクス セクションには、LLM 審査員によって評価された回答の数が表示されます。緑は合格した応答を示し、赤は失敗した応答を示します。このセクションに記載されているメトリクスは、 モニターの作成時 に定義されたものに対応し、全体的な合格/不合格の品質スコアも対応している必要があります。

[メトリクス] セクションのスクリーンショット。

レイテンシー セクションには、MLflow で報告された待機時間から取得された、時間の経過に伴うトレース実行の待機時間が表示されます。

[Latency] セクションのスクリーンショット。

エラー セクションには、時間の経過に伴うモデル エラーが表示されます。エラーが発生していない場合は、次のように「データなし」インジケータが表示されます。

エラーセクションのスクリーンショット。

[ログ] タブ

[ログ] タブのスクリーンショット。

[ログ] タブには、選択したモデルに送信された要求と、LLM 評価の結果 (存在する場合) が一覧表示されます。選択した期間の最大 10,000 件のリクエストが UI に表示されます。要求数がこのしきい値を超えると、要求はモニター構成で指定されたサンプル速度とは異なる速度でサンプリングされます。

送信されたリクエストに含まれるテキストに基づいてリクエストログをフィルタリングするには、検索ボックスを使用します。 フィルター ドロップダウンメニューを使用して、関連する評価の結果でログをフィルタリングすることもできます。

ログフィルターのスクリーンショット。

リクエストにカーソルを合わせ、チェックボックスをクリックしてリクエストを選択します。その後、 評価に追加 をクリックして、これらのリクエストを評価データセットに追加できます。

evals モーダルへの追加のスクリーンショット。

リクエストをクリックすると、その詳細が表示されます。モーダルには、評価結果、入力、応答、および要求に応答するために取得されたドキュメント (存在する場合) が表示されます。タイミング情報など、要求の詳細については、モーダルの右上にある 詳細なトレース ビューの表示 をクリックします。

リクエスト詳細モーダルのスクリーンショット。

要求の詳細なトレース ビューのスクリーンショット。

アラートの追加

Databricks SQL アラートを使用して、評価されたトレース テーブルが期待と一致しない場合 (たとえば、有害としてマークされた要求の割合がしきい値を超えた場合) にユーザーに通知します。

実行とスケジューリングの監視

important
  • トレースがモニタリングUIで利用可能になるまでに最大2時間かかる場合があります。
  • Quality メトリクスは、モニタリング UI にトレースが表示され てから コンピュートまでさらに 30 分かかる場合があります。

モニターを作成すると、過去 30 日間のエンドポイントへのリクエストのサンプルを評価するジョブが開始されます。この初期評価は、リクエストの量とサンプリングレートによっては、完了するまでに数時間かかる場合があります。

エンドポイントにリクエストが行われると、次の処理が行われます。

  1. 要求とその MLflow トレースは、推論テーブルに書き込まれます (15 分から 30 分)。
  2. スケジュールされたジョブは、推論テーブルを 2 つの別々のテーブル (要求とトレースを含む request_logと、ユーザーフィードバックを含む assessment_logsにアンパックします (ジョブは 1 時間ごとに実行されます)。
  3. モニタリング ジョブは、指定した要求のサンプルを評価します (ジョブ 15 分ごとに実行)。

これらの手順を合わせると、リクエストがモニタリング UI に表示されるまでに最大 2.5 時間かかることがあります。

モニターは Databricks ワークフローによって支えられています。モニターの更新を手動でトリガーするには (ステップ 3)、名前が [<endpoint_name>] Agent Monitoring Job のワークフローを見つけて、[ 今すぐ実行 ] をクリックします。

より低いレイテンシーが必要な場合は、Databricks のアカウント担当者にお問い合わせください。

モニターを更新または一時停止する

モニタの設定を更新するには、次の入力を受け取る update_monitorを呼び出します。

  • endpoint_name: str - 監視対象のエンドポイントの名前
  • monitoring_config: dict - モニターの設定。サポートされているパラメーターについては、「 モニタリングの設定 」を参照してください。

例えば:

Python
from databricks.agents.evals.monitors import update_monitor

monitor = update_monitor(
endpoint_name = "model-serving-endpoint-name",
monitoring_config = {
"sample": 0.1, # Change sampling rate to 10%
}
)

同様に、モニターを一時停止するには:

Python
from databricks.agents.evals.monitors import update_monitor

monitor = update_monitor(
endpoint_name = "model-serving-endpoint-name",
monitoring_config = {
"paused": True,
}
)

モニターのメタデータを取得する

get_monitor 機能を使用して、デプロイされたエージェントのモニターの現在の構成を取得します。

Python
from databricks.agents.evals.monitors import get_monitor

get_monitor('model-serving-endpoint-name')

この関数は、次の属性を含む Monitor オブジェクトを返します。

  • endpoint_name - 監視対象のエンドポイントの名前。
  • monitoring_config - モニターの設定。構成パラメーターの モニタリングのセットアップ を参照してください。
  • experiment_id - モニタリング結果が表示される MLflow エクスペリメント。 モニタリング結果の表示を参照してください。
  • evaluated_traces_table - Unity Catalog モニタリングの評価結果をまとめた表です。

モニターの削除

エンドポイントからモニターを削除するには、 delete_monitorを呼び出します。

Python
from databricks.agents.evals.monitors import delete_monitor

monitor = delete_monitor(
endpoint_name = "model-serving-endpoint-name",
)

モニターによって生成された評価されたトレース・テーブルは、 delete_monitorの呼び出しによって削除されません。

ノートブックの例

次の例では、単純なエージェントをログに記録してデプロイし、そのエージェントでモニタリングを有効にします。

エージェントモニタリングのサンプルノートブック

Open notebook in new tab