LocAgent: open-source инструмент для определения нужного кода
Что такое LocAgent?
LocAgent — это фреймворк для локализации кода, совместно разработанный Стэнфордским университетом, Йельским университетом и Университетом Южной Калифорнии. Он анализирует кодовую базу, представляя её в виде ориентированного гетерогенного графа, что позволяет фиксировать структуру кода и зависимости между его компонентами, помогая разработчикам быстро и точно находить фрагменты кода, требующие изменения.

Ключевые технологии
Графовое представление кода: LocAgent анализирует кодовую базу и представляет её в виде ориентированного гетерогенного графа, где узлы соответствуют сущностям в кодовой базе (например, файлам, классам, функциям), а рёбра обозначают отношения между этими сущностями (такие как импорт между файлами, вызовы между функциями и наследование между классами). Такая графовая структура раскрывает сложные зависимости, скрытые в коде, и обеспечивает прочную основу для последующих задач локализации кода.
Механизм многошагового логического вывода: благодаря возможностям многошагового рассуждения больших языковых моделей (LLM) LocAgent способен проходить сквозь многоуровневые зависимости и определять корневую причину проблемного кода. Например, при работе со сложными кодовыми базами, даже если целевой код явно не упоминается в описании проблемы, LocAgent может выполнять рассуждения по графовой структуре, чтобы найти релевантные сущности кода.
Разреженный иерархический индекс: LocAgent расширяет возможности поиска за счёт использования разреженных иерархических индексов сущностей. Этот механизм индексации создаёт для каждого узла графа несколько индексов, включая индекс на основе идентификатора сущности, индекс на основе имени сущности, а также инвертированный индекс на основе алгоритма BM25. Эти индексы позволяют LocAgent за несколько секунд находить сущности кода, релевантные описанию проблемы, сохраняя высокую производительность даже в крупных кодовых базах.
Основные функции
Быстрая локализация проблемного кода: на основе описания проблемы на естественном языке (например, отчёта об ошибке, запроса на добавление функции, проблемы с производительностью или уязвимости безопасности) LocAgent способен быстро находить конкретные файлы, классы, функции или строки кода в кодовой базе, требующие изменения.
Поддержка различных типов задач: LocAgent поддерживает множество задач разработки и сопровождения программного обеспечения, включая исправление ошибок, добавление функций, оптимизацию производительности и устранение уязвимостей безопасности.
Интеллектуальный анализ зависимостей: автоматическое отслеживание сложных цепочек вызовов между сущностями кода.
Показатели производительности
В наборе данных SWE-Bench-Lite при использовании модели Qwen2.5-32B LocAgent достигает точности локализации на уровне файлов 92,7%, что значительно превосходит результат Claude-3.5, составляющий 86,13%.
В наборе данных Loc-Bench LocAgent демонстрирует 84,59% Acc@5 и 87,06% Acc@10 по точности локализации на уровне файлов.
LocAgent также отличается высокой экономической эффективностью: при использовании модели Qwen2.5-7B стоимость обработки одного примера составляет всего 0,05 доллара США, что примерно на 86% дешевле по сравнению с 0,66 доллара у Claude-3.5.
Сценарии применения
Исправление ошибок: быстрое определение местоположения кода, вызывающего сбой, и сокращение времени отладки.
Добавление функций: помощь разработчикам в поиске точек кода, в которые необходимо внедрить новую функциональность.
Оптимизация производительности: выявление фрагментов кода, влияющих на производительность, для их последующей оптимизации.
Устранение уязвимостей безопасности: быстрый поиск кода, связанного с уязвимостями безопасности, для их оперативного исправления.
Технические принципы
Графовое представление кода
LocAgent анализирует кодовую базу, представляя её в виде ориентированного гетерогенного графа, в котором узлы соответствуют сущностям кода (файлы, классы, функции и т. д.), а рёбра обозначают отношения зависимостей, такие как вызовы и наследование. Такая структура позволяет фиксировать иерархию и семантические связи в сложных кодовых базах.
Многоуровневая система индексации и поиска
Индекс по идентификатору сущности: обеспечивает точное сопоставление (например, поиск определённого класса или метода).
Семантический нечёткий индекс: на основе алгоритма BM25 позволяет выполнять запросы на естественном языке (например, «логика обработки платежей по заказу»).
Индекс структурных признаков: на основе признаков скелета кода (таких как список параметров функции) поддерживает поиск похожих фрагментов по структуре.
Три ключевых интеллектуальных инструмента
SearchEntity: запускает интеллектуальное сканирование по ключевым словам, используя NLP для извлечения ключевых сущностей и возврата совпадений.
TraverseGraph: выполняет многошаговый обход по цепочкам вызовов, наследования и другим отношениям, проникая сквозь сложные зависимости.
RetrieveEntity: извлекает полные атрибуты сущности (содержимое кода, путь к файлу и т. д.), помогая проводить глубокий анализ.
Как пользоваться LocAgent
Подготовка окружения
Установка зависимостей: LocAgent требует окружения Python; необходима версия Python 3.8 или выше. Кроме того, требуется установить ряд Python-пакетов, таких как torch, transformers и др. Установку можно выполнить следующей командой:
pip install -r requirements.txt
Загрузка набора данных: LocAgent поддерживает несколько наборов данных, таких как SWE-Bench_Lite и Loc-Bench. Можно выбрать подходящий набор данных и загрузить его локально. Например:
git clone https://github.com/czlll/SWE-bench_Lite.git
Анализ кодовой базы
Построение графового индекса: LocAgent требуется представить кодовую базу в виде ориентированного гетерогенного графа и сгенерировать соответствующий индекс. Это можно выполнить следующей командой:
python parse.py --dataset czlll/SWE-bench_Lite --repo_path ./SWE-bench_Lite --index_dir ./index
Здесь --dataset задаёт имя набора данных, --repo_path указывает путь к кодовой базе, а --index_dir — путь сохранения сгенерированного графового индекса.
Запуск LocAgent
Запуск скрипта: для запуска локализации кода с помощью LocAgent можно использовать следующую команду:
python run.py --localize --dataset czlll/SWE-bench_Lite --repo_path ./SWE-bench_Lite --index_dir ./index --use_function_calling True
Здесь --localize указывает на запуск процесса локализации, а --use_function_calling включает функцию вызова функций LLM.
Оценка результатов
Оценка результатов локализации: после завершения локализации результаты сохраняются в файл формата JSONL. Для их оценки можно использовать инструмент оценки, предоставляемый LocAgent. Например:
python evaluation/run_evaluation.py --result_file ./results.jsonl
Здесь --result_file задаёт путь к файлу с результатами локализации.
Проект на Github:https://github.com/gersteinlab/LocAgent
Помощник сценариста▸
AI Приложения
AI Новости 