LocAgent : outil open-source d'aide à la localisation de code pour développeurs
Qu'est-ce que LocAgent ?
LocAgent est un framework de localisation de code développé conjointement par des institutions telles que l'Université de Stanford, l'Université Yale et l'Université de Californie du Sud. Il analyse le code en un graphe hétérogène orienté, capturant la structure et les dépendances du code, afin d'aider les développeurs à trouver rapidement et précisément les parties du code qui doivent être modifiées.

Technologie clé
Représentation du code basée sur un graphe : LocAgent analyse le code en un graphe hétérogène orienté, où les nœuds représentent les entités du code (telles que fichiers, classes, fonctions, etc.), et les arêtes représentent les relations entre ces entités (comme les relations d'importation entre fichiers, les relations d'appel entre fonctions et les relations d'héritage entre classes). Cette structure de graphe permet de révéler les dépendances complexes cachées dans le code, fournissant une base solide pour les tâches de localisation de code ultérieures.
Mécanisme de raisonnement à plusieurs sauts : Grâce aux capacités de raisonnement à plusieurs sauts des grands modèles de langage (LLM), LocAgent peut traverser plusieurs couches de dépendances pour localiser la racine du code problématique. Par exemple, lors du traitement de codebases complexes, même si le code cible n'est pas explicitement mentionné dans la description du problème, LocAgent peut raisonner via la structure du graphe pour trouver les entités de code pertinentes.
Index hiérarchique creux : LocAgent renforce sa capacité de recherche grâce à un index d'entités hiérarchique creux. Ce mécanisme d'indexation crée plusieurs index pour chaque nœud du graphe, notamment un index basé sur l'ID de l'entité, un index basé sur le nom de l'entité et un index inversé basé sur l'algorithme BM25. Ces index permettent à LocAgent de localiser rapidement en quelques secondes les entités de code liées à la description du problème, tout en maintenant des performances élevées même dans des codebases de grande taille.
Fonctionnalités principales
Localisation rapide du code problématique : à partir de descriptions en langage naturel de problèmes (tels que rapports de bugs, demandes de fonctionnalités, problèmes de performance ou failles de sécurité), LocAgent peut localiser rapidement les fichiers, classes, fonctions ou lignes de code spécifiques à modifier dans la codebase.
Prise en charge de plusieurs types de problèmes : LocAgent prend en charge divers types de tâches de développement et de maintenance logicielle, notamment la correction de bugs, l'ajout de fonctionnalités, l'optimisation des performances et la correction de failles de sécurité.
Analyse intelligente des dépendances : suivi automatique des relations d'appel complexes entre les entités du code.
Performances
Sur le jeu de données SWE-Bench-Lite, LocAgent utilisant le modèle Qwen2.5-32B atteint une précision de localisation au niveau des fichiers de 92,7 %, une amélioration significative par rapport aux 86,13 % de Claude-3.5.
Sur le jeu de données Loc-Bench, LocAgent atteint une précision de localisation au niveau des fichiers de 84,59 % pour Acc@5 et de 87,06 % pour Acc@10.
Le rapport coût-efficacité de LocAgent est également très élevé : avec le modèle Qwen2.5-7B, le coût par échantillon n'est que de 0,05 $, soit une réduction d'environ 86 % par rapport aux 0,66 $ de Claude-3.5.
Cas d'utilisation
Correction de bugs : localisation rapide de l'emplacement du code à l'origine des erreurs, réduisant le temps de débogage.
Ajout de fonctionnalités : aide les développeurs à trouver l'emplacement du code où ajouter de nouvelles fonctionnalités.
Optimisation des performances : localisation des parties du code qui affectent les performances pour les optimiser.
Correction de failles de sécurité : localisation rapide du code lié aux failles de sécurité pour une correction rapide.
Principes techniques
Représentation du code basée sur un graphe
LocAgent analyse le code en un graphe hétérogène orienté, où les nœuds représentent les entités du code (fichiers, classes, fonctions, etc.) et les arêtes représentent les dépendances telles que les appels et l'héritage. Cette structure permet de capturer la hiérarchie et les associations sémantiques de codebases complexes.
Système d'indexation et de recherche multi-niveaux
Index par ID d'entité : prend en charge la correspondance exacte (par exemple, recherche d'une classe ou méthode spécifique).
Index sémantique flou : basé sur l'algorithme BM25, permettant des requêtes en langage naturel (par exemple « la logique de traitement des paiements de commandes »).
Index par caractéristiques structurelles : prend en charge la recherche de similarité structurelle via les caractéristiques du squelette du code (comme la liste des paramètres d'une fonction).
Trois outils intelligents clés
SearchEntity : déclenche une analyse intelligente via des mots-clés, combinant le NLP pour extraire les entités principales et renvoyer les résultats correspondants.
TraverseGraph : effectue un parcours à plusieurs sauts le long des chaînes d'appels, d'héritage, etc., traversant des dépendances complexes.
RetrieveEntity : récupère les attributs complets d'une entité (contenu du code, chemin du fichier, etc.) pour faciliter l'analyse approfondie.
Comment utiliser LocAgent
Préparation de l'environnement
Installation des dépendances : LocAgent dépend d'un environnement Python et nécessite Python 3.8 ou version ultérieure. De plus, certains packages Python tels que torch, transformers, etc. doivent être installés. Vous pouvez les installer via la commande suivante :
pip install -r requirements.txt
Téléchargement de la codebase :LocAgent prend en charge plusieurs jeux de données, tels que SWE-Bench_Lite et Loc-Bench, etc. Vous pouvez choisir le jeu de données adapté à vos besoins et le télécharger localement. Par exemple :
git clone https://github.com/czlll/SWE-bench_Lite.git
Analyse de la codebase
Génération de l'index du graphe : LocAgent doit analyser la codebase en un graphe hétérogène orienté et générer l'index du graphe. Cela peut être effectué via la commande suivante :
python parse.py --dataset czlll/SWE-bench_Lite --repo_path ./SWE-bench_Lite --index_dir ./index
Où, --dataset spécifie le nom du jeu de données, --repo_path spécifie le chemin de la codebase, et --index_dir spécifie le chemin où l'index du graphe généré sera enregistré.
Lancement de LocAgent
Exécution du script : lancez LocAgent pour effectuer la localisation du code via la commande suivante :
python run.py --localize --dataset czlll/SWE-bench_Lite --repo_path ./SWE-bench_Lite --index_dir ./index --use_function_calling True
Où, --localize indique le lancement du processus de localisation, et --use_function_calling active la fonctionnalité d'appel de fonctions du LLM.
Évaluation des résultats
Évaluation des résultats de localisation : une fois la localisation terminée, les résultats sont enregistrés dans un fichier JSONL. Vous pouvez utiliser l'outil d'évaluation fourni par LocAgent pour évaluer les résultats. Par exemple :
python evaluation/run_evaluation.py --result_file ./results.jsonl
Où, --result_file spécifie le chemin du fichier de résultats de localisation.
Projet Github :https://github.com/gersteinlab/LocAgent
Assistant scénario▸
Apps AI
Actualités AI 