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

組み込みのAIジャッジ

この記事では、AI Mosaic AIAgent Evaluation に組み込まれている各 ジャッジについて、必要な入力や出力メトリクスなど、詳細について説明します。

関連項目は次を参照してください。

AI審査員の概要

注記

すべての裁判官がグラウンドトゥルースラベルを必要とするわけではありません。 ラベルを必要としないジャッジは、エージェントを評価するためのリクエストがセットしかない場合に便利です。

審査員の氏名

審査員が評価する品質面

必須入力

グラウンドトゥルースが必要

global_guideline_adherence

生成されたレスポンスはグローバルガイドラインに準拠していますか?

requestresponseglobal_guidelines ( evaluator_configから)

いいえ、ただし必須です global_guidelines

guideline_adherence

生成された回答は、提供された質問ごとのガイドラインに準拠していますか?

requestresponseguidelines

あり

correctness

生成された応答は (グラウンド トゥルースと比較して) 正確ですか?

requestresponseexpected_facts[] 、または expected_response

あり

relevance_to_query

応答はユーザーの要求に対応していますか (関連性がありますか)。

request, response

いいえ

context_sufficiency

レトリーバーは、期待される応答を生成するのに十分な情報を含むドキュメントを見つけましたか?

requestretrieved_contextexpected_response

あり

safety

回答に有害または有毒なコンテンツが含まれていますか?

request, response

いいえ

chunk_relevance

レトリーバーは、ユーザーのリクエストに応答するのに役立つ(関連性のある)チャンクを見つけましたか?

注: このジャッジは、取得された各チャンクに個別に適用され、各チャンクのスコアと根拠が生成されます。 これらのスコアは、関連するチャンクの割合を表す各行の chunk_relevance/precision スコアに集計されます。

request, retrieved_context

いいえ

groundedness

生成された応答は、取得したコンテキストに基づいていますか(幻覚ではありません)?

requestresponsetrace[retrieved_context]

いいえ

document_recall

レトリーバーは既知の関連文書をいくつ見つけましたか?

retrieved_context, expected_retrieved_context[].doc_uri

あり

注記

マルチターンの会話の場合、AI の判断は会話の最後のエントリのみを評価します。

AIジャッジ出力

評価に使用された各審査員は、次の列を出力します。

データフィールド

タイプ

説明

response/llm_judged/{judge_name}/rating

string

yes ジャッジが合格した場合、 no ジャッジが不合格となった場合。

response/llm_judged/{judge_name}/rationale

string

LLMの書面による推論は、 yes または no

response/llm_judged/{judge_name}/error_message

string

この評価の計算でエラーが発生した場合は、エラーの詳細がこちらに表示されます。 エラーがない場合、これは NULL です。

各ジャッジは、実行全体に対する集計メトリクスも作成します。

メトリクス名

タイプ

説明

response/llm_judged/{judge_name}/rating/average

float, [0, 1]

すべての評価に対する yesと判断された割合。

ガイドラインの遵守

定義 : 回答は提供されたガイドラインに準拠していますか?

グラウンドトゥルースが必要 : global_guidelinesを使用する場合はいいえ。 [行ごとの guidelines] を使用する場合は [はい]

ガイドラインの遵守は、エージェントの応答がガイドラインに規定されている特定の制約または指示に従っているかどうかを評価します。

ガイドラインは、次のいずれかの方法で定義できます。

  • per-row: 特定のリクエストのレスポンスは、その評価ローで定義されたガイドラインに従う必要があります。
  • globally: リクエストに対するすべてのレスポンスは、グローバルガイドラインに準拠する必要があります。

必須入力

入力評価セットには、次の列が必要です。

  • request
  • response model パラメーターを mlflow.evaluate()に指定していない場合 .
  • 構成で定義されている行ごとの guidelines または global_guidelines

評価セットの行ごとのガイドラインの遵守を使用します。

Python
import mlflow

eval_set = [{
"request": "What is the capital of France?",
"response": "The capital of France is Paris.",
# You can also just pass an array of guidelines directly to guidelines, but Databricks recommends naming them with a dictionary.
"guidelines": {
"english": ["The response must be in English"],
"clarity": ["The response must be clear, coherent, and concise"],
}
}]

mlflow.evaluate(
data=eval_set,
model_type="databricks-agent",
evaluator_config={
"databricks-agent": {
"metrics": ["guideline_adherence"]
}
}
)

評価セットからグローバルガイドラインの遵守を使用します。

Python
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"]
}
}
)

callable judge SDKでガイドラインの遵守を使用します。

Python
from databricks.agents.evals import judges

assessment = judges.guideline_adherence(
request="What is the capital of France?",
response="The capital of France is Paris.",
# You can also just pass an array of guidelines directly to guidelines, but Databricks recommends naming them with a dictionary.
guidelines={
"english": ["The response must be in English"],
"clarity": ["The response must be clear, coherent, and concise"],
},
)
print(assessment)

対応がガイドラインに準拠していない場合はどうすればよいですか?

回答がガイドラインに違反している場合:

  • どのガイドラインに違反したかを特定し、エージェントがそれを遵守できなかった理由を分析します。
  • 特定のガイドラインへの準拠を強調するようにプロンプトを調整するか、目的の動作に一致する追加の例を使用してモデルを再トレーニングします。
  • グローバル ガイドラインについては、エバリュエーター構成で正しく指定されていることを確認してください。

正確性

定義 :エージェントは事実に基づいた正確な回答で応答しましたか?

グラウンドトゥルースが必要です :はい、 expected_facts[] または expected_response

正確性は、エージェントの実際の応答をグラウンドトゥルースラベルと比較し、事実の誤りを検出するための良い方法です。

必須入力

入力評価セットには、次の列が必要です。

important

Databricks では、expected_responseの代わりに expected_facts[] を使用することをお勧めします。expected_facts[] 、正しい回答に必要な最小限の事実のセットを表しており、対象分野の専門家がキュレーションしやすくなります。

expected_responseを使用する必要がある場合は、正しい応答に必要な最小限のファクトのセット のみ を含める必要があります。別のソースから回答をコピーする場合は、回答を編集して、回答が正しいと見なされるために 必要 のないテキストを削除します。

必要な情報のみを含め、回答に厳密に必要でない情報を省略することで、Agent Evaluation は出力品質に関するより堅牢なシグナルを提供できます。

評価セットの正確性を使用します。

Python
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"]
}
}
)

callable judge SDKで正確性を使用します。

Python
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
  • response model パラメーターを mlflow.evaluate()に指定していない場合 .

評価セットの関連性を使用します。

Python
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との関連性を使用します。

Python
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)

応答が適切でない場合はどうすればよいですか?

エージェントが無関係な応答をした場合は、次の手順を検討してください。

  • モデルが要求を理解しているかどうかを評価し、それに応じて取得者、トレーニング データ、またはプロンプト指示を調整します。

コンテキストの十分性

定義 :取得したドキュメントは、期待される応答を生成するのに十分ですか?

グラウンドトゥルースが必要です :はい、 expected_facts または expected_response

コンテキストの十分性は、取得されたドキュメントが期待される応答を生成するために必要なすべての情報を提供しているかどうかを評価します。

必須入力

入力評価セットには、次の列が必要です。

  • request
  • response model パラメーターを mlflow.evaluate()に指定していない場合 .
  • expected_facts または expected_responseexpected_factsガイドラインexpected_responseガイドラインを参照してください。
  • retrieved_context[].content model パラメーターを mlflow.evaluate()に指定していない場合 .

評価セットからコンテキストの十分性を使用します。

Python
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でコンテキストの十分性を使用します。

Python
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
  • response model パラメーターを mlflow.evaluate()に指定していない場合 .

評価セットから安全性を使用します。

Python
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"]
}
}
)

callable judge SDKでsafetyを使用します。

Python
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)

レスポンスが安全でない場合はどうすればよいですか?

レスポンスに有害なコンテンツが含まれている場合:

  • 要求を分析して、誤って安全でない応答につながる可能性があるかどうかを特定します。 必要に応じて入力を変更します。
  • モデルまたはプロンプトを調整して、有害または有害なコンテンツの生成を明示的に回避します。
  • コンテンツフィルターなどの追加の安全メカニズムを使用して、安全でない応答がユーザーに到達する前にインターセプトします。

グラウンディング性

定義 :応答は、取得したコンテキストと事実上一貫していますか?

グラウンドトゥルースが必要 :いいえ。

グラウンディングネスは、エージェントの応答が、取得したコンテキストで提供される情報と一致しているかどうかを評価します。

必須入力

入力評価セットには、次の列が必要です。

  • request
  • response model パラメーターを mlflow.evaluate()に指定していない場合 .
  • retrieved_context[].content mlflow.evaluate(). の呼び出しで model 引数を使用しない場合 .

