LocAgent: herramienta de código abierto para ayudar a los programadores a localizar código
¿Qué es LocAgent?
LocAgent es un framework de localización de código desarrollado conjuntamente por instituciones como la Universidad de Stanford, la Universidad de Yale y la Universidad del Sur de California. Analiza el código en un grafo heterogéneo dirigido para capturar la estructura y las dependencias del código, ayudando a los desarrolladores a encontrar de forma rápida y precisa las partes del código que necesitan modificar.

Tecnología principal
Representación de código basada en grafos: LocAgent analiza el código en un grafo heterogéneo dirigido, donde los nodos representan entidades del código (como archivos, clases, funciones, etc.) y las aristas representan las relaciones entre estas entidades (como relaciones de importación entre archivos, relaciones de llamada entre funciones y relaciones de herencia entre clases). Esta estructura de grafo puede revelar complejas dependencias ocultas en el código, proporcionando una base sólida para las tareas posteriores de localización de código.
Mecanismo de razonamiento multi-salto: Basándose en la capacidad de razonamiento multi-salto de los modelos de lenguaje grandes (LLM), LocAgent puede atravesar múltiples capas de dependencias para localizar el origen del código problemático. Por ejemplo, al tratar con bases de código complejas, incluso si el código objetivo no se menciona explícitamente en la descripción del problema, LocAgent puede razonar a través de la estructura del grafo para encontrar las entidades de código relevantes.
Índice jerárquico disperso: LocAgent mejora su capacidad de búsqueda mediante un índice jerárquico disperso de entidades. Este mecanismo de indexación crea múltiples índices para cada nodo del grafo, incluyendo un índice basado en el ID de la entidad, un índice basado en el nombre de la entidad y un índice invertido basado en el algoritmo BM25. Estos índices permiten a LocAgent localizar rápidamente, en cuestión de segundos, las entidades de código relacionadas con la descripción del problema, manteniendo un rendimiento eficiente incluso en bases de código de gran tamaño.
Funciones principales
Localización rápida del código problemático: A partir de la descripción del problema en lenguaje natural (como informes de errores, solicitudes de funcionalidades, problemas de rendimiento o vulnerabilidades de seguridad), LocAgent puede localizar rápidamente el archivo, clase, función o línea de código específico que necesita ser modificado en la base de código.
Soporte para múltiples tipos de problemas: LocAgent admite múltiples tipos de tareas de desarrollo y mantenimiento de software, incluyendo corrección de errores, adición de funcionalidades, optimización del rendimiento y corrección de vulnerabilidades de seguridad.
Análisis inteligente de dependencias: Rastrea automáticamente las complejas relaciones de llamada entre entidades de código.
Rendimiento
En el conjunto de datos SWE-Bench-Lite, cuando LocAgent utiliza el modelo Qwen2.5-32B, alcanza una precisión de localización a nivel de archivo del 92,7%, una mejora significativa en comparación con el 86,13% de Claude-3.5.
En el conjunto de datos Loc-Bench, LocAgent logra una precisión de localización a nivel de archivo del 84,59% en Acc@5 y del 87,06% en Acc@10.
La rentabilidad de LocAgent también es muy alta: al usar el modelo Qwen2.5-7B, el coste por muestra es de solo 0,05 dólares, en comparación con los 0,66 dólares de Claude-3.5, lo que supone una reducción de costes de aproximadamente el 86%.
Escenarios de aplicación
Corrección de errores: Localiza rápidamente la ubicación del código que causa el error, reduciendo el tiempo de depuración.
Añadir funcionalidades: Ayuda a los desarrolladores a encontrar la ubicación del código donde se debe añadir una nueva funcionalidad.
Optimización del rendimiento: Localiza las partes del código que afectan al rendimiento para optimizarlas.
Corrección de vulnerabilidades de seguridad: Encuentra rápidamente el código relacionado con las vulnerabilidades de seguridad para corregirlas a tiempo.
Principio técnico
Representación de código basada en grafos
LocAgent analiza la base de código en un grafo heterogéneo dirigido, donde los nodos representan entidades de código (archivos, clases, funciones, etc.) y las aristas representan relaciones de dependencia como llamadas y herencia. Esta estructura captura la jerarquía y las asociaciones semánticas de bases de código complejas.
Sistema de indexación y recuperación multinivel
Índice de ID de entidad: Soporta coincidencias exactas (como buscar una clase o método específico).
Índice semántico difuso: Basado en el algoritmo BM25, permite consultas en lenguaje natural (como "la lógica que procesa los pagos de pedidos").
Índice de características estructurales: Permite "buscar similitudes por estructura" mediante características del esqueleto del código (como la lista de parámetros de una función).
Tres herramientas inteligentes principales
SearchEntity: Activa un escaneo inteligente mediante palabras clave, combinando NLP para extraer las entidades principales y devolver los resultados coincidentes.
TraverseGraph: Realiza recorridos multi-salto a lo largo de relaciones como cadenas de llamadas y cadenas de herencia, atravesando complejas relaciones de dependencia.
RetrieveEntity: Recupera las propiedades completas de una entidad (contenido del código, ruta del archivo, etc.), asistiendo en análisis profundos.
Cómo usar LocAgent
Preparación del entorno
Instalación de dependencias: LocAgent depende de un entorno Python y requiere Python 3.8 o superior. Además, se deben instalar algunos paquetes de Python, como torch y transformers. Se pueden instalar mediante el siguiente comando:
pip install -r requirements.txt
Descargar la base de código:LocAgent admite varios conjuntos de datos, como SWE-Bench_Lite y Loc-Bench. Puedes elegir el conjunto de datos adecuado según tus necesidades y descargarlo localmente. Por ejemplo:
git clone https://github.com/czlll/SWE-bench_Lite.git
Análisis de la base de código
Generar el índice del grafo: LocAgent necesita analizar la base de código en un grafo heterogéneo dirigido y generar el índice del grafo. Esto se puede hacer con el siguiente comando:
python parse.py --dataset czlll/SWE-bench_Lite --repo_path ./SWE-bench_Lite --index_dir ./index
Donde --dataset especifica el nombre del conjunto de datos, --repo_path especifica la ruta de la base de código e --index_dir especifica la ruta donde se guardará el índice del grafo generado.
Iniciar LocAgent
Ejecutar el script: Inicia LocAgent para localizar el código con el siguiente comando:
python run.py --localize --dataset czlll/SWE-bench_Lite --repo_path ./SWE-bench_Lite --index_dir ./index --use_function_calling True
Donde --localize indica que se inicie el proceso de localización, y --use_function_calling habilita la funcionalidad de llamada a funciones del LLM.
Evaluar los resultados
Evaluar los resultados de localización: Una vez finalizada la localización, los resultados se guardarán en un archivo JSONL. Puedes utilizar la herramienta de evaluación proporcionada por LocAgent para evaluar los resultados. Por ejemplo:
python evaluation/run_evaluation.py --result_file ./results.jsonl
Donde --result_file especifica la ruta del archivo de resultados de localización.
Proyecto en Github:https://github.com/gersteinlab/LocAgent
Asistente de guiones▸
Apps AI
Noticias AI 