Sur cette page
- Commencez petit : vingt à cinquante cas simples, tirés de vrais échecs, suffisent pour démarrer, selon Anthropic.
- Un bon cas est un cas où deux experts du métier rendraient seuls le même verdict, réussi ou raté.
- Notez par le code quand c'est possible, par un modèle juge quand c'est nécessaire, par une personne avec parcimonie.
- Un modèle juge a des biais : la place des réponses, leur longueur, sa préférence pour ses propres textes. Vérifiez qu'il s'accorde avec des avis humains avant de lui confier la note.
- OpenAI ferme sa plateforme Evals le 30 novembre 2026 et renvoie vers Promptfoo, outil libre qu'il a racheté et qui reste ouvert aux autres éditeurs.
Prérequis
- Une application d'IA qui fait une tâche précise : classer, extraire, rédiger, répondre sur des documents ; par exemple une réponse dans un format imposé.
- Un poste prêt, avec Python ou Node et les clés d'API (le poste de développement).
- Des exemples réels, ou les erreurs déjà signalées par les utilisateurs.
- Une personne du métier, pour dire ce qu'est une bonne réponse.
Étapes
Trois façons de noter une réponse
Par le code
une valeur exacte, un champ, un format
Pour le plus rapide, et toujours le même
Contre ne juge pas un texte libre
Par un modèle juge
un critère écrit : juste, complet, poli
Pour rapide et souple, une fois éprouvé
Contre des biais, à calibrer contre des avis humains
Par une personne
le dernier mot, et la calibration du juge
Pour le plus souple
Contre lent, et coûteux
Rassembler vingt à cinquante cas
Ce qu'on fait : des demandes réelles, en partant de celles qui ont échoué ; chacune avec ce qu'on attend.
À vérifier : deux experts doivent pouvoir rendre seuls le même verdict sur chaque cas.
Choisir la façon de noter chaque cas
Ce qu'on fait : une valeur exacte quand il y en a une ; un critère écrit pour un modèle juge sinon ; une personne pour trancher et calibrer.
Écrire le fichier de tests
Ce qu'on fait : les demandes, le ou les modèles essayés, et pour chaque cas les vérifications : contient, est égal à, respecte tel critère.
Lancer, puis lire chaque échec
Ce qu'on fait : un tableau des cas réussis et ratés, modèle par modèle ; lire les réponses ratées, pas seulement le score.
À vérifier : un score bas peut venir d'une erreur de notation : Anthropic cite un test passé de 42 % à 95 % une fois ses erreurs de notation corrigées.
Calibrer le modèle juge
Ce qu'on fait : le comparer à des notes humaines sur un échantillon ; lui laisser répondre « inconnu » ; un juge par critère ; une échelle courte, réussi ou raté, ou de 1 à 5.
À vérifier : comparer par paires, ou par réussi et raté, et neutraliser la longueur, recommande OpenAI.
Relancer à chaque changement
Ce qu'on fait : un autre modèle, une demande retouchée, de nouvelles données : on relance, on compare, on garde la meilleure version.
Un fichier de tests, avec Promptfoo. Deux demandes de traduction, deux modèles, une vérification par cas ; puis la commande qui lance les tests et ouvre le tableau des résultats. Le code est celui de la documentation, non exécuté ici.
promptfooconfig.yamlprompts:
- 'Convert the following English text to {{language}}: {{input}}'
providers:
- openai:gpt-6-sol
- openai:gpt-6-luna
tests:
- vars:
language: French
input: Hello world
assert:
- type: contains
value: 'Bonjour le monde'
- vars:
language: Spanish
input: Where is the library?
assert:
- type: icontains
value: 'Dónde está la biblioteca'Lancer, puis voir les résultatsnpx promptfoo@latest eval npx promptfoo@latest view
Contrôle du résultat
Une tâche réussie 75 fois sur 100, lancée plusieurs fois
Au moins une réussite sur k essais : pass@k
- 1 essai75 %
- 2 essais93,8 %
- 3 essais98,4 %
- 5 essais99,9 %
Toutes les réussites sur k essais : pass^k
- 1 essai75 %
- 2 essais56,2 %
- 3 essais42,2 %
- 5 essais23,7 %
Problèmes fréquents
Trois biais d'un modèle juge
La place
Avec ChatGPT pour juge, intervertir l'ordre des réponses a suffi à faire gagner Vicuna-13B sur 66 questions sur 80.
Le juge donne de bonnes notes à tout
CauseUn juge tend à l'indulgence, surtout sur des demandes longues ou complexes.
À faireLe comparer à des notes humaines ; une échelle courte ; un juge par critère.
Le score baisse sans que l'application ait changé
CauseUne erreur de notation, ou un critère flou.
À faireLire les cas ratés ; corriger le test avant de corriger l'application.
Retour en arrière
- Garder la version d'avant : la demande, le modèle et ses réglages, à côté des résultats de leurs tests.
- Comparer avant de remplacer : la nouvelle version passe les mêmes cas ; elle ne remplace l'ancienne que si elle fait au moins aussi bien.
- Revenir à la version d'avant dès qu'un cas qui passait se met à échouer, le temps de comprendre pourquoi.
Variantes par outil
Le code des onglets est celui des documentations, noms de modèles compris, non exécuté ici.
Un outil libre en ligne de commande, qui tourne sur votre machine et appelle les modèles directement ; plus de soixante fournisseurs ; utilisable dans une chaîne d'intégration continue. Version 0.124.0, sous licence MIT. OpenAI a annoncé son rachat le 9 mars 2026 ; Promptfoo dit rester libre et ouvert aux autres éditeurs.
Seuils de coût et de délai, et critères notés par un modèledefaultTest:
assert:
# Example per-response cost threshold (USD)
- type: cost
threshold: 0.15
# Example per-response latency threshold (milliseconds)
- type: latency
threshold: 60000
tests:
- vars:
riddle: 'I speak without a mouth and hear without ears. I have no body, but I come alive with wind. What am I?'
assert:
# Make sure the LLM output contains this word
- type: icontains
value: echo
# Use model-graded assertions to enforce free-form instructions
- type: llm-rubric
value: Do not apologize
- vars:
riddle: "You see a boat filled with people. It has not sunk, but when you look again you don't see a single person on the boat. Why?"
assert:
- type: llm-rubric
value: explains that there are no single people (they are all married)
- vars:
riddle: 'The more of this there is, the less you see. What is it?'
assert:
- type: icontains
value: darknessUn cadre libre qui ressemble à Pytest, pour tester une application d'IA comme du code ; G-Eval note un critère écrit avec un modèle juge. Version 4.2.8, sous licence Apache 2.0 ; son éditeur vend une plateforme hébergée, Confident AI.
test_chatbot.pyimport pytest
from deepeval import assert_test
from deepeval.metrics import GEval
from deepeval.test_case import LLMTestCase, SingleTurnParams
def test_case():
correctness_metric = GEval(
name="Correctness",
criteria="Determine if the 'actual output' is correct based on the 'expected output'.",
evaluation_params=[SingleTurnParams.ACTUAL_OUTPUT, SingleTurnParams.EXPECTED_OUTPUT],
threshold=0.5
)
test_case = LLMTestCase(
input="What if these shoes don't fit?",
# Replace this with the actual output from your LLM application
actual_output="You have 30 days to get a full refund at no extra cost.",
expected_output="We offer a 30-day full refund at no extra costs.",
retrieval_context=["All customers are eligible for a 30 day full refund at no extra costs."]
)
assert_test(test_case, [correctness_metric])Lancerdeepeval test run test_chatbot.py
Des mesures pour les applications d'IA, dont quatre pour un RAG : la précision et le rappel du contexte, la pertinence et la fidélité de la réponse ; et la création de jeux de tests. Version 0.4.3, de janvier 2026. Le RAG : un RAG en production.
Une note par un modèle juge, à deux valeursimport asyncio
from openai import AsyncOpenAI
from ragas.metrics import DiscreteMetric
from ragas.llms import llm_factory
# Setup your LLM
client = AsyncOpenAI()
llm = llm_factory("gpt-4o", client=client)
# Create a custom aspect evaluator
metric = DiscreteMetric(
name="summary_accuracy",
allowed_values=["accurate", "inaccurate"],
prompt="""Evaluate if the summary is accurate and captures key information.
Response: {response}
Answer with only 'accurate' or 'inaccurate'."""
)
# Score your application's output
async def main():
score = await metric.ascore(
llm=llm,
response="The summary of the text is..."
)
print(f"Score: {score.value}") # 'accurate' or 'inaccurate'
print(f"Reason: {score.reason}")
if __name__ == "__main__":
asyncio.run(main())Les quatre outils, côte à côte
| Outil | Forme | Licence | Note par un modèle | Pour un RAG | État |
|---|---|---|---|---|---|
| Promptfoo | Ligne de commande et fichier YAML | MIT | des critères notés par un modèle | non | actif ; racheté par OpenAI, reste libre |
| DeepEval | Tests en Python, comme Pytest | Apache 2.0 | G-Eval, sur un critère écrit | non | actif |
| Ragas | Mesures en Python | Apache 2.0 | des mesures notées par un modèle | quatre mesures | dernière version en janvier 2026 |
| OpenAI Evals | Plateforme en ligne | sans objet | des correcteurs | non | fermeture le 30 novembre 2026 |
Vérification
1ComprendrePar quoi commencer un jeu de tests ?
Vingt à cinquante cas réels, tirés de vrais échecs, chacun avec ce qu'on attend ; des cas sur lesquels deux experts rendraient le même verdict.
2ComprendrePourquoi calibrer un modèle juge avant de s'y fier ?
Parce qu'il a des biais, la place des réponses, leur longueur, sa préférence pour ses propres textes : on vérifie qu'il s'accorde avec des notes humaines.
3AppliquerUn agent réussit une tâche 75 fois sur 100 ; il traitera le même dossier trois jours de suite. Quelle chance qu'il réussisse les trois fois ?
Environ 42 %, soit 0,75 au cube : c'est pass^k, la mesure qui compte quand la constance est nécessaire.
Lectures suivantes
Jeux de tests d'une application d'IA
Développement d'applications d'IA · étape 6 sur 10
Les pages qui renvoient ici
Limites et sources
Les études sur les modèles juges portent sur des modèles de 2023 et 2024 ; elles disent la nature des biais, pas leur ampleur sur le modèle du jour.
Le code des onglets n'a pas été exécuté ici ; les versions sont celles du 8 octobre 2026.
- Anthropic, évaluer un agent ; Anthropic, écrire des tests ; OpenAI, bonnes pratiques ; OpenAI, dépréciations.
- Zheng et al., 2023 ; Wang et al., 2023 ; Panickssery et al., 2024 ; Thakur et al., 2024.
- Promptfoo ; DeepEval ; Ragas. Le relevé :
apprendre/recherches/2026-10-08-dev-avance.json.
Écrit par Meridal, avec l'aide de l'IA ; chaque fait vérifié à sa source et relu avant publication. Texte et schémas sous licence CC BY 4.0 : reprenez-les en citant Meridal. Le code sous licence MIT.
Garder vos outils en état
200 € à 1 500 € par mois