Générer des jeux de test
Sur cette page
Passons du schéma théorique à un vrai projet. Un workflow d’évaluation commence par deux décisions : fixer un objectif clair, puis produire des données de test. Le fil rouge de toute la section : un prompt qui aide à écrire du code propre à AWS, fonction Python, configuration JSON ou expression régulière, sans explication ni mise en forme superflue.
Fixer l’objectif
Le prompt reçoit la description d’une tâche et renvoie l’un de ces trois types de sortie :
- du code Python ;
- une configuration JSON ;
- une expression régulière.
Exigence clé : la réponse ne contient que le code demandé, sans titre, sans conclusion, sans explication. La sortie alimente un outil, pas une conversation. Formulée dès maintenant, cette exigence deviendra un critère mesurable.
Le premier prompt est volontairement simple : « Propose une solution à la tâche suivante : {task} ». Il échouera sur l’exigence de format, et c’est prévu : on mesure d’abord, on améliore ensuite.
Deux façons de créer un jeu de données
Un jeu de données d’évaluation rassemble des entrées d’exemple, ici des descriptions de tâches AWS. Chaque cas est combiné au prompt et envoyé à Claude. Deux approches :
- À la main : vous écrivez les cas. Vous connaissez vos vrais utilisateurs, c’est le gage de représentativité.
- Par génération : Claude écrit les cas. C’est rapide et varié, et un modèle rapide comme Haiku suffit.
Rien n’empêche de mélanger : générer une base, puis y ajouter les cas réels qui remontent de la production.
Générer les cas avec Claude
Le cours officiel extrait le JSON généré par pré-remplissage et séquence d’arrêt, une recette que Haiku 5.5 refuse (leçon 10). Nous utilisons les sorties structurées, avec la fonction chat de la leçon 10 :
import json
SCHEMA_DATASET = {
"type": "object",
"properties": {
"taches": {
"type": "array",
"items": {
"type": "object",
"properties": {"task": {"type": "string"}},
"required": ["task"],
"additionalProperties": False,
},
}
},
"required": ["taches"],
"additionalProperties": False,
}
def generate_dataset():
prompt = """
Génère 3 tâches liées à AWS qui demandent une solution en Python, en JSON ou en expression régulière.
Choisis des tâches qui se résolvent avec une seule fonction Python,
un seul objet JSON, ou très peu de code.
"""
messages = []
add_user_message(messages, prompt)
text = chat(messages, output_schema=SCHEMA_DATASET)
return json.loads(text)["taches"]
Le prompt de génération fixe le domaine (des tâches AWS) et la portée (une fonction ou un objet, pour que l’évaluation reste gérable). Le format est garanti par le schéma : une liste de tâches, enveloppée dans un objet {"taches": [...]}. Le pipeline d’évaluation se construit avec les techniques qu’il servira à mesurer.
Sauvegarder le jeu de données
dataset = generate_dataset()
with open("dataset.json", "w", encoding="utf-8") as f:
json.dump(dataset, f, indent=2, ensure_ascii=False)
ensure_ascii=False garde les accents lisibles dans le fichier. Sauvegarder n’est pas qu’une économie d’appels : comparer deux versions d’un prompt n’a de sens que sur le même jeu de données. Un jeu régénéré entre deux mesures fausserait la comparaison.
Le jeu obtenu contient des tâches réalistes : extraire l’identifiant de compte d’un ARN, écrire une configuration JSON pour EC2, valider un nom de bucket S3 avec une expression régulière. Trois cas suffisent pour mettre au point le pipeline ; une évaluation sérieuse en demande des dizaines, voire des centaines.
À vous de jouer
Votre générateur. Adaptez generate_dataset à votre prompt de la leçon 11 : décrivez le domaine et la portée, générez dix cas, puis ajoutez à la main les cinq entrées surprenantes que vous aviez notées. Relisez le tout : quels cas générés sont trop faciles ou trop semblables ?
Sources officielles : Generating test datasets (Claude Academy) · Define success criteria and build evaluations (documentation Claude) · Get validated JSON results from models (documentation AWS)
Points clés à retenir
- Un objectif d’évaluation inclut les exigences de format : elles deviendront des critères mesurables.
- Le jeu de données rassemble les entrées de test : à la main pour la représentativité, généré pour la vitesse.
- Le prompt de génération fixe le domaine et la portée ; les sorties structurées garantissent le format.
- Sauvegardez le jeu : comparer deux versions exige les mêmes données.