Rover: Context-aware Conflict Resolution with LLM
Rover is een nieuw systeem voor conflictoplossing dat grote taalmodellen verbetert door programmeeranalyse en een Multi-layer Code Property Graph te integreren om contextbewuste prompts te genereren, waardoor het bestaande hulpmiddelen overtreft in het nauwkeurig oplossen van complexe code-mergeconflicten.
Oorspronkelijk artikel gelicentieerd onder CC BY 4.0 (http://creativecommons.org/licenses/by/4.0/). Dit is een AI-gegenereerde uitleg van het onderstaande artikel. Het is niet geschreven of goedgekeurd door de auteurs. Raadpleeg het oorspronkelijke artikel voor technische nauwkeurigheid. Lees de volledige disclaimer
Stel je voor dat jij en een vriend tegelijkertijd hetzelfde receptenboek bewerken. Jij besluit een snufje zout aan de soep toe te voegen, terwijl je vriend besluit een kop suiker toe te voegen. Als je probeert je twee versies te combineren, raakt het boek in de war: "Voegen we zout toe? Suiker? Beide? Geen van beide?" Dit is een samenvoegconflict.
In de wereld van software doen miljoenen ontwikkelaars dit elke dag. Meestal proberen computers deze conflicten automatisch op te lossen, maar ze gaan er vaak naast zitten omdat ze alleen naar de directe regels tekst kijken en het grotere plaatje missen. Als je een variabelenaam in één bestand verandert, kan dat een functie in een compleet ander bestand kapotmaken. Standaardtools "zien" die connectie niet.
Maak kennis met Rover, een nieuw hulpmiddel dat is ontworpen als de ultieme "super-editor" voor deze conflicten. Hier is hoe het werkt, met eenvoudige analogieën:
1. Het Probleem: De "Blinde" Editor
Stel je een robot voor die probeert een typefout in een roman te herstellen. Als de robot alleen naar de zin met de typefout kijkt, kan hij de spelling misschien wel verbeteren, maar per ongeluk de betekenis van de hele alinea verstoren omdat hij niet wist wat het personage drie hoofdstukken eerder zou moeten doen.
Huidige tools zijn als deze robot. Ze kijken naar de conflicterende regels en de paar regels direct ernaast. Ze missen de "langeafstands"-connecties, zoals een functie die in Bestand A is gedefinieerd maar in Bestand B wordt gebruikt.
2. De Oplossing: Rover's "Super-kaart" (MtCPG)
Rover leest niet alleen de tekst; het bouwt een Multi-layer Code Property Graph (MtCPG).
Denk hierbij aan een enorme, interactieve metrokaart van het hele softwareproject.
- Standaardtools kijken alleen naar de straat waar het ongeval heeft plaatsgevonden.
- Rover's Kaart toont elk station, elk spoor en elke verbinding tussen verschillende lijnen, zelfs als ze in verschillende steden (bestanden) liggen.
Deze kaart houdt bij:
- Wie met wie praat: Als een functie in één bestand een variabele in een ander bestand aanroept, tekent de kaart een lijn tussen hen.
- De hiërarchie: Het weet dat een specifieke regel code behoort tot een specifieke functie, die op zijn beurt behoort tot een specifieke klasse.
- Het "Waarom": Het begrijpt dat als je een definitie verandert, alles wat ermee verbonden is, wordt beïnvloed, zelfs als het 100 regels verderop staat of in een ander bestand.
3. Het Proces: De Juiste Context Vinden
Wanneer een conflict optreedt, pakt Rover niet zomaar de tekst naast de fout. In plaats daarvan gebruikt het zijn Metrokaart om de connecties te traceren.
- Locatie van het Conflict: Het vindt de exacte plek waar de twee versies het oneens zijn.
- Traceer de Lijnen: Het volgt de "sporen" op zijn kaart om elk stukje code te vinden dat met dat conflict verbonden is. Misschien gaat het conflict over een variabele die in een ander bestand is gedefinieerd? Rover vindt dat bestand en pakt die code ook.
- Groeperen van de Aanwijzingen: Het verzamelt al deze verbonden stukjes code in een "contextbundel". Het is alsof je alle getuigen en bewijzen verzamelt die gerelateerd zijn aan een misdaadplek, in plaats van alleen naar de misdaadplek zelf te kijken.
4. De Oplossing: De Slimme AI
Zodra Rover deze rijke "contextbundel" heeft, geeft hij deze door aan een Large Language Model (LLM) – een zeer slimme AI die weet hoe je code schrijft.
- Zonder Rover: De AI krijgt een klein stukje code en moet de rest raden. Het raadt vaak verkeerd omdat het context mist.
- Met Rover: De AI krijgt het conflict plus de volledige "Metrokaart" van gerelateerde code. Het kan het hele plaatje zien. Het begrijpt: "Ah, deze variabele wordt hier gebruikt, en die functie verwacht dit type data."
De AI schrijft vervolgens de perfecte oplossing die aan beide versies van de code voldoet, waarbij de intentie van beide ontwikkelaars behouden blijft.
5. De Resultaten: Waarom Het Belangrijk Is
De onderzoekers hebben Rover getest tegen:
- Standaard AI: Gewoon de AI die kijkt naar nabijgelegen tekst.
- Oude Machine Learning-tools: Tools die zijn getraind op specifieke patronen.
- Andere "Hulp"-tools: Tools die proberen gerelateerde code te vinden, maar vaak de diepe connecties missen.
Het Resultaat:
Rover was aanzienlijk beter in het oplossen van conflicten.
- Het produceerde oplossingen die meer leken op wat menselijke ontwikkelaars zouden hebben geschreven.
- Het hanteerde complexe situaties waarbij code in één bestand afhankelijk was van code in een ander bestand, wat andere tools niet konden oplossen.
- Het werkte over verschillende programmeertalen (C, Java, Python) zonder dat het voor elk opnieuw getraind hoefde te worden.
Samenvatting
Denk aan Rover als een detective die niet alleen naar de misdaadplek (het conflict) kijkt, maar ook elke getuige interviewt en elke alibi (de code-afhankelijkheden) controleert voordat hij de zaak oplost. Door de AI een complete kaart van de relaties in de software te geven, zorgt Rover ervoor dat de uiteindelijke samengevoegde code correct, veilig is en daadwerkelijk werkt.
Verdrinkt u in papers in uw vakgebied?
Ontvang dagelijkse digests van de nieuwste papers die bij uw onderzoekswoorden passen — met technische samenvattingen, in uw taal.