Generating Complex Code Analyzers from Natural Language Questions
Dit artikel introduceert Merlin, een systeem dat grote taalmodellen combineert met het CodeQL-programma-analyseframework met behulp van een nieuwe RAG-gebaseerde iteratieve generatie- en zelftestbenadering om complexe vragen in natuurlijke taal over grote codebases effectief te beantwoorden, waardoor de nauwkeurigheid en efficiëntie van ontwikkelaars taken aanzienlijk worden verbeterd.
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 je een enorme bibliotheek hebt met miljoenen boeken (de codebase) die zijn geschreven in een zeer specifieke, technische taal. Jij bent een bibliothecaris (de ontwikkelaar) die een heel specifiek patroon moet vinden: "Vind elk boek waarin een personage zichzelf voorstelt voordat het volledig is geboren."
Dit handmatig doen is onmogelijk. Het gebruik van een simpele zoekbalk om naar het woord "geboren" te zoeken (zoals grep) is nutteloos, omdat het de betekenis van de zin mist. Het vragen aan een superintelligente AI-assistent (een Large Language Model of LLM) om de hele bibliotheek te lezen en het antwoord te geven, faalt vaak omdat de bibliotheek te groot is om in het geheugen van de AI te passen, of omdat de AI gewoon verkeerd gokt.
Maak kennis met Merlin.
Merlin is een nieuw systeem dat fungeert als een superkrachtige vertaler en detective. Het zit tussen jou (die natuurlijk Engels spreekt) en een zeer strikte, krachtige database-engine genaamd CodeQL (die de technische structuur van code perfect begrijpt).
Hier is hoe Merlin werkt, met eenvoudige analogieën:
1. De Vertaler (Natuurlijke taal naar CodeQL)
Je stelt Merlin een vraag in gewoon Engels: "Toon me alle plekken waar een constructor een methode aanroept die later kan worden gewijzigd."
Merlin raadt het antwoord niet zomaar. In plaats daarvan vertaalt het je vraag naar een precieze query voor de CodeQL-database. Denk aan CodeQL als een gigantische, gestructureerde spreadsheet van je volledige code. Merlin schrijft een specifieke SQL-achtige opdracht om die spreadsheet te vragen om de exacte data die je nodig hebt.
2. De "Zelftest" (De Litmus-test)
Hier wordt het lastig: zelfs als Merlin een query schrijft die grammaticaal correct lijkt, kan deze logisch nog steeds verkeerd zijn. Het kan vragen om "appels" terwijl je "fruit" bedoelde, of het kan te kieskeurig zijn en niets vinden.
Om dit op te lossen, heeft Merlin een zelftest-functie. Voordat het je enorme bibliotheek doorzoekt, vraagt het de AI om een klein, nep-voorbeeld (een "mock"-scenario) te maken om te zien of de query werkt.
- De Analogie: Stel je voor dat je een metaaldetector test. Voordat je door een hele stad loopt, loop je door een kleine tuin met een paar begraven munten. Als de metaaldetector piept voor de munten, weet je dat hij werkt. Als hij stil blijft, weet je dat de detector kapot is, en je repareert hem voordat je tijd verspilt met het doorzoeken van de stad.
- Het Resultaat: Als de query deze kleine test faalt, weet Merlin dat het kapot is en probeert het opnieuw.
3. De "Ondersteunende Query" (De Detectivelamp)
Soms is de query syntactisch perfect, maar vindt het nog steeds niets omdat de AI een subtiel detail verkeerd heeft begrepen.
Merlin gebruikt een techniek genaamd Ondersteunende Queries.
- De Analogie: Stel je voor dat je op zoek bent naar een specifiek type vogel in een bos, maar je verrekijker is beslagen. In plaats van alleen maar harder te staren, vraag je een helper om alles wat ze in de bomen zien hardop te roepen ("Ik zie een rode vogel, een blauwe vogel, een eekhoorn...").
- Hoe het helpt: Door deze lijst van "getuigen" te zien, realiseert de AI zich: "Oh! Ik zocht naar rode vogels, maar het bos zit vol met blauwe exemplaren. Ik moet mijn zoekopdracht aanpassen." Dit helpt de AI om zijn eigen logica te debuggen en het juiste antwoord te vinden.
4. De Resultaten: Waarom het belangrijk is
De onderzoekers hebben Merlin getest tegen andere tools en menselijke ontwikkelaars.
- De Naald vinden: Merlin vond bijna alle bugs die bestaande professionele tools vonden, maar het vond ook veel meer die de andere tools hadden gemist.
- Menselijke snelheid: In een studie waarbij echte programmeurs bugs moesten vinden en oplossen:
- Diegenen die Merlin gebruikten waren 3,8 keer nauwkeuriger dan diegenen zonder het.
- Ze voltooiden de taken 31% sneller.
- Het "Waarom": Zonder Merlin bleven programmeurs vaak steken in saaie, handmatige zoektochten of vertrouwden ze op AI die hen verkeerde antwoorden gaf. Merlin gaf hen een duidelijk, controleerbaar overzicht van locaties en de exacte logica die werd gebruikt om ze te vinden, zodat ze de resultaten konden vertrouwen.
Samenvatting
Merlin is als het hebben van een vertaler die zowel "Menselijk Engels" als "Machine-Logica" spreekt, een kwaliteitscontrole-inspecteur die de instructies test voordat hij ze verstuurt, en een detective die flitslichten gebruikt om uit te zoeken waarom een zoektocht mislukt. Het stelt ontwikkelaars in staat om complexe vragen te stellen over enorme codebases en betrouwbare, precieze antwoorden te krijgen zonder zelf experts te hoeven zijn in de technische querytaal.
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.