Evaluar un agente

Después de desarrollar un agente, puedes usar el servicio de evaluación de IA generativa para evaluar la capacidad del agente de completar tareas y objetivos en un caso práctico concreto.

Definir métricas de evaluación

Empieza con una lista de métricas vacía (por ejemplo, metrics = []) y añade las métricas relevantes. Para incluir métricas adicionales, sigue estos pasos:

Respuesta final

La evaluación de la respuesta final sigue el mismo proceso que la evaluación basada en modelos. Para obtener más información, consulta Definir las métricas de evaluación.

Concordancia exacta

metrics.append("trajectory_exact_match")

Si la trayectoria prevista es idéntica a la trayectoria de referencia, con las mismas llamadas a herramientas en el mismo orden, la métrica trajectory_exact_match devuelve una puntuación de 1; de lo contrario, devuelve 0.

Parámetros de entrada:

  • predicted_trajectory: lista de llamadas a herramientas que ha usado el agente para llegar a la respuesta final.
  • reference_trajectory: el uso esperado de la herramienta por parte del agente para responder a la consulta.

Coincidencia en orden

metrics.append("trajectory_in_order_match")

Si la trayectoria prevista contiene todas las llamadas a herramientas de la trayectoria de referencia en el mismo orden y puede tener llamadas a herramientas adicionales, la métrica trajectory_in_order_match devuelve una puntuación de 1; de lo contrario, devuelve 0.

Parámetros de entrada:

  • predicted_trajectory: la trayectoria prevista que usa el agente para llegar a la respuesta final.
  • reference_trajectory: la trayectoria prevista del agente para responder a la consulta.

Coincidencia en cualquier orden

metrics.append("trajectory_any_order_match")

Si la trayectoria prevista contiene todas las llamadas a herramientas de la trayectoria de referencia, pero el orden no importa y puede contener llamadas a herramientas adicionales, la métrica trajectory_any_order_match devuelve una puntuación de 1; de lo contrario, devuelve 0.

Parámetros de entrada:

  • predicted_trajectory: lista de llamadas a herramientas que ha usado el agente para llegar a la respuesta final.
  • reference_trajectory: el uso esperado de la herramienta por parte del agente para responder a la consulta.

Precisión

metrics.append("trajectory_precision")

La métrica trajectory_precision mide cuántas de las llamadas a herramientas de la trayectoria prevista son relevantes o correctas según la trayectoria de referencia. Es un valor de float en el intervalo de [0, 1]: cuanto mayor sea la puntuación, más precisa será la trayectoria prevista.

La precisión se calcula de la siguiente manera: cuenta cuántas acciones de la trayectoria predicha también aparecen en la trayectoria de referencia. Divide ese recuento entre el número total de acciones de la trayectoria prevista.

Parámetros de entrada:

  • predicted_trajectory: lista de llamadas a herramientas que ha usado el agente para llegar a la respuesta final.
  • reference_trajectory: el uso esperado de la herramienta por parte del agente para responder a la consulta.

Recuperación

metrics.append("trajectory_recall")

La métrica trajectory_recall mide cuántas de las llamadas a herramientas esenciales de la trayectoria de referencia se capturan realmente en la trayectoria prevista. Es un valor float en el intervalo de [0, 1]: cuanto mayor sea la puntuación, mejor será el recuerdo de la trayectoria prevista.

El recall se calcula de la siguiente manera: cuenta cuántas acciones de la trayectoria de referencia también aparecen en la trayectoria predicha. Divide ese recuento entre el número total de acciones de la trayectoria de referencia.

Parámetros de entrada:

  • predicted_trajectory: lista de llamadas a herramientas que ha usado el agente para llegar a la respuesta final.
  • reference_trajectory: el uso esperado de la herramienta por parte del agente para responder a la consulta.

Uso de una sola herramienta

from vertexai.preview.evaluation import metrics

metrics.append(metrics.TrajectorySingleToolUse(tool_name='tool_name'))

