Jeux de données
Un jeu de données est un ensemble de cas de test qui pilotent une évaluation hors ligne. Dans le SDK Evaluation, un jeu de données est une liste de dictionnaires Python où chaque dictionnaire est un enregistrement d'entrée, et vous définissez les clés pour correspondre à ce que votre fonction de tâche attend.
Structure des enregistrements
Chaque enregistrement est un dictionnaire simple. Les clés dépendent de vous :
dataset = [
{"sentence": "Hello, how are you?", "groundtruth": "English"},
{"sentence": "Bonjour, comment ça va?", "groundtruth": "French"},
{"sentence": "Hola, ¿cómo estás?", "groundtruth": "Spanish"},
]Dans votre tâche et votre notation, accédez à l'enregistrement via ctx.input_record :
from mistralai.observability import TaskContext, ScorerContext
async def task(ctx: TaskContext) -> str:
return ctx.input_record["sentence"] # access any key you defined
def scorer(ctx: ScorerContext) -> int:
return 1 if ctx.input_record["groundtruth"].lower() == str(ctx.output).lower() else 0Sécurité des types avec TypedDict
Utilisez TypedDict pour rendre les schémas des enregistrements explicites et obtenir une autocomplétion dans l'IDE :
from typing import TypedDict
class LanguageRecord(TypedDict):
sentence: str
groundtruth: str
dataset: list[LanguageRecord] = [
{"sentence": "Hello, how are you?", "groundtruth": "English"},
{"sentence": "Bonjour, comment ça va?", "groundtruth": "French"},
]Que mettre dans les enregistrements
Les enregistrements peuvent contenir tout ce dont votre tâche ou votre notation a besoin :
| Type de champ | Objectif | Exemple |
|---|---|---|
| Entrées de tâche | Ce que la tâche traite | prompt, contexte, texte, question |
| Vérité de référence | Sortie de référence pour la notation | expected, groundtruth, reference_answer |
| Métadonnées | Contexte supplémentaire pour les notateurs ou les juges LLM | category, difficulty, grading_guidance |
Incluez la vérité de référence dans les enregistrements lorsque vous souhaitez comparer la sortie de la tâche à une réponse connue comme correcte :
dataset = [
{
"prompt": "What is the capital of France?",
"expected": "Paris",
"difficulty": "easy",
},
{
"prompt": "Explain the difference between precision and recall.",
"expected": "Precision measures true positives over predicted positives; recall measures true positives over actual positives.",
"difficulty": "medium",
},
]
def accuracy_scorer(ctx: ScorerContext) -> int:
return 1 if ctx.input_record["expected"].lower() in str(ctx.output).lower() else 0Bonnes pratiques
Gardez les jeux de données ciblés
Un jeu de données construit autour d'une seule tâche ou capacité produit des signaux plus clairs qu'une collection large et multithème. Maintenez des jeux de données séparés pour des objectifs d'évaluation distincts (par exemple, language_detection, qa_factual, code_generation).
Sélectionnez des données représentatives
- Incluez des cas particuliers et des modes de défaillance, pas uniquement des exemples faciles.
- Équilibrez votre jeu de données : si 90 % des enregistrements sont des cas faciles, l'évaluation ne révélera pas de problèmes réels.
- Supprimez les enregistrements où même un humain ne pourrait pas noter la réponse de manière fiable (les entrées ambiguës ajoutent du bruit).
Versionnez vos jeux de données
Figez votre jeu de données entre les exécutions si vous souhaitez suivre les performances au fil du temps. Même de petites modifications aux enregistrements peuvent rendre les exécutions non comparables. Utilisez des noms explicites comme qa_baseline_2025_06 plutôt que test_data.
La qualité de la vérité de référence est cruciale
Une vérité de référence inexacte ou ambiguë produit des notes bruitées. Si vous utilisez un juge LLM (voir Juges), incluez un champ grading_guidance pour donner au juge des instructions de notation explicites par enregistrement.
Organisation dans Studio
Le SDK Evaluation organise les résultats à l'aide de Projets, Évaluations et Exécutions dans Studio, et non en fonction du jeu de données lui-même. Passez votre jeu de données directement à evaluation.run() :
from mistralai.observability import Evaluation, Project
run = await client.evaluation.run(
project=Project(name="Language Detection"),
evaluation=Evaluation(name="Accuracy Eval"),
dataset=dataset, # your list of dicts
task=task,
evaluators=[...],
)Les balises et métadonnées de l'exécution vous aident à retracer quelle version du jeu de données a été utilisée :
run = await client.evaluation.run(
...
tags=["dataset:qa_baseline_2025_06", "model:mistral-small"],
metadata={"dataset_version": "2025-06", "record_count": len(dataset)},
)