Réinventer le développement de logiciels avec Amazon Q Developer Agent | Services Web Amazon
Amazon Q Developer est un assistant de développement logiciel basé sur l’IA qui réinvente l’expérience tout au long du cycle de vie du développement logiciel, ce qui accélère la création, la sécurisation, la gestion et l’optimisation des applications sur ou hors d’AWS. L’agent de développement Amazon Q comprend un agent de développement de fonctionnalités qui implémente automatiquement des fonctionnalités multi-fichiers, des corrections de bogues et des tests unitaires dans votre espace de travail d’environnement de développement intégré (IDE) à l’aide d’une saisie en langage naturel. Après avoir saisi votre requête, l’agent de développement logiciel analyse votre base de code et formule un plan pour répondre à la demande. Vous pouvez accepter le plan ou demander à l’agent de le modifier. Une fois le plan validé, l’agent génère les modifications de code nécessaires pour implémenter la fonctionnalité que vous avez demandée. Vous pouvez ensuite examiner et accepter les modifications du code ou demander une révision.
Amazon Q Developer utilise l’intelligence artificielle (IA) générative pour offrir une précision de pointe à tous les développeurs, occupant la première place du classement du SWE-bench, un ensemble de données qui teste la capacité d’un système à résoudre automatiquement les problèmes de GitHub. Cet article décrit comment démarrer avec l’agent de développement logiciel, donne un aperçu du fonctionnement de l’agent et discute de ses performances sur les benchmarks publics. Nous approfondissons également le processus de démarrage avec l’agent de développement Amazon Q et donnons un aperçu des mécanismes sous-jacents qui en font un agent de développement de fonctionnalités de pointe.
Commencer
Pour commencer, vous devez disposer d’un ID AWS Builder ou faire partie d’une organisation avec une configuration d’instance AWS IAM Identity Center qui vous permet d’utiliser Amazon Q. Pour utiliser Amazon Q Developer Agent pour le développement de fonctionnalités dans Visual Studio Code, démarrez en installant l’extension Amazon Q. L’extension est également disponible pour JetBrains, Visual Studio (en aperçu) et dans la ligne de commande sur macOS. Recherchez la dernière version sur la page Amazon Q Developer.
Après vous être authentifié, vous pouvez appeler l’agent de développement de fonctionnalités en saisissant /dev
dans le champ de discussion.
L’agent de développement de fonctionnalités est maintenant prêt à répondre à vos demandes. Utilisons le référentiel du modèle de prévision Amazons Chronos pour démontrer le fonctionnement de l’agent. Le code de Chronos est déjà de haute qualité, mais la couverture des tests unitaires pourrait être améliorée par endroits. Demandons à l’agent de développement logiciel d’améliorer la couverture des tests unitaires du fichier chronos.py. En exprimant votre demande aussi clairement et précisément que possible, vous aiderez l’agent à vous proposer la meilleure solution possible.
L’agent renvoie un plan détaillé pour ajouter les tests manquants dans la suite de tests existante test/test_chronos.py
. Pour générer le plan (et plus tard le changement de code), l’agent a exploré votre base de code pour comprendre comment satisfaire votre demande. L’agent fonctionnera mieux si les noms des fichiers et des fonctions décrivent leur intention.
On vous demande de revoir le plan. Si le plan semble bon et que vous souhaitez continuer, choisissez Générer du code. Si vous constatez qu’il peut être amélioré par endroits, vous pouvez fournir des commentaires et demander un plan amélioré.
Une fois le code généré, l’agent de développement logiciel listera les fichiers pour lesquels il a créé un diff
(pour ce post, test/test_chronos.py
). Vous pouvez examiner les modifications du code et décider soit de les insérer dans votre base de code, soit de fournir des commentaires sur les améliorations possibles et de régénérer le code.
Le choix d’un fichier modifié ouvre une vue différentielle dans l’IDE montrant quelles lignes ont été ajoutées ou modifiées. L’agent a ajouté plusieurs tests unitaires pour des parties de chronos.py qui n’étaient pas couvertes auparavant.
Après avoir examiné les modifications du code, vous pouvez décider de les insérer, de fournir des commentaires pour générer à nouveau le code ou de le supprimer complètement. C’est ça; Il n’y a rien d’autre à faire pour toi. Si vous souhaitez demander une autre fonctionnalité, appelez \dev
à nouveau dans Amazon Q Developer.
Présentation du système
Maintenant que nous vous avons montré comment utiliser Amazon Q Developer Agent pour le développement de logiciels, explorons son fonctionnement. Ceci est un aperçu du système à partir de mai 2024. L’agent est continuellement amélioré. La logique décrite dans cette section évoluera et changera.
Lorsque vous soumettez une requête, l’agent génère une représentation structurée du système de fichiers du référentiel au format XML. Voici un exemple de résultat, tronqué par souci de concision :
Un LLM utilise ensuite cette représentation avec votre requête pour déterminer quels fichiers sont pertinents et doivent être récupérés. Nous utilisons des systèmes automatisés pour vérifier que les fichiers identifiés par le LLM sont tous valides. L’agent utilise les fichiers récupérés avec votre requête pour générer un plan expliquant comment il résoudra la tâche que vous lui avez assignée. Ce plan vous est retourné pour validation ou itération. Après avoir validé le plan, l’agent passe à l’étape suivante, qui se termine finalement par une proposition de modification de code pour résoudre le problème.
Le contenu de chaque fichier de code récupéré est analysé avec un analyseur syntaxique pour obtenir une représentation arborescente syntaxique XML du code, que le LLM est capable d’utiliser plus efficacement que le code source lui-même tout en utilisant beaucoup moins de jetons. Ce qui suit est un exemple de cette représentation. Les fichiers non codés sont codés et fragmentés à l’aide d’une logique couramment utilisée dans les systèmes de génération augmentée de récupération (RAG) pour permettre la récupération efficace de morceaux de documentation.
La capture d’écran suivante montre un morceau de code Python.
Ce qui suit est sa représentation en arbre syntaxique.
Le LLM est à nouveau invité à fournir l’énoncé du problème, le plan et l’arborescence XML de chacun des fichiers récupérés pour identifier les plages de lignes qui doivent être mises à jour afin de résoudre le problème. Cette approche vous permet d’être plus économe dans votre utilisation de la bande passante LLM.
L’agent de développement logiciel est maintenant prêt à générer le code qui résoudra votre problème. Le LLM réécrit directement des sections de code, plutôt que de tenter de générer un correctif. Cette tâche est beaucoup plus proche de celles pour lesquelles le LLM a été optimisé par rapport à la tentative de génération directe d’un correctif. L’agent procède à une validation syntaxique du code généré et tente de résoudre les problèmes avant de passer à l’étape finale. Le code original et réécrit est transmis à une bibliothèque de différences pour générer un correctif par programme. Cela crée le résultat final qui est ensuite partagé avec vous pour examen et acceptation.
Précision du système
Dans le communiqué de presse annonçant le lancement d’Amazon Q Developer Agent pour le développement de fonctionnalités, nous avons indiqué que le modèle avait obtenu un score de 13,82 % sur SWE-bench et de 20,33 % sur SWE-bench lite, ce qui le plaçait en tête du classement SWE-bench à partir de Mai 2024. SWE-bench est un ensemble de données publiques de plus de 2 000 tâches provenant de 12 référentiels open source Python populaires. La mesure clé rapportée dans le classement de SWE-bench est le taux de réussite : la fréquence à laquelle nous voyons tous les tests unitaires associés à un problème spécifique réussir après l’application de modifications de code générées par l’IA. Il s’agit d’une mesure importante car nos clients souhaitent utiliser l’agent pour résoudre des problèmes du monde réel et nous sommes fiers d’annoncer un taux de réussite de pointe.
Une seule mesure ne raconte jamais toute l’histoire. Nous examinons les performances de notre agent comme un point sur le front de Pareto sur plusieurs métriques. L’agent de développement Amazon Q pour le développement de logiciels n’est pas spécifiquement optimisé pour SWE-bench. Notre approche se concentre sur l’optimisation d’une gamme de métriques et d’ensembles de données. Par exemple, nous visons à trouver un équilibre entre précision et efficacité des ressources, comme le nombre d’appels LLM et les jetons d’entrée/sortie utilisés, car cela a un impact direct sur le temps d’exécution et le coût. À cet égard, nous sommes fiers de la capacité de nos solutions à fournir systématiquement des résultats en quelques minutes.
Limites des benchmarks publics
Les benchmarks publics tels que SWE-bench sont une contribution incroyablement utile à la communauté de génération de code d’IA et présentent un défi scientifique intéressant. Nous sommes reconnaissants envers l’équipe qui a publié et maintenu cette référence. Nous sommes fiers de pouvoir partager nos résultats de pointe sur ce benchmark. Néanmoins, nous souhaitons souligner quelques limitations, qui ne sont pas exclusives à SWE-bench.
La métrique de réussite du banc SWE est binaire. Soit un changement de code réussit tous les tests, soit il ne réussit pas. Nous pensons que cela ne reflète pas toute la valeur que les agents de développement de fonctionnalités peuvent générer pour les développeurs. Les agents font gagner beaucoup de temps aux développeurs, même lorsqu’ils n’implémentent pas l’intégralité d’une fonctionnalité en même temps. La latence, le coût, le nombre d’appels LLM et le nombre de jetons sont tous des mesures hautement corrélées qui représentent la complexité informatique d’une solution. Cette dimension est aussi importante que la précision pour nos clients.
Les cas de test inclus dans le benchmark SWE-bench sont accessibles au public sur GitHub. En tant que tel, il est possible que ces cas de test aient été utilisés dans les données de formation de divers grands modèles de langage. Bien que les LLM aient la capacité de mémoriser des parties de leurs données de formation, il est difficile de quantifier dans quelle mesure cette mémorisation se produit et si les modèles divulguent ces informations par inadvertance pendant les tests.
Pour étudier ce problème potentiel, nous avons mené plusieurs expériences pour évaluer la possibilité de fuite de données entre différents modèles populaires. Une approche pour tester la mémorisation consiste à demander aux modèles de prédire la ligne suivante d’une description de problème dans un contexte très court. C’est une tâche avec laquelle ils devraient théoriquement lutter en l’absence de mémorisation. Nos résultats indiquent que les modèles récents montrent des signes d’avoir été formés sur l’ensemble de données du banc SWE.
La figure suivante montre la distribution des scores rougeL lorsqu’on demande à chaque modèle de compléter la phrase suivante d’une description de problème SWE-bench en fonction des phrases précédentes.
Nous avons partagé les mesures des performances de notre agent de développement logiciel sur SWE-bench pour offrir un point de référence. Nous vous recommandons de tester les agents sur des référentiels de code privés qui n’ont été utilisés dans la formation d’aucun LLM et de comparer ces résultats avec ceux des références accessibles au public. Nous continuerons à comparer notre système sur SWE-bench tout en concentrant nos tests sur des ensembles de données d’analyse comparative privés qui n’ont pas été utilisés pour former des modèles et qui représentent mieux les tâches soumises par nos clients.
Conclusion
Cet article explique comment démarrer avec Amazon Q Developer Agent pour le développement de logiciels. L’agent implémente automatiquement les fonctionnalités que vous décrivez en langage naturel dans votre IDE. Nous vous avons donné un aperçu de la façon dont l’agent travaille dans les coulisses et avons discuté de sa précision de pointe et de sa position en tête du classement SWE.
Vous êtes maintenant prêt à explorer les capacités d’Amazon Q Developer Agent pour le développement de logiciels et à en faire votre assistant de codage d’IA personnel ! Installez le plug-in Amazon Q dans l’IDE de votre choix et commencez à utiliser Amazon Q (y compris l’agent de développement logiciel) gratuitement à l’aide de votre identifiant AWS Builder ou abonnez-vous à Amazon Q pour débloquer des limites plus élevées.
À propos des auteurs
Christian Bock est un scientifique appliqué chez Amazon Web Services qui travaille sur l’IA pour le code.
Laurent Callot est un scientifique appliqué principal chez Amazon Web Services, dirigeant des équipes créant des solutions d’IA pour les développeurs.
Tim Esler est un scientifique appliqué senior chez Amazon Web Services qui travaille sur l’IA générative et les agents de codage pour créer des outils de développement et des outils de base pour les produits Amazon Q.
Prabhu Teja est un scientifique appliqué chez Amazon Web Services. Prabhu travaille sur la génération de code assistée par LLM en mettant l’accent sur l’interaction en langage naturel.
Martin Wistuba est un scientifique appliqué senior chez Amazon Web Services. En tant que membre d’Amazon Q Developer, il aide les développeurs à écrire plus de code en moins de temps.
Giovanni Zappella est un scientifique appliqué principal travaillant sur la création d’agents intelligents pour la génération de code. Chez Amazon, il a également contribué à la création de nouveaux algorithmes pour l’apprentissage continu, AutoML et les systèmes de recommandations.