Depuis plusieurs mois, je me consacre à un projet novateur : la création d’agents générateurs de code qui fonctionnent réellement et produisent des résultats de haute fidélité.
Actuellement, ce domaine semble atteindre son apogée en termes d’engouement, et il apparaît que de nombreuses équipes ont perdu de vue l’essentiel : l’ingénierie. Il existe une multitude d’interfaces attrayantes utilisant GPT qui présentent des démonstrations trop belles pour être vraies tout en levant des fonds considérables.
cette situation a conduit à une surévaluation du marché avec des retours sur investissement décevants,engendrant un scepticisme général parmi les investisseurs et les clients. Les capital-risqueurs commencent à se montrer plus prudents car ils ne constatent pas le retour sur investissement promis. De leur côté,les utilisateurs doutent que les applications LLM puissent réellement offrir la valeur attendue,rendant ainsi la vente plus difficile pour certains.
Cependant, cela n’affecte guère l’enthousiasme général. Heureusement, il existe une solution : privilégier l’ingénierie plutôt que l’IA.
Privilégier l’ingénierie par rapport à l’IA ne se limite pas à optimiser des requêtes ou orchestrer des agents. Cela consiste plutôt à résoudre de véritables problèmes techniques tout en utilisant l’IA comme couche facilitatrice reposant sur une base technique solide.
Génération de code
Pourquoi cette démarche ? C’est essentiel si vous souhaitez créer quelque chose qui fonctionne correctement. En réalité, produire un bon code n’est pas compliqué lorsque le modèle dispose du bon contexte. Cependant, il y a un léger problème avec la méthode actuelle par défaut : elle repose sur les embeddings comme couche contextuelle.
Les embeddings offrent une excellente compréhension sémantique ; néanmoins, les bases de code sont structurées par nature. Cela se manifeste principalement à deux niveaux : le niveau fichier et le niveau logique.
Les fichiers sont organisés selon une hiérarchie représentant des relations globales tandis que le niveau logique est défini par les fonctions, classes et variables qui représentent différentes unités logiques au sein du code.Les embeddings ne saisissent pas ces nuances structurelles.
C’est également pourquoi élargir la fenêtre contextuelle n’a pas vraiment d’importance ; même si vous pouviez introduire votre base complète dans un LLM (modèle linguistique), vous seriez toujours confronté au même problème lié aux relations structurelles manquantes dans votre base de code.
Avoir une compréhension approfondie du code constitue donc la clé pour développer efficacement des applications génératrices de code. C’est là où réside véritablement le défi majeur : privilégier l’ingénierie plutôt que simplement s’appuyer sur l’intelligence artificielle.