Notes
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Cette page explique comment générer de manière synthétique un ensemble d’évaluation de haute qualité pour mesurer la qualité de votre agent.
La création manuelle d’un jeu d’évaluation est souvent fastidieuse et il est difficile de s’assurer qu’elle couvre toutes les fonctionnalités de votre agent. Mosaïque AI Agent Evaluation supprime cette barrière en générant automatiquement un jeu d’évaluation représentatif à partir de vos documents, ce qui vous permet d’évaluer rapidement votre agent avec une bonne couverture des cas de test.
Générer un jeu d’évaluation
Pour synthétiser les évaluations d’un agent qui utilise la récupération de documents, utilisez la méthode generate_evals_df
qui fait partie du package Python databricks-agents
. Pour plus d’informations sur l’API, consultez la référence du SDK Python .
Cette méthode vous oblige à fournir vos documents en tant que DataFrame Pandas ou un DataFrame Spark.
Le dataframe d’entrée doit avoir les colonnes suivantes :
-
content
: contenu du document analysé sous forme de chaîne. -
doc_uri
: URI du document.
Vous pouvez utiliser trois paramètres supplémentaires pour contrôler la génération :
num_evals
: nombre total d’évaluations à générer dans tous les documents. La fonction tente de distribuer des valeurs d’évaluation générées sur tous vos documents, en tenant compte de leur taille. S'ilnum_evals
est inférieur au nombre de documents, tous les documents ne seront pas inclus dans le jeu d'évaluation.Pour plus d'informations sur la façon dont
num_evals
est utilisé pour distribuer les évaluations dans les documents, consultez Commentnum_evals
est utilisé.agent_description
: description de la tâche de l’agentquestion_guidelines
: ensemble de lignes directrices qui aident à guider la génération de questions synthétiques. Il s’agit d’une chaîne de forme libre qui sera utilisée pour alimenter la génération. Consultez l’exemple ci-dessous.
La sortie de generate_evals_df
est un DataFrame. Les colonnes du DataFrame dépendent de l’utilisation de MLflow 3 ou MLflow 2.
MLflow 3
-
request_id
: ID de requête unique. -
inputs
: entrées synthétisées, dans l’API d’achèvement de conversation -
expectations
: dictionnaire avec deux champs :-
expected_facts
: liste des faits attendus dans la réponse. Cette colonne a une dtype list[string]. -
expected_retrieved_context
: le contexte à partir duquel cette évaluation a été synthétisée, y compris le contenu du document et le doc_uri.
-
MLflow 2
-
request_id
: ID de requête unique. -
request
: requête synthétisée. -
expected_facts
: liste des faits attendus dans la réponse. Cette colonne a une dtype list[string]. -
expected_retrieved_context
: le contexte à partir duquel cette évaluation a été synthétisée, y compris le contenu du document et le doc_uri.
Exemple
L’exemple suivant utilise generate_evals_df
pour générer un jeu d’évaluation, puis appeler mlflow.evaluate()
directement pour mesurer les performances de Meta Llama 3.1 sur ce jeu d’évaluation. Le modèle Llama 3.1 n’a jamais vu vos documents, il est donc probable qu’il soit halluciné. Même si, cette expérience est une bonne base de référence pour votre agent personnalisé.
%pip install 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)
L’exemple de sortie est illustré ci-dessous. Les colonnes de sortie dépendent de l’utilisation de MLflow 3 ou MLflow 2.
MLflow 3
Dans l’exemple de sortie suivant, les colonnes request_id
et expectations.expected_retrieved_context
ne sont pas affichées.
inputs.messages[0].content | attentes.faits_attendus |
---|---|
Qu’est-ce que Spark SQL utilisé dans Apache Spark ? |
|
Quels sont les outils de haut niveau pris en charge par Apache Spark et quels objectifs servent-ils ? |
|
Quelle est l’abstraction principale dans Spark et comment les jeux de données sont-ils représentés en Python ? |
|
Pourquoi tous les jeux de données en Python sont-ils appelés DataFrames dans Spark ? |
|
MLflow 2
Dans l’exemple de sortie suivant, les colonnes request_id
et expected_retrieved_context
ne sont pas affichées.
demande | faits_attendus |
---|---|
Qu’est-ce que Spark SQL utilisé dans Apache Spark ? |
|
Quels sont les outils de haut niveau pris en charge par Apache Spark et quels objectifs servent-ils ? |
|
Quelle est l’abstraction principale dans Spark et comment les jeux de données sont-ils représentés en Python ? |
|
Pourquoi tous les jeux de données en Python sont-ils appelés DataFrames dans Spark ? |
|
comment num_evals
est utilisé
num_evals
est le nombre total d’évaluations générées pour l’ensemble de documents. La fonction distribue ces évaluations dans les documents tout en essayant de tenir compte des différences de taille des documents. Autrement dit, il tente de maintenir environ le même nombre de questions par page dans l’ensemble de documents.
Si num_evals
est inférieur au nombre de documents, certains documents n’ont pas d’évaluations générées. Le DataFrame retourné par la fonction inclut une colonne avec les source_doc_ids
qui ont été utilisés pour générer des évaluations. Vous pouvez utiliser cette colonne pour revenir à votre DataFrame d’origine afin de générer des valeurs d’évaluation pour les documents ignorés.
Pour vous aider à estimer la num_evals
pour une couverture souhaitée, nous fournissons la méthode 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.
)
Créer un jeu d’évaluation synthétique ( exemple de notebook)
Consultez le notebook suivant pour obtenir un exemple de code pour créer un jeu d’évaluation synthétique.
Exemple de cahier d’évaluations synthétiques
Obtenir un ordinateur portable
Démonstration de 10 minutes pour améliorer les performances de l’agent
Le notebook d'exemple suivant montre comment améliorer la qualité de votre agent. Elle comprend les étapes suivantes :
- Générez un jeu de données d’évaluation synthétique.
- Générez et évaluez un agent de référence.
- Comparez l'agent de référence à travers plusieurs configurations, telles que différentes invites, et modèles fondamentaux, afin de trouver le juste équilibre entre la qualité, le coût et la latence.
- Déployez l’agent sur une interface utilisateur web pour permettre aux parties prenantes de tester et de fournir des commentaires supplémentaires.
Améliorer les performances de l’agent en utilisant le carnet de données synthétiques
Obtenir un ordinateur portable
Informations sur les modèles qui alimentent les données synthétiques
- Les données synthétiques peuvent utiliser des services tiers pour évaluer vos applications IA génératives, y compris Azure OpenAI géré par Microsoft.
- Pour Azure OpenAI, Databricks a refusé l’analyse des abus afin qu’aucune invite ou réponse ne soit stockée avec Azure OpenAI.
- Pour les espaces de travail de l’Union européenne (UE), les données synthétiques utilisent des modèles hébergés dans l’UE. Toutes les autres régions utilisent des modèles hébergés aux États-Unis.
- La désactivation des fonctionnalités d’assistance d’IA Azure empêche l'appel des modèles alimentés par l’IA Azure par le service de données synthétiques.
- Les données envoyées au service de données synthétiques ne sont pas utilisées pour l’entraînement de modèle.
- Les données synthétiques sont destinées à aider les clients à évaluer leurs applications d’agent et les sorties ne doivent pas être utilisées pour entraîner, améliorer ou affiner un LLM.