Nous annonçons aujourd'hui une avancée de pointe qui repousse les limites de la génération de code d'IA. Notre équipe scientifique de NinjaTech AI a développé une nouvelle approche pour la génération de code nommée « Multi-Programming Language Ensemble » (MPLE).

En utilisant cette approche avec Llama 3.1 405B Instruct, nous avons pu montrer statistiquement de meilleures performances que le GPT-4o d'OpenAI et le Sonnet 3.5 d'Anthropic, telles que mesurées par le benchmark HumanEval. Vous pouvez trouver ces résultats, ainsi que les détails de notre approche, dans notre article technique publié sur arxiv.org.

Dans cet article de blog, nous aborderons trois résultats clés liés au Multi-Programming Language Ensemble (MPLE), qui a le potentiel d'améliorer de manière significative les capacités de génération de code de tous les assistants d'IA :

  1. Une approche de flux de travail agentique (MPLE), pour la génération de code, permet d'améliorer la précision de 2 à 9 % de manière rentable.
  2. L'intégration de MPLE à des techniques d'inférence avancées telles que Reflection et Monte Carlo Tree Search (MCTS), appliquées aux modèles LLM existants permet de réaliser des gains de performances supplémentaires.
  3. À notre grande surprise, nous avons observé que les techniques MPLE+MCTS optimisées par llama3.1-405b-instruct atteignaient une précision de 96,25 % dans HumanEval Benchmark.

Le défi de la génération de code

L'écriture de code peut être difficile car elle nécessite une compréhension approfondie des langages de programmation et la capacité de traduire des idées complexes en code exécutable. En outre, les développeurs doivent également faire face à des problèmes tels que le débogage, l'optimisation et la compatibilité, ce qui peut rendre le processus de codage encore plus complexe et chronophage.

C'est là que l'IA est utile ; les grands modèles de langage (LLM) peuvent générer rapidement de grandes quantités de code à la demande d'un utilisateur. Depuis notre lancement MyNinja.ai fin mai 2024, il a traité plus de 734 000 tâches de codage émanant d'environ 173 000 développeurs.

Mais la génération de code par IA n'élimine pas tous les défis liés à l'écriture de code. Les LLM ne sont pas fiables à 100 % : ils peuvent faire des erreurs lors de la génération de code.

La raison pour laquelle les LLM commettent des erreurs est que les approches traditionnelles de génération de code d'IA reposent sur un seul langage de programmation, ce qui peut entraîner des erreurs et des biais spécifiques au langage. Par exemple, un LLM peut être performant dans la génération de code Python car il a été formé en Python. Mais lorsque vous êtes invité à créer un code C++ ou Java, il se peut que le résultat ne soit pas précis en raison de différences dans la gestion des erreurs ou l'utilisation des bibliothèques. Une autre raison pour laquelle un LLM peut avoir du mal à générer un code précis est la difficulté de traduire un texte lisible par l'homme (c'est-à-dire l'invite de l'utilisateur) en code.

L'une des solutions à ce problème consiste à investir davantage dans la formation des modèles. Les entreprises peuvent consacrer plus de temps - et de plus en plus d'argent - à former des LLM pour qu'ils répondent aux questions de codage du premier coup. C'est ce que l'on appelle l'apprentissage zéro, ce qui signifie que le modèle produit une réponse correcte sans aucun exemple, juste une invite, et qu'il génère une réponse appropriée en se basant uniquement sur ses connaissances préalables. Cependant, une approche zéro nécessite un énorme investissement en temps et en argent (10 à 100 millions de dollars et plus) pour améliorer la précision du modèle.

Mais les coûts d'inférence ont été multipliés par plus de 100 au cours des deux dernières années et ils continuent de le faire, donnant naissance à une nouvelle méthode : les flux de travail agentiques pour CodeGen.

Notre solution : Ensemble de langages de programmation multiples (MPLE)

Notre équipe a proposé une nouvelle approche pour la génération de code d'IA appelée Multi-Programming Language Ensemble (MPLE). Cette approche tire parti de la puissance de plusieurs langages de programmation pour générer un code plus précis et plus robuste à l'aide d'une approche multi-shot.

Plutôt que de nous fier au modèle pour créer une réponse correcte du premier coup (une seule fois), nous interagissons plusieurs fois avec le LLM pour générer la bonne réponse. Chaque fois que nous interagissons avec le modèle, nous lui demandons de résoudre le problème de l'utilisateur à l'aide d'un langage de programmation différent. Cela nous permet de tirer parti de la force naturelle d'un LLM : sa capacité à traduire du code d'un langage de programmation à un autre.

Considérez MPLE comme une équipe d'experts, chacun maîtrisant un langage de programmation différent, travaillant ensemble pour créer le code le plus précis du premier coup. Chaque expert (ou langage de programmation) apporte ses forces uniques et, en combinant ses forces, il peut produire une solution plus précise et plus fiable. MPLE demande à tous ces experts d'apporter leur « expertise » pendant que notre système génère le code correct demandé par l'utilisateur.

Voici comment fonctionne MPLE :

  1. Génération initiale du code : Lorsqu'un utilisateur pose à notre système une question liée au code, notre modèle d'IA génère une réponse initiale dans le langage de programmation demandé par l'utilisateur.
  2. Échantillonnage et traduction multilingues : Avant que la réponse ne soit renvoyée à l'utilisateur, le code est testé pour garantir sa qualité et sa précision. Si le code ne passe pas tous les tests, notre modèle génère un nouveau code dans un autre langage de programmation. Le nouveau code est ensuite retraduit dans le langage de programmation demandé par l'utilisateur. Cette version alternative diffère de la version originale car elle tire parti des atouts du langage alternatif, éliminant potentiellement les erreurs à l'origine des échecs des tests.
  3. Raffinement itératif : La version de code affinée est à nouveau testée par rapport aux cas de test. S'il ne réussit pas tous les tests, le processus se poursuit en utilisant différents langages de codage jusqu'à ce qu'une version passe avec succès tous les tests. Lorsque le processus est terminé, une réponse (c'est-à-dire la version finale du code) est renvoyée à l'utilisateur.
  4. Intégration de l'ensemble : Tout au long des itérations, le cadre d'ensemble intègre les points forts de plusieurs langues pour affiner progressivement le programme. En traitant chaque génération de code spécifique à un langage comme un « expert faible » individuel, le framework combine ses résultats pour atténuer les erreurs et les biais spécifiques au langage.

Il est important de noter que cette approche n'est pas un nouveau modèle et qu'elle ne nécessite pas de reformer un modèle. Il s'agit d'un système qui orchestre de multiples interactions avec votre LLM existant afin de créer la meilleure réponse possible en utilisant une approche multi-shot. Nous pensons que, alors que les coûts d'inférence continuent de baisser, l'avenir des résultats basés sur l'IA, qui sont économiquement viables, sera dominé par des flux de travail agentiques qui exploitent des techniques d'inférence intensives, dans le cadre desquels de nombreux jetons sont générés pour répondre à des questions complexes.

Validation de MPLE par le biais de tests

Nous avons testé le framework MPLE sur deux benchmarks de génération de code largement reconnus : HumanEval et HumanEval-Plus. Ces benchmarks mesurent la capacité des LLM à générer du code fonctionnel en fonction d'une invite utilisateur.

HumanEval est conçu pour les tâches de génération de texte en code où l'entrée est une invite utilisateur décrivant les fonctionnalités prévues du programme. La sortie LLM est ensuite évaluée en fonction de sa capacité à passer des tests unitaires avec des exigences spécifiées. HumanEval-Plus étend HumanEval en incorporant un grand nombre de cas de test supplémentaires pour évaluer rigoureusement la robustesse et l'exactitude du code.

Nous avons mesuré l'efficacité du MPLE à l'aide de Pass @1. Cette méthode d'évaluation du code mesure le pourcentage de tâches accomplies avec succès par le code généré lors de la première tentative.

Nous avons mené des expériences en utilisant à la fois nos LLM propriétaires et d'autres modèles bien connus tels que GPT-4o, Claude-Sonnet-3.5 et LLama3.1-405b.

Nos tests ont montré que le framework MPLE proposé améliore constamment la précision de Pass @1 sur tous les LLM testés par rapport à une base de référence. Par exemple, La précision de GPT3.5-Turbo est passée de 65,83 % dans la base de référence à 74,17 % avec MPLE, mettant en évidence l'efficacité de l'utilisation de plusieurs langages de programmation pour réduire les biais et les erreurs spécifiques aux langages (voir Tableau 1).

Tableau 1 : Résultats des tests HumanEval pour le MPLE appliqué à divers LLM

L'intégration de MPLE à Reflection & Monte Carlo donne de meilleurs résultats

