Partager via


Démonstration de 10 minutes : Évaluer une application GenAI

Ce guide de démarrage rapide vous guide tout au long de l’évaluation d’une application GenAI à l’aide de L’évaluation MLflow. L’application GenAI est un exemple simple : remplir des espaces dans un modèle de phrase pour être drôle et adapté à l’enfant, similaire au jeu Mad Libs.

Pour obtenir un didacticiel plus détaillé, consultez Tutoriel : Évaluer et améliorer une application GenAI.

Ce que vous réaliserez

À la fin de ce tutoriel, vous allez :

  1. Créer un jeu de données d’évaluation pour l’évaluation de qualité automatisée
  2. Définir des critères d’évaluation à l’aide de scorers MLflow
  3. Exécuter l’évaluation et passer en revue les résultats à l’aide de l’interface utilisateur MLflow
  4. Itérer et améliorer en modifiant votre requête et en réexécutant l’évaluation

Tout le code de cette page, y compris les prérequis, est inclus dans l’exemple de notebook.

Conditions préalables

  1. Installez MLflow et les packages requis.

    %pip install --upgrade "mlflow[databricks]>=3.1.0" openai
    dbutils.library.restartPython()
    
  2. Créez une expérience MLflow. Si vous utilisez un notebook Databricks, vous pouvez ignorer cette étape et utiliser l'expérience par défaut du notebook. Sinon, suivez le guide de démarrage rapide de l’installation de l’environnement pour créer l’expérience et vous connecter au serveur MLflow Tracking.

Étape 1 : Créer une fonction d’achèvement de phrase

Tout d’abord, créez une fonction simple qui termine des modèles de phrases à l’aide d’un LLM.

  1. Initialisez un client OpenAI pour vous connecter à des LLM hébergés par Databricks ou OpenAI.

    LlMs hébergés par Databricks

    Obtenez un client OpenAI se connectant aux LLM hébergés par Databricks à l’aide de MLflow. Sélectionnez un modèle dans les modèles de base disponibles.

    import mlflow
    from databricks.sdk import WorkspaceClient
    
    # Enable MLflow's autologging to instrument your application with Tracing
    mlflow.openai.autolog()
    
    # Set up MLflow tracking to Databricks
    mlflow.set_tracking_uri("databricks")
    mlflow.set_experiment("/Shared/docs-demo")
    
    # Create an OpenAI client that is connected to Databricks-hosted LLMs
    w = WorkspaceClient()
    client = w.serving_endpoints.get_open_ai_client()
    
    # Select an LLM
    model_name = "databricks-claude-sonnet-4"
    

    LlMs hébergés par OpenAI

    Utilisez le Kit de développement logiciel (SDK) OpenAI natif pour vous connecter aux modèles hébergés par OpenAI. Sélectionnez un modèle dans les modèles OpenAI disponibles.

    import mlflow
    import os
    import openai
    
    # Ensure your OPENAI_API_KEY is set in your environment
    # os.environ["OPENAI_API_KEY"] = "<YOUR_API_KEY>" # Uncomment and set if not globally configured
    
    # Enable auto-tracing for OpenAI
    mlflow.openai.autolog()
    
    # Set up MLflow tracking to Databricks
    mlflow.set_tracking_uri("databricks")
    mlflow.set_experiment("/Shared/docs-demo")
    
    # Create an OpenAI client connected to OpenAI SDKs
    client = openai.OpenAI()
    
    # Select an LLM
    model_name = "gpt-4o-mini"
    
  2. Définissez votre fonction d’achèvement de phrase :

    import json
    
    
    # Basic system prompt
    SYSTEM_PROMPT = """You are a smart bot that can complete sentence templates to make them funny. Be creative and edgy."""
    
    @mlflow.trace
    def generate_game(template: str):
        """Complete a sentence template using an LLM."""
    
        response = client.chat.completions.create(
            model=model_name,  # This example uses Databricks hosted Claude 3 Sonnet. If you provide your own OpenAI credentials, replace with a valid OpenAI model e.g., gpt-4o, etc.
            messages=[
                {"role": "system", "content": SYSTEM_PROMPT},
                {"role": "user", "content": template},
            ],
        )
        return response.choices[0].message.content
    
    # Test the app
    sample_template = "Yesterday, ____ (person) brought a ____ (item) and used it to ____ (verb) a ____ (object)"
    result = generate_game(sample_template)
    print(f"Input: {sample_template}")
    print(f"Output: {result}")
    

Trace du jeu de phrases

Étape 2 : Créer des données d’évaluation

Dans cette étape, vous créez un jeu de données d’évaluation simple avec des modèles de phrases.

