In Line with Context: Repository-Level Code Generation via Context Inlining
Dieser Beitrag stellt InlineCoder vor, ein neuartiges Framework, das die Code-Generierung auf Repository-Ebene verbessert, indem der Aufrufgraph einer unvollendeten Funktion – bestehend aus einem generierten Anker, aufrufenden Funktionen stromaufwärts und aufgerufenen Funktionen stromabwärts – in den Prompt integriert wird, um das komplexe Verständnis eines gesamten Repositories in eine handhabbarere Aufgabenebene auf Funktionsebene zu überführen.
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
Die große Idee: Code schreiben mit einer "Call-Stack"-Sicht
Stellen Sie sich vor, Sie sind ein neuer Mitarbeiter, der eingestellt wurde, um eine spezifische Funktion für ein riesiges Softwareunternehmen zu schreiben. In der Vergangenheit, wenn Sie um Hilfe baten, erhielten Sie möglicherweise nur eine Liste von ähnlich aussehenden Sätzen aus anderen Teilen des Büros. Sie würden Wörter wie „berechnen" oder „Benutzer" sehen und versuchen zu erraten, was zu tun ist. Dies führte oft zu Fehlern, weil Sie nicht wussten, wer Sie bat, die Arbeit zu erledigen, oder welche Werkzeuge im Raum verfügbar waren.
InlineCoder ist ein neues System, das verändert, wie KI Code für diese großen Projekte schreibt. Anstatt der KI nur eine Liste ähnlicher Sätze zu zeigen, schreibt es die Geschichte physisch um, um der KI genau zu zeigen, wo der neue Code in der realen Welt passt.
So funktioniert es, aufgeteilt in einfache Schritte:
1. Das Problem: Die Falle des „isolierten Raums"
Wenn die KI versucht, einen Code-Abschnitt für ein riesiges Softwareprojekt (ein „Repository") zu schreiben, bleibt sie normalerweise in einem „isolierten Raum" stecken.
- Der alte Weg: Die KI erhält die Stellenbeschreibung (die Funktionssignatur) und einige zufällige, ähnlich aussehende Dokumente aus dem Projekt. Es ist, als würde man versuchen, einen Automotor zu reparieren, während man blind ist und nur ein Bild eines ähnlich aussehenden Motors von einem anderen Auto hält. Sie könnten die Schrauben richtig setzen, aber sie wissen nicht, in welche Richtung der Riemen läuft oder wer das Auto fährt.
- Das Ergebnis: Die KI schreibt Code, der für sich allein betrachtet okay aussieht, aber das gesamte System zerstört, weil sie nicht weiß, wie der neue Code mit dem Rest des Projekts verbunden ist.
2. Die Lösung: „Context Inlining" (Kontext-Einbettung)
Die Autoren dieses Papiers, InlineCoder, erkannten, dass man, um eine Aufgabe zu verstehen, zwei Dinge sehen muss:
- Wer ruft Sie an? (Der „Upstream"-Kontext: Der Chef, der die Arbeit anfordert).
- Wen rufen Sie an? (Der „Downstream"-Kontext: Die Werkzeuge oder Helfer, die Sie benötigen, um die Arbeit zu erledigen).
InlineCoder verwendet einen cleveren Trick namens Inlining. Stellen Sie sich vor, Sie schreiben ein Skript für ein Theaterstück. Anstatt dem Schauspieler nur seine Zeilen zu geben, nehmen Sie das Skript und fügen die Zeilen des Schauspielers physisch in die Szenen ein, in denen die anderen Schauspieler mit ihm sprechen. Plötzlich sieht der Schauspieler genau, welchen Tonfall er verwenden soll, welche Requisiten ihm übergeben werden und wie seine Zeilen in den Fluss des Gesprächs passen.
3. Wie InlineCoder funktioniert (Der 3-Schritte-Tanz)
Schritt 1: Der „Entwurf" (Der Anker)
Zuerst macht die KI eine schnelle, grobe Schätzung des Codes. Sie ist nicht perfekt, aber sie ist ein Ausgangspunkt. Denken Sie daran, als würde die KI sagen: „Hier ist meine beste Schätzung, wie diese Funktion aussehen sollte."
Schritt 2: Das „Upstream"-Inlining (Den Chef sehen)
Das System nimmt diese grobe Schätzung und fügt sie direkt in den Code der Funktionen ein, die sie aufrufen.
- Analogie: Stellen Sie sich vor, Sie sind ein Koch. Anstatt nur gesagt zu bekommen „Machen Sie eine Suppe", zeigt Ihnen das System den genauen Moment, in dem der Kellner Ihnen die Bestellung überreicht, welche Zutaten der Kellner hält und wie die Suppe serviert wird.
- Warum es hilft: Die KI sieht nun genau, welche Daten hereinkommen und in welchem Format das Ergebnis sein muss. Sie hört auf zu raten und beginnt, die spezifischen Bedürfnisse des „Anrufers" zu erfüllen.
Schritt 3: Das „Downstream"-Abrufen (Die Werkzeuge finden)
Das System betrachtet den groben Entwurf, um zu sehen, welche Werkzeuge (andere Funktionen) die KI zu verwenden versuchte. Es geht dann in die Bibliothek des Projekts und holt den tatsächlichen Code für diese Werkzeuge, um sicherzustellen, dass die KI die richtige Version verwendet.
- Analogie: Wenn der Entwurf des Kochs sagt „Verwenden Sie den Mixer", findet das System den exakten Mixer in der Küche und zeigt dem Koch, wie man ihn benutzt, anstatt dem Koch zu erlauben zu raten, welches Gerät er greifen soll.
4. Der „Vertrauens-Check"
Das System ist intelligent genug zu wissen, wann es unsicher ist. Es berechnet einen „Vertrauenswert" basierend darauf, wie einfach der Entwurf zu schreiben war.
- Hoher Vertrauenswert: „Das sieht gut aus, polieren Sie es einfach."
- Niedriger Vertrauenswert: „Das sieht riskant aus. Werfen Sie den Entwurf weg und fangen Sie mit dem neuen Kontext von vorne an."
Dies verhindert, dass die KI stur an einer schlechten Idee festhält, nur weil sie sie zuerst geschrieben hat.
5. Die Ergebnisse: Warum es wichtig ist
Das Papier testete dies an zwei riesigen Benchmarks (DevEval und RepoExec) unter Verwendung verschiedener KI-Modelle.
- Das Ergebnis: InlineCoder schlug fast jede andere Methode mit einem großen Abstand.
- Die Gewinne: Es verbesserte die Genauigkeit des Codes in einigen Messgrößen um fast 30 % im Vergleich zu den besten vorherigen Methoden.
- Die Erkenntnis: Indem man der KI den „Call Graph" (wer mit wem spricht) zeigt, anstatt nur eine Liste ähnlicher Wörter, schreibt die KI Code, der tatsächlich innerhalb des komplexen Netzwerks eines realen Softwareprojekts funktioniert.
Zusammenfassung
Denken Sie an InlineCoder als einen Übersetzer, der nicht nur Wörter übersetzt, sondern Beziehungen übersetzt. Es hört auf, Code als isolierte Sätze zu behandeln, und beginnt, ihn als ein Gespräch zu behandeln. Indem es den neuen Code physisch in die Gespräche einbettet, die um ihn herum stattfinden (die Aufrufer), und in die Werkzeuge, auf die er sich verlässt (die Aufgerufenen), stellt es sicher, dass die KI Code schreibt, der perfekt in das bestehende Software-Ökosystem passt.
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.