Delen via


Demo van 10 minuten: Een GenAI-app evalueren

In deze quickstart wordt u begeleid bij het evalueren van een GenAI-toepassing met behulp van MLflow Evaluation. De GenAI-toepassing is een eenvoudig voorbeeld: het invullen van lege plekken in een zinsjabloon om grappig en kindvriendelijk te zijn, vergelijkbaar met het spel Mad Libs.

Voor een gedetailleerdere zelfstudie, zie Zelfstudie: Een GenAI-toepassing evalueren en verbeteren.

Wat u zult bereiken

Aan het einde van deze zelfstudie gaat u het volgende doen:

  1. Een evaluatiegegevensset maken voor geautomatiseerde kwaliteitsevaluatie
  2. Evaluatiecriteria definiëren met MLflow-scorers
  3. Evaluatie uitvoeren en resultaten bekijken met behulp van de MLflow-gebruikersinterface
  4. Herhalen en verbeteren door uw prompt en evaluatie opnieuw uit te voeren

Alle code op deze pagina, inclusief vereisten, is opgenomen in het voorbeeldnotitieblok.

Vereiste voorwaarden

  1. Installeer MLflow en vereiste pakketten.

    %pip install --upgrade "mlflow[databricks]>=3.1.0" openai
    dbutils.library.restartPython()
    
  2. Maak een MLflow-experiment. Als u een Databricks-notebook gebruikt, kunt u deze stap overslaan en het standaardnotitieblokexperiment gebruiken. Volg anders de quickstart voor de installatie van de omgeving om het experiment te maken en verbinding te maken met de MLflow Tracking-server.

Stap 1: Een zinsvoltooiingsfunctie maken

Maak eerst een eenvoudige functie waarmee zinsjablonen worden voltooid met behulp van een LLM.

  1. Initialiseer een OpenAI-client om verbinding te maken met door Databricks gehoste LLM's of LLM's die worden gehost door OpenAI.

    Door Databricks gehoste LLMs

    Gebruik MLflow om een OpenAI-client op te halen die verbinding maakt met door Databricks gehoste LLM's. Selecteer een model in de beschikbare basismodellen.

    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"
    

    OpenAI-hostende LLM's

    Gebruik de systeemeigen OpenAI SDK om verbinding te maken met door OpenAI gehoste modellen. Selecteer een model in de beschikbare OpenAI-modellen.

    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. Definieer de voltooiingsfunctie van uw zin:

    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}")
    

Zinspeltracering

Stap 2: Evaluatiegegevens maken

In deze stap maakt u een eenvoudige evaluatiegegevensset met zinsjablonen.

# 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)"
        }
    },
]

Stap 3: Evaluatiecriteria definiëren

In deze stap stelt u scorers in om de kwaliteit van de voltooiingen te evalueren op basis van het volgende:

  • Taalconsistentie: dezelfde taal als invoer.
  • Creativiteit: Grappige of creatieve reacties.
  • Veiligheid van kinderen: inhoud die geschikt is voor leeftijd.
  • Sjabloonstructuur: hiermee worden lege waarden ingevuld zonder de opmaak te wijzigen.
  • Inhoudsveiligheid: Geen schadelijke inhoud.

Voeg deze code toe aan uw bestand:

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
]

Stap 4: Evaluatie uitvoeren

Nu bent u klaar om de zinsgenerator te evalueren.

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

Stap 5: De resultaten bekijken

U kunt de resultaten bekijken in de interactieve celuitvoer of in de gebruikersinterface van het MLflow-experiment. Als u de gebruikersinterface van het experiment wilt openen, klikt u op de koppeling in de celresultaten.

Maak een koppeling naar de MLflow-experimentinterface vanuit de resultaten van notebookcellen.

Klik in de gebruikersinterface van het experiment op het tabblad Evaluaties .

Tabblad Evaluaties boven aan de gebruikersinterface van het MLflow-experiment.

Bekijk de resultaten in de gebruikersinterface om de kwaliteit van uw toepassing te begrijpen en ideeën voor verbetering te identificeren.

Beoordeling van zinsspel

Stap 6: De prompt verbeteren

Sommige resultaten zijn niet geschikt voor kinderen. De volgende code toont een herziene, specifiekere prompt.

# 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!"""

Stap 7: Evaluatie opnieuw uitvoeren met verbeterde prompt

Nadat u de prompt hebt bijgewerkt, voert u de evaluatie opnieuw uit om te zien of de scores zijn verbeterd.

# 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
)

Stap 8: Resultaten vergelijken in de MLflow-gebruikersinterface

Als u evaluatieuitvoeringen wilt vergelijken, gaat u terug naar de evaluatiegebruikersinterface en vergelijkt u de twee uitvoeringen. De vergelijkingsweergave helpt u te bevestigen dat uw promptverbeteringen hebben geleid tot betere uitvoer op basis van uw evaluatiecriteria.

Evaluatie van zinsspel

voorbeeldnotitieblok

Het volgende notitieboek bevat alle code op deze pagina.

Snelstartnotebook voor een GenAI-app evalueren

Notebook krijgen

Handleidingen en verwijzingen

Zie voor meer informatie over concepten en functies in deze handleiding:

  • Scorers : inzicht in hoe MLflow-scorers GenAI-toepassingen evalueren.