Schéma d'entrée d'Agent Evaluation (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 des information sur MLflow 3 sur ce sujet, consultez Création de datasets d'évaluation MLflow.
Cet article explique le schéma d'entrée requis par Agent Evaluation pour évaluer la qualité, le coût et la latence de votre application.
- Pendant le développement, l'évaluation se déroule hors ligne, et un ensemble d'évaluation est une entrée requise pour l'Agent Evaluation.
- Lorsqu'une application est en production, toutes les entrées pour l'Agent Evaluation proviennent de vos tables d'inférence ou des logs de production.
Le schéma d'entrée est identique pour les évaluations en ligne et hors ligne.
Pour des informations générales sur les ensembles d’évaluation, consultez Ensembles d’évaluation (MLflow 2).
Schéma d'entrée d'évaluation
Le tableau suivant présente le schéma d'entrée d'Agent Evaluation. Les deux dernières colonnes du tableau indiquent comment l'entrée est fournie à l'appel mlflow.evaluate(). Voir Fournir des entrées à une exécution d'évaluation pour plus de détails.
Colonne | Type de données | Description | ||
|---|---|---|---|---|
request_id | chaîne | Identifiant unique de la requête. | Facultatif | Facultatif |
demande | Consultez le Schéma de la demande. | Entrée de l'application à évaluer, question ou query de l'utilisateur. Par exemple, | Obligatoire | Obligatoire |
réponse | Voir le schéma de réponse. | Réponse générée par l'application en cours d'évaluation. | Généré par Agent Evaluation | Facultatif. Si non fourni, alors dérivé de la Trace. Soit |
expected_facts | tableau de chaînes | Une liste de faits attendus dans la sortie du modèle. Consultez les | Facultatif | Facultatif |
expected_response | chaîne | Vérité terrain (correcte) pour la requête d'entrée. Consultez les | Facultatif | Facultatif |
directives | Un dict ou une liste nommés de consignes auxquelles la sortie du modèle est censée se conformer. Consultez les | Facultatif | Facultatif | |
expected_retrieved_context | tableau | Tableau d'objets contenant le contexte récupéré attendu pour la requête (si l'application inclut une étape de récupération). Schéma de tableau | Facultatif | Facultatif |
retrieved_context | tableau | Résultats de récupération générés par le récupérateur dans l'application en cours d'évaluation. Si plusieurs étapes de récupération sont présentes dans l'application, il s'agit des résultats de récupération de la dernière étape (chronologiquement dans la trace). Schéma de tableau | Généré par Agent Evaluation | Facultatif. S'il n'est pas fourni, il est dérivé de la trace fournie. |
trace | Chaîne JSON de trace MLflow | Trace MLflow de l’exécution de l’application sur la requête correspondante. | Généré par Agent Evaluation | Facultatif. Soit |
expected_facts lignes directrices
Le champ expected_facts indique la liste des faits qui devrait apparaître dans toute réponse de modèle correcte pour la requête d'entrée spécifique. C'est-à-dire qu'une réponse de modèle est considérée comme correcte si elle contient ces faits, quelle que soit la façon dont la réponse est formulée.
En incluant uniquement les faits requis et en omettant les faits qui ne sont pas strictement nécessaires dans la réponse, l'Agent Evaluation fournit un signal plus robuste sur la qualité de la sortie.
Vous pouvez spécifier au plus un parmi expected_facts et expected_response. Si vous spécifiez les deux, une erreur sera signalée. Databricks recommande d’utiliser expected_facts, car il s’agit d’une ligne directrice plus spécifique qui aide l’Agent Evaluation à juger plus efficacement la qualité des réponses générées.
guidelines lignes directrices
Le champ guidelines spécifie un ensemble de directives auxquelles toute réponse correcte du modèle doit adhérer. guidelines peut être exprimé en deux formats :
- La liste de directives (
List[str]) fournit un ensemble unique de directives. - Les consignes nommées (
Dict[str, List[str]]) fournissent une correspondance entre un nom de consigne et un tableau de consignes pour ce nom. Les directives nommées requièrentdatabricks-agents >= 0.16.0.
Les directives peuvent faire référence à diverses caractéristiques de la réponse, y compris des éléments stylistiques ou liés au contenu. Pour obtenir le signal le plus robuste concernant le respect des directives, Databricks recommande d'utiliser le langage suivant :
- « La réponse doit... »
- « La réponse ne doit pas… »
- « La réponse peut éventuellement… »
Plus précisément, vous devriez vous référer directement à la requête et à la réponse et laisser le moins d'ambiguïté possible dans les directives. Pour les directives qui s'appliquent à l'ensemble de votre ensemble d'évaluation, comme s'assurer que les réponses ont un ton professionnel ou sont toujours en anglais, utilisez le paramètre global_guidelines dans la configuration de l'évaluateur comme suit :
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.",
# Note: You can also just pass an array to `guidelines`.
"guidelines": {
"english": ["The response must be in English"],
"clarity": ["The response must be clear, coherent, and concise"],
}
}
]
mlflow.evaluate(
data=pd.DataFrame(eval_set),
model_type="databricks-agent",
evaluator_config={
"databricks-agent": {
# Note: You can also just pass an array to `guidelines`.
"global_guidelines": {
"english": ["The response must be in English"],
"clarity": ["The response must be clear, coherent, and concise"],
}
}
}
)
expected_response lignes directrices
Le champ expected_response contient une réponse entièrement formée qui représente une référence pour les réponses correctes du modèle. Autrement dit, une réponse du modèle est jugée correcte si elle correspond au contenu informationnel de expected_response. En revanche, expected_facts ne répertorie que les faits qui doivent apparaître dans une réponse correcte et n'est pas une réponse de référence entièrement formée.
Similaire à expected_facts, expected_response ne devrait contenir que l'ensemble minimal de faits requis pour une réponse correcte. Le fait d'inclure uniquement les informations requises et d'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.
Vous pouvez spécifier au plus un parmi expected_facts et expected_response. Si vous spécifiez les deux, une erreur sera signalée. Databricks recommande d’utiliser expected_facts, car il s’agit d’une ligne directrice plus spécifique qui aide l’Agent Evaluation à juger plus efficacement la qualité des réponses générées.
Schéma pour la requête
Le schéma de requête peut être l'un des suivants :
- Un dictionnaire sérialisable arbitraire (par exemple,
Dict[str, Any]) - Si l'agent prend en charge le schéma d'achèvement de chat OpenAI, vous pouvez transmettre une chaîne de caractères simple. Ce format prend en charge uniquement les conversations à tour unique. Les chaînes simples sont converties au format
messagesavec"role": "user"avant d'être transmises à votre agent. Par exemple, une chaîne simple"What is MLflow?"est convertie en{"messages": [{"role": "user", "content": "What is MLflow?"}]}avant d'être transmise à votre agent.
Notez que les juges intégrés fonctionnent mieux avec n'importe quel format utilisant un schéma de complétion de chat OpenAI. Le schéma d’achèvement de chat OpenAI doit comporter un tableau d’objets comme messages parameter. Le champ messages peut encoder la conversation complète.
L'exemple suivant montre quelques options possibles dans la même colonne request du dataset d'évaluation :
import pandas as pd
data = {
"request": [
# Plain string. Plain strings are transformed to the `messages` format before being passed to your agent.
"What is the difference between reduceByKey and groupByKey in Spark?",
# OpenAI chat completion schema. Use the `messages` field for a single- or multi-turn chat.
{
"messages": [
{
"role": "user",
"content": "How can you minimize data shuffling in Spark?"
}
]
},
# SplitChatMessagesRequest. Use the `query` and `history` fields for a single- or multi-turn chat.
{
"query": "Explain broadcast variables in Spark. How do they enhance performance?",
"history": [
{
"role": "user",
"content": "What are broadcast variables?"
},
{
"role": "assistant",
"content": "Broadcast variables allow the programmer to keep a read-only variable cached on each machine."
}
]
},
# Arbitrary format. These must be JSON-serializable and are passed directly to your agent.
{
"message_history": [
{
"user_0": "What are broadcast variables?",
"assistant_0": "Broadcast variables allow the programmer to keep a read-only variable cached on each machine.",
}
],
"last_user_request": "How can you minimize data shuffling in Spark?"
},
],
"expected_response": [
"expected response for first question",
"expected response for second question",
"expected response for third question",
"expected response for fourth question",
]
}
eval_dataset = pd.DataFrame(data)
Schéma pour la réponse
Le schéma de réponse, similaire au schéma de requête, peut être l’un des suivants :
- Un dictionnaire sérialisable arbitraire (par exemple,
Dict[str, Any]). - Si l'agent prend en charge le schéma d'achèvement de chat OpenAI, vous pouvez transmettre une chaîne de caractères simple. Ce format prend en charge uniquement les conversations à tour unique. Les chaînes de caractères brutes sont converties au format
choices. Par exemple, une chaîne simple"MLFlow is a framework."est convertie en{"choices": [{"message": {"content": "MLFlow is a framework."}}]}.
Schéma pour les tableaux dans l'entrée d'évaluation
Le schéma des tableaux expected_retrieved_context et retrieved_context est illustré dans le tableau suivant :
Colonne | Type de données | Description | Application transmise en tant qu'argument d'entrée | Résultats générés précédemment fournis |
|---|---|---|---|---|
contenu | chaîne | Contenu du contexte récupéré. Chaîne de caractères dans n'importe quel format, tel que HTML, texte brut ou Markdown. | Facultatif | Facultatif |
doc_uri | chaîne | Identifiant unique (URI) du document parent dont le fragment est issu. | Obligatoire | Obligatoire |
Métriques de compute
Les colonnes du tableau suivant indiquent les données incluses dans l'entrée, et ✓ indique que la métrique est prise en charge lorsque ces données sont fournies.
Pour plus de détails sur la mesure de ces métriques, consultez Comment la qualité, le coût et la latence sont évalués par Agent Evaluation (MLflow 2).
Métriques calculées |
|
|
|
|
|
|---|---|---|---|---|---|
| ✓ | ✓ | ✓ | ||
| ✓ | ✓ | ✓ | ||
| ✓ | ✓ | ✓ | ||
| ✓ | ✓ | ✓ | ||
| ✓ | ✓ | ✓ | ||
| ✓ | ✓ | ✓ | ||
| ✓ | ✓ | ✓ | ||
| ✓ | ✓ | |||
| ✓ | ✓ | |||
| ✓ | ✓ | |||
| ✓ | ✓ |