Aller au contenu principal

Workflow typique d'évaluation

Mis à jour le 30 juillet 2026

Les 5 étapes

Sans évaluation, améliorer un prompt relève de l’impression : on modifie une phrase, on relit la réponse, on trouve que « ça a l’air mieux ». Le problème est qu’on ne teste alors qu’un seul cas, souvent celui qui posait problème — et qu’on n’a aucun moyen de savoir si les trois autres situations, elles, se sont dégradées.

Le pipeline ci-dessous remplace cette impression par un chiffre comparable d’une version à l’autre. Il suit toujours le même schéma :

  1. Rédiger un prompt
  2. Créer un jeu de données de test
  3. Envoyer chaque cas de test à Claude
  4. Noter chaque réponse (score de 1 à 10)
  5. Modifier le prompt et recommencer

Voyons cela avec un exemple concret.

Exemple : évaluer un prompt de questions-réponses

Étape 1 : Le prompt

Imaginons un prompt simple pour un assistant qui répond à des questions de culture générale :

PROMPT_V1 = "Tu es un assistant pédagogique. Réponds aux questions de façon claire et concise."

Étape 2 : Le jeu de données

On crée un ensemble de questions couvrant différents domaines :

dataset = [
    {
        "question": "Combien font 15% de 200 ?",
        "expected": "30",
        "domain": "mathématiques"
    },
    {
        "question": "Quelle est la temperature idéale pour faire lever une pate a pain ?",
        "expected": "Entre 24 et 27 degrés Celsius",
        "domain": "cuisine"
    },
    {
        "question": "Quelle est la plus grande étoile connue par son rayon ?",
        "expected": "UY Scuti ou Stephenson 2-18",
        "domain": "astronomie"
    }
]

Chaque cas contient : la question à poser, la réponse attendue (pour référence), et le domaine (pour analyser les forces/faiblesses).

Étape 3 : Envoyer à Claude

On fait tourner le prompt sur chaque question :

import anthropic

client = anthropic.Anthropic()

def run_prompt(question, system_prompt):
    response = client.messages.create(
        model="claude-sonnet-5",
        max_tokens=300,
        system=system_prompt,
        messages=[{"role": "user", "content": question}]
    )
    return response.content[0].text
resultats = []
for cas in dataset:
    reponse = run_prompt(cas["question"], PROMPT_V1)
    resultats.append({
        "question": cas["question"],
        "expected": cas["expected"],
        "response": reponse,
        "domain": cas["domain"]
    })

Étape 4 : Noter les réponses

Pour l’instant, on utilise un notateur humain (on automatisera plus tard). On attribue un score de 1 à 10 :

# Notation manuelle pour l'exemple
scores_v1 = [8, 7, 7]  # math: 8, cuisine: 7, astronomie: 7

moyenne_v1 = sum(scores_v1) / len(scores_v1)
print(f"Score moyen V1 : {moyenne_v1:.2f}")
# -> Score moyen V1 : 7.33

Étape 5 : Modifier et comparer

On améliore le prompt :

PROMPT_V2 = """Tu es un assistant pédagogique expert.
Pour chaque question :
- Donne d'abord la réponse directe
- Puis une explication courte (2-3 phrases max)
- Si c'est un calcul, montre les etapes"""

On relance l’évaluation :

resultats_v2 = []
for cas in dataset:
    reponse = run_prompt(cas["question"], PROMPT_V2)
    resultats_v2.append({
        "question": cas["question"],
        "expected": cas["expected"],
        "response": reponse,
        "domain": cas["domain"]
    })

# Notation V2
scores_v2 = [10, 8, 8]  # Amélioration sur les 3 domaines

moyenne_v2 = sum(scores_v2) / len(scores_v2)
print(f"Score moyen V2 : {moyenne_v2:.2f}")
# -> Score moyen V2 : 8.67

Comparer les versions

print(f"V1 : {moyenne_v1:.2f}")
print(f"V2 : {moyenne_v2:.2f}")
print(f"Amelioration : +{moyenne_v2 - moyenne_v1:.2f}")
V1 : 7.33
V2 : 8.67
Amelioration : +1.34

Le prompt V2 est objectivement meilleur sur ce jeu de test — et la nuance « sur ce jeu de test » a toute son importance. Un score ne mesure pas la qualité d’un prompt dans l’absolu, il mesure son comportement sur les cas que vous avez choisis. C’est justement pour cela que le jeu de données doit rester constant entre deux versions, sans quoi vous comparez deux mesures qui n’ont rien à voir. Pas d’impression subjective, pas de “je trouve que ça semble mieux” — un chiffre mesurable.

L’analyse détaillée

La moyenne cache toujours quelque chose. Un prompt qui passe de 6 à 7 peut avoir gagné trois points sur une catégorie et en avoir perdu un sur deux autres — ce qui est une régression déguisée en progrès. C’est pour cette raison que le jeu de test porte une catégorie sur chaque cas : la ventilation par domaine dit ce que la moyenne dissimule.

for i, cas in enumerate(dataset):
    print(f"{cas['domain']:15s} | V1: {scores_v1[i]} | V2: {scores_v2[i]} | Delta: {scores_v2[i] - scores_v1[i]:+d}")
mathematiques   | V1: 8 | V2: 10 | Delta: +2
cuisine         | V1: 7 | V2: 8  | Delta: +1
astronomie      | V1: 7 | V2: 8  | Delta: +1

L’amélioration est plus forte en maths (grâce à l’instruction “montre les étapes”). Ce type d’analyse vous guide pour les itérations suivantes.

Les limites de cet exemple

Cet exemple à trois cas de test est pédagogique, mais insuffisant en pratique. Pour une évaluation fiable :

  • Minimum 20-50 cas pour une évaluation significative
  • Notation automatisée (par modèle AI) pour passer à l’échelle
  • Reproductibilité : température à 0 pour des résultats stables

Les prochaines leçons couvrent exactement ces points.

Résumé du workflow

Prompt V1 → Dataset → Claude → Notation → Score 7.33
    ↓
Prompt V2 → Dataset → Claude → Notation → Score 8.67 ✓
    ↓
Prompt V3 → Dataset → Claude → Notation → Score ?
    ↓
  ...jusqu'a satisfaction

Le jeu de données et le système de notation restent constants. Seul le prompt change. C’est ce qui rend la comparaison valide.