Syntetisera utvärderingsuppsättningar
Viktig
Den här funktionen finns i offentlig förhandsversion.
Den här sidan beskriver hur du syntetiskt genererar en högkvalitativ utvärderingsuppsättning för att mäta agentens kvalitet.
Det är ofta tidskrävande att skapa en utvärderingsuppsättning manuellt, och det är svårt att se till att den täcker alla funktioner i din agent. Mosaic AI Agent Evaluation tar bort den här barriären genom att automatiskt generera en representativ utvärderingsuppsättning från dina dokument, så att du snabbt kan utvärdera din agent med god täckning av testfall.
Generera en utvärderingsuppsättning
Om du vill syntetisera utvärderingar för en agent som använder dokumenthämtning använder du metoden generate_evals_df
som ingår i databricks-agents
Python-paketet. Mer information om API:et finns i Python SDK-referens.
Den här metoden kräver att du anger dina dokument som en Pandas DataFrame eller en Spark DataFrame.
Indataramen måste ha följande kolumner:
-
content
: Det tolkade dokumentinnehållet som en sträng. -
doc_uri
: Dokumentets URI.
Du kan använda ytterligare tre parametrar för att styra genereringen:
num_evals
: Det totala antalet utvärderingar som ska genereras i alla dokument. Funktionen försöker att distribuera utvärderingar som genererats över alla dina dokument, och tar hänsyn till storleken på dem. Omnum_evals
är mindre än antalet dokument kommer inte alla dokument att omfattas av utvärderingsuppsättningen.Mer information om hur
num_evals
används för att distribuera utvärderingar i dokumenten finns i Hur num_evals används.agent_description
: En uppgiftsbeskrivning av agentenquestion_guidelines
: En uppsättning riktlinjer som hjälper till att vägleda den syntetiska frågegenereringen. Det här är en friformssträng som ska användas för att initiera genereringen. Se exemplet nedan.
Utdata från generate_evals_df
är en DataFrame med följande kolumner:
-
request_id
: Ett unikt begärande-ID. -
request
: Den syntetiserade begäran. -
expected_facts
: En lista över förväntade fakta i svaret. Den här kolumnen har dtype list[string]. -
expected_retrieved_context
: Kontexten som utvärderingen har syntetiserats från, inklusive dokumentinnehållet och doc_uri.
Exempel
I följande exempel används generate_evals_df
för att generera en utvärderingsuppsättning och anropar sedan direkt mlflow.evaluate()
för att mäta prestanda för Meta Llama 3.1 på den här eval-uppsättningen. Llama 3.1-modellen har aldrig sett dina dokument, så det är sannolikt att den kan framkalla hallucinationer. Trots detta är det här experimentet en bra referenspunkt för din anpassade 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)
I följande exempelutdata visas inte kolumnerna request_id
och expected_retrieved_context
.
begäran | förväntade_fakta |
---|---|
Vad används Spark SQL för i Apache Spark? | – Spark SQL används för SQL-bearbetning i Apache Spark. – Spark SQL används för strukturerad databearbetning i Apache Spark. |
Vilka är några avancerade verktyg som stöds av Apache Spark och vilka syften tjänar de? | – Spark SQL för SQL och strukturerad databearbetning. – Pandas API på Spark för hantering av Pandas-arbetsflöden. – MLlib för maskininlärning. – GraphX för grafbearbetning. – Strukturerad direktuppspelning för inkrementell beräkning och dataströmbearbetning. |
Vad är den primära abstraktionen i Spark och hur representeras datauppsättningar i Python? | – Den primära abstraktionen i Spark är en datauppsättning. – I Python kallas Sparks datauppsättningar för DataFrame. – I Python representeras datauppsättningar som Dataset[Rad] |
Varför kallas alla datauppsättningar i Python för DataFrames i Spark? | – Datauppsättningar i Python kallas DataFrames i Spark för att upprätthålla konsekvens med dataramskonceptet. – Dataramkonceptet är standard i Pandas och R. |
Hur num_evals
används
num_evals
är det totala antalet utvärderingar som genererats för uppsättningen dokument. Funktionen distribuerar dessa utvärderingar i dokumenten när du försöker ta hänsyn till skillnader i dokumentstorlek. Den försöker alltså behålla ungefär samma antal frågor per sida i dokumentuppsättningen.
Om num_evals
är mindre än antalet dokument genereras inga utvärderingar i vissa dokument. Den dataram som returneras av funktionen innehåller en kolumn med source_doc_ids
som användes för att generera utvärderingar. Du kan använda den här kolumnen för att ansluta tillbaka till din ursprungliga DataFrame för att generera evals för de dokument som hoppades över.
För att beräkna num_evals
för en önskad täckning tillhandahåller vi metoden estimate_synthetic_num_evals
:
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.
)
Skapa en syntetisk utvärderingsuppsättning – exempelanteckningsbok
I följande notebook-fil finns exempelkod för att skapa en syntetisk utvärderingsuppsättning.
Exempelanteckningsbok för syntetiska utvärderingar
10-minuters demo för att öka agentens prestanda
Följande exempel på anteckningsbok visar hur du kan förbättra kvaliteten på din agent. Den innehåller följande steg:
- Generera en syntetisk utvärderingsdatauppsättning.
- Skapa och utvärdera en baslinjeagent.
- Jämför baslinjeagenten mellan flera konfigurationer (till exempel olika frågor) och grundläggande modeller för att hitta rätt balans mellan kvalitet, kostnad och svarstid.
- Distribuera agenten till ett webbgränssnitt så att intressenter kan testa och ge ytterligare feedback.
Förbättra agentens prestanda med hjälp av anteckningsboken för syntetiska data
Information om modeller som möjliggör syntetisk data
- Syntetiska data kan använda tjänster från tredje part för att utvärdera dina GenAI-program, inklusive Azure OpenAI som drivs av Microsoft.
- För Azure OpenAI har Databricks valt bort missbruksövervakning så att inga uppmaningar eller svar lagras med Azure OpenAI.
- För EU-arbetsytor använder syntetiska data modeller som finns i EU. Alla andra regioner använder modeller som finns i USA.
- Genom att inaktivera Azure AI-baserade AI-hjälpmedelsfunktioner förhindras den syntetiska datatjänsten från att anropa Azure AI-baserade modeller.
- Data som skickas till den syntetiska datatjänsten används inte för någon modellträning.
- Syntetiska data är avsedda att hjälpa kunder att utvärdera sina agentprogram och utdata bör inte användas för att träna, förbättra eller finjustera en LLM.