Ce qui se passe
L'agent réussit pendant la répétition et échoue en démonstration, sur la même demande. IBM Research met un chiffre sur ce phénomène et publie l'outillage pour le mesurer.
Sur le banc d'essai AppWorld (test_normal), un agent ReAct appuyé sur
GPT-4.1 obtient 77,4 % en Mean@5 — la moyenne des taux de réussite sur cinq
répétitions. Mais il ne réussit les cinq exécutions que sur 53,0 % des
tâches. L'écart, que les auteurs nomment consistency gap, atteint
24,4 points, et 30 points sur les tâches difficiles.
La métrique que personne ne publie
- Mean@k — moyenne des réussites sur k exécutions. C'est le chiffre des classements, celui que « 77 % de réussite » désigne en pratique.
- Pass@k — optimiste : au moins une des k tentatives réussit. Pertinent quand on peut vérifier et réessayer.
- Pass^k — pessimiste : toutes les tentatives réussissent. C'est la question de l'utilisateur qui repose la même demande demain.
L'ordre est toujours Pass^k ≤ Mean@k ≤ Pass@k. Les mêmes lettres, la question
inverse.
Pourquoi ça bascule, même à température 0
C'est le point contre-intuitif : l'agent de l'étude tourne à température 0,0. La variance ne vient donc pas de l'échantillonnage.
À chaque décision — quelle API appeler, quel argument passer, réessayer ou non — le modèle produit une distribution sur les tokens suivants. Ce qui compte est sa forme :
- une distribution piquée concentre la masse sur un token ; les suivants sont loin derrière, et le même choix ressort à chaque exécution ;
- une distribution plate répartit une masse comparable entre plusieurs tokens presque à égalité : lequel l'emporte tient à peu de chose.
Ce « peu de chose » est bien identifié : non-associativité des calculs en virgule flottante sur GPU, regroupement des requêtes en lots côté serveur, autres effets de plateforme. Insuffisant pour renverser un vainqueur net, suffisant pour inverser une quasi-égalité. Et comme une trajectoire enchaîne des dizaines de décisions, une petite probabilité de bascule par étape compose en une forte probabilité qu'une exécution parte ailleurs.
Corollaire : le greedy decoding et une graine fixe n'y changent rien. Ils gouvernent la façon dont une distribution devient un token, pas la distribution elle-même — laquelle bouge légèrement d'une requête à l'autre sur un point de terminaison hébergé.
L'outil
Le Consistency Analyzer part d'une seule trace enregistrée et rejoue chaque point de décision par un échantillonnage contrôlé : un appel supplémentaire par étape, hors ligne, demandant k complétions d'un coup (k = 5 par défaut), rejouées contre le contexte déjà enregistré. Pas de nouvel appel d'outil, pas d'interaction avec l'environnement, pas de seconde exécution de bout en bout.
La détection est entièrement boîte noire : ni logits, ni internals du modèle, ni vérité terrain. Elle produit un score de cohérence par étape, qui désigne les décisions susceptibles de basculer.
Chaque étape signalée devient ensuite une consigne au format d'ALTK-Evolve, injectée au moment de l'inférence. L'exemple donné par les auteurs, tiré d'une tâche de comptage dans une note :
Pour compter des marqueurs de type case à cocher, utiliser une expression régulière ancrée en début de ligne plutôt qu'un comptage de sous-chaîne — les titres de note répètent souvent le symbole dans une ligne de légende.
L'analyseur vise l'instabilité, pas l'échec : il attrape des étapes que l'agent a réussies cette fois-ci et pourrait rater la suivante.
Les résultats
L'écart de cohérence passe de 24,4 à 12,0 points, avec +16,0 points de Pass^5 sur la même tâche et +13,0 sur des tâches similaires — sans coût sur l'exactitude moyenne.
Le code est publié (AgentToolkit/altk-evolve) et la méthode détaillée dans une prépublication arXiv (2609.08832), non relue par les pairs à ce jour, sur un seul banc d'essai et un seul modèle.
À retenir
Un agent peut être capable et inconsistant à la fois : ce sont deux axes distincts, et un modèle plus gros ne corrige pas le second. Si vous évaluez un agent en production, la mesure utile n'est pas « a-t-il réussi ? » mais « a-t-il réussi les cinq fois ? ».