Rover: Context-aware Conflict Resolution with LLM
Rover ist ein neuartiges Konfliktlösungssystem, das große Sprachmodelle durch die Integration von Programmanalyse und einem mehrschichtigen Code-Eigenschaftsgraphen erweitert, um kontextbewusste Prompts zu generieren und dadurch bestehende Werkzeuge bei der präzisen Auflösung komplexer Code-Zusammenführungskonflikte übertrifft.
Originalarbeit lizenziert unter CC BY 4.0 (http://creativecommons.org/licenses/by/4.0/). Dies ist eine KI-generierte Erklärung des untenstehenden Papers. Sie wurde nicht von den Autoren verfasst oder gebilligt. Für technische Genauigkeit konsultieren Sie das Originalpaper. Vollständigen Haftungsausschluss lesen
Stellen Sie sich vor, Sie und ein Freund bearbeiten gleichzeitig dasselbe Kochbuch. Sie beschließen, eine Prise Salz in die Suppe zu geben, während Ihr Freund beschließt, eine Tasse Zucker hinzuzufügen. Wenn Sie versuchen, Ihre beiden Versionen zu kombinieren, gerät das Buch in Verwirrung: „Geben wir Salz hinzu? Zucker? Beides? Keines?" Dies ist ein Merge-Konflikt.
In der Welt der Software tun dies jeden Tag Millionen von Entwicklern. Normalerweise versuchen Computer, diese Konflikte automatisch zu lösen, doch oft liegen sie falsch, da sie nur die unmittelbaren Textzeilen betrachten und den größeren Zusammenhang übersehen. Wenn Sie in einer Datei einen Variablennamen ändern, kann dies eine Funktion in einer völlig anderen Datei zerstören. Standardtools „sehen" diese Verbindung nicht.
Hier kommt Rover ins Spiel, ein neues Werkzeug, das als ultimativer „Super-Editor" für diese Konflikte konzipiert wurde. So funktioniert es, unter Verwendung einfacher Analogien:
1. Das Problem: Der „blinde" Editor
Stellen Sie sich einen Roboter vor, der versucht, einen Tippfehler in einem Roman zu korrigieren. Wenn der Roboter nur den Satz mit dem Tippfehler betrachtet, mag er die Rechtschreibung korrigieren, aber versehentlich die Bedeutung des gesamten Absatzes zerstören, weil er nicht wusste, was die Figur drei Kapitel zuvor tun sollte.
Aktuelle Tools sind wie dieser Roboter. Sie betrachten die konfliktbehafteten Zeilen und die wenigen Zeilen unmittelbar daneben. Sie übersehen die „Fernverbindungen", wie etwa eine Funktion, die in Datei A definiert ist, aber in Datei B verwendet wird.
2. Die Lösung: Rovers „Super-Karte" (MtCPG)
Rover liest nicht nur den Text; es erstellt einen Multi-Layer-Code-Property-Graph (MtCPG).
Stellen Sie sich dies wie eine riesige, interaktive U-Bahn-Karte des gesamten Softwareprojekts vor.
- Standardtools betrachten nur die Straße, auf der der Unfall passiert ist.
- Rovers Karte zeigt jede Station, jede Schiene und jede Verbindung zwischen verschiedenen Linien, selbst wenn sie in verschiedenen Städten (Dateien) liegen.
Diese Karte verfolgt:
- Wer mit wem spricht: Wenn eine Funktion in einer Datei eine Variable in einer anderen aufruft, zieht die Karte eine Linie zwischen ihnen.
- Die Hierarchie: Sie weiß, dass eine bestimmte Codezeile zu einer bestimmten Funktion gehört, die wiederum zu einer bestimmten Klasse gehört.
- Das „Warum": Sie versteht, dass wenn Sie eine Definition ändern, alles, was damit verbunden ist, betroffen ist, selbst wenn es 100 Zeilen entfernt oder in einer anderen Datei liegt.
3. Der Prozess: Den richtigen Kontext finden
Wenn ein Konflikt auftritt, greift Rover nicht einfach den Text neben dem Fehler. Stattdessen nutzt es seine U-Bahn-Karte, um die Verbindungen nachzuverfolgen.
- Konflikt lokalisieren: Es findet die genaue Stelle, an der sich die beiden Versionen widersprechen.
- Linien nachverfolgen: Es folgt den „Schienen" auf seiner Karte, um jedes Codestück zu finden, das mit diesem Konflikt verbunden ist. Vielleicht betrifft der Konflikt eine Variable, die in einer anderen Datei definiert wurde? Rover findet diese Datei und holt sich auch diesen Code.
- Hinweise gruppieren: Es fasst all diese verbundenen Codestücke zu einem „Kontextbündel" zusammen. Es ist, als würde man alle Zeugen und Beweise sammeln, die sich auf einen Tatort beziehen, anstatt nur den Tatort selbst zu betrachten.
4. Die Lösung: Die intelligente KI
Sobald Rover dieses reichhaltige „Kontextbündel" hat, übergibt es es einem Large Language Model (LLM) – einer sehr intelligenten KI, die weiß, wie man Code schreibt.
- Ohne Rover: Die KI erhält ein winziges Code-Schnipsel und muss den Rest erraten. Oft rät sie falsch, weil ihr der Kontext fehlt.
- Mit Rover: Die KI erhält den Konflikt plus die vollständige „U-Bahn-Karte" des zugehörigen Codes. Sie kann das Gesamtbild sehen. Sie versteht: „Ah, diese Variable wird hier verwendet, und diese Funktion erwartet diesen Datentyp."
Die KI schreibt dann die perfekte Lösung, die beide Code-Versionen zufriedenstellt und die Absicht beider Entwickler bewahrt.
5. Die Ergebnisse: Warum es wichtig ist
Die Forscher testeten Rover gegen:
- Standard-KI: Nur die KI, die den nahen Text betrachtet.
- Alte Machine-Learning-Tools: Tools, die auf spezifischen Mustern trainiert wurden.
- Andere „Helfer"-Tools: Tools, die versuchen, zugehörigen Code zu finden, aber oft die tiefen Verbindungen übersehen.
Das Ergebnis:
Rover war deutlich besser darin, die Konflikte zu lösen.
- Es lieferte Lösungen, die mehr dem glichen, was menschliche Entwickler geschrieben hätten.
- Es bewältigte komplexe Situationen, in denen Code in einer Datei von Code in einer anderen Datei abhing, was andere Tools nicht lösen konnten.
- Es funktionierte über verschiedene Programmiersprachen hinweg (C, Java, Python), ohne für jede einzelne neu trainiert werden zu müssen.
Zusammenfassung
Stellen Sie sich Rover als einen Detektiv vor, der nicht nur den Tatort (den Konflikt) betrachtet, sondern vor der Aufklärung des Falls auch jeden Zeugen befragt und jede Alibi-Prüfung (die Code-Abhängigkeiten) durchführt. Indem Rover der KI eine vollständige Karte der Beziehungen der Software liefert, stellt es sicher, dass der finale zusammengeführte Code korrekt, sicher und tatsächlich funktionsfähig ist.
Ertrinken Sie in Arbeiten in Ihrem Fachgebiet?
Erhalten Sie tägliche Digests der neuesten Arbeiten passend zu Ihren Forschungsbegriffen — mit technischen Zusammenfassungen, in Ihrer Sprache.