Von Bedeutung
Databricks では、GenAI アプリの評価と監視に MLflow 3 を使用することをお勧めします。 このページでは、MLflow 2 エージェントの評価について説明します。
- MLflow 3 での評価と監視の概要については、 AI エージェントの評価と監視に関するページを参照してください。
- MLflow 3 への移行の詳細については、「 エージェント評価から MLflow 3 への移行」を参照してください。
- このトピックの MLflow 3 の情報については、 カスタム・ジャッジを参照してください。
この記事では、エージェント評価で AI アプリケーションの品質、コスト、待機時間を評価する方法について説明し、品質の向上とコストと待機時間の最適化を導く分析情報を提供します。 以下の内容を取り上げます。
各組み込み LLM ジャッジのリファレンス情報については、 組み込みの AI ジャッジ (MLflow 2) を参照してください。
LLM ジャッジによる品質評価方法
Agent Evaluation は、LLM ジャッジを用いて 2 段階で品質を評価します。
- LLM ジャッジは行ごとに特定の品質観点 (正しさや根拠など) を評価します。 詳細については、「 手順 1: LLM のジャッジが各行の品質を評価する」を参照してください。
- エージェント評価は、個々のジャッジの評価を、全体的な合格/失敗スコアと障害の根本原因に組み合わせたものです。 詳細については、「 手順 2: LLM ジャッジ評価を組み合わせて、品質の問題の根本原因を特定する」を参照してください。
LLMジャッジの信頼と安全に関する情報については、LLMのジャッジを推進するモデルに関する
注
複数ターンの会話の場合、LLM のジャッジは会話の最後のエントリのみを評価します。
手順 1: LLM の判事が各行の品質を評価する
すべての入力行に対して、エージェント評価では、一連の LLM ジャッジを使用して、エージェントの出力に関する品質のさまざまな側面を評価します。 各ジャッジは、Yes または No のスコアと、そのスコアの根拠となる説明を生成します (以下の例を参照)。
使用される LLM ジャッジの詳細については、 組み込みの AI ジャッジを参照してください。
ステップ 2: LLM ジャッジ評価を統合して品質問題の根本原因を特定する
LLM ジャッジの実行後、Agent Evaluation はその出力を分析し、全体の品質を評価して、ジャッジ全体の判定に基づき合格/不合格の品質スコアを決定します。 品質が不合格の場合、Agent Evaluation は不合格を引き起こした具体的な LLM ジャッジを特定し、修正案を提示します。
データは MLflow UI に表示され、mlflow.evaluate(...) 呼び出しで返されるデータフレームからも確認できます。 DataFrame にアクセスする方法の詳細については、 評価出力の確認 を参照してください。
次のスクリーンショットは、UI でのサマリー分析の例です。
要求をクリックして詳細を表示します。
内蔵AI評価システム
モザイク AI エージェント評価で提供される 組み込みの AI ジャッジの詳細については、組み込みの AI ジャッジ (MLflow 2) を参照してください。
次のスクリーンショットは、これらのジャッジが UI にどのように表示されるかの例です。
根本原因の特定方法
すべてのジャッジが合格の場合、品質は pass とみなされます。 いずれかのジャッジが不合格の場合、以下の順序リストに基づいて、最初に不合格となったジャッジが根本原因と特定されます。 この順序は、ジャッジの評価が因果関係を持つ場合が多いため採用されています。 たとえば、取得コンポーネントが適切なチャンクやドキュメントを取得できていないと、context_sufficiency が評価した場合、生成器は良い応答を合成できず、結果として correctness も不合格になる可能性があります。
グラウンドトゥルースが入力として提供されている場合、以下の順序が適用されます。
context_sufficiencygroundednesscorrectnesssafety-
guideline_adherence(guidelinesまたはglobal_guidelinesが提供されている場合) - 任意のカスタム定義 LLM ジャッジ
グラウンドトゥルースが入力として提供されていない場合、以下の順序が適用されます。
-
chunk_relevance- 少なくとも 1 つの関連するチャンクが存在するか? groundednessrelevant_to_querysafety-
guideline_adherence(guidelinesまたはglobal_guidelinesが提供されている場合) - 任意のカスタム定義 LLM ジャッジ
Databricks が LLM ジャッジの精度を維持・向上させる方法
Databricks は LLM ジャッジの品質向上に取り組んでいます。 品質は、LLM ジャッジが人間の評価者とどれほど一致するかを、次の指標で測定して評価されます。
- コーエンのカッパ(評価者間の一致の尺度)を増加させた。
- 精度の向上 (人間の評価者のラベルと一致する予測ラベルの割合)。
- F1 スコアの向上
- 偽陽性率の低下
- 偽陰性率の低下
これらの指標を測定するために、Databricks は学術および独自のデータセットから収集した多様で難易度の高い事例を用いて、顧客データセットを代表する形で最新の LLM ジャッジ手法と比較し、継続的な改善と高精度を実現しています。
Databricks が審査の品質をどのように測定し、継続的に向上させているかの詳細については、Databricks がエージェント評価で組み込みのLLMジャッジに対する大幅な改善を発表した内容を参照してください。
Python SDK を使用してジャッジを呼び出す
databricks-agents SDK には、ユーザー入力に関するジャッジを直接呼び出す API が含まれています。 これらの API を使用すれば、ジャッジの動作をすぐに簡単に試すことができます。
次のコードを実行して databricks-agents パッケージをインストールし、Python カーネルを再起動してください。
%pip install databricks-agents -U
dbutils.library.restartPython()
その後、次のコードをノートブックで実行し、必要に応じて編集することで、さまざまなジャッジを自身の入力で試すことができます。
from databricks.agents.evals import judges
SAMPLE_REQUEST = "What is MLflow?"
SAMPLE_RESPONSE = "MLflow is an open-source platform"
SAMPLE_RETRIEVED_CONTEXT = [
{
"content": "MLflow is an open-source platform, purpose-built to assist machine learning practitioners and teams in handling the complexities of the machine learning process. MLflow focuses on the full lifecycle for machine learning projects, ensuring that each phase is manageable, traceable, and reproducible."
}
]
SAMPLE_EXPECTED_RESPONSE = "MLflow is an open-source platform, purpose-built to assist machine learning practitioners and teams in handling the complexities of the machine learning process. MLflow focuses on the full lifecycle for machine learning projects, ensuring that each phase is manageable, traceable, and reproducible."
# You can also just pass an array of guidelines directly to guidelines, but Databricks recommends naming them with a dictionary.
SAMPLE_GUIDELINES = {
"english": ["The response must be in English", "The retrieved context must be in English"],
"clarity": ["The response must be clear, coherent, and concise"],
}
SAMPLE_GUIDELINES_CONTEXT = {
"retrieved_context": str(SAMPLE_RETRIEVED_CONTEXT)
}
# For chunk_relevance, the required inputs are `request`, `response` and `retrieved_context`.
judges.chunk_relevance(
request=SAMPLE_REQUEST,
response=SAMPLE_RESPONSE,
retrieved_context=SAMPLE_RETRIEVED_CONTEXT,
)
# For context_sufficiency, the required inputs are `request`, `expected_response` and `retrieved_context`.
judges.context_sufficiency(
request=SAMPLE_REQUEST,
expected_response=SAMPLE_EXPECTED_RESPONSE,
retrieved_context=SAMPLE_RETRIEVED_CONTEXT,
)
# For correctness, required inputs are `request`, `response` and `expected_response`.
judges.correctness(
request=SAMPLE_REQUEST,
response=SAMPLE_RESPONSE,
expected_response=SAMPLE_EXPECTED_RESPONSE
)
# For relevance_to_query, the required inputs are `request` and `response`.
judges.relevance_to_query(
request=SAMPLE_REQUEST,
response=SAMPLE_RESPONSE,
)
# For groundedness, the required inputs are `request`, `response` and `retrieved_context`.
judges.groundedness(
request=SAMPLE_REQUEST,
response=SAMPLE_RESPONSE,
retrieved_context=SAMPLE_RETRIEVED_CONTEXT,
)
# For guideline_adherence, the required inputs are `request`, `response` or `guidelines_context`, and `guidelines`.
judges.guideline_adherence(
request=SAMPLE_REQUEST,
response=SAMPLE_RESPONSE,
guidelines=SAMPLE_GUIDELINES,
# `guidelines_context` requires `databricks-agents>=0.20.0`. It can be specified with or in place of the response.
guidelines_context=SAMPLE_GUIDELINES_CONTEXT,
)
# For safety, the required inputs are `request` and `response`.
judges.safety(
request=SAMPLE_REQUEST,
response=SAMPLE_RESPONSE,
)
コストとレイテンシの評価方法
エージェント評価では、トークン数と実行待機時間が測定され、エージェントのパフォーマンスを理解するのに役立ちます。
トークンコスト
コストを評価するために、Agent Evaluation はトレース内のすべての LLM 生成呼び出しの総トークン数を計算します。 これは、トークン数が多いほどコストが高くなることから、おおよその総コストを表します。 トークン数は、trace が利用可能な場合にのみ計算されます。
model の呼び出し時に mlflow.evaluate() 引数が含まれている場合、トレースは自動的に生成されます。 評価データセットに trace 列を直接指定することもできます。
各行に対して次のトークン数が計算されます。
| "データ" フィールド | タイプ | 説明 |
|---|---|---|
total_token_count |
integer |
エージェントのトレース内のすべての LLM スパンにわたるすべての入力トークンと出力トークンの合計。 |
total_input_token_count |
integer |
エージェントのトレース内のすべての LLM スパンにわたるすべての入力トークンの合計。 |
total_output_token_count |
integer |
エージェントのトレース内のすべての LLM スパンにわたるすべての出力トークンの合計。 |
実行レイテンシ
トレースのアプリケーション全体の待機時間を秒単位で計算します。 レイテンシは、トレースが利用可能な場合にのみ計算されます。
model の呼び出し時に mlflow.evaluate() 引数が含まれている場合、トレースは自動的に生成されます。 評価データセットに trace 列を直接指定することもできます。
各行に対して次のレイテンシが計算されます。
| 名前 | 説明 |
|---|---|
latency_seconds |
トレースに基づくエンドツーエンドのレイテンシ |
MLflow 実行単位で品質、コスト、レイテンシのメトリックを集計する方法
行ごとの品質、コスト、レイテンシの評価をすべて計算した後、Agent Evaluation はこれらを MLflow 実行単位のメトリックに集約し、すべての入力行に対するエージェントの品質、コスト、レイテンシをまとめて記録します。
Agent Evaluation では、次のメトリックが生成されます。
| メトリックの名前 | タイプ | 説明 |
|---|---|---|
retrieval/llm_judged/chunk_relevance/precision/average |
float, [0, 1] |
すべての質問に対する chunk_relevance/precision の平均値 |
retrieval/llm_judged/context_sufficiency/rating/percentage |
float, [0, 1] |
context_sufficiency/rating が yes と判定された質問の割合 |
response/llm_judged/correctness/rating/percentage |
float, [0, 1] |
correctness/rating が yes と判定された質問の割合 |
response/llm_judged/relevance_to_query/rating/percentage |
float, [0, 1] |
relevance_to_query/rating が yes と判定された質問の割合 |
response/llm_judged/groundedness/rating/percentage |
float, [0, 1] |
groundedness/rating が yes と判定された質問の割合 |
response/llm_judged/guideline_adherence/rating/percentage |
float, [0, 1] |
guideline_adherence/rating が yes と判定された質問の割合 |
response/llm_judged/safety/rating/average |
float, [0, 1] |
safety/rating が yes と判定された質問の割合 |
agent/total_token_count/average |
int |
すべての質問に対する total_token_count の平均値 |
agent/input_token_count/average |
int |
すべての質問に対する input_token_count の平均値 |
agent/output_token_count/average |
int |
すべての質問に対する output_token_count の平均値 |
agent/latency_seconds/average |
float |
すべての質問に対する latency_seconds の平均値 |
response/llm_judged/{custom_response_judge_name}/rating/percentage |
float, [0, 1] |
{custom_response_judge_name}/rating が yes と判定された質問の割合 |
retrieval/llm_judged/{custom_retrieval_judge_name}/precision/average |
float, [0, 1] |
すべての質問に対する {custom_retrieval_judge_name}/precision の平均値 |
次のスクリーンショットは、メトリックが UI にどのように表示されるかを示しています。
LLM ジャッジを支えるモデルに関する情報
- LLM ジャッジは、Microsoft が運営する Azure OpenAI を含むサードパーティ サービスを使用して、生成 AI アプリケーションを評価する場合があります。
- Azure OpenAI については、Databricks は Abuse Monitoring (不正使用の監視) をオプトアウトしているため、プロンプトや応答は Azure OpenAI に保存されません。
- 欧州連合 (EU) ワークスペースでは、LLM ジャッジは EU 内でホストされているモデルを使用します。 その他のリージョンでは、米国でホストされているモデルが使用されます。
- パートナーを利用する AI 機能を無効にすると、LLM ジャッジがパートナーを利用するモデルを呼び出すのを防ぐことができます。 独自のモデルを提供することで、LLM ジャッジを引き続き使用できます。
- LLM ジャッジは、お客様が GenAI エージェント/アプリケーションを評価するのを支援することを目的としています。LLM ジャッジの出力は、LLM のトレーニング、改善、微調整には使用しないでください。