Les grands modèles de langage (LLM) sont incroyablement puissants, mais ils sont également connus pour leurs hallucinations. Chez Korbit, nous en avons fait l'expérience directe lors du développement de notre réviseur de code GenAI. Notre système analysait les demandes de téléchargement contenant des dizaines de milliers de lignes de code afin de détecter les bogues potentiels. Mais nous avons rapidement remarqué un énorme problème : de nombreux problèmes signalés n'étaient pas de vrais bogues, mais des hallucinations.
Ces faux positifs n'ont pas seulement fait perdre du temps aux développeurs, ils ont aussi érodé la confiance dans les revues de code automatisées. De toute évidence, il s'agissait d'un problème que nous devions prendre à bras-le-corps.
Pour traiter les hallucinations, nous avons d'abord dû les définir rigoureusement. Nous avons passé des semaines à examiner, collecter et annoter manuellement des centaines de problèmes détectés dans des demandes d'extraction Python, JavaScript et TypeScript du monde réel - couvrant tout, des nouvelles fonctionnalités aux tâches de refactorisation en passant par les corrections de bogues. Nous avons inclus à la fois notre propre code et divers référentiels open-source pour garantir un ensemble de données représentatif.
Au cours de cet examen approfondi, une question fondamentale s'est posée : Qu'est-ce qu'une hallucination ?
Il est évident que si un LLM génère des absurdités, telles que des bibliothèques imaginaires, des fonctions inexistantes ou des problèmes fabriqués de toutes pièces, il s'agit d'une hallucination.
Mais de nombreux cas sont également tombés dans une zone grise. Par exemple, supposons que le LLM identifie un bogue de boucle infinie dans une fonction appelée func_ab(...), mais que la fonction réelle s'appelle func_abc(...). Le LLM a fait une faute de frappe mineure, mais le bogue sous-jacent de la boucle infinie qu'il a signalé est réel. S'agit-il encore d'une hallucination, ou devrions-nous la considérer comme valide et exploitable ?
Un autre scénario subtil est celui où le LLM signale un problème qui est techniquement exact mais qui ne peut être résolu compte tenu du contexte du projet. Imaginons un service web ancien qui doit utiliser des points d'extrémité HTTP non cryptés (par exemple, parce que certains clients ont signé un contrat avec cette exigence d'API exacte il y a de nombreuses années). Un LLM pourrait suggérer de passer à HTTPS - une recommandation technique parfaitement valable - mais les développeurs ne peuvent tout simplement pas l'appliquer en raison de contraintes externes. Dans ce scénario, l'étiqueter comme un bogue serait trompeur et gaspillerait les efforts des développeurs.
Cette constatation nous a amenés à réaliser que la "précision technique" ne suffisait pas à elle seule. Ce qui comptait tout autant, voire plus, c'était l'actionnabilité : un développeur compétent pouvait-il comprendre clairement le problème et faire quelque chose pour y remédier ?
Revenons donc à nos exemples précédents :
Sur la base de notre analyse, nous avons créé un schéma d'annotation pratique pour classer les questions de manière cohérente :
Il convient de noter qu'une question est classée comme "résoluble" même si elle ne l'est qu'en partie.
En appliquant ce schéma à notre ensemble de données, nous avons découvert plusieurs modèles critiques :
Cette analyse complète a guidé nos prochaines étapes : construire un système de détection des hallucinations plus intelligent et mieux adapté au contexte. C'est ainsi que nous avons commencé à enquêter :
En intégrant ces approches, nos expériences ont déjà montré une réduction de près de 80 % des hallucinations, ce qui constitue une avancée significative pour rendre les examens de code alimentés par l'IA plus fiables, plus exploitables et plus dignes de confiance.
Dans la deuxième partie, nous verrons exactement comment nous avons construit notre système d'ensemble de chaînes de pensée, en présentant les stratégies concrètes qui nous ont permis d'obtenir ces résultats remarquables.