Share via


Personalización del flujo de evaluación y métricas

Los flujos de evaluación son tipos especiales de flujos que evalúan cómo se alinean las salidas de un flujo con criterios y objetivos específicos mediante el cálculo de métricas.

En el flujo de avisos, puede personalizar o crear un flujo de evaluación y métricas propios adaptados a las tareas y objetivos, y después usarlos para evaluar otros flujos. En este documento aprenderá lo siguiente:

  • Descripción de la evaluación en el flujo de avisos
    • Entradas
    • Salidas y registro de métricas
  • Cómo desarrollar un método de evaluación
  • Uso de un flujo de evaluación personalizado en la ejecución por lotes

Descripción de la evaluación en el flujo de avisos

En el flujo de avisos, un flujo es una secuencia de nodos que procesan una entrada y generan una salida. Los flujos de evaluación, de forma similar, pueden tomar entradas necesarias y generar salidas correspondientes, que suelen ser las puntuaciones o métricas. Los conceptos de los flujos de evaluación son similares a los de los flujos estándar, pero hay algunas diferencias en la experiencia de creación y en la forma en que se usan.

Algunas características especiales de los flujos de evaluación son:

  • Normalmente se ejecutan después de la ejecución que se va a probar mediante la recepción de sus salidas. Usan las salidas para calcular las puntuaciones y métricas. Las salidas de un flujo de evaluación son los resultados que miden el rendimiento del flujo que se está probando.
  • Pueden tener un nodo de agregación que calcule el rendimiento general del flujo que se está probando en el conjunto de datos de prueba.
  • Pueden registrar métricas mediante la función log_metric().

Se presentará cómo se deben definir las entradas y salidas en el desarrollo de métodos de evaluación.

Entradas

Los flujos de evaluación calculan las métricas o puntuaciones de una ejecución por lotes de flujo basándose en un conjunto de datos. Para ello, deben tomar las salidas de la ejecución que se está probando. Puede definir las entradas de un flujo de evaluación de la misma manera que se definen las entradas de un flujo estándar.

Una evaluación se ejecuta después de otra ejecución para evaluar cómo se alinean las salidas de esa ejecución con los criterios y objetivos específicos. Por tanto, la evaluación recibe las salidas generadas a partir de esa ejecución.

Por ejemplo, si el flujo que se está probando es un flujo de preguntas frecuentes que genera respuestas basadas en una pregunta, puede asignar un nombre a una entrada de la evaluación como answer. Si el flujo que se está probando es un flujo de clasificación que clasifica un texto en una categoría, puede asignar un nombre a una entrada de la evaluación como category.

También se necesitan otras entradas, como ground truth. Por ejemplo, si quiere calcular la precisión de un flujo de clasificación, debe proporcionar la columna category en el conjunto de datos como información básica. Si quiere calcular la precisión de un flujo de preguntas frecuentes, debe proporcionar la columna answer en el conjunto de datos como información básica.

De manera predeterminada, la evaluación usa el mismo conjunto de datos que el conjunto de datos de prueba proporcionado a la ejecución probada. Pero si las etiquetas correspondientes o los valores de verdad fundamental de destino están en otro conjunto de datos, puede cambiar fácilmente a ese.

Es posible que se necesiten otras entradas para calcular las métricas, como question y context en el escenario de preguntas frecuentes o RAG. Puede definir estas entradas de la misma manera que definir las entradas de un flujo estándar.

Descripción de la entrada

Para recordar qué entradas son necesarias para calcular las métricas, puede agregar una descripción para cada entrada necesaria. Las descripciones se muestran al asignar los orígenes en el envío de la ejecución por lotes.

Screenshot of evaluation input mapping with the answers description highlighted.

Para agregar descripciones para cada entrada, seleccione Mostrar descripción en la sección de entradas cuando desarrolle su método de evaluación. Y puede seleccionar "Ocultar descripción" para ocultar la descripción.

Screenshot of Classification Accuracy Evaluation with hide description highlighted.

Después, esta descripción se muestra al usar este método de evaluación en el envío de la ejecución por lotes.

Salidas y métricas

Las salidas de una evaluación son los resultados que miden el rendimiento del flujo que se está probando. La salida normalmente contiene métricas como puntuaciones y también puede incluir texto para el razonamiento y las sugerencias.

Salidas de evaluación: puntuaciones de nivel de instancia

