組み込み型AI審査システム
重要
この機能はパブリック プレビュー段階にあります。
この記事では、必要な入力と出力メトリックなど、Mosaic AI Agent Evaluation に組み込まれている各 AI ジャッジの詳細について説明します。
次も参照してください。
- エージェント評価 による品質、コスト、待機時間の評価方法
- LLM ジャッジをカスタマイズする
- Callable は Python SDK リファレンス を判断します
AI ジャッジの概要
手記
すべてのジャッジでグラウンド トゥルース ラベルが必要なわけではありません。 ラベルを必要としないジャッジは、エージェントを評価するための一連の要求しかない場合に役立ちます。
判事の名前 | 審査委員が評価する品質面 | 必要な入力 | グラウンド トゥルースが必要 |
---|---|---|---|
relevance_to_query |
応答アドレスはユーザーの要求に関連していますか? | response 、request |
いいえ |
groundedness |
生成された応答は、取得されたコンテキストで固定されていますか (幻覚ではありません)。 | response 、trace[retrieved_context] |
いいえ |
safety |
有害または有毒なコンテンツは応答に含まれますか? | response |
いいえ |
correctness |
生成された応答は(地上の真理と比較して)正確ですか? | response 、expected_response |
はい |
guideline_adherence |
生成された応答は、提供された質問ごとのガイドラインに準拠していますか? | request 、response 、guidelines |
はい |
global_guideline_adherence |
生成された応答はグローバル ガイドラインに準拠していますか? | request , response , global_guidelines (evaluator_config から) |
いいえ (ただし、global_guidelines が必要です) |
chunk_relevance |
取得コンポーネントは、ユーザーの要求に応えるのに役立つ (関連する) チャンクを見つけたか? 注: このジャッジは、取得された各チャンクに個別に適用され、チャンクごとにスコア & 根拠が生成されます。 これらのスコアは、関連するチャンクの % を表す各行の chunk_relevance/precision スコアに集計されます。 |
retrieved_context 、request |
いいえ |
document_recall |
レトリバーが見つけた既知の関連ドキュメントの数 | retrieved_context 、expected_retrieved_context[].doc_uri |
はい |
context_sufficiency |
レトリバーは、予想される応答を生成するのに十分な情報を持つドキュメントを見つけたか。 | retrieved_context 、expected_response |
はい |
手記
複数ターンの会話の場合、AI のジャッジは会話の最後のエントリのみを評価します。
AI ジャッジの出力
評価で使用される各ジャッジは、次の列を出力します。
データ フィールド | 型 | 説明 |
---|---|---|
response/llm_judged/{judge_name}/rating |
string |
ジャッジが合格した場合は yes 、ジャッジが失敗した場合は no します。 |
response/llm_judged/{judge_name}/rationale |
string |
yes または no に関する LLM の推論記述。 |
response/llm_judged/{judge_name}/error_message |
string |
この評価の計算中にエラーが発生した場合は、エラーの詳細がここに表示されます。 エラーがない場合、ここは NULL になります。 |
各ジャッジは、実行全体の集計メトリックも生成します。
メトリックの名前 | 型 | 説明 |
---|---|---|
response/llm_judged/safety/rating/average |
float, [0, 1] |
yes であると判断されたすべての評価の割合。 |
正確性
定義: エージェントは実際に正確な回答で応答しましたか?
グラウンド トゥルースが必要: はい、expected_facts
または expected_response
。
正確性は、エージェントの実際の応答をグラウンド・トゥルース・ラベルと比較し、ファクト・エラーを検出するのに適した方法です。
必要な入力
入力評価セットには、次の列が必要です。
request
mlflow.evaluate()
にmodel
パラメーターを指定していない場合は、response
します。- expected_facts または expected_response
重要
Databricks では、expected_response
の代わりに expected_facts
を使用することをお勧めします。 expected_facts
は、適切な対応に必要な最小限の事実セットを表し、対象分野の専門家が簡単にキュレーションできます。
必要な情報のみを含め、応答に厳密に要求されない情報を除外することで、Agent Evaluation は出力品質をより正確に評価できるようになります。
例
評価セットから正確なデータを用いる。
import mlflow
eval_set = [{
"request": "What is the difference between reduceByKey and groupByKey in Spark?",
"response": "reduceByKey aggregates data before shuffling, whereas groupByKey shuffles all data, making reduceByKey more efficient.",
"expected_facts": [
"reduceByKey aggregates data before shuffling",
"groupByKey shuffles all data",
]
}]
mlflow.evaluate(
data=eval_set,
model_type="databricks-agent",
evaluator_config={
"databricks-agent": {
"metrics": ["correctness"]
}
}
)
呼び出し可能なジャッジ SDKで正確性を確保します。
from databricks.agents.evals import judges
assessment = judges.correctness(
request="What is the difference between reduceByKey and groupByKey in Spark?",
response="reduceByKey aggregates data before shuffling, whereas groupByKey shuffles all data, making reduceByKey more efficient.",
expected_facts=[
"reduceByKey aggregates data before shuffling",
"groupByKey shuffles all data",
]
)
print(assessment)
応答が正しくない場合はどうすればよいですか?
エージェントが実際に不正確な回答で応答する場合は、次の手順を実行する必要があります。
- エージェントによって取得されたコンテキストが無関係か、または不自然であるかどうかを理解します。 RAG アプリケーションの場合は、コンテキスト不足 ジャッジを使用して、コンテキストが
expected_facts
またはexpected_response
を生成するのに十分かどうかを判断できます。 - 十分なコンテキストがある場合は、関連情報を含むようにプロンプトを調整します。
クエリへの関連性
定義: 応答は入力要求に関連していますか?
グラウンド トゥルースが必要: いいえ。
関連性により、エージェントの応答は、関連のないトピックに割り当てることなく、ユーザーの入力に直接対処できます。
必要な入力
入力評価セットには、次の列が必要です。
request
mlflow.evaluate()
にmodel
パラメーターを指定していない場合は、response
します。
例
評価セットからの関連性を使用します。
import mlflow
eval_set = [{
"request": "What is the capital of France?",
"response": "The capital of France is Paris."
}]
mlflow.evaluate(
data=eval_set,
model_type="databricks-agent",
evaluator_config={
"databricks-agent": {
"metrics": ["relevance_to_query"]
}
}
)
呼び出し可能なジャッジ SDK で関連性を使用します。
from databricks.agents.evals import judges
assessment = judges.relevance_to_query(
request="What is the capital of France?",
response="The capital of France is Paris."
)
print(assessment)
応答が関連しない場合の対処方法
エージェントが無関係な応答を提供する場合は、次の手順を検討してください。
- 要求に対するモデルの理解を評価し、それに応じてレトリバー、トレーニング データ、またはプロンプト命令を調整します。
グラウンデッドネス
定義: 応答は取得されたコンテキストと実際に一致していますか?
グラウンド トゥルースが必要: いいえ。
Groundedness は、エージェントの応答が取得されたコンテキストで提供される情報と一致しているかどうかを評価します。
必要な入力
入力評価セットには、次の列が必要です。
request
mlflow.evaluate()
にmodel
パラメーターを指定していない場合は、response
します。mlflow.evaluate()
の呼び出しでmodel
引数を使用しない場合は、retrieved_context[].content
します。
例一覧
評価セットからグラウンデッドネスを使用します。
import mlflow
eval_set = [{
"request": "What is the capital of France?",
"response": "The capital of France is Paris.",
"retrieved_context": [
{"content": "Paris is the capital city of France."}
]
}]
mlflow.evaluate(
data=eval_set,
model_type="databricks-agent",
evaluator_config={
"databricks-agent": {
"metrics": ["groundedness"]
}
}
)
呼び出し可能なジャッジ SDKを使って根拠づけを行います。
from databricks.agents.evals import judges
assessment = judges.groundedness(
request="What is the capital of France?",
response="The capital of France is Paris.",
retrieved_context=[
{"content": "Paris is the capital city of France."}
]
)
print(assessment)
応答に根拠がない場合はどうすればよいですか?
応答が基盤に基づいていない場合:
- 取得したコンテキストを確認して、予想される応答を生成するために必要な情報が含まれていることを確認します。
- コンテキストが不十分な場合は、関連するドキュメントを含むように取得メカニズムまたはデータセットを改善します。
- 応答の生成時に取得したコンテキストの使用に優先順位を付けるようモデルに指示するようにプロンプトを変更します。
ガイドラインの準拠
定義: 応答は提供されたガイドラインに従っていますか?
グラウンド トゥルースが必要: global_guidelines
を使っているときは、いいえ。 行単位の guidelines
を使用する場合ははい。
ガイドラインの準拠は、エージェントの応答がガイドラインに記載されている特定の制約または指示に従っているかどうかを評価します。
ガイドラインは次のように定義できます。
- 行単位: 特定の要求の応答は、その評価行に定義されているガイドラインに従う必要があります。
- グローバル: 要求に対するすべての応答は、グローバル ガイドラインに従う必要があります。
必要な入力
入力評価セットには、次の列が必要です。
request
mlflow.evaluate()
にmodel
パラメーターを指定していない場合は、response
します。- 構成で定義されている行ごとの
guidelines
またはglobal_guidelines
。
例
評価セットから行ごとのガイドライン準拠を使用します。
import mlflow
eval_set = [{
"request": "What is the capital of France?",
"response": "The capital of France is Paris.",
"guidelines": ["The response must be in English", "The response must be concise"]
}]
mlflow.evaluate(
data=eval_set,
model_type="databricks-agent",
evaluator_config={
"databricks-agent": {
"metrics": ["guideline_adherence"]
}
}
)
評価セットからのグローバルガイドラインへの準拠を活用します。
import mlflow
eval_set = [{
"request": "What is the capital of France?",
"response": "The capital of France is Paris.",
}]
mlflow.evaluate(
data=eval_set,
model_type="databricks-agent",
evaluator_config={
"databricks-agent": {
"metrics": ["guideline_adherence"],
"global_guidelines": ["The response must be in English", "The response must be concise"]
}
}
)
呼び出し可能なジャッジ SDK でガイドライン準拠を使用します。
from databricks.agents.evals import judges
assessment = judges.guideline_adherence(
request="What is the capital of France?",
response="The capital of France is Paris.",
guidelines=["The response must be in English", "The response must be concise"]
)
print(assessment)
応答がガイドラインに準拠していない場合はどうすればよいですか?
応答がガイドラインに違反した場合:
- 違反したガイドラインを特定し、エージェントがそれに準拠できなかった理由を分析します。
- プロンプトを調整して、特定のガイドラインへの準拠を強調するか、目的の動作に合った追加の例を使用してモデルを再トレーニングします。
- グローバル ガイドラインについては、エバリュエーター構成で正しく指定されていることを確認します。
安全
定義: 有害または有毒なコンテンツを回避しますか?
グラウンド トゥルースが必要: いいえ。
安全性により、エージェントの応答に有害、不快、または有毒なコンテンツが含まれていないことが保証されます。
必要な入力
入力評価セットには、次の列が必要です。
request
mlflow.evaluate()
にmodel
パラメーターを指定していない場合は、response
します。
例
評価セットから安全性を利用します。
import mlflow
eval_set = [{
"request": "What is the capital of France?",
"response": "The capital of France is Paris."
}]
mlflow.evaluate(
data=eval_set,
model_type="databricks-agent",
evaluator_config={
"databricks-agent": {
"metrics": ["safety"]
}
}
)
呼び出し可能なジャッジ SDKを安全に使用します。
from databricks.agents.evals import judges
assessment = judges.safety(
request="What is the capital of France?",
response="The capital of France is Paris."
)
print(assessment)
応答が安全でない場合はどうすればよいですか?
応答に有害なコンテンツが含まれている場合:
- 要求を分析して、誤って安全でない応答につながる可能性があるかどうかを特定します。 必要に応じて入力を変更します。
- 有害または有毒なコンテンツの生成を明示的に回避するように、モデルまたはプロンプトを調整します。
- ユーザーに到達する前に安全でない応答をインターセプトするために、コンテンツ フィルターなどの追加の安全メカニズムを採用します。
コンテキストの十分性
定義: 取得されたドキュメントは、予想される応答を生成するのに十分ですか?
グラウンド トゥルースが必要: はい、expected_facts
または expected_response
。
コンテキスト機能は、取得したドキュメントが、予想される応答を生成するために必要なすべての情報を提供するかどうかを評価します。
必要な入力
入力評価セットには、次の列が必要です。
request
mlflow.evaluate()
にmodel
パラメーターを指定していない場合は、response
します。mlflow.evaluate()
にmodel
パラメーターを指定していない場合は、retrieved_context[].content
します。
例
評価セットのコンテキストの十分性を活用します。
import mlflow
eval_set = [{
"request": "What is the capital of France?",
"response": "The capital of France is Paris.",
"retrieved_context": [
{"content": "Paris is the capital city of France."}
],
"expected_facts": [
"Paris"
]
}]
mlflow.evaluate(
data=eval_set,
model_type="databricks-agent",
evaluator_config={
"databricks-agent": {
"metrics": ["context_sufficiency"]
}
}
)
呼び出し可能なジャッジ SDK でコンテキストの十分さを使用します。
from databricks.agents.evals import judges
assessment = judges.context_sufficiency(
request="What is the capital of France?",
retrieved_context=[
{"content": "Paris is the capital city of France."}
]
)
print(assessment)
コンテキストが不十分な場合はどうすればよいですか?
コンテキストが不十分な場合:
- 必要なすべてのドキュメントが確実に含まれるように、取得メカニズムを強化します。
- モデル プロンプトを変更して、不足している情報を明示的に参照するか、関連するコンテキストに優先順位を付けます。
チャンクの関連性
定義: 取得されたチャンクは入力要求に関連していますか?
グラウンド トゥルースが必要: いいえ。
チャンクの関連性は、各チャンクが入力要求に関連するかどうかを測定します。
必要な入力
入力評価セットには、次の列が必要です。
request
mlflow.evaluate()
にmodel
パラメーターを指定していない場合は、retrieved_context[].content
します。
mlflow.evaluate()
の呼び出しで model
引数を使用しない場合は、retrieved_context[].content
または trace
も指定する必要があります。
例
評価セットのチャンク関連度精度を使用します。
import mlflow
eval_set = [{
"request": "What is the capital of France?",
"retrieved_context": [
{"content": "Paris is the capital of France."},
{"content": "France is a country in Europe."}
]
}]
mlflow.evaluate(
data=eval_set,
model_type="databricks-agent",
evaluator_config={
"databricks-agent": {
"metrics": ["chunk_relevance_precision"]
}
}
)
取得されたチャンクが無関係な場合の対処方法
無関係なチャンクが取得された場合:
- レトリバーの構成を評価し、関連性に優先順位を付けるためにパラメーターを調整します。
- より多様で正確な例を含むように、レトリバーのトレーニング データを絞り込みます。
ドキュメントの取り消し
定義: レトリバーが見つけた既知の関連ドキュメントの数。
は、検証済みデータが必要です: はい、expected_retrieved_context[].doc_uri
.
ドキュメント リコールは、グラウンド トゥルースでの関連ドキュメントの総数に対する、取得されたグラウンド トゥルース関連ドキュメントの割合を測定します。
必要な入力
入力評価セットには、次の列が必要です。
expected_retrieved_context[].doc_uri
さらに、model
の呼び出しで mlflow.evaluate()
引数を使用しない場合は、retrieved_context[].doc_uri
または trace
も指定する必要があります。
例一覧
評価セットからドキュメント リコールを使用します。
import mlflow
eval_set = [{
"request": "What is the capital of France?",
"expected_retrieved_context": [
{"doc_uri": "doc_123"},
{"doc_uri": "doc_456"}
],
"retrieved_context": [
{"doc_uri": "doc_123"}
]
}]
mlflow.evaluate(
data=eval_set,
model_type="databricks-agent",
evaluator_config={
"databricks-agent": {
"metrics": ["document_recall"]
}
}
)
このメトリックには、AI ジャッジを使用しないため、呼び出し可能なジャッジ SDK はありません。
ドキュメント リコールが低い場合の対処方法
リコールが低い場合:
- 基底真実データが関連するドキュメントを正確に反映していることを確認します。
- リトリーバーを改善するか、検索パラメーターを調整して再呼び出しを増やします。
カスタム ジャッジ
ユース ケースに固有の評価を実行するカスタム ジャッジを作成できます。 詳細については、「カスタム LLM ジャッジを作成する」をご覧ください。
カスタム ジャッジが生成する出力は、assessment_type
、ANSWER
、RETRIEVAL
によって異なります。
ANSWER 評価のためのカスタム LLM ジャッジ
ANSWER 評価のカスタム LLM ジャッジは、各質問の応答を評価します。
各評価の出力は次のとおり。
データ フィールド | 型 | 説明 |
---|---|---|
response/llm_judged/{assessment_name}/rating |
string |
yes または no 。 |
response/llm_judged/{assessment_name}/rationale |
string |
yes または no に関する LLM の推論記述。 |
response/llm_judged/{assessment_name}/error_message |
string |
このメトリックの計算中にエラーが発生した場合、エラーの詳細はここに表示されます。 エラーがない場合、ここは NULL になります。 |
評価セット全体について、次のメトリックが計算されます。
メトリックの名前 | 型 | 説明 |
---|---|---|
response/llm_judged/{assessment_name}/rating/percentage |
float, [0, 1] |
すべての質問において、{assessment_name} が yes と判断される割合。 |
取得評価のためのカスタム LLM ジャッジ
取得評価のカスタム LLM ジャッジは、すべての質問で取得された各チャンクを評価します。
各評価の出力は次のとおり。
データ フィールド | 型 | 説明 |
---|---|---|
retrieval/llm_judged/{assessment_name}/ratings |
array[string] |
チャンクごとの、yes または no に関するカスタム ジャッジの評価。 |
retrieval/llm_judged/{assessment_name}/rationales |
array[string] |
チャンクごとの、yes または no に関する LLM の推論記述。 |
retrieval/llm_judged/{assessment_name}/error_messages |
array[string] |
各チャンクごとに、このメトリックの計算にエラーがあった場合、エラーの詳細がここに出力され、その他の値は NULL になります。 エラーがない場合、ここは NULL になります。 |
retrieval/llm_judged/{assessment_name}/precision |
float, [0, 1] |
カスタムジャッジが yes として評価したすべての取得済みチャンクの割合。 |
評価セット全体について報告されるメトリックは次のとおり。
メトリックの名前 | 型 | 説明 |
---|---|---|
retrieval/llm_judged/{assessment_name}/precision/average |
float, [0, 1] |
すべての質問における {assessment_name}_precision の平均値 |