Freigeben über


Verwenden Sie die Bewertungs-App für menschliche Bewertungen einer generativen KI-App (MLflow 2)

Von Bedeutung

Databricks empfiehlt die Verwendung von MLflow 3 für die Auswertung und Überwachung von GenAI-Apps. Diese Seite beschreibt die MLflow 2-Agent-Auswertung.

In diesem Artikel wird beschrieben, wie Sie die Rezensions-App verwenden, um Feedback von Fachexperten (SMEs) zu sammeln. Sie können die Rezensions-App verwenden, um Folgendes auszuführen:

  • Geben Sie Ihren Projektbeteiligten die Möglichkeit, mit einer vorproduktionsgeneriven KI-App zu chatten und Feedback zu geben.
  • Erstellen Sie ein Auswertungsdatenset, das von einer Delta-Tabelle im Unity-Katalog unterstützt wird.
  • Nutzen Sie SMEs zum Erweitern und Durchlaufen dieses Auswertungsdatasets.
  • Nutzen Sie SMEs, um Produktionsablaufverfolgungen zu bezeichnen und die Qualität Ihrer generativen KI-App zu verstehen.

Vorschau-Hero-Image der App ansehen.

Was geschieht in einer menschlichen Auswertung?

Die Databricks-Überprüfungs-App stellt eine Umgebung bereit, in der projektbeteiligte Personen mit ihr interagieren können , d. h. eine Unterhaltung haben, Fragen stellen, Feedback geben usw.

Es gibt zwei Hauptmethoden für die Verwendung der Rezensions-App:

  1. Chat mit dem Bot: Sammeln Sie Fragen, Antworten und Feedback in einer Auswertungstabelle, damit Sie die Leistung der generativen KI-App weiter analysieren können. Auf diese Weise trägt die Prüf-App dazu bei, die Qualität und Sicherheit der Antworten zu gewährleisten, die Ihre Anwendung bereitstellt.
  2. Bezeichnen Sie Antworten in einer Sitzung: Sammeln Sie Feedback und Erwartungen von SMEs in einer Bezeichnungssitzung, die unter einer MLfLow-Ausführung gespeichert werden. Sie können diese Bezeichnungen optional mit einem Auswertungsdatensatz synchronisieren.

Anforderungen

  • Entwickler müssen das databricks-agents-SDK installieren, um Berechtigungen einzurichten und die Bewertungs-App zu konfigurieren.
  %pip install databricks-agents
  dbutils.library.restartPython()
  • Für den Chat mit dem Bot:
  • Für Bezeichnungssitzungen:
    • Jeder menschliche Prüfer muss Zugriff auf den App-Arbeitsbereich "Überprüfen" haben.

Einrichten von Berechtigungen für die Verwendung der Rezensions-App

Hinweis

  • Um mit dem Bot zu chatten, benötigt ein menschlichen Prüfer keinen Zugriff auf den Arbeitsbereich.
  • Für eine Bezeichnungssitzung benötigt ein menschlichen Prüfer Zugriff auf den Arbeitsbereich.

Einrichten von Berechtigungen für "Chat mit dem Bot"

  • Für Benutzer, die keinen Zugriff auf den Arbeitsbereich haben, verwendet ein Kontoadministrator die SCIM-Bereitstellung auf Kontoebene, um Benutzer und Gruppen automatisch von Ihrem Identitätsanbieter mit Ihrem Azure Databricks-Konto zu synchronisieren. Sie können diese Benutzer und Gruppen auch manuell registrieren, um ihnen Zugriff zu gewähren, wenn Sie Identitäten in Databricks einrichten. Siehe hierzu Synchronisieren von Benutzern und Gruppen aus Microsoft Entra ID mithilfe von SCIM.
  • Für Benutzer, die bereits Zugriff auf den Arbeitsbereich haben, der die Rezensions-App enthält, ist keine zusätzliche Konfiguration erforderlich.

Das folgende Codebeispiel zeigt, wie Sie Benutzern die Berechtigung für das Modell erteilen, das über agents.deploybereitgestellt wurde. Der users Parameter akzeptiert eine Liste von E-Mail-Adressen.

from databricks import agents

# Note that <user_list> can specify individual users or groups.
agents.set_permissions(model_name=<model_name>, users=[<user_list>], permission_level=agents.PermissionLevel.CAN_QUERY)

Hinweis

Wenn Sie Berechtigungen für alle Benutzer im Arbeitsbereich erteilen möchten, legen Sie folgendes fest users=["users"].

Einrichten von Berechtigungen für Bezeichnungssitzungen

Benutzern werden automatisch die entsprechenden Berechtigungen (Schreibzugriff auf ein Experiment und Lesezugriff auf ein Dataset) erteilt, wenn Sie eine Bezeichnungssitzung erstellen und das argument assigned_users bereitstellen. Weitere Informationen finden Sie unter Erstellen einer Bezeichnungssitzung und Übermitteln zur Überprüfung unten.

Erstellen einer Rezensions-App

Automatische Verwendung von agents.deploy()

Wenn Sie mit agents.deploy() eine generative KI-App bereitstellen, wird die Überprüfungs-App automatisch aktiviert und bereitgestellt. Die Ausgabe des Befehls enthält die URL für die Überprüfungs-App. Informationen zur Bereitstellung der gen KI-App (auch als "Agent" bezeichnet) siehe Bereitstellen eines Agents für generative KI-Anwendungen.

Hinweis

Der Agent wird in der Benutzeroberfläche der Überprüfungs-App erst angezeigt, wenn der Endpunkt vollständig bereitgestellt wurde.

Link zur Überprüfungs-App in der Ausgabe des Notebookbefehls

Wenn Sie den Link zur Benutzeroberfläche der Rezensions-App verlieren, können Sie ihn mit get_review_app()finden.

import mlflow
from databricks.agents import review_app

# The review app is tied to the current MLFlow experiment.
mlflow.set_experiment("same_exp_used_to_deploy_the_agent")
my_app = review_app.get_review_app()
print(my_app.url)
print(my_app.url + "/chat") # For "Chat with the bot".

Manuelle Verwendung der Python-API

Der folgende Codeausschnitt veranschaulicht, wie Sie eine Review-App erstellen und sie einem Modell-Serving-Endpunkt zuordnen, um mit dem Bot zu chatten. Informationen zum Erstellen von Bezeichnungssitzungen finden Sie unter

from databricks.agents import review_app

# The review app is tied to the current MLFlow experiment.
my_app = review_app.get_review_app()

# TODO: Replace with your own serving endpoint.
my_app.add_agent(
    agent_name="llama-70b",
    model_serving_endpoint="databricks-meta-llama-3-3-70b-instruct",
)
print(my_app.url + "/chat") # For "Chat with the bot".

Konzepte

Datensätze

Ein Dataset ist eine Sammlung von Beispielen, die verwendet wird, um eine generative KI-Anwendung auszuwerten. Datasetdatensätze enthalten Eingaben für eine generative KI-Anwendung und optional Erwartungen (Grundwahrheitsbezeichnungen wie expected_facts oder guidelines). Datasets sind mit einem MLFlow-Experiment verknüpft und können direkt als Eingaben für mlflow.evaluate()verwendet werden. Datasets werden von Delta-Tabellen im Unity-Katalog unterstützt und erben die von der Delta-Tabelle definierten Berechtigungen. Informationen zum Erstellen eines Datasets finden Sie unter Erstellen eines Datasets.

Beispiel-Auswertungs-Datensatz, der nur die Spalten Eingaben und Erwartungen zeigt:

beispiel für Datasetbeispiel

Auswertungsdatensets weisen das folgende Schema auf:

Spalte Datentyp BESCHREIBUNG
dataset_record_id Schnur Der eindeutige Bezeichner für den Datensatz
Eingänge Schnur Eingaben zur Auswertung als JSON-serialisiertes dict<str, Any>-Element.
Erwartungshaltung Schnur Erwartete Werte als serialisiertes JSON-dict<str, Any>-Element. expectations hat reservierte Schlüssel, die für LLM-Schiedsrichter verwendet werden, wie guidelines, expected_facts und expected_response.
Erstellungszeit Zeitstempel Der Zeitpunkt, zu dem der Datensatz erstellt wurde.
created_by Schnur Der Benutzer, der den Datensatz erstellt hat.
Letzte Aktualisierungszeit Zeitstempel Der Zeitpunkt, zu dem der Datensatz zuletzt aktualisiert wurde.
last_updated_by Schnur Der Benutzer, der den Datensatz zuletzt aktualisiert hat.
Quelle Struktur Die Quelle des Datensatz-Eintrags.
source.human Struktur Definiert, wenn die Quelle von einem Menschen stammt.
source.human.user_name Schnur Der Name des Benutzers, der dem Datensatz zugeordnet ist.
source.document Schnur Definiert, als der Datensatz aus einem Dokument synthetisiert wurde.
source.document.doc_uri Schnur Der URI des Dokuments.
source.document.content Schnur Der Inhalt des Dokuments.
source.trace Schnur Definiert, wann der Datensatz aus einer Ablaufverfolgung erstellt wurde.
source.trace.trace_id Schnur Der eindeutige Bezeichner für die Ablaufverfolgung
Schlagwörter Karte Schlüsselwerttags für den Datasetdatensatz.

Beschriftungssitzungen

Eine LabelingSession ist eine endliche Gruppe von Ablaufverfolgungen oder Datasetdatensätzen, die von einem SME in der Benutzeroberfläche der Prüf-App bezeichnet werden. Spuren können von Rückschlusstabellen für eine Produktionsanwendung oder von einer Offline-Spur in MLFlow-Experimenten stammen. Die Ergebnisse werden als MLflow-Ausführung gespeichert. Labels werden als Assessment in MLFlow-Traces gespeichert. Bezeichnungen mit "Erwartungen" können wieder mit einem Auswertungsdatensatz synchronisiert werden.

Bezeichnungssitzung

Bewertungen und Bezeichnungen

Wenn eine Fachkraft eine Ablaufverfolgung bezeichnet, werden in die Ablaufverfolgung unter dem Feld Trace.info.assessments geschrieben. Assessments können zwei Typen aufweisen:

  • expectation: Bezeichnungen, die angeben, was eine korrekte Ablaufverfolgung enthalten sollte Beispiel: expected_facts kann als expectation Bezeichnung verwendet werden und stellt die Fakten dar, die in einer idealen Antwort vorhanden sein sollten. Diese expectation Bezeichnungen können wieder mit einem Auswertungsdatenset synchronisiert werden, sodass sie mit mlflow.evaluate()verwendet werden können.
  • feedback: Bezeichnungen, die einfaches Feedback zu einer Ablaufverfolgung darstellen, z. B. „Daumen nach oben“ und „Daumen nach unten“ oder Freiformkommentare. Assessment-Elemente vom Typ feedback werden nicht mit Auswertungsdatasets verwendet, da sie eine menschliche Auswertung einer bestimmten MLfLow-Ablaufverfolgung darstellen. Diese Bewertungen können mit mlflow.search_traces()gelesen werden.

Datensätze

In diesem Abschnitt wird erläutert, wie Sie die folgenden Schritte ausführen:

  • Erstellen Sie ein Dataset, und verwenden Sie es für die Auswertung ohne KMU.
  • Fordern Sie eine Bezeichnungssitzung von SMEs an, um ein besseres Auswertungsdataset zusammenzustellen.

Erstellen eines Datasets

Im folgenden Beispiel wird ein Datensatz erstellt und es werden Auswertungen eingefügt. Um das Dataset mit synthetischen Bewertungen zu initialisieren, siehe Synthetisieren von Bewertungssätzen.

from databricks.agents import datasets
import mlflow

# The following call creates an empty dataset. To delete a dataset, use datasets.delete_dataset(uc_table_name).
dataset = datasets.create_dataset("cat.schema.my_managed_dataset")

# Optionally, insert evaluations.
# The `guidelines` specified here are saved to the `expectations` field in the dataset.
eval_set = [{
  "request": {"messages": [{"role": "user", "content": "What is the capital of France?"}]},
  "guidelines": ["The response must be in English", "The response must be clear, coherent, and concise"],
}]

dataset.insert(eval_set)

Die Daten aus diesem Dataset werden von einer Delta-Tabelle im Unity-Katalog unterstützt und sind im Katalog-Explorer sichtbar.

Hinweis

Benannte Richtlinien (unter Verwendung eines Wörterbuchs) werden derzeit in einer Bezeichnungssitzung nicht unterstützt.

Verwenden eines Datasets für die Auswertung

Im folgenden Beispiel wird das Dataset aus Unity Catalog gelesen, wobei das Auswertungsdataset verwendet wird, um einen einfachen Systemprompt-Agent auszuwerten.

import mlflow
from mlflow.deployments import get_deploy_client

# Define a very simple system-prompt agent to test against our evaluation set.
@mlflow.trace(span_type="AGENT")
def llama3_agent(request):
  SYSTEM_PROMPT = """
    You are a chatbot that answers questions about Databricks.
    For requests unrelated to Databricks, reject the request.
  """
  return get_deploy_client("databricks").predict(
    endpoint="databricks-meta-llama-3-3-70b-instruct",
    inputs={
      "messages": [
        {"role": "system", "content": SYSTEM_PROMPT},
        *request["messages"]
      ]
    }
  )

evals = spark.read.table("cat.schema.my_managed_dataset")

mlflow.evaluate(
  data=evals,
  model=llama3_agent,
  model_type="databricks-agent"
)

