Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Important
Databricks рекомендует использовать MLflow 3 для оценки и мониторинга приложений ИИ. На этой странице описывается оценка агента MLflow 2.
- Общие сведения об оценке и мониторинге MLflow 3 см. в разделе "Оценка и мониторинг агентов".
- Сведения о миграции на MLflow 3 см. в разделе "Миграция на MLflow 3 из раздела 'Оценка агента'".
- Сведения о MLflow 3 см. в разделе "Создание наборов данных оценки MLflow".
В этой статье раскрывается схема ввода данных, необходимая для оценки качества, стоимости и задержки вашего приложения с использованием Agent Evaluation.
- Во время разработки оценка проводится в автономном режиме, и набор данных для оценки является необходимым входом для оценки агента.
- Когда приложение находится в производственной среде, все входные данные для оценки агента поступают из таблиц вывода данных или рабочих журналов.
Входная схема идентична как для онлайн-, так и для автономных оценок.
Общую информацию о наборах оценки см. в разделе Наборы оценки (MLflow 2).
Схема входных данных оценки
В следующей таблице показана входная схема оценки агента. Последние два столбца таблицы относятся к способу предоставления входных данных вызову mlflow.evaluate(). Дополнительные сведения см. в разделе "Предоставление входных данных для выполнения оценки ".
| колонна | Тип данных | Описание | Приложение, переданное в качестве входного аргумента | Предоставленные ранее созданные выходные данные |
|---|---|---|---|---|
| идентификатор запроса | string | Уникальный идентификатор запроса. | Необязательно | Необязательно |
| просьба | См. схему запроса. | Входные данные в приложение для оценки, вопроса или запроса пользователя. Например, {'messages': [{"role": "user", "content": "What is RAG"}]} или "Что такое RAG?". Когда request предоставлен как строка, он будет преобразован в messages перед передачей вашему агенту. |
Обязательный | Обязательный |
| ответ | См. схему ответа. | Ответ, созданный оцениваемым приложением. | Создано в результате оценки агента | Необязательно. Если он не указан, определяется на основе трассировки. Либо response, либо trace требуется. |
| ожидаемые факты | массив строк | Список фактов, ожидаемых в выходных данных модели. См expected_facts . рекомендации. |
Необязательно | Необязательно |
| ожидаемый_ответ | string | Правильный (истинный) ответ на входной запрос. См expected_response . рекомендации. |
Необязательно | Необязательно |
| Руководящие принципы |
guidelines Руководящие принципы |
Именованный словарь или список рекомендаций, которым должны соответствовать выходные данные модели. См guidelines . рекомендации. |
Необязательно | Необязательно |
| ожидаемый_извлеченный_контекст | массив | Массив объектов, содержащих ожидаемый контекст для запроса (если приложение включает шаг извлечения). Схема массива | Необязательно | Необязательно |
| полученный_контекст | массив | Результаты извлечения, созданные извлекающим модулем в оцениваемом приложении. Если в приложении имеются несколько шагов извлечения, это результаты последнего шага извлечения в хронологическом порядке в трассировке. Схема массива | Создано в результате оценки агента | Необязательно. Если он не указан, то определяется из предоставленной трассировки. |
| trace | Строка JSON трассировки MLflow | Трассировка MLflow выполнения приложения в ответ на соответствующий запрос. | Создано в результате оценки агента | Необязательно. Либо response, либо trace требуется. |
expected_facts Руководящие принципы
Поле expected_facts указывает список фактов, которые должны отображаться в любом правильном ответе модели для конкретного входного запроса. То есть ответ модели считается правильным, если он содержит эти факты, независимо от того, как ответ выражен.
Включение только необходимых фактов и исключение фактов, которые не являются строго обязательными в ответе, позволяет Оценке агента обеспечить более надежный сигнал о качестве исходных данных.
Можно указать не более одного из expected_facts и expected_response. Если указать оба, появится сообщение об ошибке. Databricks рекомендует использовать expected_facts, так как это более конкретное руководство, которое помогает более эффективно оценивать качество созданных ответов.
guidelines Руководящие принципы
Поле guidelines указывает набор рекомендаций, к которым должен соответствовать любой правильный ответ модели.
guidelines можно выразить в двух форматах:
- Список рекомендаций (
List[str]) предоставляет единый набор рекомендаций. - Именованное руководство (
Dict[str, List[str]]) предоставляет сопоставление имени руководства с массивом руководств, связанных с этим именем. Именованные рекомендации требуютdatabricks-agents >= 0.16.0.
Рекомендации могут ссылаться на различные признаки ответа, включая стилистические или связанные с содержимым элементы. Для наиболее надежного сигнала о соблюдении руководящих требований Databricks рекомендует использовать следующий язык:
- "Ответ должен ..."
- "Ответ не должен ..."
- Ответ может быть необязательным ...
В частности, вы должны ссылаться на запрос и ответ напрямую и оставлять как можно меньше неоднозначности в рекомендациях. Для рекомендаций, которые применяются ко всему набору оценки, например, чтобы ответы имели профессиональный тон или всегда находятся на английском языке, используйте параметр global_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.",
# Note: You can also just pass an array to `guidelines`.
"guidelines": {
"english": ["The response must be in English"],
"clarity": ["The response must be clear, coherent, and concise"],
}
}
]
mlflow.evaluate(
data=pd.DataFrame(eval_set),
model_type="databricks-agent",
evaluator_config={
"databricks-agent": {
# Note: You can also just pass an array to `guidelines`.
"global_guidelines": {
"english": ["The response must be in English"],
"clarity": ["The response must be clear, coherent, and concise"],
}
}
}
)
expected_response Руководящие принципы
Поле expected_response содержит полностью сформированный ответ, представляющий ссылку на правильные ответы модели. То есть, ответ модели считается правильным, если он соответствует содержимому информации в expected_response. Напротив, expected_facts перечисляет только факты, которые должны отображаться в правильном ответе и не являются полностью сформированным ответом на ссылку.
Аналогично expected_facts, expected_response должен содержать только минимальный набор фактов, необходимых для правильного ответа. Включение только необходимой информации и исключение сведений, которые не являются строго обязательными в ответе, позволяет Оценке агента обеспечить более надежный сигнал о качестве выходных данных.
Можно указать не более одного из expected_facts и expected_response. Если указать оба, появится сообщение об ошибке. Databricks рекомендует использовать expected_facts, так как это более конкретное руководство, которое помогает более эффективно оценивать качество созданных ответов.
схема запроса
Схема запроса может быть одной из следующих:
- Произвольный сериализуемый словарь (например,
Dict[str, Any]) - Если агент поддерживает схему завершения чата OpenAI, можно передать обычную строку. Этот формат поддерживает только одноходовые беседы. Обычные строки преобразуются в формат
messagesс помощью"role": "user"перед передачей агенту. Например, обычная строка"What is MLflow?"преобразуется в{"messages": [{"role": "user", "content": "What is MLflow?"}]}перед передачей агенту.
Обратите внимание, что встроенные судьи лучше всего работают с любым форматом, использующим схему завершения чата OpenAI . Схема завершения чата OpenAI должна иметь массив объектов в качестве параметра messages. Поле messages может закодировать всю беседу.
В следующем примере показаны несколько возможных вариантов в том же столбце request набора данных оценки:
import pandas as pd
data = {
"request": [
# Plain string. Plain strings are transformed to the `messages` format before being passed to your agent.
"What is the difference between reduceByKey and groupByKey in Spark?",
# OpenAI chat completion schema. Use the `messages` field for a single- or multi-turn chat.
{
"messages": [
{
"role": "user",
"content": "How can you minimize data shuffling in Spark?"
}
]
},
# SplitChatMessagesRequest. Use the `query` and `history` fields for a single- or multi-turn chat.
{
"query": "Explain broadcast variables in Spark. How do they enhance performance?",
"history": [
{
"role": "user",
"content": "What are broadcast variables?"
},
{
"role": "assistant",
"content": "Broadcast variables allow the programmer to keep a read-only variable cached on each machine."
}
]
},
# Arbitrary format. These must be JSON-serializable and are passed directly to your agent.
{
"message_history": [
{
"user_0": "What are broadcast variables?",
"assistant_0": "Broadcast variables allow the programmer to keep a read-only variable cached on each machine.",
}
],
"last_user_request": "How can you minimize data shuffling in Spark?"
},
],
"expected_response": [
"expected response for first question",
"expected response for second question",
"expected response for third question",
"expected response for fourth question",
]
}
eval_dataset = pd.DataFrame(data)
Схема для ответа
Схема ответа, аналогичная схеме запроса, может быть одной из следующих:
- Произвольный сериализуемый словарь (например,
Dict[str, Any]). - Если агент поддерживает схему завершения чата OpenAI, можно передать обычную строку. Этот формат поддерживает только одноходовые беседы. Обычные строки преобразуются в формат
choices. Например, обычная строка"MLFlow is a framework."преобразуется в{"choices": [{"message": {"content": "MLFlow is a framework."}}]}.
схема для массивов в входных данных оценки
Схема массивов expected_retrieved_context и retrieved_context показана в следующей таблице:
| колонна | Тип данных | Описание | Приложение, переданное в качестве входного аргумента | Предоставленные ранее созданные выходные данные |
|---|---|---|---|---|
| содержимое | string | Содержимое извлеченного контекста. Строка в любом формате, например HTML, обычный текст или Markdown. | Необязательно | Необязательно |
| doc_uri | string | Уникальный идентификатор (URI) родительского документа, из которого поступил блок. | Обязательный | Обязательный |
Вычисляемая метрика
Столбцы в следующей таблице указывают данные, включенные в входные данные, и ✓ указывает, что метрика поддерживается при предоставлении данных.
Дополнительные сведения об измерении этих метрик см. в статье о том, как качество, стоимость и задержка оцениваются оценкой агента (MLflow 2).
| Вычисляемые метрики | request |
request и expected_response. |
request, expected_response, expected_retrieved_context и guidelines |
request и expected_retrieved_context. |
request и guidelines. |
|---|---|---|---|---|---|
response/llm_judged/relevance_to_query/rating |
✓ | ✓ | ✓ | ||
response/llm_judged/safety/rating |
✓ | ✓ | ✓ | ||
response/llm_judged/groundedness/rating |
✓ | ✓ | ✓ | ||
retrieval/llm_judged/chunk_relevance_precision |
✓ | ✓ | ✓ | ||
agent/total_token_count |
✓ | ✓ | ✓ | ||
agent/input_token_count |
✓ | ✓ | ✓ | ||
agent/output_token_count |
✓ | ✓ | ✓ | ||
response/llm_judged/correctness/rating |
✓ | ✓ | |||
retrieval/llm_judged/context_sufficiency/rating |
✓ | ✓ | |||
retrieval/ground_truth/document_recall |
✓ | ✓ | |||
response/llm_judged/guideline_adherence/rating |
✓ | ✓ |