評価セットの接地性を使用します。

Python
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"]
}
}
)

callable judge SDKでgroundednessを使用します。

Python
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)

応答が接地性を欠いている場合はどうすればよいですか?

応答が根拠がない場合:

  • 取得したコンテキストをレビューして、予想される応答を生成するために必要な情報が含まれていることを確認します。
  • コンテキストが不十分な場合は、取得メカニズムまたはデータセットを改善して、関連するドキュメントを含めます。
  • プロンプトを変更して、応答を生成するときに取得したコンテキストを優先的に使用するようにモデルに指示します。

チャンクの関連性

定義 : 取得したチャンクは入力要求に関連していますか?

グラウンドトゥルースが必要 :いいえ。

チャンクの関連性は、各チャンクが入力要求に関連しているかどうかを測定します。

必須入力

入力評価セットには、次の列が必要です。

  • request
  • retrieved_context[].content model パラメーターを mlflow.evaluate()に指定していない場合 .

mlflow.evaluate()の呼び出しで model 引数を使用しない場合は、 retrieved_context[].content または traceも指定する必要があります。

この例では、カスタム精度メトリクスを持つチャンク関連性ジャッジを使用して、行レベルの精度スコアをコンピュートします。 カスタムメトリクスの詳細については、「カスタムメトリクス」を参照してください

Python
import mlflow
from mlflow.evaluation import Assessment

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."},
{"content": "The best baguettes are in Nice."},
{"content": "Mount Everest is the highest mountain in the world."},
],
}]

def judged_precision_at_k(request, retrieved_context, k):
judged_precisions = [judges.chunk_relevance(request, [doc]) for doc in retrieved_context[:k]]
precision_at_k = sum([1 if judgement[0].value =='yes' else 0 for judgement in judged_precisions]) / k

rationales = [
f"""## Chunk ID {i+1}: `{retrieved_context[i]['doc_uri']}`
- **{judged_precisions[i][0].value}**: `{judged_precisions[i][0].rationale}`"""
for i in range(0, k-1)]

return Assessment(name=f'judged_precision_at_{k}', value=precision_at_k, rationale='\n'.join(rationales))

@metric
def judged_precision_at_3(request, retrieved_context):
k = 3
return judged_precision_at_k(request=request, retrieved_context=retrieved_context, k=k)

mlflow.evaluate(
data=eval_set,
model_type="databricks-agent",
evaluator_config={
"databricks-agent": {
"metrics": ["chunk_relevance"]
}
},
extra_metrics=[judged_precision_at_3]
)

呼び出し可能なジャッジSDKchunk_relevanceを使用します。

Python
from databricks.agents.evals import judges

# NOTE: This callable judge returns an assessment per item in the retrieved context.
assessments = judges.chunk_relevance(
request="What is the capital of France?",
retrieved_context=[
{"content": "Paris is the capital city of France."},
{"content": "The chicken crossed the road."},
]
)
print(assessments)

取得したチャンクが無関係な場合はどうすればよいですか?

無関係なチャンクが取得された場合:

  • レトリーバーの構成を評価し、関連性を優先するようにパラメーターを調整します。
  • レトリーバーのトレーニングデータを絞り込んで、より多様で正確な例を含めます。

ドキュメントのリコール

定義 :レトリーバーは既知の関連文書のうちいくつを見つけましたか?

グラウンドトゥルースが必要です :はい、 expected_retrieved_context[].doc_uri

ドキュメントリコールは、取得されたグラウンドトゥルース関連ドキュメントの割合を、グラウンドトゥルースの関連ドキュメントの総数と比較して測定します。

必須入力

入力評価セットには、次の列が必要です。

  • expected_retrieved_context[].doc_uri

また、 mlflow.evaluate()の呼び出しで model 引数を使用しない場合は、 retrieved_context[].doc_uri または traceも指定する必要があります。

評価セットからのドキュメント再現率を使用します。

Python
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はありません。

ドキュメントのリコールが少ない場合はどうすればよいですか?

再現率が低い場合:

  • グラウンドトゥルースデータが関連文書を正確に反映していることを確認します。
  • レトリーバーを改善するか、検索パラメーターを調整して再現率を高めます。

カスタムAIジャッジ

また、カスタムジャッジを作成して、ユースケースに固有の評価を実行することもできます。

詳細については、以下を参照してください。