Introduction à Promptfoo
Mis à jour le 28 juillet 2026
Qu’est-ce que Promptfoo ?
Promptfoo est un outil open-source conçu pour tester et évaluer des prompts de manière systématique. Dans les leçons précédentes, vous écriviez vous-même la boucle qui interroge le modèle, compare chaque réponse à sa référence et agrège un score. Promptfoo prend ce travail en charge et vous laisse décrire ce que vous attendez plutôt que la manière de le vérifier. Vos cas de test sont définis dans un fichier de configuration, l’exécution peut porter sur plusieurs prompts et plusieurs modèles à la fois, les résultats s’affichent dans une interface visuelle, et la même configuration se rejoue dans un pipeline CI/CD sans être modifiée.
Ce déplacement du code vers la configuration a un effet secondaire précieux en équipe. Un fichier de tests écrit en Python n’est relu que par des développeurs ; un fichier de configuration lisible ligne à ligne peut être ouvert par un responsable produit ou un expert métier, qui reconnaîtra les cas de test comme des situations réelles et pourra en ajouter lui-même. Beaucoup d’équipes découvrent leurs vrais cas limites de cette façon.
Installation
npm install -g promptfoo
L’installation est globale, ce qui rend la commande disponible dans n’importe quel dossier de votre machine. Vous pouvez ainsi garder la configuration d’évaluation à côté du code de l’application qu’elle teste, plutôt que dans un projet séparé.
Configuration de base
Créez un fichier promptfooconfig.yaml :
prompts:
- "Classe ce texte comme POSITIF, NEGATIF ou NEUTRE : {{text}}"
providers:
- id: anthropic:messages:claude-sonnet-5
config:
max_tokens: 50
tests:
- vars:
text: "J'adore ce produit !"
assert:
- type: contains
value: "POSITIF"
- vars:
text: "Produit horrible, je suis decu."
assert:
- type: contains
value: "NEGATIF"
Trois blocs structurent ce fichier et il est utile de les lire dans l’ordre. prompts contient le ou les prompts à tester, avec des variables entre doubles accolades — ici {{text}}, qui sera remplacé par le contenu de chaque cas. providers désigne le modèle interrogé et ses paramètres : max_tokens: 50 suffit largement pour une réponse d’un seul mot et évite de payer des tokens que vous n’utiliserez pas. tests, enfin, énumère les cas : chacun fournit les valeurs de ses variables dans vars et la règle de réussite dans assert.
Vous reconnaissez ici les quatre composants d’une évaluation vus en début de cours. L’entrée d’exemple est dans vars, la réponse de référence est la value de l’assertion, la logique de notation est le type de cette assertion, et la métrique est le taux de réussite que Promptfoo calculera pour vous.
Types d’assertions
L’assertion est la règle qui décide si un cas passe ou échoue. Promptfoo supporte de nombreux types d’assertions :
| Type | Ce qu’il vérifie |
|---|---|
equals | correspondance exacte |
contains | la sortie contient la chaîne |
regex | correspondance par expression régulière |
javascript | fonction JavaScript personnalisée |
python | fonction Python personnalisée |
llm-rubric | évaluation par un modèle LLM |
Ces six types recouvrent exactement les stratégies de notation que vous écriviez à la main. Sur un classificateur dont vous imposez le format de sortie, equals est le choix le plus strict et le plus lisible ; sur une réponse rédigée qui doit simplement mentionner une référence de commande, contains évite de vous battre avec la phrase qui l’entoure, et regex prend le relais dès que c’est la forme qui compte plutôt que la valeur, par exemple pour valider qu’une date a bien été rendue au format demandé. Les types javascript et python servent quand aucune de ces règles ne suffit, et llm-rubric quand le critère relève du jugement : ces deux familles font l’objet des leçons suivantes.
Exécuter une évaluation
promptfoo eval
Pour voir les résultats dans une interface web :
promptfoo view
La première commande exécute la campagne dans le terminal et affiche le verdict de chaque cas. La seconde ouvre une vue navigable où vous lisez la sortie complète du modèle pour chaque échec, ce qui est le geste utile : un pourcentage vous dit qu’il y a un problème, la sortie brute vous dit lequel.
Comparer plusieurs prompts
L’un des grands atouts de Promptfoo est la comparaison côte à côte :
prompts:
- "Classe ce texte : {{text}}. Réponds POSITIF, NEGATIF ou NEUTRE."
- "Analyse le sentiment de ce texte : {{text}}. Options : POSITIF, NEGATIF, NEUTRE."
tests:
- vars:
text: "Super service, merci !"
assert:
- type: contains
value: "POSITIF"
Promptfoo exécutera les deux prompts sur les mêmes cas de test et affichera les résultats côte à côte. Les deux formulations ci-dessus disent la même chose à un lecteur humain, et c’est précisément l’intérêt de l’exercice : seule la mesure tranchera, sur vos données, laquelle donne des sorties plus régulières. Vous obtenez en une exécution ce qui vous demandait auparavant deux campagnes séparées et un tableau tenu à la main.
Intégration CI/CD
Promptfoo s’intègre dans vos pipelines de déploiement pour bloquer les régressions :
promptfoo eval --ci
La commande retourne un code d’erreur si les assertions échouent. Un pipeline sait interpréter ce code et refuser la fusion d’une modification qui dégrade les scores. C’est le point d’arrivée logique de tout ce cours : la retouche de prompt faite un vendredi soir sans mesure devient impossible, puisque la campagne d’évaluation s’exécute automatiquement et refuse de laisser passer une régression que personne n’aurait remarquée à l’œil.
Points clés à retenir
- Promptfoo automatise en configuration déclarative ce que vous écriviez à la main en Python.
- Un fichier
promptfooconfig.yamlréunit les prompts, les providers et les cas de test avec leurs assertions. - Les six types d’assertions couvrent la notation exacte, partielle, par format, par code et par modèle.
- La comparaison côte à côte de plusieurs prompts sur les mêmes cas remplace les campagnes séparées.
promptfoo eval --cirenvoie un code d’erreur et permet de bloquer une régression avant déploiement.