Оценочные наборы
Внимание
Эта функция предоставляется в режиме общедоступной предварительной версии.
Чтобы оценить качество агентского приложения, необходимо иметь возможность определить репрезентативный набор запросов вместе с критериями, характеризующими высококачественные ответы. Вы делаете это, предоставляя оценочный набор. В этой статье рассматриваются различные варианты набора для оценки и некоторые рекомендации по созданию оценочного набора.
Databricks рекомендует создать набор оценок с метками, проставленными человеком, который состоит из репрезентативных вопросов и правдивых ответов. Если приложение включает шаг извлечения, вы можете предоставить вспомогательные документы, на которых вы ожидаете, что ответ будет основан. Чтобы приступить к созданию оценочного набора, Databricks предоставляет пакет SDK для создания высококачественных искусственных вопросов и ответов на основе истины, которые можно использовать непосредственно в оценке агента или отправить экспертам по темам для проверки. См. Синтез наборов оценки.
Хороший набор оценки имеет следующие характеристики:
- Представитель: он должен точно отражать диапазон запросов, которые приложение столкнется в рабочей среде.
- Сложно. Это должно включать сложные и разнообразные случаи для эффективного тестирования полного спектра возможностей приложения.
- Постоянно обновляемое: оно должно регулярно обновляться, чтобы отразить способ использования приложения и изменение шаблонов рабочего трафика.
Для требуемой схемы набора для оценки см. схему входных данных для оценки агента.
Примеры наборов вычислений
В этом разделе содержатся простые примеры наборов вычислений.
Пример оценочного набора с только 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
и guidelines
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.",
"guidelines": [
"The response must be in English",
"The response must be clear, coherent, and concise",
]
}
]
Пример оценочного набора с request
, response
, guidelines
и expected_facts
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.",
"expected_facts": [
"There's no significant difference.",
],
"guidelines": [
"The response must be in English",
"The response must be clear, coherent, and concise",
],
}
]
Пример оценочного набора с 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
, response
, retrieved_context
и expected_facts
eval_set = [
{
"request_id": "request-id",
"request": "What is the difference between reduceByKey and groupByKey in Spark?",
"expected_facts": [
"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
, response
, retrieved_context
, expected_facts
и expected_retrieved_context
eval_set = [
{
"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_facts": [
"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.
- Метки человека по природе шумные и несогласованные, например из-за различных интерпретаций вопроса. Это важная часть процесса. Использование меток человека может выявить интерпретации вопросов, которые вы не рассмотрели, и которые могут дать представление о поведении, которое вы наблюдаете в приложении.