La métrica trajectory_single_tool_use comprueba si se usa una herramienta específica que se indica en la especificación de la métrica en la trayectoria prevista. No comprueba el orden de las llamadas a herramientas ni cuántas veces se usa la herramienta, solo si está presente o no. Es un valor de 0 si la herramienta no está presente y 1 en caso contrario.

Parámetros de entrada:

  • predicted_trajectory: lista de llamadas a herramientas que ha usado el agente para llegar a la respuesta final.

Personalizado

Puede definir una métrica personalizada de la siguiente manera:

from vertexai.preview.evaluation import metrics

def word_count(instance):
  response = instance["response"]
  score = len(response.split(" "))
  return {"word_count": score}

metrics.append(
  metrics.CustomMetric(name="word_count", metric_function=word_count)
)

Las dos métricas de rendimiento siguientes siempre se incluyen en los resultados. No es necesario que los especifiques en EvalTask:

  • latency (float): tiempo que tarda el agente en responder (en segundos).
  • failure (bool): 0 si la invocación del agente se ha realizado correctamente; de lo contrario, 1.

Preparar el conjunto de datos de evaluación

Para preparar tu conjunto de datos para la respuesta final o la evaluación de la trayectoria, sigue estos pasos:

Respuesta final

El esquema de datos para la evaluación de la respuesta final es similar al de la evaluación de la respuesta del modelo.

Concordancia exacta

El conjunto de datos de evaluación debe proporcionar las siguientes entradas:

Parámetros de entrada:

  • predicted_trajectory: lista de llamadas a herramientas que ha usado el agente para llegar a la respuesta final.
  • reference_trajectory: el uso esperado de la herramienta por parte del agente para responder a la consulta.

Coincidencia en orden

El conjunto de datos de evaluación debe proporcionar las siguientes entradas:

Parámetros de entrada:

  • predicted_trajectory: la trayectoria prevista que usa el agente para llegar a la respuesta final.
  • reference_trajectory: la trayectoria prevista del agente para responder a la consulta.

Coincidencia en cualquier orden

El conjunto de datos de evaluación debe proporcionar las siguientes entradas:

Parámetros de entrada:

  • predicted_trajectory: lista de llamadas a herramientas que ha usado el agente para llegar a la respuesta final.
  • reference_trajectory: el uso esperado de la herramienta por parte del agente para responder a la consulta.

Precisión

El conjunto de datos de evaluación debe proporcionar las siguientes entradas:

Parámetros de entrada:

  • predicted_trajectory: lista de llamadas a herramientas que ha usado el agente para llegar a la respuesta final.
  • reference_trajectory: el uso esperado de la herramienta por parte del agente para responder a la consulta.

Recuperación

El conjunto de datos de evaluación debe proporcionar las siguientes entradas:

Parámetros de entrada:

  • predicted_trajectory: lista de llamadas a herramientas que ha usado el agente para llegar a la respuesta final.
  • reference_trajectory: el uso esperado de la herramienta por parte del agente para responder a la consulta.

Uso de una sola herramienta

El conjunto de datos de evaluación debe proporcionar las siguientes entradas:

Parámetros de entrada:

  • predicted_trajectory: lista de llamadas a herramientas que ha usado el agente para llegar a la respuesta final.

A modo de ejemplo, a continuación se muestra un conjunto de datos de evaluación.

  import pandas as pd

  eval_dataset = pd.DataFrame({
    "predicted_trajectory": [
      [ # example 1
        {
          "tool_name": "set_device_info",
          "tool_input": {"device_id": "device_3", "updates": {"status": "OFF"}}
        },
      ],
      [ # example 2
        {
          "tool_name": "get_user_preferences",
          "tool_input": {"user_id": "user_z"},
        }, {
          "tool_name": "set_temperature",
          "tool_input": {"location": "Living Room", "temperature": 23},
        },
      ]
    ],
    "reference_trajectory": [
      [ # example 1
        {
          "tool_name": "set_device_info",
          "tool_input": {"device_id": "device_2", "updates": {"status": "OFF"}},
        },
      ],
      [ # example 2
        {
          "tool_name": "get_user_preferences",
          "tool_input": {"user_id": "user_y"},
        }, {
          "tool_name": "set_temperature",
          "tool_input": {"location": "Living Room", "temperature": 23},
        },
      ],
    ],
  })

