Enseigner aux grands modèles linguistiques à s’auto-déboguer

Les grands modèles linguistiques (LLM) ont atteint des performances remarquables dans la génération de code. Toutefois, pour des tâches de programmation complexes, il devient difficile d’obtenir une solution correcte en une seule étape, ce qui a poussé certaines recherches antérieures à concevoir des approches de réparation de programme afin d’améliorer les performances de génération de code. Dans ce travail, nous proposons Self-Debugging, une méthode qui enseigne à un grand modèle linguistique à déboguer son propre programme prédit à l’aide de démonstrations à faible nombre d’exemples (few-shot). Plus précisément, nous montrons que Self-Debugging permet au modèle d’adopter une stratégie de débogage par « rubber duck debugging » : sans aucune intervention humaine concernant la correction du code ou les messages d’erreur, le modèle parvient à identifier ses propres erreurs en analysant les résultats d’exécution et en expliquant le code généré en langage naturel. Self-Debugging atteint des performances de pointe sur plusieurs benchmarks de génération de code, notamment le jeu de données Spider pour la génération de requêtes SQL à partir de texte, TransCoder pour la traduction C++-Python, et MBPP pour la génération de code Python à partir de texte. Sur Spider, où aucun test unitaire n’est disponible pour vérifier la correction des prédictions, Self-Debugging avec explication du code améliore de manière cohérente la performance de base de 2 à 3 %, et augmente l’exactitude des prédictions sur les problèmes les plus difficiles de 9 %. Sur TransCoder et MBPP, où des tests unitaires sont disponibles, Self-Debugging améliore l’exactitude de base jusqu’à 12 %. Par ailleurs, en exploitant les messages de retour et en réutilisant les prédictions infructueuses, Self-Debugging améliore notablement l’efficacité des échantillons, et peut égaler ou surpasser les modèles de base qui génèrent plus de 10 fois plus de programmes candidats.