Juges IA intégrés (MLflow 2)
Databricks recommande d’utiliser MLflow 3 pour l’évaluation et le monitoring des applications GenAI. Cette page décrit MLflow 2 Agent Evaluation.
- Pour une introduction à l'évaluation et au monitoring sur MLflow 3, consultez Évaluer et surveiller les agents d'IA.
- Pour en savoir plus sur la migration vers MLflow 3, consultez Migration vers MLflow 3 depuis Agent Evaluation.
- Pour les informations MLflow 3 sur ce sujet, voir Évaluateurs et juges LLM.
Cet article présente les détails de chacun des juges IA intégrés à l'Agent Evaluation, y compris les entrées requises et les métriques de sortie.
Voir aussi :
- Comment la qualité, les coûts et la latence sont évalués par Agent Evaluation (MLflow 2)
- Personnaliser les juges IA (MLflow 2)
- Référence du SDK Python pour les juges appelables
Aperçu des juges IA
Tous les juges ne nécessitent pas d'étiquettes de vérité terrain. Les juges qui n’exigent pas d’étiquettes sont utiles lorsque vous n’avez qu’un ensemble de demandes pour évaluer votre agent.
Nom du juge | Aspect de qualité que le juge évalue | Entrées requises | Nécessite la vérité de terrain |
|---|---|---|---|
|
| Non, mais cela nécessite. | |
| La réponse générée adhère-t-elle aux directives fournies par question ? |
| Oui |
| La réponse générée est-elle précise (par rapport à la vérité terrain) ? |
| Oui |
| La réponse est-elle pertinente par rapport à la demande de l'utilisateur ? |
| Non |
|
| Oui | |
|
| Non | |
| Remarque : Ce juge est appliqué séparément à chaque segment récupéré, produisant un score et une justification pour chaque segment. Ces scores sont agrégés en un score de |
| Non |
| La réponse générée est-elle basée sur le contexte récupéré (sans hallucination) ? |
| Non |
| Combien de documents pertinents connus le récupérateur a-t-il trouvés ? |
| Oui |
Pour les conversations à plusieurs tours, les juges IA n’évaluent que la dernière entrée de la conversation.
Sorties du juge IA
Chaque juge utilisé dans l'évaluation affiche les colonnes suivantes :
Champ de données | Type | Description |
|---|---|---|
|
|
|
|
| Raisonnement écrit du LLM pour |
|
| S'il y a eu une erreur lors du calcul de cette évaluation, les détails de l'erreur se trouvent ici. S'il n'y a pas d'erreur, c'est NULL. |
Chaque juge produira également une métrique agrégée pour l'ensemble de l'exécution :
Nom de la métrique | Type | Description |
|---|---|---|
|
| Pourcentage de toutes les évaluations qui ont été jugées |
Conformité aux directives
Définition : la réponse est-elle conforme aux directives fournies ?
Requiert une vérité terrain : Non lors de l'utilisation de global_guidelines. Oui lors de l'utilisation de guidelines par ligne.
La conformité aux directives évalue si la réponse de l'agent suit des contraintes ou des instructions spécifiques fournies dans les directives.
Les directives peuvent être définies de l'une des manières suivantes :
- Par ligne : la réponse d'une demande spécifique doit être conforme aux directives définies sur cette ligne d'évaluation.
- globalement : toutes les réponses à toute requête doivent adhérer aux directives mondiales.
Entrées requises
L'ensemble d'évaluation d'entrée doit contenir les colonnes suivantes :
requestresponsesi vous n'avez pas spécifié lemodelparamètre àmlflow.evaluate().- par ligne
guidelinesouglobal_guidelinesdéfini dans la configuration. - [Juges invocables uniquement]
guidelines_contextpour fournir un contexte arbitraire au juge.- Cette fonctionnalité nécessite
databricks-agents>=0.20.0.
- Cette fonctionnalité nécessite
Exemples
Utiliser la conformité aux directives par ligne d'un ensemble d'évaluation :
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"]
}
}
)
Utilisez l'adhérence aux directives globales d'un ensemble d'évaluation :
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"]
}
}
)
Utilisez l'adhérence aux directives avec le SDK de juge invocable:
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"],
"grounded": ["The response must be grounded in the tool call result"],
},
# `guidelines_context` requires `databricks-agents>=0.20.0`
guidelines_context={
"tool_call_result": "{'country': 'France', 'capital': 'Paris'}",
},
)
print(assessment)
Que faire lorsque la réponse ne respecte pas les directives ?
Lorsque la réponse viole les directives :
- Identifiez la directive qui a été violée et analysez pourquoi l'agent n'a pas réussi à s'y conformer.
- Ajustez l'invite pour souligner l'adhésion à des directives spécifiques ou réentraînez le modèle avec des exemples supplémentaires qui correspondent au comportement souhaité.
- Pour les directives globales, assurez-vous qu’elles sont correctement spécifiées dans la configuration de l’évaluateur.
Exactitude
Définition : L’agent a-t-il répondu par une réponse factuellement exacte ?
**Nécessite la vérité terrain** : Oui, expected_facts[] expected_responseou.
L'exactitude compare la réponse réelle de l'agent à une étiquette de vérité terrain et constitue un bon moyen de détecter les erreurs factuelles.
Entrées requises
L'ensemble d'évaluation d'entrée doit contenir les colonnes suivantes :
requestresponsesi vous n'avez pas spécifié lemodelparamètre àmlflow.evaluate().- expected_facts ou expected_response
Databricks recommande d'utiliser expected_facts[] au lieu de expected_response. expected_facts[] représentent l'ensemble minimal de faits requis dans une réponse correcte et sont plus faciles à organiser pour les experts en la matière.
Si vous devez utiliser expected_response, il doit inclure uniquement l'ensemble minimal de faits requis pour qu'une réponse soit correcte. Si vous copiez une réponse d'une autre source, modifiez la réponse pour supprimer tout texte qui n'est pas requis pour qu'une réponse soit considérée comme correcte.
N'inclure que les informations requises et omettre les informations qui ne sont pas strictement nécessaires dans la réponse permet à l'Agent Evaluation de fournir un signal plus robuste sur la qualité de la sortie.
Exemples
Utilisez la justesse d’un ensemble d’évaluation :
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"]
}
}
)
Utilisez l'exactitude avec le SDK de juge invocable:
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)
Que faire lorsqu'une réponse est incorrecte ?
Lorsqu'un agent répond par une réponse factuellement inexacte, vous devez :
- Comprenez si le contexte récupéré par l'agent est non pertinent ou inexact. Pour les applications RAG, vous pouvez utiliser le juge Suffisance du contexte pour déterminer si le contexte est suffisant pour générer le
expected_factsou leexpected_response. - S'il y a suffisamment de contexte, ajustez l'invite pour inclure les informations pertinentes.
Pertinence par rapport à la query
Définition : la réponse est-elle pertinente par rapport à la demande d'entrée ?
Requiert une vérité terrain : Non.
La pertinence garantit que la réponse de l'agent aborde directement la saisie de l'utilisateur sans dévier vers des sujets non pertinents.
Entrées requises
L'ensemble d'évaluation d'entrée doit contenir les colonnes suivantes :
requestresponsesi vous n'avez pas spécifié lemodelparamètre àmlflow.evaluate().
Exemples
Utiliser la pertinence d'un ensemble d'évaluation :
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"]
}
}
)
Utiliser la pertinence avec le SDK de jugement appelable:
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)
Que faire lorsqu'une réponse n'est pas pertinente ?
Lorsque l'agent fournit une réponse non pertinente, suivez les étapes suivantes :
- Évaluez la compréhension du modèle de la requête et ajustez son récupérateur, ses données d'entraînement ou ses instructions d'invite en conséquence.
Suffisance du contexte
Définition : Les documents récupérés sont-ils suffisants pour produire la réponse attendue ?
**Nécessite la vérité terrain** : Oui, expected_facts expected_responseou.
La suffisance du contexte évalue si les documents récupérés fournissent toutes les informations nécessaires pour générer la réponse attendue.
Entrées requises
L'ensemble d'évaluation d'entrée doit contenir les colonnes suivantes :
requestresponsesi vous n'avez pas spécifié lemodelparamètre àmlflow.evaluate().expected_factsouexpected_response. Consultez les directivesexpected_factset les directivesexpected_response.retrieved_context[].contentsi vous n'avez pas spécifié lemodelparamètre àmlflow.evaluate().
Exemples
Utiliser la pertinence du contexte d'un ensemble d'évaluation :
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"]
}
}
)
Utilisez la suffisance du contexte avec le SDK de juge invocable:
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)
Que faire lorsque le contexte est insuffisant ?
Lorsque le contexte est insuffisant :
- Améliorez le mécanisme de récupération pour vous assurer que tous les documents nécessaires sont inclus.
- Modifiez l'invite du modèle pour faire explicitement référence aux informations manquantes ou pour prioriser le contexte pertinent.
Sécurité
Définition : la réponse évite-t-elle les contenus nocifs ou toxiques ?
Requiert une vérité terrain : Non.
La sécurité garantit que les réponses de l'agent ne contiennent pas de contenu nuisible, offensant ou toxique.
Entrées requises
L'ensemble d'évaluation d'entrée doit contenir les colonnes suivantes :
requestresponsesi vous n'avez pas spécifié lemodelparamètre àmlflow.evaluate().
Exemples
Utilisez la sécurité d'un ensemble d'évaluation :
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"]
}
}
)
Utilisez la sécurité avec le SDK de juge invocable:
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)
Que faire lorsque la réponse est dangereuse ?
Lorsque la réponse contient un contenu nocif :
- Analysez la requête pour identifier si elle pourrait par inadvertance mener à des réponses dangereuses. Modifiez l'entrée si nécessaire.
- Affinez le modèle ou le prompt pour éviter explicitement de générer du contenu nuisible ou toxique.
- Utilisez des mécanismes de sécurité supplémentaires, tels que des filtres de contenu, pour intercepter les réponses dangereuses avant qu'elles ne parviennent à l'utilisateur.
Ancrage
Définition : La réponse est-elle factuellement cohérente avec le contexte récupéré ?
Requiert une vérité terrain : Non.
L'ancrage évalue si la réponse de l'agent est alignée avec les informations fournies dans le contexte récupéré.
Entrées requises
L'ensemble d'évaluation d'entrée doit contenir les colonnes suivantes :
requestresponsesi vous n'avez pas spécifié lemodelparamètre àmlflow.evaluate().retrieved_context[].contentsi vous n'utilisez pas l'argumentmodeldans l'appel àmlflow.evaluate().
Exemples
Utilisez l'ancrage à partir d'un ensemble d'évaluation :
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"]
}
}
)
Utilisez l'ancrage avec le SDK de juge invocable:
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)
Que faire lorsque la réponse manque d'ancrage ?
Lorsque la réponse n'est pas fondée :
- Examinez le contexte récupéré pour vous assurer qu'il contient les informations nécessaires pour générer la réponse attendue.
- Si le contexte est insuffisant, améliorez le mécanisme de récupération ou le dataset pour inclure les documents pertinents.
- Modifiez l'invite pour demander au modèle de prioriser l'utilisation du contexte récupéré lors de la génération des réponses.
Pertinence des segments
Définition : les segments récupérés sont-ils pertinents pour la demande d’entrée ?
Requiert une vérité terrain : Non.
La pertinence des segments mesure si chaque segment est pertinent pour la demande d'entrée.
Entrées requises
L'ensemble d'évaluation d'entrée doit contenir les colonnes suivantes :
requestretrieved_context[].contentsi vous n'avez pas spécifié lemodelparamètre àmlflow.evaluate().
Si vous n'utilisez pas l'argument model dans l'appel à mlflow.evaluate(), vous devez également fournir retrieved_context[].content ou trace.
Exemples
Cet exemple utilise l'évaluateur de pertinence des segments avec une métrique de précision personnalisée pour calculer un score de précision au niveau des lignes. Pour plus de détails sur les métriques personnalisées, consultez Métriques personnalisées (MLflow 2)
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]
)
Utilisez chunk_relevance avec le SDK de juge invocable:
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)
Que faire lorsque les fragments récupérés sont non pertinents ?
Lorsque des segments non pertinents sont récupérés :
- Évaluez la configuration du récupérateur et ajustez les paramètres pour prioriser la pertinence.
- Affinez les données d’entraînement du récupérateur afin d’inclure des exemples plus diversifiés ou plus précis.
Rappel de document
Définition : combien des documents pertinents connus le récupérateur a-t-il trouvés ?
Nécessite une vérité terrain : Oui, expected_retrieved_context[].doc_uri.
Le rappel de document mesure la proportion de documents pertinents pour la vérité terrain qui ont été récupérés par rapport au nombre total de documents pertinents dans la vérité terrain.
Entrées requises
L'ensemble d'évaluation d'entrée doit avoir la colonne suivante :
expected_retrieved_context[].doc_uri
De plus, si vous n'utilisez pas l'argument model dans l'appel à mlflow.evaluate(), vous devez également fournir soit retrieved_context[].doc_uri, soit trace.
Exemples
Utilisez le rappel de document à partir d'un ensemble d'évaluation :
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"]
}
}
)
Il n’existe pas de SDK de juge appelable pour cette métrique, car elle n’utilise pas de juge AI.
Que faire lorsque le rappel de document est faible ?
Lorsque le rappel est faible :
- Vérifiez que les données de vérité terrain reflètent fidèlement les documents pertinents.
- Améliorez le récupérateur ou ajustez les paramètres de recherche pour augmenter le rappel.
Juges AI personnalisés
Vous pouvez également créer un juge personnalisé pour effectuer des évaluations spécifiques à votre cas d’utilisation.
Pour plus de détails, consultez :