Aller au contenu principal

Schéma d'entrée d'Agent Evaluation (MLflow 2)

important

Databricks recommande d’utiliser MLflow 3 pour l’évaluation et le monitoring des applications GenAI. Cette page décrit MLflow 2 Agent Evaluation.

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

Application transmise en tant qu'argument d'entrée

Résultats générés précédemment fournis

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, {'messages': [{"role": "user", "content": "What is RAG"}]} ou « Qu'est-ce que la RAG ? ». Lorsque request est fourni en tant que chaîne, il sera transformé en messages avant d'être transmis à votre agent.

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 response, soit trace est requis.

expected_facts

tableau de chaînes

Une liste de faits attendus dans la sortie du modèle. Consultez les expected_facts consignes.

Facultatif

Facultatif

expected_response

chaîne

Vérité terrain (correcte) pour la requête d'entrée. Consultez les expected_response consignes.

Facultatif

Facultatif

directives

guidelines directives

Un dict ou une liste nommés de consignes auxquelles la sortie du modèle est censée se conformer. Consultez les guidelines consignes.

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 response, soit trace est requis.

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

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, {'messages': [{"role": "user", "content": "What is RAG"}]} ou « Qu'est-ce que la RAG ? ». Lorsque request est fourni en tant que chaîne, il sera transformé en messages avant d'être transmis à votre agent.

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 response, soit trace est requis.

expected_facts

tableau de chaînes

Une liste de faits attendus dans la sortie du modèle. Consultez les expected_facts consignes.

Facultatif

Facultatif

expected_response

chaîne

Vérité terrain (correcte) pour la requête d'entrée. Consultez les expected_response consignes.

Facultatif

Facultatif

directives

guidelines directives

Un dict ou une liste nommés de consignes auxquelles la sortie du modèle est censée se conformer. Consultez les guidelines consignes.

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 response, soit trace est requis.

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èrent databricks-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 :

Python
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 messages avec "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 :

Python
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

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

request

request et expected_response

request, expected_response, expected_retrieved_context et guidelines

request et expected_retrieved_context

request et guidelines

response/llm_judged/relevance_to_query/rating

response/llm_judged/safety/rating

response/llm_judged/groundedness/rating

retrieval/llm_judged/chunk_relevance_precision

agent/total_token_count

agent/input_token_count

agent/output_token_count

response/llm_judged/correctness/rating

retrieval/llm_judged/context_sufficiency/rating

retrieval/ground_truth/document_recall

response/llm_judged/guideline_adherence/rating

Métriques calculées

request

request et expected_response

request, expected_response, expected_retrieved_context et guidelines

request et expected_retrieved_context

request et guidelines

response/llm_judged/relevance_to_query/rating

response/llm_judged/safety/rating

response/llm_judged/groundedness/rating

retrieval/llm_judged/chunk_relevance_precision

agent/total_token_count

agent/input_token_count

agent/output_token_count

response/llm_judged/correctness/rating

retrieval/llm_judged/context_sufficiency/rating

retrieval/ground_truth/document_recall

response/llm_judged/guideline_adherence/rating