Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Important
Databricks рекомендует использовать MLflow 3 для оценки и мониторинга приложений ИИ. На этой странице описывается оценка агента MLflow 2.
- Общие сведения об оценке и мониторинге MLflow 3 см. в разделе "Оценка и мониторинг агентов".
- Сведения о миграции на MLflow 3 см. в разделе "Миграция на MLflow 3 из раздела 'Оценка агента'".
- Сведения о MLflow 3 см. в разделе "Создание наборов данных оценки MLflow".
Чтобы оценить качество агента, необходимо иметь возможность определять репрезентативный набор запросов вместе с критериями, характеризующими высококачественные ответы. Вы делаете это, предоставляя оценочный набор. В этой статье рассматриваются различные варианты для вашего набора для оценки и некоторые лучшие практики по созданию такого набора.
Databricks рекомендует создать набор оценочных данных с человеческой разметкой, который состоит из репрезентативных вопросов и правильных ответов. Если приложение включает шаг извлечения, вы можете предоставить вспомогательные документы, на которых вы ожидаете, что ответ будет основан. Чтобы приступить к созданию оценочного набора, Databricks предоставляет пакет SDK для создания высококачественных искусственных вопросов и эталонных ответов, которые можно использовать непосредственно в оценке работы агентов или отправить экспертам в данной области для проверки. См. Синтез наборов оценки.
Хороший набор оценки имеет следующие характеристики:
- Он должен точно отражать диапазон запросов, которые приложение встретит в рабочей среде.
- Сложно. Это должно включать сложные и разнообразные случаи для эффективного тестирования полного спектра возможностей приложения.
- Постоянно обновляемое: оно должно регулярно обновляться, чтобы отразить способ использования приложения и изменение шаблонов рабочего трафика.
Для требуемой схемы оценочного набора см. схему входных данных для оценки агента (MLflow 2).
Примеры наборов оценок
В этом разделе содержатся простые примеры наборов для оценки.
Пример оценочного набора, содержащего только 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
eval_set = [
{
"request": {"query": "Difference between", "item_a": "reduceByKey", "item_b": "groupByKey"},
"response": {
"differences": [
"reduceByKey aggregates data before shuffling",
"groupByKey shuffles all data",
"reduceByKey is 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.",
# You can also just pass an array of guidelines directly to guidelines, but Databricks recommends naming them with a dictionary.
"guidelines": {
"english": ["The response must be in English"],
"clarity": ["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.",
],
# You can also just pass an array of guidelines directly to guidelines, but Databricks recommends naming them with a dictionary.
"guidelines": {
"english": ["The response must be in English"],
"clarity": ["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.
- Метки человека по природе шумные и несогласованные, например из-за различных интерпретаций вопроса. Это важная часть процесса. Использование человеческой разметки может выявить интерпретации вопросов, о которых вы ранее не задумывались, и которые могут дать представление о наблюдаемом вами поведении в приложении.