Bei großen Modellen eignen sie sich gut für lokalisierte Kodierungsaufgaben.
Wenn die Aufgabe mehrere voneinander abhängige Dateien umfasst, kann LLM dieses Problem nicht lösen
Microsoft-Forscher haben zu diesem Zweck ein aufgabenunabhängiges neuronales Netzwerk-Framework namens CodePlan entwickelt
Bild
Papieradresse: https ://arxiv.org/pdf/2309.12499.pdf
In dem Artikel integriert CodePlan eine mehrstufige Bearbeitungskette (Chain-of-Edits), die eine Kombination aus Programmanalyse, Planung und LLM ist zusammen sein.
Schauen wir uns im Detail an, wie ist CodePlan aufgebaut?
Softwareentwicklungsaktivitäten wie Paketmigration, Behebung von Fehlerberichten für statische Analysen oder Tests und das Hinzufügen von Typhinweisen oder anderen Spezifikationen zur Codebasis umfassen die Abbildung des gesamten Codespeichers durch universelle Bearbeitung von Bibliotheken.
Forscher planen diese Aktivitäten, um „Codierungsaufgaben auf Repository-Ebene“ zu ermöglichen
Codierungstools wie GitHub Copilot und Code Whisperer haben Unterstützung für große Modellfunktionen erhalten und bieten Codierern bei lokalisierten Codierungsproblemen die bereitgestellte Lösung
Tatsache ist jedoch, dass „Codierungsaufgaben auf Repository-Ebene“ komplexer sind und nicht direkt von LLM gelöst werden können, da der Code im Repository voneinander abhängig ist und das gesamte Repository möglicherweise zu groß ist, um aufgenommen zu werden. Tipp
In dieser Studie Das Microsoft-Team betrachtete das Codierungsframework auf Bibliotheksebene als Planungsproblem und schlug ein aufgabenunabhängiges Framework namens CodePlan vor.
CodePlan kombiniert eine mehrstufige Bearbeitungskette (Plan), bei der jeder Schritt LLM am Codeort aufruft. Der Kontext an dieser Codestelle stammt aus dem gesamten Repository, früheren Codeänderungen und aufgabenspezifischen Anweisungen.
CodePlan ist eine neue Kombination, die auf inkrementeller Abhängigkeitsanalyse, Analyse möglicher Änderungsauswirkungen und adaptivem Planungsalgorithmus basiert
Bild
Die folgende Abbildung zeigt die Änderungen in der komplexen Bibliotheks-API, Microsoft Research Die Person hat die Aufgabe, die Codebasis entsprechend dieser Änderung zu migrieren.
Bilder
Die linke Seite von Abbildung 3 zeigt den Teil der Codebibliothek, der sich auf die Verwendung der Pluralbibliothek bezieht.
Konkret ruft die Methode func in der Datei Create.cs die Methode in der Bibliothek auf Wenn Sie die Methode „create_complex“ verwenden, ruft die Methode „Process.cs“ in der Datei „Process.cs“ func auf.
Bild
Der Forscher übergibt die Aufgabenbeschreibung und den Funktionskörper aus Abbildung 1 an LLM, um den geänderten Funktionscode zu generieren, wie auf der rechten Seite von Abbildung 3 dargestellt.
Wie Sie sehen können, LLM hat den Aufruf der API „create_complex“ korrekt bearbeitet, sodass ein Objekt vom Typ „Complex“ und nicht ein Tupel aus zwei Gleitkommawerten zurückgegeben wird.
Beachten Sie, dass diese Bearbeitung zu einer Änderung der Signatur der Methode func geführt hat – sie gibt jetzt ein Objekt vom Typ Complex zurück.
Was geändert werden muss, ist: Der Aufrufer der Methode func muss geändert werden, z. B. die Prozessmethode in der Datei Process.cs, wie in der unteren linken Ecke von Abbildung 3 dargestellt. Ohne entsprechende Änderungen am Hauptteil der Prozessmethode kann der Code nicht erstellt werden!
Die untere rechte Seite von Abbildung 3 zeigt entsprechende Änderungen an der Prozessmethode, mit denen das Repository in einen konsistenten Zustand gebracht werden kann, sodass beim Kompilieren keine Fehler auftreten.
Die Hauptaufgabe der Forscher besteht darin, ein „Kodierungssystem auf Repository-Ebene“ einzurichten, das automatisch die für die Bearbeitung erforderlichen Ableitungsspezifikationen generieren kann
LLM-gesteuerte Kodierungsaufgaben auf Bibliotheksebene sind wie folgt definiert:
Bilder
Im Gesamtrahmen von CodePlan umfassen die Eingaben ein Repository, eine Aufgabe, die die Seed-Spezifikation durch Anweisungen in natürlicher Sprache oder eine Reihe anfänglicher Codeänderungen ausdrückt, ein Korrektheitsorakel und ein LLM
CodePlan Es wird ein Plandiagramm erstellt, in dem jeder Knoten eine Codebearbeitungsaufgabe darstellt, die LLM ausführen muss, und die Kante den Zielknoten darstellt, der nach dem Quellknoten ausgeführt werden muss.
CodePlan überwacht die Codebearbeitung und erweitert sich adaptiv das Plandiagramm.
Sobald alle Schritte im Plan abgeschlossen sind, wird das Repository von Oracle analysiert. Wenn Oracle das Repository validiert, ist die Aufgabe abgeschlossen. Wenn ein Fehler gefunden wird, dient der Fehlerbericht als Ausgangsspezifikation für die nächste Runde der Plangenerierung und -ausführung.
Bilder
Darüber hinaus verwaltet der CodePlan-Algorithmus auch ein Abhängigkeitsdiagramm, und Abbildung 4 zeigt die Struktur des Abhängigkeitsdiagramms.
Bilder
Forscher bewerteten die Wirksamkeit von CodePlan bei zwei Aufgaben auf Repository-Ebene: Paketmigration (C#) und zeitliche Codebearbeitung (Python).
Jede Aufgabe wird anhand mehrerer Codes bewertet Basen, die jeweils voneinander abhängige Änderungen an mehreren Dateien (2-97 Dateien) erfordern.
Bilder
Nie zuvor wurde LLM verwendet, um eine Codierungsaufgabe dieser Komplexität zu automatisieren.
Forschungsergebnisse zeigen, dass CodePlan eher mit der Grundwahrheit übereinstimmt als mit der Grundlinie und in der Lage ist, dies zu erreichen 5/6 Repositorys bestehen Gültigkeitsprüfungen wie fehlerfreie Builds und korrekte Codebearbeitungen
Insgesamt bietet CodePlan einen vielversprechenden Ansatz zur Automatisierung komplexer Codierungsaufgaben auf Bibliotheksebene, wodurch sowohl die Produktivität verbessert als auch die Genauigkeit erneut verbessert wurde
Es bewältigt erfolgreich viele Herausforderungen und eröffnet neue Möglichkeiten für eine effiziente und zuverlässige Software-Engineering-Praxis
Referenz: https://www.php.cn/ link/23b1f559d8bd157d0d741c83957ed4f2
Das obige ist der detaillierte Inhalt vonProgrammierer sind begeistert! Microsoft hat CodePlan vorgeschlagen, um LLM-Codierungsaufgaben über 168 Codebasen hinweg zu automatisieren. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!