En el flujo de avisos, el flujo procesa una fila de datos a la vez y genera un registro de salida. De forma similar, en la mayoría de los casos de evaluación, hay una puntuación para cada salida, lo que le permite comprobar cómo funciona el flujo en cada dato individual.

El flujo de evaluación puede calcular las puntuaciones de cada dato y se pueden registrar las puntuaciones de cada muestra de datos como salidas de flujo estableciendolas en la sección de salida del flujo de evaluación. Esta experiencia de creación es la misma que definir una salida de flujo estándar.

Screenshot of the outputs section showing a name and value.

Puede ver las puntuaciones en la pestaña Información general:>Salida cuando se usa este método de evaluación para evaluar otro flujo. Este proceso es el mismo que comprobar las salidas de ejecución por lotes de un flujo estándar. La puntuación de nivel de instancia se anexa a la salida del flujo que se está probando.

Registro de métricas y nodo de agregación

Además, también es importante proporcionar una puntuación general para la ejecución. Para distinguir entre la puntuación individual de evaluar cada salida única, llamamos a los valores para evaluar el rendimiento general de una ejecución como "métricas".

Para calcular el valor general de la evaluación en función de cada puntuación individual, puede comprobar la "agregación" de un nodo de Python en un flujo de evaluación para convertirlo en un nodo de "reducción", lo que permite que el nodo tome las entradas como una lista y procesarlos por lotes.

Screenshot of the Python node heading pointing to an unchecked checked box.

De este modo, puede calcular y procesar todas las puntuaciones de cada salida de flujo y calcular un resultado general para cada variante. Por ejemplo, si desea calcular la precisión de un flujo de clasificación, puede calcular la precisión de cada salida de puntuación y, a continuación, calcular la precisión media de todas las salidas de puntuación. A continuación, puede registrar la precisión media como métrica mediante promptflow_sdk.log_metrics(). Las métricas deben ser numéricas (float/int). No se admite el registro de métricas de tipo de cadena.

El siguiente fragmento de código es un ejemplo de cálculo de la precisión general mediante el promedio de la puntuación de precisión (grade) de cada dato. La precisión general se registra como una métrica mediante promptflow_sdk.log_metrics().

from typing import List
from promptflow import tool, log_metric

@tool
def calculate_accuracy(grades: List[str]): # Receive a list of grades from a previous node
    # calculate accuracy
    accuracy = round((grades.count("Correct") / len(grades)), 2)
    log_metric("accuracy", accuracy)

    return accuracy

Como ha llamado a esta función en el nodo de Python, no es necesario asignarla en ninguna otra parte y puede ver las métricas más adelante. Cuando se usa este método de evaluación en una ejecución por lotes, las métricas que indican el rendimiento general se pueden ver en la pestaña Información general:->Métricas.

Screenshot of the metrics tab that shows the metrics logged by log metric.

Empezar a desarrollar un método de evaluación

Hay dos maneras de desarrollar sus propios métodos de evaluación:

  • Creación de un nuevo flujo de evaluación desde cero: desarrolle un nuevo método de evaluación desde cero. En la página principal de la pestaña Flujo de avisos, en la sección "Crear por tipo", puede elegir "Flujo de evaluación" y ver una plantilla de flujo de evaluación.

Screenshot of create a new evaluation flow from scratch.

  • Personalización de un flujo de evaluación integrado: modifique un flujo de evaluación integrado. Busque el flujo de evaluación integrado desde el asistente para la creación de flujos: galería de flujos, seleccione "Clonar" para realizar la personalización. A continuación, puede ver y comprobar la lógica y el flujo de las evaluaciones integradas y, a continuación, modificar el flujo. De este modo, no se empieza desde el principio, sino desde un ejemplo para que lo use para su personalización.

Screenshot of cloning a built-in evaluation flow.

Cálculo de puntuaciones para cada dato

Como se mencionó, la evaluación se ejecuta para calcular las puntuaciones y métricas en función de un flujo que se ejecuta en un conjunto de datos. Por lo tanto, el primer paso de los flujos de evaluación consiste en calcular las puntuaciones de cada salida individual.

Tome el flujo de evaluación integrado Classification Accuracy Evaluation como ejemplo, la puntuación grade, que mide la precisión de cada salida generada por el flujo en la información básica correspondiente, se calcula en el nodo grade. Si crea un flujo de evaluación y lo edita desde cero al crear por tipo, esta puntuación se calcula en el nodo line_process de la plantilla. También puede reemplazar el nodo line_process de Python por un nodo LLM con el fin de usar LLM para calcular la puntuación o usar varios nodos para realizar el cálculo.

Screenshot of line process node in the template.

A continuación, debe especificar la salida de los nodos como salidas del flujo de evaluación, lo que indica que las salidas son las puntuaciones calculadas para cada muestra de datos. También puede generar el razonamiento como información adicional y es la misma experiencia al definir salidas en el flujo estándar.

Cálculos y registros de métricas

El segundo paso de la evaluación es calcular las métricas generales para evaluar la ejecución. Como se mencionó, las métricas se calculan en un nodo de Python que se establece como Aggregation. Este nodo toma las puntuaciones calculadas en el nodo anterior y organiza la puntuación de cada muestra de datos en una lista y, a continuación, las calcula todas a la vez.

Si crea y edita desde cero al crear por tipo, esta puntuación se calcula en el nodo aggregate. El fragmento de código es la plantilla de un nodo de agregación.


from typing import List
from promptflow import tool

@tool
def aggregate(processed_results: List[str]):
    """
    This tool aggregates the processed result of all lines and log metric.
    :param processed_results: List of the output of line_process node.
    """
    # Add your aggregation logic here
    aggregated_results = {}

    # Log metric
    # from promptflow import log_metric
    # log_metric(key="<my-metric-name>", value=aggregated_results["<my-metric-name>"])

    return aggregated_results

Puede usar su propia lógica de agregación, como calcular el promedio, el valor medio o la desviación estándar de las puntuaciones.

A continuación, debe registrar las métricas con la función promptflow.logmetrics(). Puede registrar varias métricas en un único flujo de evaluación. Las métricas deben ser numéricas (float/int).

Uso de un flujo de evaluación personalizado

Después de crear su propio flujo de evaluación y métricas, puede usar este flujo para evaluar el rendimiento del flujo estándar.

  1. En primer lugar, comience desde la página de creación del flujo en la que desea evaluar. Por ejemplo, un flujo de preguntas frecuentes con el que todavía sabe cómo funciona en un conjunto de datos grande y desea probarlo. Haga clic en el botón Evaluate y elija Custom evaluation.

    Screenshot of evaluation button.

  2. A continuación, de forma similar a los pasos de envío de una ejecución por lotes, como se mencionó en Envío de ejecución por lotes y evaluación de un flujo en el flujo de avisos, siga los primeros pasos para preparar el conjunto de datos para ejecutar el flujo.

  3. A continuación, en el paso Evaluation settings - Select evaluation, junto con las evaluaciones integradas, las evaluaciones personalizadas también están disponibles para la selección. Esto enumera todos los flujos de evaluación de la lista de flujos que ha creado, clonado o personalizado. Los flujos de evaluación creados por otros usuarios del mismo proyecto no se mostrarán en esta sección.

    Screenshot of selecting customized evaluation.

  4. A continuación, en el paso Evaluation settings - Configure evaluation, debe especificar los orígenes de los datos de entrada necesarios para el método de evaluación. Por ejemplo, la columna de verdad básica puede provenir de un conjunto de datos.

    Para ejecutar una evaluación, puede indicar los orígenes de estas entradas necesarias en la sección "Asignación de entrada" al enviar una evaluación. Este proceso es el mismo que la configuración mencionada en Envío de ejecución por lotes y evaluación un flujo en el flujo de avisos.

    • Si el origen de datos procede de la salida de la ejecución, el origen se indica como ${run.output.[OutputName]}
    • Si el origen de datos procede del conjunto de datos de prueba, el origen se indica como ${data.[ColumnName]}

    Screenshot of evaluation input mapping.

    Nota:

    Si la evaluación no necesita datos del conjunto de datos, no es necesario hacer referencia a ninguna columna del conjunto de datos de la sección de asignación de entradas, lo que indica que la selección del conjunto de datos es una configuración opcional. La selección del conjunto de datos no afectará al resultado de la evaluación.

  5. Cuando se usa este método de evaluación para evaluar otro flujo, la puntuación de nivel de instancia se puede ver en la pestaña Información general ->Salida.

    Screenshot of the output tab with evaluation result appended and highlighted.

Pasos siguientes