Nous avons poussé le MPLE plus loin et avons conçu un système qui intègre le MPLE à des techniques d'inférence avancées telles que Reflection et MCTS. Ces techniques sont utilisées pour améliorer les capacités de résolution de problèmes et de raisonnement des LLM, en particulier lorsqu'il s'agit de tâches nécessitant une prise de décision stratégique ou en plusieurs étapes. Notre hypothèse était que la combinaison de ces systèmes produirait des résultats encore plus élevés que l'utilisation du MPLE seul. Grâce à une série de tests, nous avons pu prouver la véracité de cette hypothèse.

Nous avons également testé MPLE à l'aide du benchmark HumanEval-Plus et les résultats confirment les avantages de notre approche d'ensemble multilingue. Notamment, Les performances de llama3.1-8binstruct sont passées de 60,00 % dans la base de référence à 71,88 % avec MPLE+Reflection (voir tableau 2).

Tableau 2 : Résultats des tests HumanEval-Plus pour MPLE et Reflection ou MCTS, appliqués à divers LLM

En outre, MPLE+Reflection et MPLE+MCTS fournissent des résultats compétitifs, plusieurs modèles (GPT-4Omini, GPT-4o, Claude-Sonnet-3.5 et llama3.1-405b-instruct) atteignant 87,50 % (voir tableau 3).

Tableau 3 : Résultats des tests HumanEval-Plus pour MPLE et Reflection ou MCTS, appliqués à divers LLM

Nos résultats démontrent clairement que le framework MPLE, en particulier lorsqu'il est utilisé conjointement avec des algorithmes d'inférence supplémentaires, offre une approche puissante et flexible pour améliorer la génération de code sur plusieurs LLM. Les améliorations constantes des performances de MPLE soulignent son potentiel d'applications pratiques dans le développement de logiciels piloté par l'IA.

Llama 3.1-405b obtient des résultats de pointe avec MPLE et MCTS : précision de 96,25 % !

Au cours de notre analyse, nous avons été particulièrement impressionnés par les performances du MPLE lorsqu'il est appliqué à La combinaison de MPLE+MCTS a atteint la précision la plus élevée pour plusieurs modèles, tels que llama3.1-405b-instruct, qui a atteint une précision SOTA Pass @1 de 96,25 % (voir tableau 4).

Tableau 4 : Résultats des tests HumanEval pour le MPLE et le MCTS, appliqués à divers LLM

Le chemin à parcourir

Alors que nous continuons à repousser les limites du possible avec MPLE, nous sommes impatients d'explorer de nouveaux domaines de recherche et de développement. Les domaines d'intérêt potentiels sont notamment les suivants :

  1. Élaboration de mesures d'évaluation plus robustes : La création de métriques d'évaluation efficaces est cruciale pour mesurer avec précision les performances de MPLE. En nous concentrant sur des mesures plus complètes, nous pouvons garantir la précision, la fiabilité et l'applicabilité pratique du framework dans divers domaines.
  2. Appliquer le MPLE à des problèmes du monde réel : MPLE a le potentiel de relever des défis complexes du monde réel, tels que l'automatisation des processus métier, l'optimisation des pipelines de développement de logiciels et l'amélioration des mesures de cybersécurité. L'évaluation du MPLE sur un plus large éventail d'ensembles de données et d'applications du monde réel sera essentielle pour évaluer sa généralisabilité et son impact.
  3. Amélioration de NinjalLM pour les tâches de codage : notre NinjalLM 3.0 (une version affinée et quantifiée de llama3.1-405b), disponible sur MyNinja.ai a obtenu des scores prometteurs sur HumanEval (93,85 %) et HumanEval-Plus (86,67 %), et nous sommes sur la bonne voie pour améliorer encore ses performances. Nous lancerons un Ninja Coder basé sur MPLE dans un mois.

Nous sommes ravis de partager nos recherches sur le MPLE avec le monde entier. Nous pensons que cette approche est susceptible d'avoir un impact significatif sur la génération de code LLM. MPLE réduit les erreurs et les biais spécifiques au langage, ce qui permet une génération de code plus précise et plus robuste, ce qui permet aux développeurs de consacrer plus de temps à la résolution de problèmes plus importants. Nous nous engageons à poursuivre nos activités de recherche et développement dans ce domaine, et nous sommes impatients de découvrir les applications innovantes de MPLE à l'avenir.

P.S. Future est beaucoup moins buggy :-)

P.P.S. Nous avons utilisé MyNinja.ai pour nous aider à créer ce billet de blog.