Оценочные наборы
Внимание
Эта функция предоставляется в режиме общедоступной предварительной версии.
Чтобы оценить качество агентического приложения, необходимо иметь возможность определить репрезентативный набор запросов вместе с критериями, характеризующими высококачественные ответы. Для этого необходимо предоставить оценочный набор. В этой статье рассматриваются различные варианты оценки набора и некоторые рекомендации по созданию оценочного набора.
Databricks рекомендует создать набор оценки с меткой человека, который состоит из репрезентативных вопросов и ответов на вопросы, связанные с правды. Если приложение включает шаг извлечения, вы можете предоставить вспомогательные документы, на которых вы ожидаете, что ответ будет основан. Хотя рекомендуется человеческая оценка, оценка агента работает одинаково хорошо с синтетически созданными наборами оценки.
Хороший набор оценки имеет следующие характеристики:
- Представитель: он должен точно отражать диапазон запросов, которые приложение столкнется в рабочей среде.
- Сложно. Это должно включать сложные и разнообразные случаи для эффективного тестирования полного спектра возможностей приложения.
- Постоянно обновляемое: оно должно регулярно обновляться, чтобы отразить способ использования приложения и изменение шаблонов рабочего трафика.
Для требуемой схемы оценочного набора см . схему входных данных агента.
Примеры наборов вычислений
В этом разделе содержатся простые примеры наборов вычислений.
Пример оценочного набора с только request
eval_set = [
{
"request": "What is the difference between reduceByKey and groupByKey in Spark?",
}
]
Пример оценочного набора с помощью request
и expected_response
eval_set = [
{
"request_id": "request-id",
"request": "What is the difference between reduceByKey and groupByKey in Spark?",
"expected_response": "There's no significant difference.",
}
]
Пример оценочного набора с request
, expected_response
и expected_retrieved_content
eval_set = [
{
"request_id": "request-id",
"request": "What is the difference between reduceByKey and groupByKey in Spark?",
"expected_retrieved_context": [
{
"doc_uri": "doc_uri_1",
},
{
"doc_uri": "doc_uri_2",
},
],
"expected_response": "There's no significant difference.",
}
]
Пример оценочного набора с только request
и response
eval_set = [
{
"request": "What is the difference between reduceByKey and groupByKey in Spark?",
"response": "reduceByKey aggregates data before shuffling, whereas groupByKey shuffles all data, making reduceByKey more efficient.",
}
]
Пример оценочного набора с request
, response
и retrieved_context
eval_set = [
{
"request_id": "request-id", # optional, but useful for tracking
"request": "What is the difference between reduceByKey and groupByKey in Spark?",
"response": "reduceByKey aggregates data before shuffling, whereas groupByKey shuffles all data, making reduceByKey more efficient.",
"retrieved_context": [
{
# In `retrieved_context`, `content` is optional, but delivers additional functionality if provided (the Databricks Context Relevance LLM judge runs to check the relevance of the provided content to the request).
"content": "reduceByKey reduces the amount of data shuffled by merging values before shuffling.",
"doc_uri": "doc_uri_2_1",
},
{
"content": "groupByKey may lead to inefficient data shuffling due to sending all values across the network.",
"doc_uri": "doc_uri_6_extra",
},
],
}
]
Пример оценочного набора с request
, retrieved_context
response
иexpected_response
eval_set = [
{
"request_id": "request-id",
"request": "What is the difference between reduceByKey and groupByKey in Spark?",
"expected_response": "There's no significant difference.",
"response": "reduceByKey aggregates data before shuffling, whereas groupByKey shuffles all data, making reduceByKey more efficient.",
"retrieved_context": [
{
# In `retrieved_context`, `content` is optional, but delivers additional functionality if provided (the Databricks Context Relevance LLM judge runs to check the relevance of the provided content to the request).
"content": "reduceByKey reduces the amount of data shuffled by merging values before shuffling.",
"doc_uri": "doc_uri_2_1",
},
{
"content": "groupByKey may lead to inefficient data shuffling due to sending all values across the network.",
"doc_uri": "doc_uri_6_extra",
},
],
}
]
Пример оценочного набора с request
, , expected_response
response
retrieved_context
иexpected_retrieved_context
level_4_data = [
{
"request_id": "request-id",
"request": "What is the difference between reduceByKey and groupByKey in Spark?",
"expected_retrieved_context": [
{
"doc_uri": "doc_uri_2_1",
},
{
"doc_uri": "doc_uri_2_2",
},
],
"expected_response": "There's no significant difference.",
"response": "reduceByKey aggregates data before shuffling, whereas groupByKey shuffles all data, making reduceByKey more efficient.",
"retrieved_context": [
{
# In `retrieved_context`, `content` is optional, but delivers additional functionality if provided (the Databricks Context Relevance LLM judge runs to check the relevance of the provided content to the request).
"content": "reduceByKey reduces the amount of data shuffled by merging values before shuffling.",
"doc_uri": "doc_uri_2_1",
},
{
"content": "groupByKey may lead to inefficient data shuffling due to sending all values across the network.",
"doc_uri": "doc_uri_6_extra",
},
],
}
]
Рекомендации по разработке оценочного набора
- Рассмотрим каждый пример или группу примеров в наборе вычислений в качестве модульного теста. То есть каждый пример должен соответствовать конкретному сценарию с явным ожидаемым результатом. Например, рассмотрим тестирование более длительных контекстов, многопрыговую причину и возможность выводить ответы из косвенных доказательств.
- Рассмотрите возможность тестирования состязательности сценариев от вредоносных пользователей.
- Нет конкретного руководства по количеству вопросов, которые следует включить в набор оценки, но четкие сигналы от высококачественных данных обычно выполняют лучше, чем шумные сигналы от слабых данных.
- Рассмотрите возможность включения примеров, которые очень сложны, даже для людей, чтобы ответить.
- Независимо от того, создаете приложение общего назначения или предназначение конкретного домена, ваше приложение, скорее всего, столкнется с различными вопросами. Оценочный набор должен отражать это. Например, если вы создаете приложение для определения конкретных вопросов о персонале, следует по-прежнему рассмотреть возможность тестирования других доменов (например, операций), чтобы убедиться, что приложение не галлюцинирует или не предоставляет вредоносные ответы.
- Высококачественные, согласованные метки, созданные человеком, являются лучшим способом обеспечить точное отражение требуемого поведения. Ниже приведены некоторые шаги по обеспечению высокого качества меток человека:
- Агрегированные ответы (метки) из нескольких человеческих меток для одного и того же вопроса.
- Убедитесь, что инструкции по маркировке понятны и что человеческие метки согласованы.
- Убедитесь, что условия для процесса маркировки человека идентичны формату запросов, отправленных приложению RAG.
- Метки человека по природе шумные и несогласованные, например из-за различных интерпретаций вопроса. Это важная часть процесса. Использование меток человека может выявить интерпретации вопросов, которые вы не рассмотрели, и которые могут дать представление о поведении, которое вы наблюдаете в приложении.