Cómo 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 para completar tareas y objetivos para un caso de uso determinado.

Define las métricas de evaluación

Comienza con una lista vacía de métricas (es decir, metrics = []) y agrégale 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 Define tus 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 la herramienta en el mismo orden, la métrica trajectory_exact_match muestra una puntuación de 1; de lo contrario, muestra 0.

Parámetros de entrada:

  • predicted_trajectory: Es la lista de llamadas a herramientas que usa el agente para llegar a la respuesta final.
  • reference_trajectory: Es el uso esperado de la herramienta para que el agente satisfaga la consulta.

Coincidencia en orden

metrics.append("trajectory_in_order_match")

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

Parámetros de entrada:

  • predicted_trajectory: Es la trayectoria prevista que usa el agente para llegar a la respuesta final.
  • reference_trajectory: Es la trayectoria prevista esperada para que el agente satisfaga la consulta.

Coincidencia en cualquier orden

metrics.append("trajectory_any_order_match")

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

Parámetros de entrada:

  • predicted_trajectory: Es la lista de llamadas a herramientas que usa el agente para llegar a la respuesta final.
  • reference_trajectory: Es el uso esperado de la herramienta para que el agente satisfaga la consulta.

Precisión

metrics.append("trajectory_precision")

La métrica trajectory_precision mide cuántas de las llamadas a la herramienta en la trayectoria prevista son realmente relevantes o correctas según la trayectoria de referencia. Es un valor float en el rango de [0, 1]: cuanto más alta 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 prevista también aparecen en la trayectoria de referencia. Divide ese recuento por la cantidad total de acciones en la trayectoria prevista.

Parámetros de entrada:

  • predicted_trajectory: Es la lista de llamadas a herramientas que usa el agente para llegar a la respuesta final.
  • reference_trajectory: Es el uso esperado de la herramienta para que el agente satisfaga 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 en la trayectoria prevista. Es un valor float en el rango de [0, 1]: cuanto más alta sea la puntuación, mejor será la recuperación de la trayectoria prevista.

La recuperación se calcula de la siguiente manera: Cuenta cuántas acciones de la trayectoria de referencia también aparecen en la trayectoria prevista. Divide ese recuento por la cantidad total de acciones en la trayectoria de referencia.

Parámetros de entrada:

  • predicted_trajectory: Es la lista de llamadas a herramientas que usa el agente para llegar a la respuesta final.
  • reference_trajectory: Es el uso esperado de la herramienta para que el agente satisfaga 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 verifica si se usa una herramienta específica que se especifica en la especificación de la métrica en la trayectoria prevista. No verifica el orden de las llamadas a la herramienta ni cuántas veces se usa, solo si está presente o no. Es un valor de 0 si la herramienta no está presente, 1 de lo contrario.

Parámetros de entrada:

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

Personalizado

Puedes 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 siguientes dos métricas de rendimiento siempre se incluyen en los resultados. No es necesario que los especifiques en EvalTask:

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

Prepara el conjunto de datos de evaluación

Para preparar tu conjunto de datos para la respuesta final o la evaluación de la trayectoria, haz lo siguiente:

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: Es la lista de llamadas a herramientas que usa el agente para llegar a la respuesta final.
  • reference_trajectory: Es el uso esperado de la herramienta para que el agente satisfaga la consulta.

Coincidencia en orden

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

Parámetros de entrada:

  • predicted_trajectory: Es la trayectoria prevista que usa el agente para llegar a la respuesta final.
  • reference_trajectory: Es la trayectoria prevista esperada para que el agente satisfaga la consulta.

Coincidencia en cualquier orden

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

Parámetros de entrada:

  • predicted_trajectory: Es la lista de llamadas a herramientas que usa el agente para llegar a la respuesta final.
  • reference_trajectory: Es el uso esperado de la herramienta para que el agente satisfaga la consulta.

Precisión

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

Parámetros de entrada:

  • predicted_trajectory: Es la lista de llamadas a herramientas que usa el agente para llegar a la respuesta final.
  • reference_trajectory: Es el uso esperado de la herramienta para que el agente satisfaga la consulta.

Recuperación

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

Parámetros de entrada:

  • predicted_trajectory: Es la lista de llamadas a herramientas que usa el agente para llegar a la respuesta final.
  • reference_trajectory: Es el uso esperado de la herramienta para que el agente satisfaga 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: Es la lista de llamadas a herramientas que usa el agente para llegar a la respuesta final.

A modo de ejemplo, el siguiente es un ejemplo de 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

Proporcionamos los siguientes conjuntos de datos de ejemplo para demostrar cómo puedes evaluar agentes:

  • "on-device": Es un conjunto de datos de evaluación para un Asistente de Google integrado en el dispositivo. El agente ayuda con consultas como "Programa el aire acondicionado de la habitación para que esté encendido entre las 11 p.m. y las 8 a.m., y apagado el resto del tiempo".

  • "customer-support": Conjunto de datos de evaluación para un agente de atención al cliente. El agente ayuda con consultas como "¿Puedes cancelar los pedidos pendientes y derivar los tickets de asistencia abiertos?".

  • "content-creation": Conjunto de datos de evaluación para 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 de 2024".

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

  1. Instala y 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 .

    Asistencia al cliente

    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. Carga los ejemplos de conjuntos de datos

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

Generar resultados de la 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)

Visualiza e interpreta los resultados

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

Tablas para las 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 fila:

  • response: Es la respuesta final que genera el agente.
  • latency_in_seconds: Es el tiempo (en segundos) que se tardó en generar la respuesta.
  • failure: Indica si se generó una respuesta válida o no.
  • score: Es una puntuación calculada para la respuesta especificada en la especificación de la métrica.
  • explanation: Es la explicación de la puntuación especificada en la especificación de la métrica.

Métricas de resumen:

  • mean: Es la puntuación promedio de todas las instancias.
  • standard deviation: Desviación estándar de todas las puntuaciones.

Métricas de trayectoria

Métricas por fila:

  • predicted_trajectory: Es la secuencia de llamadas a la herramienta que sigue el agente para llegar a la respuesta final.
  • reference_trajectory: Es la secuencia de llamadas a herramientas esperadas.
  • score: Es una puntuación calculada para la trayectoria prevista y la trayectoria de referencia especificadas en la especificación de la métrica.
  • latency_in_seconds: Es el tiempo (en segundos) que se tardó en generar la respuesta.
  • failure: Indica si se generó una respuesta válida o no.

Métricas de resumen:

  • mean: Es la puntuación promedio de todas las instancias.
  • standard deviation: Desviación estándar de todas las puntuaciones.

¿Qué sigue?

Prueba los siguientes notebooks: