Pour les grands modèles, ils sont bons pour les tâches d'encodage localisé.
Si la tâche implique plusieurs fichiers interdépendants, LLM ne peut pas résoudre ce problème
Les chercheurs de Microsoft ont conçu à cet effet un cadre de réseau neuronal indépendant des tâches appelé CodePlan
Image
Adresse papier : https ://arxiv.org/pdf/2309.12499.pdf
Dans l'article, CodePlan intègre une chaîne d'édition en plusieurs étapes (chain-of-edits), qui est une combinaison d'analyse de programme, de planification et de LLM. De nouvelles façons de être ensemble.
Regardons en détail, comment CodePlan est-il conçu ?
Les activités d'ingénierie logicielle telles que la migration de packages, la correction des rapports de bogues pour l'analyse ou les tests statiques et l'ajout d'indices de type ou d'autres spécifications à la base de code impliquent la cartographie de l'ensemble du magasin de code. Édition universelle des bibliothèques.
Les chercheurs planifient ces activités pour permettre des « tâches de codage au niveau du référentiel »
Les outils de codage tels que GitHub Copilot et Code Whisperer ont pris en charge les capacités de grands modèles, fournissant aux codeurs des problèmes de codage localisés Solution fournie
Cependant, le fait est que les « tâches de codage au niveau du référentiel » sont plus complexes et ne peuvent pas être résolues directement par LLM, car le code dans le référentiel est interdépendant et l'ensemble du référentiel peut être trop volumineux pour être inclus. Astuce
Dans cette étude , l'équipe Microsoft a pris le cadre de codage au niveau de la bibliothèque comme un problème de planification et a proposé un cadre indépendant des tâches appelé CodePlan.
CodePlan combine une chaîne d'édition (plan) en plusieurs étapes où chaque étape appelle LLM à l'emplacement du code. Le contexte à cet emplacement de code provient de l'intégralité du référentiel, des modifications de code précédentes et des instructions spécifiques à la tâche.
CodePlan est une nouvelle combinaison basée sur une analyse de dépendance incrémentielle, une analyse d'impact possible des changements et un algorithme de planification adaptative
Image
La figure suivante montre les modifications apportées à l'API de la bibliothèque complexe, Microsoft Research La personne est chargée de migrer la base de code en fonction de ce changement.
Images
Le côté gauche de la figure 3 montre la partie de la bibliothèque de codes liée à l'utilisation de la bibliothèque plurielle
Plus précisément, la méthode func dans le fichier Create.cs appelle la méthode dans la bibliothèque create_complex, la méthode Process.cs dans le fichier Process.cs appelle func.
image
Le chercheur transmet la description de la tâche et le corps de fonction de la figure 1 à LLM pour générer le code de fonction modifié, comme indiqué sur le côté droit de la figure 3
Comme vous pouvez le voir, LLM a correctement modifié l'appel à l'API create_complex afin qu'il renvoie un objet de type Complex plutôt qu'un tuple de deux valeurs à virgule flottante.
Notez que cette modification a entraîné une modification de la signature de la méthode func - elle renvoie désormais un objet de type Complex.
Ce qui doit être modifié est : l'appelant de la méthode func doit être modifié, comme la méthode process dans le fichier Process.cs, comme indiqué dans le coin inférieur gauche de la figure 3. Sans modifications appropriées du corps de la méthode de processus, le code ne sera pas construit !
Le coin inférieur droit de la figure 3 montre les modifications appropriées de la méthode de processus, qui peuvent amener la bibliothèque de versions à un état cohérent afin qu'il n'y ait pas d'erreurs lors de la compilation.
La tâche principale des chercheurs est d'établir un « système de codage au niveau du référentiel » capable de générer automatiquement les spécifications de dérivation requises pour l'édition
Les tâches de codage au niveau du référentiel pilotées par LLM sont définies comme suit :
Images
Dans le cadre global de CodePlan, les entrées incluent un référentiel, une tâche qui exprime la spécification de départ à travers des instructions en langage naturel ou un ensemble de modifications de code initiales, un oracle d'exactitude et un LLM
CodePlan Un graphique de plan est créé, où chaque nœud représente une tâche d'édition de code que LLM doit effectuer, et le bord représente le nœud cible qui doit être effectué après le nœud source
CodePlan surveille l'édition de code et se développe de manière adaptative. le graphique du plan.
Une fois toutes les étapes du plan terminées, le référentiel sera analysé par oracle. Si Oracle valide le référentiel, la tâche est terminée. Si une erreur est détectée, le rapport d'erreurs sert de spécification de départ pour le prochain cycle de génération et d'exécution du plan.
Pictures
De plus, l'algorithme CodePlan maintient également un graphe de dépendances, et la figure 4 illustre la structure du graphe de dépendances.
Photos
Les chercheurs ont évalué l'efficacité de CodePlan sur deux tâches au niveau du référentiel : la migration de packages (C#) et l'édition de code temporel (Python)
Chaque tâche est évaluée sur plusieurs bases de code , chacun nécessitant des modifications interdépendantes de plusieurs fichiers (2 à 97 fichiers).
Photos
Jamais auparavant LLM n'a été utilisé pour automatiser une tâche de codage de ce niveau de complexité
Les résultats de recherche montrent que CodePlan est plus cohérent avec la vérité terrain qu'avec la base de référence, étant capable de faire 5 référentiels sur 6 réussissent les contrôles de validité tels que les constructions sans erreurs et les modifications de code correctes
Dans l'ensemble, CodePlan fournit une approche prometteuse pour automatiser les tâches de codage complexes au niveau de la bibliothèque, améliorant à la fois la productivité et la précision. Il relève avec succès de nombreux défis et ouvre de nouvelles possibilités pour une pratique efficace et fiable du génie logiciel
Référence :
https://www.php.cn/link/23b1f559d8bd157d0d741c83957ed4f2
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!