Erstellen einer Bezeichnungssitzung und Übermitteln zur Überprüfung

Im folgenden Beispiel wird eine LabelingSession- aus dem oben genannten Datensatz mithilfe von ReviewApp.create_labeling_sessionerstellt, wobei die Sitzung so konfiguriert wird, dass guidelines und expected_facts von KMU unter Nutzung des Feldes ReviewApp.label_schemas erfasst werden. Sie können auch benutzerdefinierte Bezeichnungsschemas mit ReviewApp.create_label_schema erstellen.

Hinweis

  • Beim Erstellen einer Bezeichnungssitzung wird zugewiesenen Benutzern:
    • WRITE-Berechtigung für das MLflow-Experiment gestattet.
    • Erteilte ABFRAGE-Berechtigung für jedes Modell, das Endpunkte bedient, die der Überprüfungs-App zugeordnet sind.
  • Beim Hinzufügen eines Datasets zu einer Bezeichnungssitzung erhalten die zugewiesenen Benutzenden die SELECT-Berechtigung für die Delta-Tabellen der Datasets, die als Seeds der Bezeichnungssitzung verwendet werden.

Wenn Sie Berechtigungen für alle Benutzer im Arbeitsbereich erteilen möchten, legen Sie folgendes fest assigned_users=["users"].

from databricks.agents import review_app
import mlflow

# The review app is tied to the current MLFlow experiment.
my_app = review_app.get_review_app()

# You can use the following code to remove any existing agents.
# for agent in list(my_app.agents):
#     my_app.remove_agent(agent.agent_name)

# Add the llama3 70b model serving endpoint for labeling. You should replace this with your own model serving endpoint for your
# own agent.
# NOTE: An agent is required when labeling an evaluation dataset.
my_app.add_agent(
    agent_name="llama-70b",
    model_serving_endpoint="databricks-meta-llama-3-3-70b-instruct",
)

# Create a labeling session and collect guidelines and/or expected-facts from SMEs.
# Note: Each assigned user is given QUERY access to the serving endpoint above and write access.
# to the MLFlow experiment.
my_session = my_app.create_labeling_session(
  name="my_session",
  agent="llama-70b",
  assigned_users = ["email1@company.com", "email2@company.com"],
  label_schemas = [review_app.label_schemas.GUIDELINES, review_app.label_schemas.EXPECTED_FACTS]
)

# Add the records from the dataset to the labeling session.
# Note: Each assigned user above is given SELECT access to the UC delta table.
my_session.add_dataset("cat.schema.my_managed_dataset")

# Share the following URL with your SMEs for them to bookmark. For the given review app linked to an experiment, this URL never changes.
print(my_app.url)

# You can also link them directly to the labeling session URL, however if you
# request new labeling sessions from SMEs there will be new URLs. Use the review app
# URL above to keep a permanent URL.
print(my_session.url)

An dieser Stelle können Sie die oben genannten URLs an Ihre KMU senden.

Während die SMEs die Bezeichnung durchführt, können Sie den Status der Bezeichnung mit dem folgenden Code anzeigen:

mlflow.search_traces(run_id=my_session.mlflow_run_id)

Synchronisieren der Erwartungen für die Bezeichnungssitzung mit dem Dataset

Nachdem das KMU die Kennzeichnung abgeschlossen hat, können Sie die expectation-Labels mit LabelingSession.sync_expectations wieder mit dem Dataset synchronisieren. Beispiele für Bezeichnungen mit dem Typ expectation sind GUIDELINES, EXPECTED_FACTSoder Ihr eigenes benutzerdefiniertes Bezeichnungsschema, das einen Typ expectationhat.

my_session.sync_expectations(to_dataset="cat.schema.my_managed_dataset")
display(spark.read.table("cat.schema.my_managed_dataset"))

Sie können jetzt dieses Auswertungsdatenset verwenden:

eval_results = mlflow.evaluate(
    model=llama3_agent,
    data=dataset.to_df(),
    model_type="databricks-agent"
)

Feedback zu Spuren sammeln

In diesem Abschnitt wird beschrieben, wie Bezeichnungen für MLflow-Ablaufverfolgungsobjekte gesammelt werden, die aus einem der folgenden Objekte stammen können:

  • MLflow-Experiment oder -Ausführung
  • Eine Rückschlusstabelle.
  • MLflow Python Trace-Objekt

Sammeln von Feedback aus einem MLflow-Experiment oder einer MLflow-Ausführung

In diesen Beispielen wird ein Satz von Ablaufverfolgungen erstellt, die von Ihren SMEs gekennzeichnet werden sollen.

