LocAgent: Open-Source-Tool zur Unterstützung der Code-Lokalisierung
Was ist LocAgent?
LocAgent ist ein Code-Lokalisierungs-Framework, das gemeinsam von Institutionen wie der Stanford University, der Yale University und der University of Southern California entwickelt wurde. Es analysiert das Code-Repository als gerichteten heterogenen Graphen, erfasst die Struktur und Abhängigkeiten des Codes und hilft Entwicklern so, die zu ändernden Codeteile schnell und präzise zu finden.

Kerntechnologie
Graphbasierte Code-Repräsentation: LocAgent analysiert das Code-Repository als gerichteten heterogenen Graphen, wobei Knoten die Entitäten im Code-Repository repräsentieren (wie Dateien, Klassen, Funktionen usw.) und Kanten die Beziehungen zwischen diesen Entitäten darstellen (wie Importbeziehungen zwischen Dateien, Aufrufbeziehungen zwischen Funktionen und Vererbungsbeziehungen zwischen Klassen). Diese Graphstruktur kann die im Code verborgenen komplexen Abhängigkeiten aufdecken und bietet eine solide Grundlage für nachfolgende Code-Lokalisierungsaufgaben.
Multi-Hop-Reasoning-Mechanismus: Basierend auf der Multi-Hop-Reasoning-Fähigkeit von Large Language Models (LLM) kann LocAgent mehrere Abhängigkeitsebenen durchdringen und die Ursache von Problemcode lokalisieren. Beispielsweise kann LocAgent in komplexen Code-Repositories auch dann relevante Code-Entitäten finden, wenn der Zielcode in der Problembeschreibung nicht explizit erwähnt wird, indem es durch die Graphstruktur Schlussfolgerungen zieht.
Sparse hierarchische Indizes: LocAgent verbessert seine Suchfähigkeit durch sparse hierarchische Entitätsindizes. Dieser Indexierungsmechanismus erstellt mehrere Indizes für jeden Knoten im Graphen, einschließlich indexbasierter Entitäts-IDs, indexbasierter Entitätsnamen und auf dem BM25-Algorithmus basierender invertierter Indizes. Diese Indizes helfen LocAgent, in wenigen Sekunden schnell die zur Problembeschreibung passenden Code-Entitäten zu finden und auch in großen Code-Repositories eine hohe Effizienz beizubehalten.
Hauptfunktionen
Schnelle Lokalisierung von Problemcode: Anhand von in natürlicher Sprache formulierten Problembeschreibungen (wie Fehlerberichten, Funktionsanfragen, Leistungsproblemen oder Sicherheitslücken) kann LocAgent schnell die spezifischen Dateien, Klassen, Funktionen oder Codezeilen im Code-Repository lokalisieren, die geändert werden müssen.
Unterstützung mehrerer Problemtypen: LocAgent unterstützt verschiedene Arten von Softwareentwicklungs- und Wartungsaufgaben, einschließlich Fehlerbehebung, Funktionserweiterung, Leistungsoptimierung und Behebung von Sicherheitslücken.
Intelligente Abhängigkeitsanalyse: Automatisches Verfolgen komplexer Aufrufbeziehungen zwischen Code-Entitäten.
Leistung
Auf dem SWE-Bench-Lite-Datensatz erreicht LocAgent mit dem Qwen2.5-32B-Modell eine Lokalisierungsgenauigkeit auf Dateiebene 92,7 %, was eine deutliche Verbesserung gegenüber den 86,13 % von Claude-3.5 darstellt.
Auf dem Loc-Bench-Datensatz erzielt LocAgent eine Lokalisierungsgenauigkeit auf Dateiebene von 84,59 % bei Acc@5 und 87,06 % bei Acc@10.
Auch die Kosteneffizienz von LocAgent ist sehr hoch: Mit dem Qwen2.5-7B-Modell betragen die Kosten pro Probe nur 0,05 US-Dollar, verglichen mit 0,66 US-Dollar bei Claude-3.5, was einer Kostensenkung von etwa 86 % entspricht.
Anwendungsszenarien
Fehlerbehebung: Schnelles Lokalisieren der für einen Fehler verantwortlichen Codestelle und Reduzierung der Debugging-Zeit.
Funktionserweiterung: Entwicklern helfen, die Codestellen zu finden, an denen neue Funktionen hinzugefügt werden sollen.
Leistungsoptimierung: Lokalisieren der leistungsbeeinträchtigenden Codeteile zur Optimierung.
Behebung von Sicherheitslücken: Schnelles Finden von sicherheitsrelevantem Code und zeitnahe Behebung.
Technische Prinzipien
Graphbasierte Code-Repräsentation
LocAgent analysiert das Code-Repository als gerichteten heterogenen Graphen, wobei Knoten Code-Entitäten (Dateien, Klassen, Funktionen usw.) repräsentieren und Kanten Abhängigkeiten wie Aufrufe und Vererbung darstellen. Diese Struktur erfasst die hierarchische Struktur und die semantischen Zusammenhänge komplexer Code-Repositories.
Mehrschichtiges Indexabfragesystem
Entitäts-ID-Index: Unterstützt exakte Übereinstimmungen (z. B. Suche nach einer bestimmten Klasse oder Methode).
Semantischer Fuzzy-Index: Basierend auf dem BM25-Algorithmus ermöglicht er Abfragen in natürlicher Sprache (z. B. „Logik zur Verarbeitung von Bestellzahlungen“).
Strukturmerkmal-Index: Unterstützt über Code-Skelettmerkmale (wie Funktionsparameterlisten) das Finden von Ähnlichkeiten nach Struktur.
Drei intelligente Tools
SearchEntity: Löst durch Schlüsselwörter einen intelligenten Scan aus, extrahiert in Kombination mit NLP die zentralen Entitäten und gibt passende Ergebnisse zurück.
TraverseGraph: Führt entlang von Aufruf- und Vererbungsketten Multi-Hop-Traversierungen durch und durchdringt komplexe Abhängigkeitsbeziehungen.
RetrieveEntity: Ruft die vollständigen Attribute einer Entität ab (Code-Inhalt, Dateipfad usw.) und unterstützt so tiefgehende Analysen.
Verwendung von LocAgent
Vorbereitung der Umgebung
Installation der Abhängigkeiten: LocAgent setzt eine Python-Umgebung voraus, wobei Python 3.8 oder höher erforderlich ist. Darüber hinaus müssen einige Python-Pakete wie torch, transformers usw. installiert werden. Diese können mit dem folgenden Befehl installiert werden:
pip install -r requirements.txt
Repository herunterladen:LocAgent unterstützt mehrere Datensätze wie SWE-Bench_Lite und Loc-Bench. Je nach Bedarf kann ein geeigneter Datensatz ausgewählt und lokal heruntergeladen werden, zum Beispiel:
git clone https://github.com/czlll/SWE-bench_Lite.git
Repository-Analyse
Graphindex erzeugen: LocAgent muss das Code-Repository als gerichteten heterogenen Graphen analysieren und einen Graphindex erzeugen. Dies kann mit dem folgenden Befehl durchgeführt werden:
python parse.py --dataset czlll/SWE-bench_Lite --repo_path ./SWE-bench_Lite --index_dir ./index
Dabei gibt --dataset den Namen des Datensatzes an, --repo_path den Pfad zum Code-Repository und --index_dir den Speicherpfad für den erzeugten Graphindex.
LocAgent starten
Skript ausführen: Starten Sie LocAgent zur Code-Lokalisierung mit dem folgenden Befehl:
python run.py --localize --dataset czlll/SWE-bench_Lite --repo_path ./SWE-bench_Lite --index_dir ./index --use_function_calling True
Dabei kennzeichnet --localize den Start des Lokalisierungsprozesses, und --use_function_calling aktiviert die Funktionsaufruffunktion des LLM.
Ergebnisse auswerten
Lokalisierungsergebnisse auswerten: Nach Abschluss der Lokalisierung werden die Ergebnisse in einer JSONL-Datei gespeichert. Zur Auswertung der Ergebnisse kann das von LocAgent bereitgestellte Bewertungstool verwendet werden, zum Beispiel:
python evaluation/run_evaluation.py --result_file ./results.jsonl
Dabei gibt --result_file den Pfad zur Datei mit den Lokalisierungsergebnissen an.
GitHub-Projekt:https://github.com/gersteinlab/LocAgent
Drehbuch-Assistent▸
AI Apps
AI Nachrichten 