Valutare un agente

Dopo aver sviluppato un agente, puoi utilizzare il servizio di valutazione dell'IA generativa per valutare la capacità dell'agente di completare attività e obiettivi per un determinato caso d'uso.

Definisci le metriche di valutazione

Inizia con un elenco vuoto di metriche (ad es. metrics = []) e aggiungi le metriche pertinenti. Per includere altre metriche:

Risposta finale

La valutazione della risposta finale segue la stessa procedura della valutazione basata su modelli. Per maggiori dettagli, vedi Definire le metriche di valutazione.

Corrispondenza esatta

metrics.append("trajectory_exact_match")

Se la traiettoria prevista è identica a quella di riferimento, con le stesse chiamate dello strumento nello stesso ordine, la metrica trajectory_exact_match restituisce un punteggio pari a 1, altrimenti 0.

Parametri di input:

  • predicted_trajectory: l'elenco delle chiamate allo strumento utilizzate dall'agente per raggiungere la risposta finale.
  • reference_trajectory: l'utilizzo dello strumento previsto per consentire all'agente di soddisfare la query.

Corrispondenza in ordine

metrics.append("trajectory_in_order_match")

Se la traiettoria prevista contiene tutte le chiamate allo strumento della traiettoria di riferimento nello stesso ordine e può anche avere chiamate allo strumento aggiuntive, la metrica trajectory_in_order_match restituisce un punteggio pari a 1, altrimenti 0.

Parametri di input:

  • predicted_trajectory: la traiettoria prevista utilizzata dall'agente per raggiungere la risposta finale.
  • reference_trajectory: la traiettoria prevista per consentire all'agente di soddisfare la query.

Corrispondenza in qualsiasi ordine

metrics.append("trajectory_any_order_match")

Se la traiettoria prevista contiene tutte le chiamate allo strumento della traiettoria di riferimento, ma l'ordine non è importante e possono essere presenti chiamate allo strumento aggiuntive, la metrica trajectory_any_order_match restituisce un punteggio pari a 1, altrimenti 0.

Parametri di input:

  • predicted_trajectory: l'elenco delle chiamate allo strumento utilizzate dall'agente per raggiungere la risposta finale.
  • reference_trajectory: l'utilizzo previsto dello strumento per consentire all'agente di soddisfare la query.

Precisione

metrics.append("trajectory_precision")

La metrica trajectory_precision misura quante chiamate allo strumento nella traiettoria prevista sono effettivamente pertinenti o corrette in base alla traiettoria di riferimento. Si tratta di un valore float compreso nell'intervallo [0, 1]: più alto è il punteggio, più precisa è la traiettoria prevista.

La precisione viene calcolata nel seguente modo: conteggia quante azioni nella traiettoria prevista compaiono anche nella traiettoria di riferimento. Dividi questo conteggio per il numero totale di azioni nella traiettoria prevista.

Parametri di input:

  • predicted_trajectory: l'elenco delle chiamate allo strumento utilizzate dall'agente per raggiungere la risposta finale.
  • reference_trajectory: l'utilizzo dello strumento previsto per consentire all'agente di soddisfare la query.

Richiamo

metrics.append("trajectory_recall")

La metrica trajectory_recall misura quante chiamate allo strumento essenziale dalla traiettoria di riferimento vengono effettivamente acquisite nella traiettoria prevista. È un valore float compreso nell'intervallo [0, 1]: più alto è il punteggio, migliore è il richiamo della traiettoria prevista.

Il richiamo viene calcolato nel seguente modo: conteggia quante azioni nella traiettoria di riferimento compaiono anche nella traiettoria prevista. Dividi questo conteggio per il numero totale di azioni nella traiettoria di riferimento.

Parametri di input:

  • predicted_trajectory: l'elenco delle chiamate allo strumento utilizzate dall'agente per raggiungere la risposta finale.
  • reference_trajectory: l'utilizzo previsto dello strumento per consentire all'agente di soddisfare la query.

Utilizzo di un solo strumento

from vertexai.preview.evaluation import metrics

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

La metrica trajectory_single_tool_use verifica se nella traiettoria prevista viene utilizzato uno strumento specifico specificato nella specifica della metrica. Non controlla l'ordine delle chiamate dello strumento o il numero di volte in cui viene utilizzato, ma solo se è presente o meno. È un valore 0 se lo strumento non è presente, 1 in caso contrario.

Parametri di input:

  • predicted_trajectory: l'elenco delle chiamate allo strumento utilizzate dall'agente per raggiungere la risposta finale.

Personalizzato

Puoi definire una metrica personalizzata come segue:

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

Nei risultati sono sempre incluse le seguenti due metriche sul rendimento. Non è necessario specificarli in EvalTask:

  • latency (float): tempo (in secondi) impiegato dall'agente per rispondere.
  • failure (bool): 0 se l'invocazione dell'agente è riuscita, 1 in caso contrario.

Prepara il set di dati di valutazione

Per preparare il set di dati per la valutazione della risposta finale o della traiettoria:

