Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
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.
- Eine Einführung in die Auswertung und Überwachung von MLflow 3 finden Sie unter Evaluieren und Überwachen von KI-Agents.
- Informationen zum Migrieren zu MLflow 3 finden Sie unter Migrieren zu MLflow 3 aus der Agentauswertung.
- Informationen zu MLflow 3 zu diesem Thema finden Sie im Feedback von Domänenexperten.
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.
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:
- 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.
- 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:
- Rückschlusstabellen müssen auf dem Endpunkt aktiviert werden, der den Agent bedient.
- Jeder menschliche Prüfer muss Zugriff auf den Arbeitsbereich der Rezensions-App haben oder mit Ihrem Azure Databricks-Konto mit SCIM synchronisiert werden. Weitere Informationen finden Sie im nächsten Abschnitt: Einrichten von Berechtigungen für die Verwendung der Rezensions-App.
- 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.
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
- Erstellen einer Bezeichnungssitzung und Übermitteln zur Überprüfung, um ein Auswertungsdataset zu bezeichnen.
- Sammeln von Feedback zu Ablaufverfolgungen zum Bezeichnen von Ablaufverfolgungen. Beachten Sie, dass hierfür kein Live-Agent erforderlich ist.
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 
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.
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_factskann alsexpectationBezeichnung verwendet werden und stellt die Fakten dar, die in einer idealen Antwort vorhanden sein sollten. DieseexpectationBezeichnungen können wieder mit einem Auswertungsdatenset synchronisiert werden, sodass sie mitmlflow.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 Typfeedbackwerden nicht mit Auswertungsdatasets verwendet, da sie eine menschliche Auswertung einer bestimmten MLfLow-Ablaufverfolgung darstellen. Diese Bewertungen können mitmlflow.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.