Compartir a través de


Conjuntos de evaluación

Importante

Esta característica está en versión preliminar pública.

Para medir la calidad de una aplicación agente, debe poder definir un conjunto representativo de solicitudes junto con criterios que caracterizan las respuestas de alta calidad. Para ello, proporcione un conjunto de evaluación. En este artículo se describen las distintas opciones del conjunto de evaluación y algunos procedimientos recomendados para crear un conjunto de evaluación.

Databricks recomienda crear un conjunto de evaluación con etiqueta humana, que consta de preguntas representativas y respuestas de verdad básica. Si la aplicación incluye un paso de recuperación, puede proporcionar opcionalmente los documentos auxiliares en los que espera que se base la respuesta. Aunque se recomienda un conjunto de evaluación con etiqueta humana, la evaluación del agente funciona igualmente bien con conjuntos de evaluación generados sintéticamente.

Un buen conjunto de evaluación tiene las siguientes características:

  • Representativo: debe reflejar con precisión el intervalo de solicitudes que la aplicación encontrará en producción.
  • Desafiante: debe incluir casos difíciles y diversos para probar eficazmente la gama completa de las funcionalidades de la aplicación.
  • Actualización continua: se debe actualizar periódicamente para reflejar cómo se usa la aplicación y los patrones cambiantes del tráfico de producción.

Para obtener el esquema necesario de un conjunto de evaluación, consulte Esquema de entrada de evaluación del agente.

Conjuntos de evaluaciones de ejemplo

En esta sección se incluyen ejemplos sencillos de conjuntos de evaluación.

Conjunto de evaluación de ejemplo con solo request

eval_set = [
    {
        "request": "What is the difference between reduceByKey and groupByKey in Spark?",
    }
]

Conjunto de evaluación de ejemplo con request y 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.",
    }
]

Conjunto de evaluación de ejemplo con request, expected_response y 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.",
    }
]

Conjunto de evaluación de ejemplo con solo request y 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.",
    }
]

Conjunto de evaluación de ejemplo con request, response y 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",
            },
        ],
    }
]

Conjunto de evaluación de ejemplo con request, response, retrieved_context y 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.",
        "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",
            },
        ],
    }
]

Conjunto de evaluación de ejemplo con request, response, retrieved_context, expected_response y expected_retrieved_context

level_4_data  = [
    {
        "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_response": "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",
            },
        ],
    }
]

Procedimientos recomendados para desarrollar un conjunto de evaluación

  • Considere cada ejemplo, o grupo de muestras, en el conjunto de evaluación como una prueba unitaria. Es decir, cada muestra debe corresponder a un escenario específico con un resultado esperado explícito. Por ejemplo, considere la posibilidad de probar con contextos más largos, razonamiento de múltiples saltos y capacidad de inferir respuestas a partir de pruebas indirectas.
  • Considere la posibilidad de probar escenarios adversos de usuarios malintencionados.
  • No hay ninguna directriz específica sobre el número de preguntas que se deben incluir en un conjunto de evaluación, pero las señales claras de los datos de alta calidad normalmente funcionan mejor que las señales con ruido de los datos débiles.
  • Considere la posibilidad de incluir ejemplos difíciles, incluso para que los seres humanos respondan.
  • Tanto si va a crear una aplicación de uso general como si tiene como objetivo un dominio específico, es probable que la aplicación se encuentre una amplia variedad de preguntas. El conjunto de evaluación debe reflejar dicha variedad. Por ejemplo, si va a crear una aplicación para realizar preguntas específicas sobre RR. HH., debe considerar la posibilidad de probar otros dominios (por ejemplo, operaciones), para asegurarse de que la aplicación no delira ni proporciona respuestas perjudiciales.
  • Las etiquetas de alta calidad generadas por humanos son la mejor forma de garantizar que los valores reales que se proporcionan a la aplicación reflejan con precisión el comportamiento deseado. Estos son algunos pasos para garantizar unas etiquetas de alta calidad generadas por humanos:
    • Agregue respuestas (etiquetas) de varios etiquetadores humanos para la misma pregunta.
    • Asegúrese de que las instrucciones de etiquetado sean claras y que los etiquetadores humanos sean coherentes.
    • Asegúrese de que las condiciones del proceso de etiquetado humano sean idénticas al formato de las solicitudes enviadas a la aplicación RAG.
  • Los etiquetadores humanos generan por naturaleza respuestas con mucho ruido e incoherencias debido, por ejemplo, a las diferentes interpretaciones de la pregunta. Esta es una parte importante del proceso. El uso del etiquetado humano puede revelar interpretaciones de preguntas que no había considerado y que podrían proporcionar información sobre el comportamiento que observa en la aplicación.