Risposta finale

Lo schema di dati per la valutazione della risposta finale è simile a quello della valutazione della risposta del modello.

Corrispondenza esatta

Il set di dati di valutazione deve fornire i seguenti input:

Parametri di input:

  • predicted_trajectory: l'elenco delle chiamate allo strumento utilizzate dall'agente per raggiungere la risposta finale.
  • reference_trajectory: l'utilizzo dello strumento previsto per consentire all'agente di soddisfare la query.

Corrispondenza in ordine

Il set di dati di valutazione deve fornire i seguenti input:

Parametri di input:

  • predicted_trajectory: la traiettoria prevista utilizzata dall'agente per raggiungere la risposta finale.
  • reference_trajectory: la traiettoria prevista per consentire all'agente di soddisfare la query.

Corrispondenza in qualsiasi ordine

Il set di dati di valutazione deve fornire i seguenti input:

Parametri di input:

  • predicted_trajectory: l'elenco delle chiamate allo strumento utilizzate dall'agente per raggiungere la risposta finale.
  • reference_trajectory: l'utilizzo previsto dello strumento per consentire all'agente di soddisfare la query.

Precisione

Il set di dati di valutazione deve fornire i seguenti input:

Parametri di input:

  • predicted_trajectory: l'elenco delle chiamate allo strumento utilizzate dall'agente per raggiungere la risposta finale.
  • reference_trajectory: l'utilizzo dello strumento previsto per consentire all'agente di soddisfare la query.

Richiamo

Il set di dati di valutazione deve fornire i seguenti input:

Parametri di input:

  • predicted_trajectory: l'elenco delle chiamate allo strumento utilizzate dall'agente per raggiungere la risposta finale.
  • reference_trajectory: l'utilizzo previsto dello strumento per consentire all'agente di soddisfare la query.

Utilizzo di un solo strumento

Il set di dati di valutazione deve fornire i seguenti input:

Parametri di input:

  • predicted_trajectory: l'elenco delle chiamate allo strumento utilizzate dall'agente per raggiungere la risposta finale.

A titolo esemplificativo, di seguito è riportato un esempio di set di dati di valutazione.

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

Set di dati di esempio

Abbiamo fornito i seguenti set di dati di esempio per dimostrare come puoi valutare gli agenti:

  • "on-device": set di dati di valutazione per un assistente Google Home on-device. L'agente aiuta con query come "Pianifica l'aria condizionata in camera da letto in modo che sia accesa dalle 23:00 alle 08:00 e spenta per il resto del tempo".

  • "customer-support": set di dati di valutazione per un addetto all'assistenza clienti. L'agente aiuta a rispondere a domande come "Puoi annullare gli ordini in attesa e riassegnare i ticket di assistenza aperti?"

  • "content-creation": set di dati di valutazione per un agente di creazione di contenuti di marketing. L'agente risponde a query come "Riprogramma la campagna X come campagna singola sul sito di social media Y con un budget ridotto del 50% solo il 25 dicembre 2024".

Per importare i set di dati di esempio:

  1. Installa e inizializza l'interfaccia a riga di comando gcloud.

  2. Scarica il set di dati di valutazione.

    Sul dispositivo

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

    Assistenza clienti

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

    Creazione di contenuti

    gcloud storage cp gs://cloud-ai-demo-datasets/agent-eval-datasets/content-creation/eval_dataset.json .
  3. Carica gli esempi del set di dati

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

Generare risultati di valutazione

Per generare i risultati della valutazione, esegui il seguente codice:

from vertexai.preview.evaluation import EvalTask

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

Visualizzare e interpretare i risultati

I risultati della valutazione vengono visualizzati come segue:

Tabelle per le metriche di valutazione degli agenti

I risultati della valutazione contengono le seguenti informazioni:

Metriche di risposta finale

Metriche per riga:

  • response: risposta finale generata dall'agente.
  • latency_in_seconds: tempo necessario (in secondi) per generare la risposta.
  • failure: indica se è stata generata o meno una risposta valida.
  • score: un punteggio calcolato per la risposta specificata nella specifica della metrica.
  • explanation: la spiegazione del punteggio specificato nella specifica della metrica.

Metriche di riepilogo:

  • mean: punteggio medio per tutte le istanze.
  • standard deviation: deviazione standard per tutti i punteggi.

Metriche sulla traiettoria

Metriche per riga:

  • predicted_trajectory: sequenza di chiamate allo strumento seguite dall'agente per raggiungere la risposta finale.
  • reference_trajectory: sequenza di chiamate allo strumento previste.
  • score: un punteggio calcolato per la traiettoria prevista e la traiettoria di riferimento specificata nella specifica della metrica.
  • latency_in_seconds: tempo necessario (in secondi) per generare la risposta.
  • failure: indica se è stata generata o meno una risposta valida.

Metriche di riepilogo:

  • mean: punteggio medio per tutte le istanze.
  • standard deviation: deviazione standard per tutti i punteggi.

Passaggi successivi

Prova i seguenti notebook: