次の方法で共有


Azure Databricks の外部にデプロイされたアプリを監視する (MLflow 2)

Von Bedeutung

この機能は ベータ版です

Von Bedeutung

このページでは、MLflow 2 でのエージェント評価バージョン 0.22 の使用方法について説明します。 Databricks では、エージェント評価 >1.0と統合された MLflow 3 を使用することをお勧めします。 MLflow 3 では、エージェント評価 API が mlflow パッケージの一部になりました。

このトピックの詳細については、「 運用品質の監視 (スコアラーを自動的に実行する)」を参照してください。

このページでは、Mosaic AI Agent Framework の外部にデプロイされた生成 AI アプリの監視を設定する方法について説明します。 結果スキーマ、結果の表示、UI の使用、アラートの追加、モニターの管理など、監視の使用に関する一般的な情報については、 生成 AI アプリの監視 (MLflow 2) に関するページを参照してください。

Gen AI の Lakehouse Monitoring を使用すると、 モザイク AI エージェント評価 AI のジャッジを使用して、ボリューム、待機時間、エラー、コストなどの運用メトリックだけでなく、正確性やガイドライン準拠などの品質メトリックを追跡できます。

監視のしくみ:

しくみの概要

監視 UI:

生成 AI UI ヒーロー用のレイクハウス監視

要求事項

  • 監視を有効にして構成するには、 databricks-agents SDK を使用する必要があります。
%pip install databricks-agents>=0.22.0 mlflow>=2.21.2
dbutils.library.restartPython()

Von Bedeutung

運用アプリケーションに databricks-agents をインストールする必要はありません。 実稼働アプリケーションには mlflow インストールするだけで済みます。これにより、MLflow Tracing インストルメンテーションが有効になります。

監視を設定する

Databricks の外部に AI アプリをデプロイしている場合、または Databricks Apps を使用している場合は、Databricks ノートブック内の create_external_monitor メソッドを使用してモニターをセットアップします。

モニターは MLflow 実験内に作成されます。 監視 UI は、MLflow 実験のタブとして表示されます。 ログ トレースへのアクセスは、MLflow 実験の ACL を介して制御されます。

次に、 MLFlow トレースmlflow.tracing.set_destination を使用して、デプロイされたコードをインストルメント化します。 Agent Framework を使用してデプロイされたアプリについては、「 生成 AI アプリケーション用のエージェントをデプロイする」を参照してください。

次の手順では、Databricks ノートブックから作業していることを前提としています。 ローカル開発環境 (IDE など) からモニターを作成するには、代わりにこの Python スクリプト をダウンロードして使用します。

このノートブックには、このページの残りの部分に示されている手順が含まれています。

外部モニターのサンプル ノートブックを作成する

ノートブックを入手

手順 1: MLflow 実験を作成する

既存の実験を使用することも、新しい実験を作成することもできます。 新しい実験を作成するには、次の手順に従います。

import mlflow
mlflow_experiment_path = "/Users/your-user-name@company.com/my_monitor_name"
mlflow.set_experiment(experiment_name=mlflow_experiment_path)

# Get the experiment ID to use in the next step
experiment_id = mlflow.tracking.fluent._get_experiment_id()

手順 2: 外部モニターを作成する

Von Bedeutung

既定では、実験を明示的に指定せずに Databricks ノートブックから create_external_monitor を実行すると、ノートブックの MLflow 実験にモニターが作成されます。

create_external_monitor は次の入力を受け取ります。

  • catalog_name: str - デルタ成果物を書き込むカタログの名前。
  • schema_name: str - デルタ成果物を書き込むスキーマの名前。 このスキーマは、上記のカタログの一部である必要があります。
  • [Optional] experiment_id: 運用トレースが格納される MLflow experiment_id 。 このまたは experiment_name のいずれかを定義する必要があります。 指定しない場合、モニターは、このコマンドが実行されたノートブックの実験を使用します。
  • [Optional] experiment_name: 運用トレースが格納される MLflow experiment_name 。 このまたは experiment_id のいずれかを定義する必要があります。 指定しない場合、モニターは、このコマンドが実行されたノートブックの実験を使用します。
  • assessments_config: AssessmentsSuiteConfig | dict - モニターによって計算された評価の構成。 次のパラメーターがサポートされています。
    • [Optional] sample: float - グローバルサンプルレート、つまり、評価を計算する要求の割合 (0 から 1 の間)。 既定値は 1.0 です (すべてのトラフィックのコンピューティング評価)。
    • [Optional] paused: bool - モニターが一時停止されているかどうか。
    • [Optional] assessments: list[BuiltinJudge | GuidelinesJudge] 組み込みジャッジまたはガイドライン ジャッジのいずれかである評価のリストです。

BuiltinJudge は、次の引数を受け取ります。

  • name: str - 監視でサポートされている組み込まれている評価基準の 1 つ: "安全性"、"根拠の確認"、"クエリへの関連性"、"チャンクの関連性"。 組み込みのジャッジの詳細については、「 組み込みのジャッジ」を参照してください。
  • [Optional] sample_rate: float - この評価を計算する要求の割合 (0 ~ 1)。 既定ではグローバル サンプル レートが使用されます。

GuidelinesJudge は、次の引数を受け取ります。

  • guidelines: dict[str, list[str]] - 要求/応答を主張するために使用されるガイドライン名とプレーンテキスト形式のガイドラインを含む辞書。 ガイドラインの詳細については、「 ガイドラインの準拠」を参照してください。
  • [Optional] sample_rate: float - (0 から 1 の間の) ガイドラインを計算する要求の割合。 既定ではグローバル サンプル レートが使用されます。

詳細については、 Python SDK のドキュメントを参照してください。

例えば次が挙げられます。

from databricks.agents.monitoring import create_external_monitor, AssessmentsSuiteConfig, BuiltinJudge, GuidelinesJudge
import mlflow


external_monitor = create_external_monitor(
  catalog_name='my_catalog',
  schema_name='my_schema',
  # experiment_id=..., # Replace this line with your MLflow experiment ID.  By default, create_external_monitor uses the notebook's MLflow experiment.
  assessments_config=AssessmentsSuiteConfig(
    sample=1.0,
    assessments=[
      # Builtin judges: "safety", "groundedness", "relevance_to_query", "chunk_relevance"
      BuiltinJudge(name='safety'),  # or {'name': 'safety'}
      BuiltinJudge(name='groundedness', sample_rate=0.4), # or {'name': 'groundedness', 'sample_rate': 0.4}
      BuiltinJudge(name='relevance_to_query'), # or {'name': 'relevance_to_query'}
      BuiltinJudge(name='chunk_relevance'), # or {'name': 'chunk_relevance'}
      # Create custom judges with the guidelines judge.
      GuidelinesJudge(guidelines={
        "pii": ["The response must not contain personal information."],
        "english": ["The response must be in English"]
      }),
    ]
  )
  # AssessmentsSuiteConfig can also be simple objects:
  # assessments_config={
  #   "sample": 1.0,
  #   "assessments": [
  #     {'name': 'safety'},
  #     {'name': 'groundedness'},
  #     {'name': 'relevance_to_query'},
  #     {'name': 'chunk_relevance'},
  #     {
  #       'name': 'guideline_adherence',
  #       'guidelines': {
  #         'pii': ['The response must not contain personal information.'],
  #         'english': ['The response must be in English']
  #       }
  #     },
  #   ]
  # }
)
print("experiment_id=", external_monitor.experiment_id)

セル出力に監視 UI へのリンクが表示されます。 評価結果はこの UI で表示でき、 monitoring_tableに格納されます。 評価された行を表示するには、次のコマンドを実行します。

display(spark.table("cat.schema.monitor_table"))

手順 3: MLFlow トレースを使用して Gen AI アプリをインストルメント化する

開始するには、デプロイされたエージェントに次のパッケージをインストールします。

%pip install "mlflow>=2.21.2"

Von Bedeutung

DATABRICKS_TOKENは、モニターが構成されている MLflow 実験への EDIT アクセス権を持つサービス プリンシパルまたはユーザー用である必要があります。

Gen AI アプリで、次のコードを追加します。

  • DATABRICKS_HOSTDATABRICKS_TOKEN環境変数を設定します。
    • DATABRICKS_HOST はワークスペースの URL です(例: https://workspace-url.databricks.com
    • DATABRICKS_TOKEN は PAT トークンです。 次の 手順に従います。
      • サービス プリンシパルの PAT トークンを使用する場合は、ノートブックの上部で構成した MLflow 実験に対する EDIT 書き込みをサービス プリンシパルに付与してください。 これを行わないと、MLflow トレースはトレースをログに記録できません。
  • mlflow.tracing.set_destination を使用してトレース先を設定します。
  • MLFlow 自動トレースまたは MLFlow Fluent API を使用してアプリをトレースします。 MLFlow では、LangChain、Bedrock、DSPy、OpenAI など、多くの一般的なフレームワーク自動ログ記録がサポートされています。
  • MLFlow が Databricks にトレースを記録するために、Databricks 認証トークンが必要です。
# Environment variables:
DATABRICKS_TOKEN="..."
DATABRICKS_HOST="..."
import mlflow
from mlflow.tracing.destination import Databricks

# Setup the destination.
mlflow_experiment_id = "..."  # This is the experiment_id that is configured in step 2.
mlflow.tracing.set_destination(Databricks(experiment_id=mlflow_experiment_id))

# Your AI app code, instrumented with mlflow.
# MLFlow supports autologging for a variety of

## Option 1: MLFlow autologging
import mlflow

mlflow.langchain.autolog()

# Enable other optional logging
# mlflow.langchain.autolog(log_models=True, log_input_examples=True)

# Your LangChain model code here
# ...
# ...

# Option 2: MLflow Fluent APIs:
# Initialize OpenAI client
# This example uses the databricks-sdk's convenience method to get an OpenAI client
# In your app, you can use any OpenAI client (or other SDKs)
w = WorkspaceClient()
openai_client = w.serving_endpoints.get_open_ai_client()

# These traces will automatically be sent to Databricks.
@mlflow.trace(span_type='AGENT')
def openai_agent(user_input: str):
  return openai_client.chat.completions.create(
      model="databricks-meta-llama-3-3-70b-instruct",
      messages=[
          {
              "role": "system",
              "content": "You are a helpful assistant that always responds in CAPS!",
          },
          {"role": "user", "content": user_input},
      ],
  )

# Call the app to generate a Trace
openai_agent("What is GenAI observability?")

手順 4. 監視 UI にアクセスして、ログに記録されたトレースを表示する

手順 2 で構成した MLflow 実験に移動します。 監視タブをクリックし、左上の [ログ] をクリックして、手順 3 でログに記録されたトレースを表示します。

実行とスケジュールの監視

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

初期評価後、モニターは 15 分ごとに自動的に更新され、新しい要求が評価されます。 エンドポイントに対して要求が行われると、モニターによって評価されるまでに遅延があります。

モニターは Databricks ワークフローによってサポートされます。 モニターの更新を手動でトリガーするには、名前が [<endpoint_name>] Agent Monitoring Job ワークフローを見つけて、[ 今すぐ実行] をクリックします。

制限事項

Databricks の外部にデプロイされる GenAI アプリの Lakehouse Monitoring の制限事項を次に示します。

  • トレース インジェストの最大スループットは 10 QPS (1 秒あたりのクエリ数) です。
  • MLFlow TraceData フィールドの requestresponse は、組み合わせて 25 KB を超えてはなりません。
  • MLFlow TraceDataspans は 1 MB を超えてはなりません。