Auswertungssätze synthetisieren
Wichtig
Dieses Feature befindet sich in der Public Preview.
Auf dieser Seite wird beschrieben, wie Sie einen qualitativ hochwertigen Evaluierungssatz zur Messung der Qualität Ihres Agenten generieren.
Das manuelle Erstellen eines Evaluierungssatzes ist häufig zeitaufwändig und es ist schwierig sicherzustellen, dass er alle Funktionen Ihres Agents abdeckt. Mosaik AI Agent Evaluation entfernt diese Barriere, indem automatisch ein repräsentativer Evaluierungssatz aus Ihren Dokumenten generiert wird, sodass Sie Ihren Agenten schnell mit einer guten Abdeckung von Testfällen auswerten können.
Generieren eines Evaluationsdatensatzes
Verwenden Sie zum Synthetisieren von Auswertungen für einen Agent, der das Abrufen von Dokumenten verwendet, die generate_evals_df
Methode, die Teil des databricks-agents
Python-Pakets ist. Ausführliche Informationen zur API finden Sie in der Python SDK-Referenz.
Diese Methode erfordert, dass Sie Ihre Dokumente als Pandas DataFrame oder spark DataFrame bereitstellen.
Der Eingabedatenrahmen muss über die folgenden Spalten verfügen:
content
: Der analysierte Dokumentinhalt als Zeichenfolge.doc_uri
: Der Dokument-URI.
Sie können drei zusätzliche Parameter verwenden, um die Erzeugung zu steuern:
num_evals
: Die Gesamtanzahl der Auswertungen, die in allen Dokumenten generiert werden sollen. Die Funktion versucht, die generierten Auswertungen gleichmäßig über alle Ihre Dokumente zu verteilen, unter Berücksichtigung ihrer Größe. Wennnum_evals
kleiner als die Anzahl der Dokumente ist, werden nicht alle Dokumente im Auswertungssatz behandelt.Ausführliche Informationen dazu, wie
num_evals
verwendet wird, um Auswertungen über die Dokumente hinweg zu verteilen, finden Sie unter How num_evals is used.agent_description
: Eine Aufgabenbeschreibung des Agentenquestion_guidelines
: Eine Reihe von Richtlinien, die helfen, die synthetische Fragegenerierung zu leiten. Dies ist eine Freiformzeichenfolge, die verwendet wird, um die Generierung aufzufordern. Sehen Sie sich das folgende Beispiel an.
Die Ausgabe von generate_evals_df
ist ein DataFrame mit den folgenden Spalten:
request_id
: Eine eindeutige Anforderungs-ID.request
: Die synthetisierte Anforderung.expected_facts
: Eine Liste der erwarteten Fakten in der Antwort. Diese Spalte hat dtype list[string].expected_retrieved_context
: Der Kontext, aus dem diese Auswertung synthetisiert wurde, einschließlich des Dokumentinhalts und der doc_uri.
Beispiel
Im folgenden Beispiel wird generate_evals_df
verwendet, um einen Auswertungssatz zu generieren, und ruft dann direkt mlflow.evaluate()
auf, um die Leistung von Meta Llama 3.1 für diesen Eval-Satz zu messen. Das Llama-3.1-Modell hat Ihre Dokumente noch nie gesehen. Deshalb ist es wahrscheinlich, dass es halluziniert. Dennoch ist dieses Experiment eine gute Baseline für Ihren benutzerdefinierten Agent.
%pip install mlflow mlflow[databricks] databricks-agents
dbutils.library.restartPython()
import mlflow
from databricks.agents.evals import generate_evals_df
import pandas as pd
import math
# `docs` can be a Pandas DataFrame or a Spark DataFrame with two columns: 'content' and 'doc_uri'.
docs = pd.DataFrame.from_records(
[
{
'content': f"""
Apache Spark is a unified analytics engine for large-scale data processing. It provides high-level APIs in Java,
Scala, Python and R, and an optimized engine that supports general execution graphs. It also supports a rich set
of higher-level tools including Spark SQL for SQL and structured data processing, pandas API on Spark for pandas
workloads, MLlib for machine learning, GraphX for graph processing, and Structured Streaming for incremental
computation and stream processing.
""",
'doc_uri': 'https://spark.apache.org/docs/3.5.2/'
},
{
'content': f"""
Spark’s primary abstraction is a distributed collection of items called a Dataset. Datasets can be created from Hadoop InputFormats (such as HDFS files) or by transforming other Datasets. Due to Python’s dynamic nature, we don’t need the Dataset to be strongly-typed in Python. As a result, all Datasets in Python are Dataset[Row], and we call it DataFrame to be consistent with the data frame concept in Pandas and R.""",
'doc_uri': 'https://spark.apache.org/docs/3.5.2/quick-start.html'
}
]
)
agent_description = """
The Agent is a RAG chatbot that answers questions about using Spark on Databricks. The Agent has access to a corpus of Databricks documents, and its task is to answer the user's questions by retrieving the relevant docs from the corpus and synthesizing a helpful, accurate response. The corpus covers a lot of info, but the Agent is specifically designed to interact with Databricks users who have questions about Spark. So questions outside of this scope are considered irrelevant.
"""
question_guidelines = """
# User personas
- A developer who is new to the Databricks platform
- An experienced, highly technical Data Scientist or Data Engineer
# Example questions
- what API lets me parallelize operations over rows of a delta table?
- Which cluster settings will give me the best performance when using Spark?
# Additional Guidelines
- Questions should be succinct, and human-like
"""
num_evals = 10
evals = generate_evals_df(
docs,
# The total number of evals to generate. The method attempts to generate evals that have full coverage over the documents
# provided. If this number is less than the number of documents, is less than the number of documents,
# some documents will not have any evaluations generated. See "How num_evals is used" below for more details.
num_evals=num_evals,
# A set of guidelines that help guide the synthetic generation. These are free-form strings that will be used to prompt the generation.
agent_description=agent_description,
question_guidelines=question_guidelines
)
display(evals)
# Evaluate the model using the newly generated evaluation set. After the function call completes, click the UI link to see the results. You can use this as a baseline for your agent.
results = mlflow.evaluate(
model="endpoints:/databricks-meta-llama-3-1-405b-instruct",
data=evals,
model_type="databricks-agent"
)
# Note: To use a different model serving endpoint, use the following snippet to define an agent_fn. Then, specify that function using the `model` argument.
# MODEL_SERVING_ENDPOINT_NAME = '...'
# def agent_fn(input):
# client = mlflow.deployments.get_deploy_client("databricks")
# return client.predict(endpoint=MODEL_SERVING_ENDPOINT_NAME, inputs=input)
In der folgenden Beispielausgabe werden die Spalten request_id
und expected_retrieved_context
nicht angezeigt.
Anfrage | erwartete_Fakten |
---|---|
Wofür wird Spark SQL in Apache Spark verwendet? | - Spark SQL wird für die SQL-Verarbeitung in Apache Spark verwendet. - Spark SQL wird für die strukturierte Datenverarbeitung in Apache Spark verwendet. |
Was sind einige allgemeine Tools, die von Apache Spark unterstützt werden, und welche Zwecke dienen sie? | – Spark SQL für SQL und strukturierte Datenverarbeitung. - Pandas-API auf Spark zur Verarbeitung von Pandas-Workloads. - MLlib für maschinelles Lernen. - GraphX für die Diagrammverarbeitung. - Strukturiertes Streaming für inkrementelle Berechnung und Datenstromverarbeitung. |
Was ist die primäre Abstraktion in Spark und wie werden Datasets in Python dargestellt? | - Die primäre Abstraktion in Spark ist ein Dataset. - In Python werden Spark-Datasets als DataFrame bezeichnet. - In Python werden Datasets als Dataset[Row] dargestellt |
Warum werden alle Datasets in Python als DataFrames in Spark bezeichnet? | - Datasets in Python werden als DataFrames in Spark bezeichnet, um die Konsistenz mit dem Datenframekonzept aufrechtzuerhalten. - Das Datenrahmenkonzept ist standard in Pandas und R. |
Verwendung von num_evals
num_evals
ist die Gesamtanzahl der für die Dokumentenmappe generierten Auswertungen. Die Funktion verteilt diese Auswertungen über die Dokumente, wobei Unterschiede in der Dokumentgröße berücksichtigt werden. Das heißt, es versucht, ungefähr die gleiche Anzahl von Fragen pro Seite in der Gesamten Dokumentenmappe beizubehalten.
Wenn num_evals
kleiner als die Anzahl der Dokumente ist, werden für einige Dokumente keine Auswertungen generiert. Die von der Funktion zurückgegebene DataFrame-Instanz enthält eine Spalte mit source_doc_ids
, was zum Generieren von Auswertungen verwendet wurde. Sie können diese Spalte verwenden, um wieder mit Ihrem ursprünglichen DataFrame zu verbinden und Evals für die übersprungenen Dokumente zu generieren.
Um num_evals
für eine gewünschte Abdeckung zu schätzen, stellen Sie die estimate_synthetic_num_evals
-Methode bereit.
from databricks.agents.evals import estimate_synthetic_num_evals
num_evals = estimate_synthetic_num_evals(
docs, # Same docs as before.
eval_per_x_tokens = 1000 # Generate 1 eval for every x tokens to control the coverage level.
)
Erstellen eines synthetischen Auswertungssatzes – Beispielnotizbuch
Im folgenden Notizbuch finden Sie Beispielcode zum Erstellen eines synthetischen Auswertungssatzes.
Beispielnotizbuch für synthetische Auswertungen
10 Minuten Demo zur Steigerung der Leistung des Agents
Das folgende Beispielnotizbuch veranschaulicht, wie Sie die Qualität Ihres Agents verbessern. Sie enthält die folgenden Schritte:
- Generieren Sie ein synthetisches Auswertungsdatenset.
- Erstellen und Auswerten eines Baseline-Agents
- Vergleichen Sie den Basis-Agent über mehrere Konfigurationen (z. B. verschiedene Eingabeaufforderungen) und grundlegende Modelle, um das richtige Gleichgewicht zwischen Qualität, Kosten und Latenz zu finden.
- Stellen Sie den Agent auf einer Web-UI bereit, damit Projektbeteiligte zusätzliches Feedback testen und bereitstellen können.
Verbessern Sie die Leistung des Agenten mithilfe des Notebooks für synthetische Daten.
Informationen zu den Modellen, die synthetische Daten unterstützen
- Synthetische Daten können Dienste von Drittanbietern verwenden, um Ihre GenAI-Anwendungen auszuwerten, einschließlich Azure OpenAI, betrieben von Microsoft.
- Bei Azure OpenAI hat Databricks die Missbrauchsüberwachung deaktiviert, sodass keine Eingabeaufforderungen oder Antworten mit Azure OpenAI gespeichert werden.
- Für Arbeitsbereiche der Europäischen Union (EU) verwenden synthetische Daten Modelle, die in der EU gehostet werden. Alle anderen Regionen verwenden Modelle, die in den USA gehostet werden.
- Das Deaktivieren von Azure AI-gestützten KI-gestützten Funktionen verhindert, dass der synthetische Datendienst Azure AI-gestützte Modelle aufruft.
- Daten, die an den synthetischen Datendienst gesendet werden, werden nicht für Modellschulungen verwendet.
- Synthetische Daten sollen Kunden helfen, ihre Agent-Anwendungen auszuwerten, und die Ausgaben sollten nicht verwendet werden, um ein LLM zu trainieren, zu verbessern oder zu optimieren.