Cette page explique comment préparer votre ensemble de données pour le service d'évaluation de l'IA générative.
Présentation
Le service d'évaluation de l'IA générative 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() |
Lorsque vous exécutez client.evals.evaluate()
, le service d'évaluation de l'IA générative 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 de meilleurs résultats, vous devez fournir des exemples de requêtes représentant les types d'entrées que vos modèles traitent en production.response
: (obligatoire) résultat généré par le modèle ou l'application en cours d'évaluation.reference
: (facultatif) vérité terrain ou réponse "or" à laquelle vous pouvez comparer la réponse du modèle. Ce champ est souvent requis pour les métriques basées sur des calculs, commebleu
etrouge
.conversation_history
: (facultatif) liste des tours précédents dans une conversation multitour. Le service d'évaluation de l'IA générative extrait automatiquement ce champ des formats compatibles. Pour en savoir plus, consultez Gérer les conversations multitours.
Formats de données compatibles
Le service d'évaluation de l'IA générative accepte les formats suivants :
DataFrame Pandas
Pour les évaluations simples, vous pouvez utiliser un pandas.DataFrame
. Le service d'évaluation de l'IA générative recherche les 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 des prédictions par lots Gemini
Vous pouvez utiliser directement le résultat d'un job de prédiction par lot Vertex AI, qui se présente généralement sous la forme de fichiers JSONL stockés dans Cloud Storage, où chaque ligne contient un objet de requête et de réponse. Le service d'évaluation de l'IA générative analyse automatiquement cette structure pour permettre l'intégration à d'autres services Vertex AI.
Voici un exemple de ligne 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 d'un 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 OpenAI Chat Completion
Pour évaluer ou comparer des modèles tiers tels qu'OpenAI et Anthropic, le service d'évaluation de l'IA générative est compatible avec le format OpenAI Chat Completion. Vous pouvez fournir un ensemble de données dans lequel chaque ligne est un objet JSON structuré comme une requête de l'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
Le service d'évaluation de l'IA générative analyse automatiquement les données de conversations multitours à partir des formats compatibles. Lorsque vos données d'entrée incluent un historique d'échanges (par exemple, dans le champ request.contents
au format Gemini ou request.messages
au format OpenAI), le service d'évaluation de l'IA générative 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 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 champresponse
({"role": "model", "parts": [{"text": "For spring in Paris..."}]}
).