DeepEval-Lab · Journal d'expérimentation
DeepEval évalue les LLM avec un modèle juge — GPT-4 par défaut, API payante, données chez un tiers. J'ai branché un Llama-3.2-3B local à la place, sur mon CPU, et documenté chaque itération. Trois runs. Trois modes de défaillance caractérisés. Une recommandation d'architecture.
Sept tests, trois runs, configuration figée à temperature=0. Chaque cellule est un verdict — et la lecture par ligne raconte toute l'expérience.
| Test | Run 1 | Run 2 | Run 3 | Lecture |
|---|---|---|---|---|
| Professionnalisme · GEval | PASS | PASS | PASS | stable ×3 |
| Non-fabrication · GEval | PASS | PASS | PASS | stable ×3 |
| Relevancy SLA | PASS | PASS | PASS | stable ×3 |
| Faithfulness mdp | CRASH | CRASH | PASS | infra v2 efficace |
| Concision · GEval | 0.20 | 6 phr. | 9 phr. | juge indulgent ×2 |
| Relevancy FAQ | 0.00 | 0.20 | 0.00 | input halluciné |
| Faithfulness SLA | 0.00 | 0.00 | 0.00 | biais contexte ×3 |
Ce que la matrice montre : les trois lignes vertes sont stables sur trois runs — le juge 3B tient sur des critères qualitatifs simples. Les trois lignes rouges échouent différemment à chaque fois — et c'est là que l'expérience devient intéressante.
Chaque run part d'hypothèses écrites à l'avance, puis les confronte aux résultats.
Le juge repère à raison une réponse trop verbeuse du chatbot (score 0.20 — vraie détection). Mais sur Relevancy, il produit un raisonnement auto-contradictoire, et sur Faithfulness, il invente une contradiction absente de la réponse. Un crash JSON complète le tableau : le juge renvoie une liste là où le schéma attend un objet.
Run involontairement précieux : le patch v2 n'était pas appliqué, ce qui en fait une mesure de reproductibilité pure. Résultat : le GEval Concision qui bloquait au Run 1 laisse passer la même violation au Run 2 — seul le garde-fou déterministe (comptage de phrases) la rattrape. Relevancy passe de 0.00 à 0.20 sans aucun changement.
La coercition liste→objet élimine le crash : la catégorie « infra » est soldée, tout échec résiduel est imputable au chatbot ou au juge. Et le juge livre sa plus belle défaillance : il évalue la réponse contre une question… qu'il a inventée.
Les raisons produites par le juge, extraites des logs. Elles valent mieux qu'un long discours.
Le juge a halluciné la question elle-même. Personne n'a parlé d'ordinateur portable — il a évalué la réponse contre un input inventé.
Biais systématique de confusion contexte/sortie — même erreur, formulation quasi identique, à deux runs d'écart. Ce n'est pas du bruit : c'est un mode de défaillance reproductible.
Le garde-fou structurel a rattrapé le juge deux fois. L'argument le plus concret en faveur de l'architecture hybride.
Ce qu'un juge local 3B peut faire, ne peut pas faire, et comment l'utiliser quand même.
Professionnalisme, non-fabrication : 6/6 verdicts stables sur trois runs. Un juge local suffit — gratuit, souverain, hors-ligne.
Relevancy, Faithfulness : variance à température zéro, input halluciné, biais contexte/sortie. Prévoir un juge de plus grande capacité.
Comptage, présence de faits, formats : ils ont rattrapé le juge deux fois. Aucun LLM-as-Judge ne doit être la seule barrière.