import mlflow
from mlflow.deployments import get_deploy_client

@mlflow.trace(span_type="AGENT")
def llama3_agent(messages):
  SYSTEM_PROMPT = """
    You are a chatbot that answers questions about Databricks.
    For requests unrelated to Databricks, reject the request.
  """
  return get_deploy_client("databricks").predict(
    endpoint="databricks-meta-llama-3-3-70b-instruct",
    inputs={"messages": [{"role": "system", "content": SYSTEM_PROMPT}, *messages]}
  )

# Create a trace to be labeled.
with mlflow.start_run(run_name="llama3") as run:
    run_id = run.info.run_id
    llama3_agent([{"content": "What is databricks?", "role": "user"}])
    llama3_agent([{"content": "How do I set up a SQL Warehouse?", "role": "user"}])

Sie können Bezeichnungen für die Ablaufverfolgung abrufen und daraus eine Bezeichnungssitzung erstellen. In diesem Beispiel wird eine Bezeichnungssitzung mit einem einzelnen Bezeichnungsschema eingerichtet, um Feedback zur Formalität für die Agent-Antwort zu sammeln. Die Bezeichnungen des fachlicher Ansprechpartners werden als Bewertung in der MLflow-Ablaufverfolgung gespeichert.

Weitere Arten von Schemaeingaben finden Sie unter databricks-agents SDK.

# The review app is tied to the current MLFlow experiment.
my_app = review_app.get_review_app()

# Use the run_id from above.
traces = mlflow.search_traces(run_id=run_id)

formality_label_schema = my_app.create_label_schema(
  name="formal",
  # Type can be "expectation" or "feedback".
  type="feedback",
  title="Is the response formal?",
  input=review_app.label_schemas.InputCategorical(options=["Yes", "No"]),
  instruction="Please provide a rationale below.",
  enable_comment=True
)

my_session = my_app.create_labeling_session(
  name="my_session",
  # NOTE: An `agent` is not required. If you do provide an Agent, your SME can ask follow up questions in a converstion and create new questions in the labeling session.
  assigned_users=["email1@company.com", "email2@company.com"],
  # More than one label schema can be provided and the SME will be able to provide information for each one.
  # We use only the "formal" schema defined above for simplicity.
  label_schemas=["formal"]
)
# NOTE: This copies the traces into this labeling session so that labels do not modify the original traces.
my_session.add_traces(traces)

# Share the following URL with your SMEs for them to bookmark. For the given review app, linked to an experiment, this URL will never change.
print(my_app.url)

# You can also link them directly to the labeling session URL, however if you
# request new labeling sessions from SMEs there will be new URLs. Use the review app
# URL above to keep a permanent URL.
print(my_session.url)

Nachdem die Kennzeichnung durch den fachlichen Ansprechpartner abgeschlossen ist, werden die resultierenden Ablaufverfolgungen und Bewertungen Teil der Ausführung, die der Bezeichnungssitzung zugeordnet ist.

mlflow.search_traces(run_id=my_session.mlflow_run_id)

Sie können diese Bewertungen jetzt verwenden, um Ihr Modell zu verbessern oder das Auswertungsdatenset zu aktualisieren.

Sammeln von Feedback aus einer Rückschlusstabelle

In diesem Beispiel wird gezeigt, wie Sie einer Bezeichnungssitzung Ablaufverfolgungen direkt aus der Rückschlusstabelle (Anforderungsnutzdatenprotokolle) hinzufügen.

# CHANGE TO YOUR PAYLOAD REQUEST LOGS TABLE
PAYLOAD_REQUEST_LOGS_TABLE = "catalog.schema.my_agent_payload_request_logs"
traces = spark.table(PAYLOAD_REQUEST_LOGS_TABLE).select("trace").limit(3).toPandas()

my_session = my_app.create_labeling_session(
  name="my_session",
  assigned_users = ["email1@company.com", "email2@company.com"],
  label_schemas=[review_app.label_schemas.EXPECTED_FACTS]
)

# NOTE: This copies the traces into this labeling session so that labels do not modify the original traces.
my_session.add_traces(traces)
print(my_session.url)

Beispiel-Notizbücher

Die folgenden Notebooks veranschaulichen die verschiedenen Methoden zur Verwendung von Datasets und Bezeichnungssitzungen in der Mosaic-AI-Agent-Auswertung.

Beispiel-Notebook für Überprüfungs-App

Notebook abrufen

Benutzerdefinierte Metriken für die Agent-Auswertung, Handbuch für Leitlinien und Bezeichnungen für Fachleute

Notebook abrufen