Conjuntos de datos de ejemplo

Hemos proporcionado los siguientes conjuntos de datos de ejemplo para mostrar cómo puedes evaluar agentes:

  • "on-device": conjunto de datos de evaluación de un asistente para el hogar en el dispositivo. El agente ayuda con consultas como "Programa el aire acondicionado del dormitorio para que esté encendido entre las 23:00 y las 8:00, y apagado el resto del tiempo".

  • "customer-support": conjunto de datos de evaluación de un agente de asistencia. El agente ayuda con consultas como "¿Puedes cancelar los pedidos pendientes y derivar las incidencias de asistencia abiertas?".

  • "content-creation": conjunto de datos de evaluación de un agente de creación de contenido de marketing. El agente ayuda con consultas como "Reprograma la campaña X para que sea una campaña única en el sitio de redes sociales Y con un presupuesto reducido en un 50 %, solo el 25 de diciembre del 2024".

Para importar los conjuntos de datos de ejemplo, siga estos pasos:

  1. Instala e inicializa la CLI de gcloud.

  2. Descarga el conjunto de datos de evaluación.

    En el dispositivo

    gcloud storage cp gs://cloud-ai-demo-datasets/agent-eval-datasets/on-device/eval_dataset.json .

    Servicio de asistencia

    gcloud storage cp gs://cloud-ai-demo-datasets/agent-eval-datasets/customer-support/eval_dataset.json .

    Creación de contenido

    gcloud storage cp gs://cloud-ai-demo-datasets/agent-eval-datasets/content-creation/eval_dataset.json .
  3. Cargar los ejemplos de conjuntos de datos

    import json
    
    eval_dataset = json.loads(open('eval_dataset.json').read())
    

Generar resultados de evaluación

Para generar los resultados de la evaluación, ejecuta el siguiente código:

from vertexai.preview.evaluation import EvalTask

eval_task = EvalTask(dataset=eval_dataset, metrics=metrics)
eval_result = eval_task.evaluate(runnable=agent)

Ver e interpretar los resultados

Los resultados de la evaluación se muestran de la siguiente manera:

Tablas de métricas de evaluación de agentes

Los resultados de la evaluación contienen la siguiente información:

Métricas de respuesta final

Métricas por filas:

  • response: respuesta final generada por el agente.
  • latency_in_seconds: tiempo empleado (en segundos) para generar la respuesta.
  • failure: indica si se ha generado una respuesta válida o no.
  • score: una puntuación calculada para la respuesta especificada en la especificación de la métrica.
  • explanation: la explicación de la puntuación especificada en la especificación de la métrica.

Métricas de resumen:

  • mean: puntuación media de todas las instancias.
  • standard deviation: desviación estándar de todas las puntuaciones.

Métricas de trayectoria

Métricas por filas:

  • predicted_trajectory: secuencia de llamadas a herramientas seguida por el agente para llegar a la respuesta final.
  • reference_trajectory: secuencia de llamadas a herramientas esperadas.
  • score: puntuación calculada para la trayectoria predicha y la trayectoria de referencia especificadas en la especificación de la métrica.
  • latency_in_seconds: tiempo empleado (en segundos) para generar la respuesta.
  • failure: indica si se ha generado una respuesta válida o no.

Métricas de resumen:

  • mean: puntuación media de todas las instancias.
  • standard deviation: desviación estándar de todas las puntuaciones.

Siguientes pasos

Prueba los siguientes cuadernos: