Поделиться через


Схема ввода данных для оценки агента

В этой статье раскрывается схема ввода данных, необходимая для оценки качества, стоимости и задержки вашего приложения с использованием Agent Evaluation.

  • Во время разработки оценка проводится в автономном режиме, и набор данных для оценки является необходимым входом для оценки агента.
  • Когда приложение находится в производственной среде, все входные данные для оценки агента поступают из таблиц вывода данных или рабочих журналов.

Входная схема идентична как для онлайн-, так и для автономных оценок.

Общие сведения об наборах вычислений см. в разделе "Наборы вычислений".

Схема входных данных оценки

В следующей таблице показана входная схема оценки агента. Последние два столбца таблицы относятся к способу предоставления входных данных вызову mlflow.evaluate(). Дополнительные сведения см. в разделе "Предоставление входных данных для выполнения оценки ".

Столбец Тип данных Описание Приложение, переданное в качестве входного аргумента Предоставленные ранее созданные выходные данные
идентификатор запроса строка Уникальный идентификатор запроса. Необязательно Необязательно
запрос См. схему запроса. Входные данные в приложение для оценки, вопроса или запроса пользователя. Например, {'messages': [{"role": "user", "content": "What is RAG"}]} или "Что такое RAG?". Когда request предоставлен как строка, он будет преобразован в messages перед передачей вашему агенту. Обязательное поле Обязательное поле
Отклик См. схему ответа. Ответ, созданный оцениваемым приложением. Создано в результате оценки агента Необязательно. Если он не указан, определяется на основе трассировки. Либо response, либо trace требуется.
ожидаемые факты Массив строк Список фактов, ожидаемых в выходных данных модели. См expected_facts . рекомендации. Необязательно Необязательно
ожидаемый_ответ строка Правильный (истинный) ответ на входной запрос. См expected_response . рекомендации. Необязательно Необязательно
Руководящие принципы guidelines Руководящие принципы Именованный словарь или список рекомендаций, которым должны соответствовать выходные данные модели. См guidelines . рекомендации. Необязательно Необязательно
ожидаемый_извлеченный_контекст массив Массив объектов, содержащих ожидаемый контекст для запроса (если приложение включает шаг извлечения). Схема массива Необязательно Необязательно
полученный_контекст массив Результаты извлечения, созданные извлекающим модулем в оцениваемом приложении. Если в приложении имеются несколько шагов извлечения, это результаты последнего шага извлечения в хронологическом порядке в трассировке. Схема массива Создано в результате оценки агента Необязательно. Если он не указан, то определяется из предоставленной трассировки.
след Строка 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 показана в следующей таблице:

Столбец Тип данных Описание Приложение, переданное в качестве входного аргумента Предоставленные ранее созданные выходные данные
содержимое строка Содержимое извлеченного контекста. Строка в любом формате, например HTML, обычный текст или Markdown. Необязательно Необязательно
doc_uri строка Уникальный идентификатор (URI) родительского документа, из которого поступил блок. Обязательное поле Обязательное поле

Вычисляемая метрика

Столбцы в следующей таблице указывают данные, включенные в входные данные, и указывает, что метрика поддерживается при предоставлении данных.

Для получения подробной информации о том, что измеряют эти метрики, см. как оцениваются качество, стоимость и задержка по оценке агентом.

Вычисляемые метрики 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