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

Cette page explique comment préparer votre ensemble de données pour Gen AI Evaluation Service.

Présentation

Gen AI Evaluation Service détecte et gère automatiquement plusieurs formats de données courants. Cela signifie que vous pouvez souvent utiliser vos données telles quelles sans avoir à effectuer de conversions manuelles.

Les champs que vous devez fournir dans votre ensemble de données dépendent de votre objectif :

Objectif Données requises Workflow du SDK
Générer de nouvelles réponses, puis les évaluer prompt run_inference()evaluate()
Évaluer les réponses existantes prompt et response evaluate()
Générer de nouveaux résultats d'exécution de l'agent, puis les évaluer prompt run_inference()evaluate()
Évaluer les réponses d'agent existantes et les événements intermédiaires prompt, response et intermediate_events evaluate()

Lorsque vous exécutez client.evals.evaluate() ou client.evals.create_evaluation_run(), Gen AI Evaluation Service recherche automatiquement les champs courants suivants dans votre ensemble de données :

  • prompt : (obligatoire) entrée du modèle que vous souhaitez évaluer. Pour obtenir les meilleurs résultats, vous devez fournir des exemples de requêtes qui représentent les types d'entrées que vos modèles traitent en production.

  • response : (obligatoire) sortie générée par le modèle ou l'application en cours d'évaluation.

  • reference : (facultatif) vérité terrain ou réponse "dorée" à laquelle vous pouvez comparer la réponse du modèle. Ce champ est souvent requis pour les métriques basées sur des calculs, telles que bleu et rouge.

  • conversation_history : (facultatif) liste des tours précédents dans une conversation multitour. Gen AI Evaluation Service extrait automatiquement ce champ des formats compatibles. Pour en savoir plus, consultez la section Gérer les conversations multitours.

  • session_inputs : (facultatif) entrée permettant d'initialiser une session pour exécuter un agent. Ce champ n'est facultatif que pour le workflow run_inference()evaluate().

  • intermediate_events : (facultatif) traces d'agent d'un seul tour dans une exécution d'agent, y compris les appels de fonction, les réponses de fonction et les réponses de modèle intermédiaires. Ce champ n'est pas requis pour le workflow run_inference()evaluate().

Formats de données compatibles

Gen AI Evaluation Service est compatible avec les formats suivants :

DataFrame Pandas

Pour les évaluations simples, vous pouvez utiliser un pandas.DataFrame. Gen AI Evaluation Service recherche des noms de colonnes courants tels que prompt, response et reference. Ce format est entièrement rétrocompatible.

import pandas as pd

# Example DataFrame with prompts and ground truth references
prompts_df = pd.DataFrame({
    "prompt": [
        "What is the capital of France?",
        "Who wrote 'Hamlet'?",
    ],
    "reference": [
        "Paris",
        "William Shakespeare",
    ]
})

# You can use this DataFrame directly with run_inference or evaluate
eval_dataset = client.evals.run_inference(model="gemini-2.5-flash", src=prompts_df)
eval_result = client.evals.evaluate(
    dataset=eval_dataset,
    metrics=[types.PrebuiltMetric.GENERAL_QUALITY]
)
eval_result.show()

Format de prédiction par lot Gemini

Vous pouvez utiliser directement la sortie d'une tâche de prédiction par lot Gemini Enterprise Agent Platform, qui sont généralement des fichiers JSONL stockés dans Cloud Storage, où chaque ligne contient un objet de requête et de réponse. Gen AI Evaluation Service analyse automatiquement cette structure pour assurer l'intégration avec d'autres services Gemini Enterprise Agent Platform.

Voici un exemple de ligne unique dans un fichier JSONL :

{"request": {"contents": [{"role": "user", "parts": [{"text": "Why is the sky blue?"}]}]}, "response": {"candidates": [{"content": {"role": "model", "parts": [{"text": "The sky appears blue to the human eye as a result of a phenomenon known as Rayleigh scattering."}]}}]}}

Vous pouvez ensuite évaluer directement les réponses pré-générées à partir d'une job par lot :

# Cloud Storage path to your batch prediction output file
batch_job_output_uri = "gs://path/to/your/batch_output.jsonl"

# Evaluate the pre-generated responses directly
eval_result = client.evals.evaluate(
    dataset=batch_job_output_uri,
    metrics=[types.PrebuiltMetric.GENERAL_QUALITY]
)
eval_result.show()

Format de chat completion OpenAI

Pour évaluer ou comparer des modèles tiers tels qu'OpenAI et Anthropic, Gen AI Evaluation Service est compatible avec le format de chat completion OpenAI. Vous pouvez fournir un ensemble de données dans lequel chaque ligne est un objet JSON structuré comme une requête d'API OpenAI. Gen AI Evaluation Service détecte automatiquement ce format.

Voici un exemple de ligne unique dans ce format :

{"request": {"messages": [{"role": "system", "content": "You are a helpful assistant."}, {"role": "user", "content": "What's the capital of France?"}], "model": "gpt-4o"}}

Vous pouvez utiliser ces données pour générer des réponses à partir d'un modèle tiers et évaluer les réponses :

# Ensure your third-party API key is set
# e.g., os.environ['OPENAI_API_KEY'] = 'Your API Key'

openai_request_uri = "gs://path/to/your/openai_requests.jsonl"

# Generate responses using a LiteLLM-supported model string
openai_responses = client.evals.run_inference(
    model="gpt-4o",  # LiteLLM compatible model string
    src=openai_request_uri,
)

# The resulting openai_responses object can then be evaluated
eval_result = client.evals.evaluate(
    dataset=openai_responses,
    metrics=[types.PrebuiltMetric.GENERAL_QUALITY]
)
eval_result.show()

Gérer les conversations multitours

Gen AI Evaluation Service analyse automatiquement les données de conversation multitour à partir des formats compatibles. Lorsque vos données d'entrée incluent un historique des échanges (par exemple, dans le champ request.contents au format Gemini ou request.messages au format OpenAI), Gen AI Evaluation Service identifie les tours précédents et les traite comme conversation_history.

Cela signifie que vous n'avez pas besoin de séparer manuellement la requête actuelle de la conversation précédente, car les métriques d'évaluation peuvent utiliser l'historique des conversations pour comprendre le contexte de la réponse du modèle.

Prenons l'exemple suivant d'une conversation multitour au format Gemini :

{
  "request": {
    "contents": [
      {"role": "user", "parts": [{"text": "I'm planning a trip to Paris."}]},
      {"role": "model", "parts": [{"text": "That sounds wonderful! What time of year are you going?"}]},
      {"role": "user", "parts": [{"text": "I'm thinking next spring. What are some must-see sights?"}]}
    ]
  },
  "response": {
    "candidates": [
      {"content": {"role": "model", "parts": [{"text": "For spring in Paris, you should definitely visit the Eiffel Tower, the Louvre Museum, and wander through Montmartre."}]}}
    ]
  }
}

La conversation multitour est automatiquement analysée comme suit :

  • prompt : le dernier message de l'utilisateur est identifié comme la requête actuelle ({"role": "user", "parts": [{"text": "I'm thinking next spring. What are some must-see sights?"}]}).

  • conversation_history : les messages précédents sont automatiquement extraits et mis à disposition en tant qu'historique des conversations ([{"role": "user", "parts": [{"text": "I'm planning a trip to Paris."}]}, {"role": "model", "parts": [{"text": "That sounds wonderful! What time of year are you going?"}]}]).

  • response : la réponse du modèle est extraite du champ response ({"role": "model", "parts": [{"text": "For spring in Paris..."}]}).

Étape suivante