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

回答と文脈の関連性を判断する

MLflow には、GenAI アプリケーションの関連性を評価するための 2 つの組み込み LLM ジャッジが用意されています。これらのジャッジは品質の問題の診断に役立ちます。コンテキストが関連していない場合、生成ステップでは役立つ応答を生成できません。

  • RelevanceToQuery : アプリのレスポンスがユーザーの入力に直接対応しているかどうかを評価します
  • RetrievalRelevance : アプリのレトリーバーから返された各ドキュメントが関連しているかどうかを評価します

例を実行するための前提条件

  1. MLflow と必要なパッケージをインストールする

    Python
    %pip install --upgrade "mlflow[databricks]>=3.4.0" openai "databricks-connect>=16.1"
    dbutils.library.restartPython()
  2. MLflow エクスペリメントを作成するには、環境のセットアップに関するクイックスタートに従ってください。

RelevanceToQuery裁判官

このスコアラーは、アプリのレスポンスが、無関係なトピックに逸脱することなく、ユーザーの入力に直接対処しているかどうかを評価します。

テストのために単一の入力でスコアラーを直接呼び出すことも、データセットの完全な評価を実行するためにスコアラーをmlflow.genai.evaluateに渡すこともできます。

要件:

  • トレース要件 : inputsoutputs はトレースのルート スパン上にある必要があります
Python
import mlflow
from mlflow.genai.scorers import RelevanceToQuery

assessment = RelevanceToQuery(name="my_relevance_to_query")(
inputs={"question": "What is the capital of France?"},
outputs="The capital of France is Paris.",
)
print(assessment)

RetrievalRelevance裁判官

このスコアラーは、アプリの取得者によって返された各ドキュメントが入力リクエストに関連しているかどうかを評価します。

要件:

  • トレース要件 : MLflow トレースには、 span_type が 1 に設定されたスパンが少なくとも 1 つ含まれている必要があります。 RETRIEVER
Python
from mlflow.genai.scorers import retrieval_relevance
import mlflow

# Get a trace from a previous run
trace = mlflow.get_trace("<your-trace-id>")

# Assess if each retrieved document is relevant
feedbacks = retrieval_relevance(trace=trace)
print(feedbacks)

RAGの例

以下は、リトリーバーを使用して RAG アプリケーションを作成し、評価する方法を示した完全な例です。

Python
import mlflow
from mlflow.genai.scorers import RetrievalRelevance
from mlflow.entities import Document
from typing import List

# Define a retriever function with proper span type
@mlflow.trace(span_type="RETRIEVER")
def retrieve_docs(query: str) -> List[Document]:
# Simulated retrieval - in practice, this would query a vector database
if "capital" in query.lower() and "france" in query.lower():
return [
Document(
id="doc_1",
page_content="Paris is the capital of France.",
metadata={"source": "geography.txt"}
),
Document(
id="doc_2",
page_content="The Eiffel Tower is located in Paris.",
metadata={"source": "landmarks.txt"}
)
]
else:
return [
Document(
id="doc_3",
page_content="Python is a programming language.",
metadata={"source": "tech.txt"}
)
]

# Define your app that uses the retriever
@mlflow.trace
def rag_app(query: str):
docs = retrieve_docs(query)
# In practice, you would pass these docs to an LLM
return {"response": f"Found {len(docs)} relevant documents."}

# Create evaluation dataset
eval_dataset = [
{
"inputs": {"query": "What is the capital of France?"}
},
{
"inputs": {"query": "How do I use Python?"}
}
]

# Run evaluation with RetrievalRelevance scorer
eval_results = mlflow.genai.evaluate(
data=eval_dataset,
predict_fn=rag_app,
scorers=[
RetrievalRelevance(
model="databricks:/databricks-gpt-oss-120b", # Optional. Defaults to custom Databricks model.
)
]
)

裁判官の力となるLLMを選択する

デフォルトでは、これらのジャッジは、GenAI 品質評価を実行するために設計された、Databricks がホストする LLM を使用します。ジャッジ定義内のmodel引数を使用して、ジャッジモデルを変更できます。モデルは<provider>:/<model-name>形式で指定する必要があります。ここで、 <provider>は LiteLLM 互換のモデル プロバイダーです。モデル プロバイダーとしてdatabricksを使用する場合、モデル名はサービス エンドポイント名と同じになります。

さまざまなジャッジモデルを提供することで、これらのジャッジをカスタマイズできます。

Python
from mlflow.genai.scorers import RelevanceToQuery, RetrievalRelevance

# Use different judge models
relevance_judge = RelevanceToQuery(
model="databricks:/databricks-gpt-5-mini" # Or any LiteLLM-compatible model
)

retrieval_judge = RetrievalRelevance(
model="databricks:/databricks-claude-opus-4-1"
)

# Use in evaluation
eval_results = mlflow.genai.evaluate(
data=eval_dataset,
predict_fn=rag_app,
scorers=[relevance_judge, retrieval_judge]
)

サポートされているモデルの一覧については、 MLflow のドキュメントを参照してください。

結果を解釈する

ジャッジは、次の Feedback オブジェクトを返します。

  • value : 文脈が適切であれば「はい」、そうでない場合は「いいえ」
  • rationale : 裁判官が文脈が関連していると判断した理由または関連していないと判断した理由の説明

次のステップ