Compartir a través de


Esquema de entrada de evaluación del agente (MLflow 2)

Importante

Databricks recomienda usar MLflow 3 para evaluar y supervisar aplicaciones de GenAI. En esta página se describe la evaluación del agente de MLflow 2.

En este artículo se explica el esquema de entrada requerido por la evaluación del agente para evaluar la calidad, el costo y la latencia de la aplicación.

  • Durante el desarrollo, la evaluación tiene lugar sin conexión y un conjunto de evaluación es una entrada necesaria para la evaluación del agente.
  • Cuando una aplicación está en producción, todas las entradas a la evaluación del agente proceden de las tablas de inferencia o los registros de producción.

El esquema de entrada es idéntico para las evaluaciones en línea y sin conexión.

Para obtener información general sobre los conjuntos de evaluación, consulte Conjuntos de evaluación (MLflow 2).

Esquema de entrada de evaluación

En la tabla siguiente se muestra el esquema de entrada de Agent Evaluation. Las dos últimas columnas de la tabla hacen referencia a cómo se proporciona la entrada a la llamada mlflow.evaluate(). Consulta Suministro de entradas a una ejecución de evaluación para obtener más información.

Columna Tipo de datos Descripción Aplicación pasada como argumento de entrada Salidas generadas anteriormente proporcionadas
identificador_de_solicitud cuerda / cadena Identificador único de la solicitud. Opcional Opcional
request Consulte Esquema para la solicitud. Entrada a la aplicación para evaluar: pregunta o consulta del usuario. Por ejemplo, {'messages': [{"role": "user", "content": "What is RAG"}]} o "¿Qué es RAG?". Cuando request se proporciona como una cadena, se transformará en messages antes de pasarlo al agente. Obligatorio Obligatorio
respuesta Consulte Esquema para obtener respuesta. Respuesta generada por la aplicación que se está evaluando. Generada por la evaluación del agente Opcional. Si no se proporciona, se deriva del seguimiento. Es obligatorio especificar response o trace.
hechos_esperados matriz de cadena Lista de hechos que se esperan en la salida del modelo. Consulte expected_facts las instrucciones. Opcional Opcional
respuesta esperada cuerda / cadena Respuesta verdadera (correcta) para la solicitud de entrada. Consulte expected_response las instrucciones. Opcional Opcional
directrices guidelines directrices Una lista o diccionario con nombre de directrices a las que se espera que la salida del modelo se ajuste. Consulte guidelines las instrucciones. Opcional Opcional
expected_retrieved_context matriz Matriz de objetos que contienen el contexto recuperado esperado para la solicitud (si la aplicación incluye un paso de recuperación). Esquema de matriz Opcional Opcional
retrieved_context matriz Resultados de recuperación generados por el recuperador en la aplicación que se está evaluando. Si hay varios pasos de recuperación en la aplicación, estos son los resultados de la recuperación del último paso (cronológicamente en el seguimiento). Esquema de matriz Generada por la evaluación del agente Opcional. Si no se proporciona, se deriva del seguimiento proporcionado.
trace Cadena JSON de seguimiento de MLflow Seguimiento de MLflow de la ejecución de la aplicación en la solicitud correspondiente. Generada por la evaluación del agente Opcional. Es obligatorio especificar response o trace.

Directrices expected_facts

El campo expected_facts especifica la lista de hechos que se espera que aparezcan en cualquier respuesta de modelo correcta para la solicitud de entrada específica. Es decir, una respuesta del modelo se considera correcta si contiene estos hechos, independientemente de cómo se redacte la respuesta.

Incluir solo los hechos necesarios y dejar fuera los hechos que no son estrictamente necesarios en la respuesta permite a la evaluación del agente proporcionar una señal más sólida sobre la calidad de la salida.

Puede especificar como máximo uno de expected_facts y expected_response. Si especifica ambos, se notificará un error. Databricks recomienda usar expected_facts, ya que es una guía más específica que ayuda a la evaluación del agente a juzgar de forma más eficaz la calidad de las respuestas generadas.

Directrices guidelines

El guidelines campo especifica unas directrices de conjunto a las que debe cumplir cualquier respuesta de modelo correcta. guidelines se puede expresar en dos formatos:

  • La lista de instrucciones (List[str]) proporciona un único conjunto de directrices.
  • Las directrices nombradas (Dict[str, List[str]]) proporcionan una asignación de un nombre de directriz a una serie de directrices para ese nombre. Las instrucciones con nombre requieren databricks-agents >= 0.16.0.

Las directrices pueden referirse a varios rasgos de la respuesta, incluidos elementos relacionados con el estilo o el contenido. Para obtener la señal más sólida sobre el cumplimiento de las directrices, Databricks recomienda usar el siguiente lenguaje:

  • "La respuesta debe..."
  • "La respuesta no debe..."
  • "La respuesta puede ser opcionalmente..."

En concreto, debe hacer referencia a la solicitud y respuesta directamente y dejar la menor ambigüedad posible en las instrucciones. Para obtener instrucciones que se aplican a todo el conjunto de evaluación, como asegurarse de que las respuestas tengan un tono profesional o estén siempre en inglés, use el parámetro global_guidelines en la configuración del evaluador de la siguiente manera:

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"],
            }
        }
    }
)

Directrices expected_response

El campo expected_response contiene una respuesta totalmente formada que representa una referencia para las respuestas del modelo correctas. Es decir, una respuesta del modelo se considera correcta si coincide con el contenido de la información de expected_response. En cambio, expected_facts enumera solo los hechos necesarios para aparecer en una respuesta correcta y no es una respuesta de referencia totalmente formada.

De forma similar a expected_facts, expected_response solo debe contener el conjunto mínimo de hechos necesarios para una respuesta correcta. Incluir solo la información necesaria y dejar fuera la información que no es estrictamente necesarios en la respuesta permite a la evaluación del agente proporcionar una señal más sólida sobre la calidad de la salida.

Puede especificar como máximo uno de expected_facts y expected_response. Si especifica ambos, se notificará un error. Databricks recomienda usar expected_facts, ya que es una guía más específica que ayuda a la evaluación del agente a juzgar de forma más eficaz la calidad de las respuestas generadas.

Esquema de solicitud

El esquema de solicitud puede ser uno de los siguientes:

  • Un diccionario serializable arbitrario (por ejemplo, Dict[str, Any])
  • Si el agente admite el esquema de finalización del chat de OpenAI, puede pasar una cadena sin formato. Este formato solo admite conversaciones de un solo turno. Las cadenas sin formato se convierten en el formato messages con "role": "user" antes de pasarse al agente. Por ejemplo, una cadena sin formato "What is MLflow?" se convierte en {"messages": [{"role": "user", "content": "What is MLflow?"}]} antes de pasarse al agente.

Tenga en cuenta que los jueces integrados funcionan mejor con cualquier formato mediante un esquema de finalización de chat de OpenAI. El esquema de finalización del chat de OpenAI debe tener una matriz de objetos como parámetro messages. El campo messages puede codificar la conversación completa.

En el ejemplo siguiente se muestran algunas opciones posibles en la misma request columna del conjunto de datos de evaluación:

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)

Esquema de respuesta

El esquema de respuesta, similar al esquema de solicitud, puede ser uno de los siguientes:

  • Un diccionario serializable arbitrario (por ejemplo, Dict[str, Any]).
  • Si el agente admite el esquema de finalización del chat de OpenAI, puede pasar una cadena sin formato. Este formato solo admite conversaciones de un solo turno. Las cadenas de texto simples se convierten al formato choices. Por ejemplo, una cadena "MLFlow is a framework." sin formato se convierte en {"choices": [{"message": {"content": "MLFlow is a framework."}}]}.

Esquema para matrices de la entrada de evaluación

El esquema de las matrices expected_retrieved_context y retrieved_context se muestra en la tabla siguiente:

Columna Tipo de datos Descripción Aplicación pasada como argumento de entrada Salidas generadas anteriormente proporcionadas
contenido cuerda / cadena Contenido del contexto recuperado. Cadena en cualquier formato, como HTML, texto sin formato o Markdown. Opcional Opcional
doc_uri cuerda / cadena Identificador único (URI) del documento primario del que procede el fragmento. Obligatorio Obligatorio

Métricas calculadas

Las columnas de la tabla siguiente indican los datos incluidos en la entrada y indica que la métrica se admite cuando se proporcionan esos datos.

Para más información sobre lo que miden estas métricas, consulte Cómo evalúa la calidad, el costo y la latencia mediante la evaluación del agente (MLflow 2).

Métricas calculadas request request y expected_response request, expected_response, expected_retrieved_contexty guidelines request y expected_retrieved_context request y 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