Évaluer un agent

Après avoir développé un agent, vous pouvez utiliser le service d'évaluation de l'IA générative pour évaluer sa capacité à accomplir des tâches et à atteindre des objectifs dans un cas d'utilisation donné.

Définir des métriques d'évaluation

Commencez par une liste de métriques vide (c'est-à-dire metrics = []) et ajoutez-y les métriques pertinentes. Pour inclure d'autres métriques :

Réponse finale

L'évaluation de la réponse finale suit le même processus que l'évaluation basée sur le modèle. Pour en savoir plus, consultez Définir vos métriques d'évaluation.

Correspondance exacte

metrics.append("trajectory_exact_match")

Si la trajectoire prédite est identique à la trajectoire de référence, avec exactement les mêmes appels d'outils dans le même ordre, la métrique trajectory_exact_match renvoie un score de 1, sinon 0.

Paramètres d'entrée :

  • predicted_trajectory : liste des appels d'outils utilisés par l'agent pour obtenir la réponse finale.
  • reference_trajectory : utilisation prévue de l'outil par l'agent pour répondre à la requête.

Correspondance dans l'ordre

metrics.append("trajectory_in_order_match")

Si la trajectoire prédite contient tous les appels d'outil de la trajectoire de référence dans le même ordre et peut également contenir des appels d'outil supplémentaires, la métrique trajectory_in_order_match renvoie un score de 1, sinon 0.

Paramètres d'entrée :

  • predicted_trajectory : trajectoire prédite utilisée par l'agent pour atteindre la réponse finale.
  • reference_trajectory : trajectoire prédite attendue pour que l'agent réponde à la requête.

Correspondance dans n'importe quel ordre

metrics.append("trajectory_any_order_match")

Si la trajectoire prédite contient tous les appels d'outils de la trajectoire de référence, mais que l'ordre n'a pas d'importance et peut contenir des appels d'outils supplémentaires, la métrique trajectory_any_order_match renvoie un score de 1, sinon 0.

Paramètres d'entrée :

  • predicted_trajectory : liste des appels d'outils utilisés par l'agent pour obtenir la réponse finale.
  • reference_trajectory : utilisation prévue de l'outil par l'agent pour répondre à la requête.

Précision

metrics.append("trajectory_precision")

La métrique trajectory_precision mesure le nombre d'appels d'outils dans la trajectoire prédite qui sont réellement pertinents ou corrects par rapport à la trajectoire de référence. Il s'agit d'une valeur float comprise entre [0, 1]. Plus le score est élevé, plus la trajectoire prédite est précise.

La précision est calculée comme suit : comptez le nombre d'actions de la trajectoire prédite qui apparaissent également dans la trajectoire de référence. Divisez ce nombre par le nombre total d'actions dans la trajectoire prédite.

Paramètres d'entrée :

  • predicted_trajectory : liste des appels d'outils utilisés par l'agent pour obtenir la réponse finale.
  • reference_trajectory : utilisation prévue de l'outil par l'agent pour répondre à la requête.

Rappel

metrics.append("trajectory_recall")

La métrique trajectory_recall mesure le nombre d'appels d'outils essentiels de la trajectoire de référence qui sont réellement capturés dans la trajectoire prédite. Il s'agit d'une valeur float comprise dans la plage [0, 1] : plus le score est élevé, meilleur est le rappel de la trajectoire prédite.

Le rappel est calculé comme suit : comptez le nombre d'actions de la trajectoire de référence qui apparaissent également dans la trajectoire prédite. Divisez ce nombre par le nombre total d'actions dans la trajectoire de référence.

Paramètres d'entrée :

  • predicted_trajectory : liste des appels d'outils utilisés par l'agent pour obtenir la réponse finale.
  • reference_trajectory : utilisation prévue de l'outil par l'agent pour répondre à la requête.

Utilisation d'un seul outil

from vertexai.preview.evaluation import metrics

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

La métrique trajectory_single_tool_use vérifie si un outil spécifique indiqué dans la spécification de la métrique est utilisé dans la trajectoire prédite. Il ne vérifie pas l'ordre des appels d'outils ni le nombre de fois où l'outil est utilisé, mais simplement s'il est présent ou non. La valeur est 0 si l'outil est absent, et 1 dans le cas contraire.

Paramètres d'entrée :

  • predicted_trajectory : liste des appels d'outils utilisés par l'agent pour obtenir la réponse finale.

Personnalisé

Vous pouvez définir une métrique personnalisée comme suit :

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)
)

Les deux métriques de performances suivantes sont toujours incluses dans les résultats. Vous n'avez pas besoin de les spécifier dans EvalTask :

  • latency (float) : temps (en secondes) mis par l'agent pour répondre.
  • failure (bool) : 0 si l'appel de l'agent a réussi, 1 dans le cas contraire.

Préparer l'ensemble de données d'évaluation

Pour préparer votre ensemble de données à l'évaluation finale de la réponse ou de la trajectoire :

Réponse finale

Le schéma de données pour l'évaluation de la réponse finale est semblable à celui de l'évaluation de la réponse du modèle.

Correspondance exacte

L'ensemble de données d'évaluation doit fournir les entrées suivantes :

Paramètres d'entrée :

  • predicted_trajectory : liste des appels d'outils utilisés par l'agent pour obtenir la réponse finale.
  • reference_trajectory : utilisation prévue de l'outil par l'agent pour répondre à la requête.

Correspondance dans l'ordre

L'ensemble de données d'évaluation doit fournir les entrées suivantes :

Paramètres d'entrée :

  • predicted_trajectory : trajectoire prédite utilisée par l'agent pour atteindre la réponse finale.
  • reference_trajectory : trajectoire prédite attendue pour que l'agent réponde à la requête.

Correspondance dans n'importe quel ordre

L'ensemble de données d'évaluation doit fournir les entrées suivantes :

Paramètres d'entrée :

  • predicted_trajectory : liste des appels d'outils utilisés par l'agent pour obtenir la réponse finale.
  • reference_trajectory : utilisation prévue de l'outil par l'agent pour répondre à la requête.

Précision

L'ensemble de données d'évaluation doit fournir les entrées suivantes :

Paramètres d'entrée :

  • predicted_trajectory : liste des appels d'outils utilisés par l'agent pour obtenir la réponse finale.
  • reference_trajectory : utilisation prévue de l'outil par l'agent pour répondre à la requête.

Rappel

L'ensemble de données d'évaluation doit fournir les entrées suivantes :

Paramètres d'entrée :

  • predicted_trajectory : liste des appels d'outils utilisés par l'agent pour obtenir la réponse finale.
  • reference_trajectory : utilisation prévue de l'outil par l'agent pour répondre à la requête.

Utilisation d'un seul outil

L'ensemble de données d'évaluation doit fournir les entrées suivantes :

Paramètres d'entrée :

  • predicted_trajectory : liste des appels d'outils utilisés par l'agent pour obtenir la réponse finale.

À titre d'illustration, voici un exemple d'ensemble de données d'évaluation.

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

Exemples d'ensembles de données

Nous avons fourni les exemples d'ensembles de données suivants pour vous montrer comment évaluer les agents :

  • "on-device" : ensemble de données d'évaluation pour un Assistant Home sur l'appareil. L'agent aide à répondre à des requêtes telles que "Programme la climatisation de la chambre pour qu'elle soit allumée entre 23h et 8h, et éteinte le reste du temps."

  • "customer-support" : ensemble de données d'évaluation pour un agent du service client. L'agent vous aide à répondre à des questions telles que "Pouvez-vous annuler les commandes en attente et faire remonter les demandes d'assistance ouvertes ?"

  • "content-creation" : ensemble de données d'évaluation pour un agent de création de contenu marketing. L'agent vous aide à répondre à des requêtes telles que "Reprogramme la campagne X pour qu'elle soit diffusée une seule fois sur le réseau social Y avec un budget réduit de 50 %, uniquement le 25 décembre 2024".

Pour importer les exemples de jeux de données :

  1. Installez et initialisez la CLI gcloud.

  2. Téléchargez l'ensemble de données d'évaluation.

    Appareil

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

    Service client

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

    Création de contenu

    gcloud storage cp gs://cloud-ai-demo-datasets/agent-eval-datasets/content-creation/eval_dataset.json .
  3. Charger les exemples de jeux de données

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

Générer des résultats d'évaluation

Pour générer les résultats de l'évaluation, exécutez le code suivant :

from vertexai.preview.evaluation import EvalTask

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

Afficher et interpréter les résultats

Les résultats de l'évaluation s'affichent comme suit :

Tableaux des métriques d'évaluation des agents

Les résultats de l'évaluation contiennent les informations suivantes :

Métriques de réponse finale

Métriques au niveau des lignes :

  • response : réponse finale générée par l'agent.
  • latency_in_seconds : temps nécessaire (en secondes) pour générer la réponse.
  • failure : indique si une réponse valide a été générée ou non.
  • score : score calculé pour la réponse spécifiée dans la spécification de métrique.
  • explanation : explication du score spécifié dans la spécification de métrique.

Métriques récapitulatives :

  • mean : score moyen pour toutes les instances.
  • standard deviation : écart type pour tous les scores.

Métriques de trajectoire

Métriques au niveau des lignes :

  • predicted_trajectory : séquence d'appels d'outils suivis par l'agent pour obtenir la réponse finale.
  • reference_trajectory : séquence des appels d'outils attendus.
  • score : score calculé pour la trajectoire prédite et la trajectoire de référence spécifiées dans la spécification de métrique.
  • latency_in_seconds : temps nécessaire (en secondes) pour générer la réponse.
  • failure : indique si une réponse valide a été générée ou non.

Métriques récapitulatives :

  • mean : score moyen pour toutes les instances.
  • standard deviation : écart type pour tous les scores.

Étapes suivantes

Essayez les notebooks suivants :