Recherche et science

Code généré par l’IA : une méthode du MIT pour gagner en précision

Un code qui semble convaincant peut contenir une erreur de syntaxe ou, plus difficile à repérer, ne pas répondre au besoin initial. Des chercheurs du MIT ont mis au point une approche qui guide les modèles de langage pendant la génération, afin de privilégier les résultats conformes aux règles attendues. Les essais couvrent notamment Python, SQL, les molécules et la robotique.

Développeur contrôlant une génération de code d’IA validée pour Python, SQL, molécules et robotique
Illustration : Actu.ai

Un assistant d’IA peut écrire en quelques secondes une fonction Python, une requête SQL ou une portion d’application qui paraît parfaitement crédible. C’est précisément le problème : une réponse plausible à la lecture n’est pas nécessairement un programme exécutable, sécurisé ou fidèle au besoin exprimé. Dans le développement logiciel, une parenthèse oubliée, une requête mal formulée ou une logique erronée peuvent coûter du temps, bloquer un service et compliquer la maintenance.

Des chercheurs du Massachusetts Institute of Technology, le MIT, proposent une piste pour réduire ce décalage. Leur méthode ne demande pas seulement au modèle de langage de produire du code : elle le guide au moment même où il génère sa réponse, afin de favoriser les suites de texte qui respectent les contraintes du langage, du format ou de la tâche. Testée sur Python, SQL, les structures moléculaires et les plans de robots, cette approche pourrait rendre les modèles plus utiles dans tous les cas où une sortie doit obéir à des règles précises.

Pourquoi le code produit par une IA se trompe-t-il encore ?

Les grands modèles de langage, ou LLM, sont entraînés à prédire la suite la plus probable d’un texte. Cette capacité leur permet de compléter du code, d’expliquer une erreur ou de convertir une instruction rédigée en français en une requête informatique. Mais elle ne constitue pas, à elle seule, une garantie de justesse.

Dans un langage de programmation, plusieurs niveaux doivent être distingués :

  • La syntaxe correspond à la forme du code. Une instruction doit être écrite selon les règles du langage pour pouvoir être interprétée ou compilée.
  • La structure concerne l’organisation de l’ensemble : blocs de code, types de données, parenthèses, dépendances ou format des données produites.
  • La sémantique renvoie au sens. Un programme peut être syntaxiquement irréprochable tout en calculant le mauvais résultat, en ignorant une condition métier ou en répondant à une demande différente de celle de l’utilisateur.

Un LLM peut connaître de nombreux exemples de code, sans pour autant vérifier systématiquement chaque règle applicable à une sortie donnée. Il peut aussi mêler des syntaxes proches, utiliser une bibliothèque indisponible dans l’environnement réel, ou inventer une fonction qui semble cohérente mais n’existe pas.

Cette difficulté dépasse la programmation classique. Une structure moléculaire doit respecter des contraintes chimiques. Un plan de robot doit être compatible avec une configuration physique et avec les actions attendues. Une requête SQL doit pouvoir être analysée par un système de gestion de base de données, tout en correspondant aux tables et aux informations réellement disponibles.

La méthode du MIT : guider la génération plutôt que corriger après coup

L’idée développée par l’équipe de recherche consiste à intégrer les contraintes d’une tâche dans le processus de génération. Au lieu de laisser le modèle rédiger librement une longue réponse avant de constater, à la fin, qu’elle est invalide, le système évalue les possibilités au fil de la production du texte.

Concrètement, le modèle explore plusieurs suites possibles. Les candidats qui paraissent respecter les règles du langage ou du format sont privilégiés. Ceux qui s’en éloignent peuvent être écartés rapidement. Cette sélection progressive permet au LLM de consacrer davantage d’efforts aux sorties les plus prometteuses, plutôt que de dépenser des ressources de calcul sur des chemins qui ne mèneront pas à un résultat valide.

