生成AIアプリを監視する方法
ベータ版
この機能は ベータ版です。
このページでは、 Mosaic AI Agent Frameworkを使用してデプロイされた生成 AIアプリを監視する方法について説明します。
Databricksの生成AI モニタリングは、 Mosaic AI エージェント評価 AI ジャッジを使用して、ボリューム、レイテンシ、エラー、コストなどの運用メトリクスと、正確性やガイドラインの遵守などの品質メトリクスを追跡するのに役立ちます。
必要条件
- Databricks ノートブックに databricks-agents SDK をインストールします。
%pip install databricks-agents>=0.17.0
dbutils.library.restartPython()
- サーバレス ジョブを有効にする必要があります。
- LLM ジャッジ のメトリクスでは、パートナーが提供する AI 支援機能 を有効にする必要があります。レイテンシなどの他のメトリクスは、この設定に関係なくサポートされます。
制限
- トレースがモニタリングUIで利用可能になるまでに最大2時間かかる場合があります。
- Quality メトリクスは、モニタリング UI にトレースが表示され てから コンピュートまでさらに 30 分かかる場合があります。
詳細については、「 実行とスケジューリングの監視」を参照してください。
より低いレイテンシーが必要な場合は、Databricks のアカウント担当者にお問い合わせください。
モニタリングの設定
エージェントモニタリングは、 Mosaic AI Agent Framework を使用してデプロイされたエージェントをサポートします。
エージェントフレームワーク
ChatAgent または ChatModel で作成されたエージェントを agents.deploy
を使用してデプロイすると、基本的なモニタリングが自動的に設定されます。これには以下が含まれます。
- ボリューム追跡の要求
- レイテンシメトリクス
- エラーロギング
この自動モニタリングには、ガイドラインの遵守や安全性などの特定の評価メトリクスは含まれていませんが、エージェントの使用状況とパフォーマンスを追跡するために不可欠なテレメトリーを提供します。
モニターにエンドユーザー👍/👎フィードバックを含めるには、 デプロイされたエージェントに関するフィードバックの提供 (実験的) を参照して、推論テーブルにフィードバックを添付する手順を確認してください。
エージェントモニタリング メトリクスの設定
自動モニタリングに評価メトリクスを追加するには、 update_monitor
方法を使用します。
MLflowモニターは エクスペリメントに取り付ける 必要があります 。各エクスペリメントには、(1 つのエンドポイントに対して) 1 つのモニターのみをアタッチできます。 By デフォルト, update_monitor
と create_monitor
はノートブックの MLflow エクスペリメントを使用します。 この動作をオーバーライドして別のエクスペリメントを選択するには、 experiment_id
パラメーターを使用します。
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
方法でモニタリングを設定できます。
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_adherence
、groundedness
、safety
、relevance_to_query
、chunk_relevance
です。これらのメトリクスの詳細については、「 組み込み AI ジャッジ」を参照してください。[Optional] global_guidelines: dict[str, list[str]]
- エージェントの応答を評価するためのグローバルガイドライン。ガイドラインの遵守を参照してください。[Optional] paused: str
-PAUSED
またはUNPAUSED
.
-
[Optional] experiment_id
: モニター結果が表示される MLflow エクスペリメント。 指定しない場合、モニターは、エージェントが最初にログに記録されたのと同じエクスペリメントを使用します。
セル出力にモニタリング UI へのリンクが表示されます。 評価結果はこの UI で表示でき、 monitor.evaluated_traces_table
.評価された行を表示するには、次のコマンドを実行します。
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の理論的根拠 |
モニタリング結果の表示
モニタリング結果を表示する前に、以下のものが必要です。
これらの前提条件が満たされると、次の手順に従って、モニターによって生成された結果をまとめたページを表示できます。
-
機械学習 セクションの下のサイドバーにある エクスペリメント をクリックします。
-
モニターに関連付けられている MLflow エクスペリメントをクリックします。
関連するエクスペリメントの名前を見つける方法がわからない場合は、「 モニターメタデータの取得 」の手順に従って、エクスペリメント ID を取得し、ノートブックでエクスペリメント名を検索する
mlflow.get_experiment(experiment_id=$YOUR_EXPERIMENT_ID)
を実行してください。 -
モニタリング タブをクリックします。
-
SQLウェアハウスを選択する ドロップダウンを使用して、 SQLウェアハウス を選択します。
-
ページが更新され、モニタリング結果が表示されます。 結果の読み込みには数分かかる場合があります。
モニタリング UI を使用する
モニタリング UI のすべてのデータは、 チャート タブと ログ タブの両方で、時間枠に制限されます。 ウィンドウを変更するには、 時間範囲 ドロップダウンを使用します。
[グラフ] タブ
チャートタブは、リクエスト、メトリクス、レイテンシー、エラー の 4 つのセクションで構成されています。
リクエスト セクションには、時間の経過に伴うトレース量が表示されます。
メトリクス セクションには、LLM 審査員によって評価された回答の数が表示されます。緑は合格した応答を示し、赤は失敗した応答を示します。このセクションに記載されているメトリクスは、 モニターの作成時 に定義されたものに対応し、全体的な合格/不合格の品質スコアも対応している必要があります。
レイテンシー セクションには、MLflow で報告された待機時間から取得された、時間の経過に伴うトレース実行の待機時間が表示されます。
エラー セクションには、時間の経過に伴うモデル エラーが表示されます。エラーが発生していない場合は、次のように「データなし」インジケータが表示されます。
[ログ] タブ
[ログ] タブには、選択したモデルに送信された要求と、LLM 評価の結果 (存在する場合) が一覧表示されます。選択した期間の最大 10,000 件のリクエストが UI に表示されます。要求数がこのしきい値を超えると、要求はモニター構成で指定されたサンプル速度とは異なる速度でサンプリングされます。
送信されたリクエストに含まれるテキストに基づいてリクエストログをフィルタリングするには、検索ボックスを使用します。 フィルター ドロップダウンメニューを使用して、関連する評価の結果でログをフィルタリングすることもできます。
リクエストにカーソルを合わせ、チェックボックスをクリックしてリクエストを選択します。その後、 評価に追加 をクリックして、これらのリクエストを評価データセットに追加できます。
リクエストをクリックすると、その詳細が表示されます。モーダルには、評価結果、入力、応答、および要求に応答するために取得されたドキュメント (存在する場合) が表示されます。タイミング情報など、要求の詳細については、モーダルの右上にある 詳細なトレース ビューの表示 をクリックします。
アラートの追加
Databricks SQL アラートを使用して、評価されたトレース テーブルが期待と一致しない場合 (たとえば、有害としてマークされた要求の割合がしきい値を超えた場合) にユーザーに通知します。
実行とスケジューリングの監視
- トレースがモニタリングUIで利用可能になるまでに最大2時間かかる場合があります。
- Quality メトリクスは、モニタリング UI にトレースが表示され てから コンピュートまでさらに 30 分かかる場合があります。
モニターを作成すると、過去 30 日間のエンドポイントへのリクエストのサンプルを評価するジョブが開始されます。この初期評価は、リクエストの量とサンプリングレートによっては、完了するまでに数時間かかる場合があります。
エンドポイントにリクエストが行われると、次の処理が行われます。
- 要求とその MLflow トレースは、推論テーブルに書き込まれます (15 分から 30 分)。
- スケジュールされたジョブは、推論テーブルを 2 つの別々のテーブル (要求とトレースを含む
request_log
と、ユーザーフィードバックを含むassessment_logs
にアンパックします (ジョブは 1 時間ごとに実行されます)。 - モニタリング ジョブは、指定した要求のサンプルを評価します (ジョブ 15 分ごとに実行)。
これらの手順を合わせると、リクエストがモニタリング UI に表示されるまでに最大 2.5 時間かかることがあります。
モニターは Databricks ワークフローによって支えられています。モニターの更新を手動でトリガーするには (ステップ 3)、名前が [<endpoint_name>] Agent Monitoring Job
のワークフローを見つけて、[ 今すぐ実行 ] をクリックします。
より低いレイテンシーが必要な場合は、Databricks のアカウント担当者にお問い合わせください。
モニターを更新または一時停止する
モニタの設定を更新するには、次の入力を受け取る update_monitor
を呼び出します。
endpoint_name: str
- 監視対象のエンドポイントの名前monitoring_config: dict
- モニターの設定。サポートされているパラメーターについては、「 モニタリングの設定 」を参照してください。
例えば:
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%
}
)
同様に、モニターを一時停止するには:
from databricks.agents.evals.monitors import update_monitor
monitor = update_monitor(
endpoint_name = "model-serving-endpoint-name",
monitoring_config = {
"paused": True,
}
)
モニターのメタデータを取得する
get_monitor
機能を使用して、デプロイされたエージェントのモニターの現在の構成を取得します。
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
を呼び出します。
from databricks.agents.evals.monitors import delete_monitor
monitor = delete_monitor(
endpoint_name = "model-serving-endpoint-name",
)
モニターによって生成された評価されたトレース・テーブルは、 delete_monitor
の呼び出しによって削除されません。
ノートブックの例
次の例では、単純なエージェントをログに記録してデプロイし、そのエージェントでモニタリングを有効にします。