Développer des évaluateurs basés sur du code
Dans l'évaluation MLflow pour GenAI, les scorers personnalisés basés sur le code vous permettent de définir des métriques d'évaluation flexibles pour votre agent ou application IA.
Lorsque vous développez des évaluateurs, vous devrez souvent itérer rapidement. Utilisez ce workflow de développeur pour mettre à jour votre évaluateur sans réexécuter l'intégralité de votre application à chaque fois :
- Définir les données d'évaluation
- Générez des traces depuis votre application.
- Interrogez et stockez les traces résultantes
- Au fur et à mesure que vous itérez sur votre scorer, évaluez à l’aide des traces stockées
Le Notebook d'exemple contient tout le code de ce tutoriel.
Prérequis : configurez MLflow et définissez votre application
Mettez à jour mlflow[databricks] vers la dernière version pour la meilleure expérience GenAI, et installez openai car l'exemple d'application ci-dessous utilise le client OpenAI.
%pip install -q --upgrade "mlflow[databricks]>=3.1" "openai>=1.0.0"
dbutils.library.restartPython()
L'appel mlflow.openai.autolog() ci-dessous instrumente automatiquement l'application avec MLflow Tracing. Les traces enregistrées serviront d’entrées aux évaluateurs pendant l’évaluation.
import mlflow
mlflow.openai.autolog()
# If running outside of Databricks, set up MLflow tracking to Databricks.
# mlflow.set_tracking_uri("databricks")
# In Databricks notebooks, the experiment defaults to the notebook experiment.
# mlflow.set_experiment("/Shared/docs-demo")
Utilisez le package databricks-openai pour obtenir un client OpenAI qui se connecte aux LLM hébergés par Databricks. Sélectionnez un modèle parmi les modèles de fondation disponibles:
from databricks_openai import DatabricksOpenAI
# Create an OpenAI client that is connected to Databricks-hosted LLMs
client = DatabricksOpenAI()
# Select an LLM
model_name = "databricks-claude-sonnet-4"
Créez une application d'assistant de questions-réponses simple pour ce tutoriel :
@mlflow.trace
def sample_app(messages: list[dict[str, str]]):
# 1. Prepare messages for the LLM
messages_for_llm = [
{"role": "system", "content": "You are a helpful assistant."},
*messages,
]
# 2. Call LLM to generate a response
response = client.chat.completions.create(
model= model_name,
messages=messages_for_llm,
)
return response.choices[0].message.content
sample_app([{"role": "user", "content": "What is the capital of France?"}])
Étape 1 : Définir les données d'évaluation
Les données d'évaluation ci-dessous sont une liste de requêtes auxquelles le LLM doit répondre. Pour cette application, les requêtes peuvent être de simples questions ou des conversations avec plusieurs messages.
eval_dataset = [
{
"inputs": {
"messages": [
{"role": "user", "content": "How much does a microwave cost?"},
]
},
},
{
"inputs": {
"messages": [
{
"role": "user",
"content": "Can I return the microwave I bought 2 months ago?",
},
]
},
},
{
"inputs": {
"messages": [
{
"role": "user",
"content": "I'm having trouble with my account. I can't log in.",
},
{
"role": "assistant",
"content": "I'm sorry to hear that you're having trouble with your account. Are you using our website or mobile app?",
},
{"role": "user", "content": "Website"},
]
},
},
]
Étape 2 : générer des traces depuis votre application
Utilisez mlflow.genai.evaluate() pour générer des traces depuis l'application. Puisque evaluate() nécessite au moins un évaluateur, définissez un évaluateur de substitution pour cette génération initiale de traces :
from mlflow.genai.scorers import scorer
@scorer
def placeholder_metric() -> int:
# placeholder return value
return 1
Exécuter l'évaluation à l'aide de l'évaluateur de remplacement :
eval_results = mlflow.genai.evaluate(
data=eval_dataset,
predict_fn=sample_app,
scorers=[placeholder_metric]
)
Après avoir exécuté le code ci-dessus, vous devriez avoir une trace dans votre expérimentation pour chaque ligne de votre dataset d'évaluation. Les Databricks Notebooks affichent également les visualisations de trace dans le cadre des résultats des cellules. La réponse du LLM générée par le sample_app lors de l'évaluation apparaît dans le champ **Outputs** de l'interface utilisateur Trace du notebook et dans la colonne **Response** de l'interface utilisateur d'Experimentation MLflow.

Étape 3 : Interroger et stocker les traces résultantes
Stockez les traces générées dans une variable locale. La fonction mlflow.search_traces() renvoie un DataFrame Pandas de traces.
generated_traces = mlflow.search_traces(run_id=eval_results.run_id)
generated_traces
Étape 4 : Lorsque vous itérez sur votre évaluateur, appelez evaluate() en utilisant les traces stockées
Passez le DataFrame Pandas de traces directement à evaluate() comme dataset d'entrée. Cela vous permet d'itérer rapidement sur votre métrique sans avoir à réexécuter votre application. Le code ci-dessous exécute un nouvel évaluateur sur le generated_traces précalculé.
from mlflow.genai.scorers import scorer
@scorer
def response_length(outputs: str) -> int:
# Example metric.
# Implement your actual metric logic here.
return len(outputs)
# Note the lack of a predict_fn parameter.
mlflow.genai.evaluate(
data=generated_traces,
scorers=[response_length],
)
Exemple de Notebook
Le Notebook suivant inclut l'ensemble du code sur cette page.
Flux de travail du développeur pour les évaluateurs basés sur le code pour l'évaluation MLflow
Ressources supplémentaires
- Évaluateurs LLM personnalisés — Découvrez l’évaluation sémantique à l’aide des métriques LLM en tant que juge, qui peuvent être plus simples à définir que les évaluateurs basés sur le code.
- Exécutez les évaluateurs en production — Déployez vos évaluateurs pour un monitoring continu.
- Créez des datasets d'évaluation – Créez des données de test pour vos scoreurs.
- Référence du scoreur basé sur le code — Référence pour
@scoreretScorer, y compris les signatures, les entrées, les sorties, la dénomination des métriques, la gestion des erreurs et l'accès aux secrets.