La recherche s’appuie sur une approche probabiliste, appelée Monte Carlo séquentiel. Sans entrer dans son formalisme mathématique, on peut l’imaginer comme l’examen simultané de plusieurs brouillons : à chaque étape, les brouillons qui restent compatibles avec les contraintes gagnent en importance, tandis que les autres sont abandonnés. Le système ne se contente donc pas de choisir le prochain mot ou symbole selon sa vraisemblance statistique, il tient compte des règles auxquelles la réponse finale doit se conformer.

Cette logique est particulièrement intéressante pour le code. Dans un programme, le choix d’un caractère peut avoir des conséquences sur tout ce qui suit. Une erreur précoce peut rendre invalide une fonction entière. Orienter la génération dès les premiers éléments évite de devoir réparer un résultat très éloigné de la cible.

Génération libre ou génération guidée : ce qui change

Génération libre

  • Le modèle choisit principalement la suite de texte la plus probable.
  • Les règles du langage peuvent être vérifiées seulement après la réponse.
  • Des sorties plausibles mais invalides peuvent mobiliser inutilement du calcul.
  • La syntaxe et les contraintes de format risquent d’être négligées en cours de génération.

Génération guidée

  • Les contraintes interviennent pendant la production de la sortie.
  • Plusieurs candidats sont évalués progressivement selon leur compatibilité avec les règles.
  • Les pistes peu prometteuses peuvent être abandonnées plus tôt.
  • Les ressources sont concentrées sur les réponses les plus susceptibles d’être valides.

Quelles sorties ont été testées ?

Les chercheurs ont évalué leur architecture sur quatre types de sorties structurées. Elles illustrent la diversité des situations dans lesquelles un modèle de langage doit respecter autre chose que les seules conventions de la langue naturelle.

Type de sortie testéRègles ou contraintes à respecterIntérêt pratique
Code PythonSyntaxe et structure du langageAider à produire des fonctions ou scripts exécutables
Requêtes SQLGrammaire des requêtes et organisation attendue des donnéesInterroger une base de données à partir d’une demande formulée en langage naturel
Structures moléculairesReprésentation formelle de structures chimiquesSoutenir des tâches de recherche scientifique et de biologie moléculaire
Plans de robotsContraintes liées à la planification et à la robotiqueProduire des instructions adaptées à des systèmes robotiques

Le point commun entre ces cas est simple : la réponse doit être lisible par une machine et respecter un ensemble de règles. Une phrase approximative peut rester compréhensible par un humain. Une requête SQL incomplète ou une structure moléculaire invalide, elle, ne laisse pas cette marge d’interprétation.

L’approche présentée par le MIT vise ainsi des langages et formats variés, à condition de pouvoir exprimer les contraintes qui servent à orienter la génération. Elle ne signifie pas qu’un seul modèle connaît automatiquement toutes les particularités de chaque environnement logiciel. Sa force réside plutôt dans la possibilité de relier les capacités générales d’un LLM aux règles spécifiques de la tâche demandée.

Pourquoi de petits modèles peuvent faire mieux que de très grands

L’un des résultats les plus marquants concerne la taille des modèles. Selon les essais rapportés par les chercheurs, de petits LLM peuvent surpasser des modèles beaucoup plus grands lorsqu’ils bénéficient de cette architecture de génération contrôlée. Dans l’un des cas étudiés, un petit modèle open source a dépassé un modèle commercial spécialisé deux fois plus grand.

Ce résultat ne veut pas dire qu’un petit modèle est, dans tous les usages, supérieur à un grand modèle. Les très grands systèmes conservent souvent un avantage pour les tâches ouvertes, les conversations longues ou la mobilisation de connaissances très étendues. Il montre en revanche qu’une meilleure méthode d’inférence, c’est-à-dire une meilleure façon d’utiliser un modèle au moment de répondre, peut être aussi importante que l’augmentation du nombre de paramètres.

C’est un enjeu concret. Les grands modèles exigent des capacités de calcul importantes, donc des coûts et une consommation énergétique plus élevés. Si un modèle plus compact, correctement guidé, atteint une précision supérieure sur une tâche structurée, il devient possible d’envisager des outils plus accessibles et plus efficaces.

Les résultats doivent toutefois être lus dans leur cadre expérimental. Ils concernent les tâches et les modèles évalués par l’équipe. Ils ne permettent pas d’affirmer qu’un petit modèle dépassera systématiquement tous les modèles plus imposants, ni qu’il sera adapté sans réglage à tout projet logiciel.

Quel intérêt pour les développeurs et les utilisateurs non techniques ?

Pour les développeurs, une génération davantage contrainte peut réduire le temps consacré à corriger les erreurs les plus élémentaires. Elle peut aussi faciliter la production de fragments de code conformes à un langage donné, surtout lorsque les règles sont strictes ou que les formats sont complexes. L’objectif n’est pas d’effacer le travail de programmation, mais de rendre l’assistance plus fiable dès la première proposition.

Les bénéfices potentiels concernent aussi les personnes qui ne sont pas spécialistes du code. L’exemple des requêtes SQL est parlant : un professionnel pourrait formuler une question en langage naturel, puis obtenir une requête structurée pour analyser des données. Dans les faits, cette promesse reste conditionnée à plusieurs éléments : la base de données doit être correctement décrite, les droits d’accès doivent être maîtrisés et le résultat doit être vérifié avant toute décision.

Une IA capable de produire une requête SQL valide ne sait pas, par elle-même, quelles données une organisation est autorisée à utiliser ni quelle définition exacte elle donne à un indicateur. Si une entreprise demande le nombre de « clients actifs », il faut encore préciser ce que recouvre ce terme. La contrainte formelle améliore la qualité technique de la réponse, elle ne remplace pas la clarification du besoin.

Cette distinction est essentielle pour les outils d’assistance au développement, d’analyse de données ou de recherche scientifique. La meilleure interface ne consiste pas uniquement à obtenir une réponse fluide : elle doit aussi aider l’utilisateur à exprimer les contraintes pertinentes et à contrôler le résultat.

Une réponse valide ne dispense pas de vérifier l’intention

La méthode du MIT cherche un alignement entre la structure de la sortie, son sens et le résultat attendu. C’est une étape importante, mais l’alignement ne se résume pas à une vérification syntaxique.

Prenons une demande simple : calculer une remise pour une commande. Un modèle peut générer une fonction Python impeccable du point de vue du langage. Pourtant, il peut appliquer la remise avant les taxes alors que l’organisation la calcule après, oublier une exception pour certains produits, ou interpréter un pourcentage comme une valeur absolue. Le code est valide, mais la règle métier est mal comprise.

Pour exploiter ce type d’outil avec prudence, quelques pratiques restent nécessaires :

  • définir clairement les données d’entrée, les résultats attendus et les exceptions ;
  • exécuter le code dans un environnement de test ;
  • prévoir des tests sur des cas ordinaires et sur des cas limites ;
  • faire relire les modifications importantes par une personne compétente ;
  • vérifier les dépendances, les droits d’accès et les conséquences en matière de sécurité.

L’expertise humaine demeure donc centrale. Dans l’approche décrite, elle intervient notamment en amont, lorsque des connaissances de domaine et des règles sont apportées pour guider le modèle. L’IA peut accélérer l’exploration de solutions, mais elle ne connaît pas spontanément toutes les contraintes propres à une entreprise, un laboratoire ou un système robotique.

Des applications qui dépassent le seul développement logiciel

Les expérimentations sur les molécules et la robotique rappellent que la génération de « code » peut désigner plus largement la production de séquences structurées. Dans ces domaines, les sorties doivent satisfaire à des règles qui ne sont pas seulement grammaticales : elles renvoient à une représentation scientifique ou à des actions réalisables par une machine.

Pour la découverte scientifique, une génération plus contrôlée peut aider à éviter des candidats manifestement incompatibles avec le format attendu. En robotique, elle peut améliorer la production de plans cohérents avec les contraintes imposées. Cela ne transforme pas pour autant un modèle de langage en chimiste autonome ou en système de contrôle certifié pour un robot : les validations expérimentales, les simulations et les mécanismes de sûreté restent nécessaires.

L’intérêt de cette recherche est justement de proposer un même principe pour des domaines différents. Quand un résultat doit respecter une grammaire, une structure ou une liste de conditions, il peut être plus efficace de guider le modèle durant la génération que de lui demander une réponse libre avant de tenter une correction complète.

Ce qu’il faut surveiller

Les chercheurs envisagent désormais d’appliquer leur technique à des textes et des sorties plus longs et plus complexes. C’est un passage délicat : plus une génération s’allonge, plus les contraintes sont nombreuses et plus il devient coûteux d’évaluer les différentes possibilités. La capacité à conserver la cohérence d’un programme entier, et non d’un fragment, constituera un test important.

Une autre perspective est la combinaison de cette approche avec des mécanismes d’apprentissage. Un modèle pourrait s’améliorer en exploitant les informations recueillies lors de générations contrôlées, à condition que les critères appliqués soient pertinents et que les erreurs ne soient pas réintroduites dans le processus.

À court terme, le principal enseignement est moins la promesse d’un code parfait que l’évolution de la méthode. Les assistants d’IA ne seront pas seulement jugés sur leur faculté à écrire vite, mais sur leur capacité à produire des résultats vérifiables, adaptés à des contraintes réelles et suffisamment transparents pour être contrôlés. Pour les développeurs comme pour les utilisateurs occasionnels, c’est cette fiabilité progressive qui déterminera la valeur concrète de la génération de code par l’IA.

Questions fréquentes

Comment rendre le code généré par une IA plus fiable ?

Il faut combiner une demande précise, des contraintes explicites et une vérification systématique. La méthode étudiée par le MIT ajoute un contrôle pendant la génération afin de privilégier les sorties compatibles avec les règles attendues. Elle améliore la validité formelle, mais des tests, une revue humaine et une validation des règles métier restent nécessaires.

Un code généré par IA qui s’exécute est-il forcément correct ?

Non. L’exécution sans erreur montre généralement que la syntaxe est acceptable dans un environnement donné, pas que le programme répond au besoin. Le code peut employer une mauvaise formule, oublier un cas particulier, mal gérer les données ou introduire un risque de sécurité. La conformité technique et la pertinence fonctionnelle sont deux vérifications distinctes.

Comment l’IA peut-elle générer des requêtes SQL à partir d’une phrase ?

Un modèle de langage peut transformer une instruction rédigée en langage naturel en requête SQL, à condition de connaître la structure de données concernée et les contraintes du langage. Une génération guidée peut favoriser les requêtes formellement valides. Elle ne doit cependant pas donner un accès incontrôlé à la base de données ni remplacer la vérification des résultats.

Pourquoi un petit modèle d’IA peut-il dépasser un modèle plus grand pour coder ?

Sur une tâche très structurée, la taille du modèle ne fait pas tout. Les chercheurs du MIT montrent qu’une architecture qui guide efficacement la génération peut permettre à un petit modèle de concentrer son calcul sur des réponses conformes aux contraintes. Dans leurs essais, un modèle open source a dépassé un modèle commercial spécialisé deux fois plus grand.

La méthode du MIT fonctionne-t-elle pour tous les langages de programmation ?

L’approche est conçue pour s’adapter à des langages et formats dotés de règles explicites, en orientant le modèle vers les sorties qui les respectent. Les essais mentionnent notamment Python et SQL. Cela ne garantit pas automatiquement la prise en charge parfaite de chaque langage, bibliothèque ou environnement : les contraintes doivent pouvoir être définies et évaluées.

Sources

Références consultées pour la rédaction de cet article. Les adresses sont indiquées à titre informatif et ne sont pas des liens.

  1. MIT News, actualités et recherches sur l’intelligence artificiellenews.mit.edu/topic/artificial-intelligence2
  2. MIT CSAIL, travaux de recherche du laboratoire d’informatique et d’intelligence artificiellewww.csail.mit.edu/research