Freigeben über


Erste Schritte: MLflow 3 für GenAI

Erste Schritte mit MLflow 3 für GenAI auf Databricks von:

  • Definieren einer von Mad Libs inspirierten Toy GenAI-Anwendung, die in einer Satzvorlage Leerzeichen einfüllt
  • Verfolgung der App zur Aufzeichnung von LLM-Anfragen, -Antworten und -Metriken
  • Bewertung der App anhand von Daten mit MLflow- und LLM-as-a-Judge-Funktionen
  • Sammeln von Feedback von menschlichen Bewertern

Einrichten der Umgebung

Installieren Sie die erforderlichen Pakete:

  • mlflow[databricks]: Verwenden Sie die neueste Version von MLflow, um weitere Features und Verbesserungen zu erhalten.
  • openai: Diese App verwendet den OpenAI-API-Client, um von Databricks gehostete Modelle aufzurufen.
%pip install -qq --upgrade "mlflow[databricks]>=3.1.0" openai
dbutils.library.restartPython()

Erstellen Sie ein MLflow-Experiment. Wenn Sie ein Databricks-Notizbuch verwenden, können Sie diesen Schritt überspringen und das Standard-Notizbuchexperiment verwenden. Folgen Sie andernfalls der Schnellstartanleitung der Umgebung , um das Experiment zu erstellen und eine Verbindung mit dem MLflow Tracking-Server herzustellen.

Ablaufverfolgung

Die unten angegebene Spielzeug-App ist eine einfache Satzvervollständigungsfunktion. Es verwendet die OpenAI-API, um einen vom Databricks gehosteten Foundation Model-Endpunkt aufzurufen. Um die App mit der MLflow-Ablaufverfolgung zu instrumentieren, fügen Sie zwei einfache Änderungen hinzu:

  • Aufruf mlflow.<library>.autolog() zur Aktivierung des automatischen Tracings
  • Instrumentieren Sie die Funktion mit @mlflow.trace, um zu definieren, wie Ablaufverfolgungen organisiert werden.
from databricks.sdk import WorkspaceClient
import mlflow

# Enable automatic tracing for the OpenAI client
mlflow.openai.autolog()

# Create an OpenAI client that is connected to Databricks-hosted LLMs.
w = WorkspaceClient()
client = w.serving_endpoints.get_open_ai_client()

# 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="databricks-claude-3-7-sonnet",  # 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}")
Input: Yesterday, ____ (person) brought a ____ (item) and used it to ____ (verb) a ____ (object)
Output: Yesterday, a sleep-deprived barista brought a leaf blower and used it to serenade a very confused squirrel.

Satzspielablaufverfolgung

Die Ablaufverfolgungsvisualisierung in der obigen Zellenausgabe zeigt Eingaben, Ausgaben und die Struktur der Aufrufe. Diese einfache App generiert eine einfache Ablaufverfolgung, enthält aber bereits wertvolle Erkenntnisse wie Eingabe- und Ausgabetokenanzahl. Komplexere Agenten generieren Ablaufverfolgungen mit geschachtelten Spannen, die Ihnen helfen, das Verhalten der Agenten zu verstehen und zu analysieren. Weitere Informationen zu Ablaufverfolgungskonzepten finden Sie in der Dokumentation zur Ablaufverfolgung.

Im obigen Beispiel wird eine Verbindung mit einer Databricks LLM über den OpenAI-Client hergestellt, sodass OpenAI autologging für MLflow verwendet wird. Die MLflow-Ablaufverfolgung ist in 20+ SDKs wie Anthropic, LangGraph und mehr integriert.

Evaluation

Mit MLflow können Sie automatisierte Auswertungen auf Datasets ausführen, um die Qualität zu beurteilen. MLflow Evaluation verwendet Scorer , die allgemeine Metriken wie Safety und Correctness oder vollständig benutzerdefinierte Metriken beurteilen können.

Erstellen eines Bewertungsdatasets

Definieren Sie unten ein Toyauswertungs-Dataset. In der Praxis würden Sie wahrscheinlich Datasets aus protokollierten Nutzungsdaten erstellen. Ausführliche Informationen zum Erstellen von Auswertungsdatensätzen finden Sie in der Dokumentation.

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

Definieren von Bewertungskriterien mithilfe von Scorern

Der folgende Code definiert die zu verwendenden Scorer:

MLflow unterstützt auch benutzerdefinierte codebasierte Scorer.

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

scorers = [
    # Safety is a built-in scorer:
    Safety(),
    # Guidelines are custom LLM-as-a-judge 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",
    ),
]

Auswertung ausführen

Die Funktion mlflow.genai.evaluate() führt den Agenten generate_game auf dem gegebenen eval_data aus und verwendet dann die Bewertungssysteme, um die Ausgaben zu beurteilen. Auswertungsprotokolle Metriken für das aktive MLflow-Experiment.

results = mlflow.genai.evaluate(
    data=eval_data,
    predict_fn=generate_game,
    scorers=scorers
)

mlflow.genai.evaluate() protokolliert Ergebnisse beim aktiven MLflow-Experiment. Sie können die Ergebnisse in der obigen interaktiven Zellausgabe oder in der MLflow Experiment UI überprüfen. Um die Experiment-Benutzeroberfläche zu öffnen, klicken Sie auf den Link in den Zellergebnissen, oder klicken Sie in der linken Randleiste auf "Experimente ".

Link zur Benutzeroberfläche des MLflow-Experiments aus Notizbuchzellenergebnissen

Klicken Sie auf der Benutzeroberfläche "Experiment" auf die Registerkarte "Auswertungen ".

Registerkarte

Überprüfen Sie die Ergebnisse in der Benutzeroberfläche, um die Qualität Ihrer Anwendung zu verstehen und Ideen zur Verbesserung zu identifizieren.

Spielrezension

Mithilfe der MLflow-Auswertung während der Entwicklung können Sie sich auf die Produktionsüberwachung vorbereiten, wo Sie die gleichen Scorer verwenden können, um den Produktionsdatenverkehr zu überwachen.

Menschliches Feedback

Während die oben genannte LLM-as-a-judge-Bewertung wertvoll ist, können Domänenexperten dabei helfen, Qualität zu bestätigen, richtige Antworten zu geben und Richtlinien für zukünftige Bewertungen zu definieren. Die nächste Zelle zeigt Code zur Verwendung der Review-App, um Traces mit Experten für Feedback zu teilen.

Sie können dies auch mithilfe der Benutzeroberfläche tun. Klicken Sie auf der Seite "Experiment" auf die Registerkarte " Bezeichnungen ", und verwenden Sie dann links die Registerkarten " Sitzungen " und "Schemas", um ein neues Bezeichnungsschema hinzuzufügen und eine neue Sitzung zu erstellen.

from mlflow.genai.label_schemas import create_label_schema, InputCategorical, InputText
from mlflow.genai.labeling import create_labeling_session

# Define what feedback to collect
humor_schema = create_label_schema(
    name="response_humor",
    type="feedback",
    title="Rate how funny the response is",
    input=InputCategorical(options=["Very funny", "Slightly funny", "Not funny"]),
    overwrite=True
)

# Create a labeling session
labeling_session = create_labeling_session(
    name="quickstart_review",
    label_schemas=[humor_schema.name],
)

# Add traces to the session, using recent traces from the current experiment
traces = mlflow.search_traces(
    max_results=10
)
labeling_session.add_traces(traces)

# Share with reviewers
print(f"✅ Trace sent for review!")
print(f"Share this link with reviewers: {labeling_session.url}")

Expertenprüfer können jetzt den Link "App überprüfen" verwenden, um Antworten basierend auf dem oben definierten Bezeichnungsschema zu bewerten.

Überprüfen der App-Benutzeroberfläche zum Sammeln von Expertenfeedback

Um das Feedback auf der MLflow-Benutzeroberfläche anzuzeigen, öffnen Sie das aktive Experiment, und klicken Sie auf die Registerkarte " Beschriftung" .

So arbeiten Sie programmgesteuert mit Feedback:

Nächste Schritte

In diesem Lernprogramm haben Sie eine GenAI-Anwendung zum Debuggen und Profilieren instrumentiert, LLM-as-a-judge-Bewertungen ausgeführt und menschliches Feedback gesammelt.

Um mehr über die Verwendung von MLflow zum Erstellen von GenAI-Agents und -Apps für die Produktion zu erfahren, beginnen Sie mit:

Beispiel-Notebook

Erste Schritte: MLflow 3 für GenAI

Notebook abrufen