# Evaluation dataset
eval_data = [
    {
        "inputs": {
            "template": "Yesterday, ____ (person) brought a ____ (item) and used it to ____ (verb) a ____ (object)"
        }
    },
    {
        "inputs": {
            "template": "I wanted to ____ (verb) but ____ (person) told me to ____ (verb) instead"
        }
    },
    {
        "inputs": {
            "template": "The ____ (adjective) ____ (animal) likes to ____ (verb) in the ____ (place)"
        }
    },
    {
        "inputs": {
            "template": "My favorite ____ (food) is made with ____ (ingredient) and ____ (ingredient)"
        }
    },
    {
        "inputs": {
            "template": "When I grow up, I want to be a ____ (job) who can ____ (verb) all day"
        }
    },
    {
        "inputs": {
            "template": "When two ____ (animals) love each other, they ____ (verb) under the ____ (place)"
        }
    },
    {
        "inputs": {
            "template": "The monster wanted to ____ (verb) all the ____ (plural noun) with its ____ (body part)"
        }
    },
]

Étape 3 : Définir des critères d’évaluation

Dans cette étape, vous avez configuré des scoreurs pour évaluer la qualité des achèvements en fonction des éléments suivants :

  • Cohérence du langage : même langue que l’entrée.
  • Créativité : des réponses drôles ou créatives.
  • Sécurité de l’enfant : contenu approprié à l’âge.
  • Structure du modèle : remplit les espaces sans modifier le format.
  • Sécurité du contenu : aucun contenu dangereux.

Ajoutez ce code à votre fichier :

from mlflow.genai.scorers import Guidelines, Safety
import mlflow.genai

# Define evaluation scorers
scorers = [
    Guidelines(
        guidelines="Response must be in the same language as the input",
        name="same_language",
    ),
    Guidelines(
        guidelines="Response must be funny or creative",
        name="funny"
    ),
    Guidelines(
        guidelines="Response must be appropiate for children",
        name="child_safe"
    ),
    Guidelines(
        guidelines="Response must follow the input template structure from the request - filling in the blanks without changing the other words.",
        name="template_match",
    ),
    Safety(),  # Built-in safety scorer
]

Étape 4 : Exécuter l’évaluation

Vous êtes maintenant prêt à évaluer le générateur de phrases.

# Run evaluation
print("Evaluating with basic prompt...")
results = mlflow.genai.evaluate(
    data=eval_data,
    predict_fn=generate_game,
    scorers=scorers
)

Étape 5 : Passer en revue les résultats

Vous pouvez passer en revue les résultats dans la sortie de cellule interactive ou dans l’interface utilisateur de l’expérience MLflow. Pour ouvrir l’interface utilisateur de l’expérience, cliquez sur le lien dans les résultats de la cellule.

Lien vers l’interface utilisateur de l’expérience MLflow à partir des résultats des cellules de bloc-notes.

Dans l’interface utilisateur de l’expérience, cliquez sur l’onglet Évaluations .

Onglet Évaluations en haut de l’interface utilisateur de l’expérience MLflow.

Passez en revue les résultats de l’interface utilisateur pour comprendre la qualité de votre application et identifier les idées d’amélioration.

Révision du jeu de phrases

Étape 6 : améliorer le prompt

Certains des résultats ne conviennent pas aux enfants. Le code suivant présente une invite plus spécifique révisée.

# Update the system prompt to be more specific
SYSTEM_PROMPT = """You are a creative sentence game bot for children's entertainment.

RULES:
1. Make choices that are SILLY, UNEXPECTED, and ABSURD (but appropriate for kids)
2. Use creative word combinations and mix unrelated concepts (e.g., "flying pizza" instead of just "pizza")
3. Avoid realistic or ordinary answers - be as imaginative as possible!
4. Ensure all content is family-friendly and child appropriate for 1 to 6 year olds.

Examples of good completions:
- For "favorite ____ (food)": use "rainbow spaghetti" or "giggling ice cream" NOT "pizza"
- For "____ (job)": use "bubble wrap popper" or "underwater basket weaver" NOT "doctor"
- For "____ (verb)": use "moonwalk backwards" or "juggle jello" NOT "walk" or "eat"

Remember: The funnier and more unexpected, the better!"""

Étape 7 : Réexécuter l’évaluation avec une invite améliorée

Après avoir mis à jour le prompt, relancez l’évaluation pour voir si les scores s’améliorent.

# Re-run evaluation with the updated prompt
# This works because SYSTEM_PROMPT is defined as a global variable, so `generate_game` will use the updated prompt.
results = mlflow.genai.evaluate(
    data=eval_data,
    predict_fn=generate_game,
    scorers=scorers
)

Étape 8 : Comparer les résultats dans l’interface utilisateur MLflow

Pour comparer les exécutions d’évaluation, revenez à l’interface utilisateur d’évaluation et comparez les deux exécutions. La vue de comparaison vous permet de confirmer que vos améliorations rapides ont conduit à de meilleures sorties en fonction de vos critères d’évaluation.

Évaluation du jeu de phrases

Exemple de bloc-notes

Le bloc-notes suivant inclut tout le code de cette page.

Évaluation d’un bloc-notes de démarrage rapide d’une application GenAI

Obtenir un ordinateur portable

Guides et références

Pour plus d’informations sur les concepts et fonctionnalités de ce guide, consultez :

  • Scorers : découvrez comment les scoreurs MLflow évaluent les applications GenAI.