Синтезировать наборы оценок
Важный
Эта функция доступна в общедоступной предварительной версии.
На этой странице описывается, как искусственно создать высококачественный набор оценки для измерения качества агента.
Создание оценочного набора вручную часто занимает много времени, и трудно убедиться, что он покрывает все функциональные возможности агента. Оценка Mosaic AI Agent удаляет этот барьер, автоматически создавая представительный набор для оценки из ваших документов, что позволяет быстро оценить вашего агента с хорошим охватом тестовых случаев.
Создание оценочного набора
Чтобы синтезировать оценки для агента, использующего извлечение документов, используйте метод generate_evals_df
, который является частью пакета Python databricks-agents
. Дополнительные сведения об API см. в справочнике SDK для Python.
Этот метод рекомендует предоставить ваши документы в виде DataFrame Pandas или DataFrame Spark.
Входной кадр данных должен иметь следующие столбцы:
-
content
: проанализированное содержимое документа в виде строки. -
doc_uri
: URI документа.
Для более точного контроля над процессом создания можно использовать три дополнительных параметра.
num_evals
: Общее количество оценок для всех документов. Функция пытается распределить созданные оценки по всем вашим документам, принимая во внимание их размер. Еслиnum_evals
меньше количества документов, не все документы будут рассмотрены в оценочном наборе.Дополнительные сведения о том, как
num_evals
используется для распределения оценок по документам, см. в разделе Использование num_evals.agent_description
: описание задачи агентаquestion_guidelines
: набор рекомендаций, помогающих создать искусственный вопрос. Это строка свободной формы, которая будет использоваться для генерации. См. приведенный ниже пример.
Выходные данные generate_evals_df
— это кадр данных со следующими столбцами:
-
request_id
: уникальный идентификатор запроса. -
request
: синтезированный запрос. -
expected_facts
: список ожидаемых фактов в ответе. Этот столбец имеет тип данных список[string]. -
expected_retrieved_context
: Контекст этой оценки был синтезирован, включая содержимое документа и doc_uri.
Пример
В следующем примере используется generate_evals_df
для создания оценочного набора, а затем напрямую вызывается mlflow.evaluate()
для измерения производительности Meta Ллама 3.1 в этом оценочном наборе. Модель Llama 3.1 никогда не видела ваши документы, поэтому, скорее всего, галлюцинат. Даже несмотря на это, этот эксперимент является хорошей отправной точкой для вашего пользовательского агента.
%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)
В следующем примере выходных данных столбцы request_id
и expected_retrieved_context
не отображаются.
просьба | ожидаемые_факты |
---|---|
Что такое SQL Spark, используемый в Apache Spark? | — Sql Spark используется для обработки SQL в Apache Spark. — Sql Spark используется для структурированной обработки данных в Apache Spark. |
Каковы некоторые высокоуровневые средства, поддерживаемые Apache Spark, и какие цели они служат? | — Spark SQL для SQL и структурированной обработки данных. — API pandas в Spark для обработки рабочих нагрузок pandas. — MLlib для машинного обучения. — GraphX для обработки графа. — Структурированная потоковая передача для добавочных вычислений и потоковой обработки. |
Что такое основная абстракция в Spark и как представлены наборы данных в Python? | — основная абстракция в Spark — это набор данных. — В Python наборы данных Spark называются кадрами данных. — В Python наборы данных представлены как набор данных[строка] |
Почему все наборы данных в Python называются кадрами данных в Spark? | — Наборы данных в Python называются кадрами данных в Spark для обеспечения согласованности с понятием кадра данных. — Концепция кадра данных является стандартной в Pandas и R. |
как используется num_evals
num_evals
— общее количество оценок, созданных для набора документов. Функция распределяет эти оценки по документам, пытаясь учитывать различия в размере документа. То есть он пытается поддерживать примерно одинаковое количество вопросов на страницу в наборе документов.
Если num_evals
меньше количества документов, для некоторых документов не будут сгенерированы оценки. Кадр данных, возвращаемый функцией, включает столбец с source_doc_ids
, которые использовались для генерации оценок. Этот столбец можно использовать, чтобы объединить его с исходным кадром данных для создания оценок для документов, которые были пропущены.
Чтобы оценить num_evals
для требуемого покрытия, мы предоставляем метод 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.
)
Создать искусственный набор для оценки — пример рабочей тетради
См. следующий ноутбук, чтобы увидеть пример кода для создания искусственного оценочного набора.
Пример тетради для синтетических оценок
10-минутная демонстрация для повышения производительности агента
В следующем примере записной книжки показано, как улучшить качество агента. Он включает следующие шаги:
- Создайте искусственный набор данных оценки.
- Создание и оценка базового агента.
- Сравните базовый агент между несколькими конфигурациями (например, различными запросами) и базовыми моделями, чтобы найти правильный баланс качества, затрат и задержки.
- Разверните агент в веб-интерфейсе, чтобы позволить заинтересованным лицам тестировать и предоставлять дополнительные отзывы.
Повышение производительности агента с помощью записной книжки с искусственными данными
Сведения о моделях, которые питают искусственные данные
- Искусственные данные могут использовать сторонние службы для оценки приложений GenAI, включая Azure OpenAI, управляемые корпорацией Майкрософт.
- Для Azure OpenAI Databricks отказался от мониторинга злоупотреблений, поэтому запросы или ответы не хранятся в Azure OpenAI.
- Для рабочих пространств Европейского союза (ЕС) модели, размещенные в ЕС, используются для обработки синтетических данных. Все остальные регионы используют модели, размещенные в США.
- Отключение вспомогательных функций искусственного интеллекта Azure предотвращает вызов моделей, управляемых искусственным интеллектом Azure.
- Данные, отправленные в службу синтетических данных, не используются для обучения модели.
- Искусственные данные предназначены для оценки приложений агента клиентами, и выходные данные не должны использоваться для обучения, улучшения или точной настройки LLM.