LocAgent: 코드 위치 파악을 도와주는 오픈소스 개발자 도구 55

小编 ·

LocAgent: 코드 위치 파악을 도와주는 오픈소스 개발자 도구

LocAgent는 스탠퍼드 대학교, 예일 대학교, 남캘리포니아 대학교 등이 공동 개발한 코드 위치 파악 프레임워크입니다. 코드베이스를 방향성 이종 그래프로 파싱하여 코드의 구조와 의존 관계를 파악함으로써, 개발자가 수정해야 할 코드 부분을 빠르고 정확하게 찾을 수 있도록 도와줍니다.

LocAgent: 코드 위치 파악을 도와주는 오픈소스 개발자 도구

LocAgent란 무엇인가요?

LocAgent는 스탠퍼드대학교, 예일대학교, 남캘리포니아대학교 등 기관이 공동 개발한 코드 위치 지정 프레임워크입니다. 코드베이스를 방향성 이종 그래프(directed heterogeneous graph)로 분석하여 코드의 구조와 의존 관계를 파악함으로써, 개발자가 수정해야 할 코드 부분을 빠르고 정확하게 찾을 수 있도록 도와줍니다.

GoPfVBRbYAMAm7r.webp

핵심 기술

  • 그래프 기반 코드 표현: LocAgent는 코드베이스를 방향성 이종 그래프로 분석하며, 여기서 노드는 코드베이스 내의 엔티티(파일, 클래스, 함수 등)를 나타내고, 엣지는 이러한 엔티티 간의 관계(파일 간의 import 관계, 함수 간의 호출 관계, 클래스 간의 상속 관계 등)를 나타냅니다. 이러한 그래프 구조는 코드 안에 숨겨진 복잡한 의존 관계를 드러내어, 이후의 코드 위치 지정 작업을 위한 견고한 기초를 제공합니다.

  • 다중 홉 추론 메커니즘: 대형 언어 모델(LLM)의 다중 홉 추론 능력을 기반으로, LocAgent는 다층 의존 관계를 관통하여 문제가 있는 코드의 근본 원인을 찾을 수 있습니다. 예를 들어, 복잡한 코드베이스를 처리할 때 목표 코드가 문제 설명에서 명시적으로 언급되지 않더라도, LocAgent는 그래프 구조를 통해 추론하여 관련 코드 엔티티를 찾을 수 있습니다.

  • 희소 계층 인덱스: LocAgent는 희소 계층 엔티티 인덱스를 통해 검색 능력을 강화합니다. 이 인덱스 메커니즘은 그래프의 각 노드에 대해 여러 인덱스를 생성하며, 여기에는 엔티티 ID 기반 인덱스, 엔티티 이름 기반 인덱스, BM25 알고리즘 기반 역 인덱스가 포함됩니다. 이러한 인덱스는 LocAgent가 문제 설명과 관련된 코드 엔티티를 단 몇 초 내에 빠르게 찾을 수 있도록 도와주며, 대규모 코드베이스에서도 효율적인 성능을 유지합니다.

주요 기능

  • 문제 코드 빠른 위치 지정: 자연어로 설명된 문제(예: 오류 보고, 기능 요청, 성능 문제, 보안 취약점)에 따라 LocAgent는 코드베이스에서 수정해야 할 구체적인 파일, 클래스, 함수 또는 코드 라인을 빠르게 찾을 수 있습니다.

  • 다양한 유형의 문제 지원: LocAgent는 오류 수정, 기능 추가, 성능 최적화, 보안 취약점 수정 등 다양한 유형의 소프트웨어 개발 및 유지보수 작업을 지원합니다.

  • 지능형 의존 관계 분석: 코드 엔티티 간의 복잡한 호출 관계를 자동으로 추적합니다.

성능

  • SWE-Bench-Lite 데이터셋에서 LocAgent가 Qwen2.5-32B 모델을 사용했을 때 파일 수준 위치 정확도가 92.7%에 도달하여, Claude-3.5의 86.13% 대비显著提升(상당한 향상)을 보였습니다.

  • Loc-Bench 데이터셋에서 LocAgent는 Acc@5 84.59%, Acc@10 87.06%의 파일 수준 위치 정확도를 달성했습니다.

  • LocAgent의 비용 효율성도 매우 높아, Qwen2.5-7B 모델을 사용할 때 샘플당 비용이 단 0.05달러에 불과하여, Claude-3.5의 0.66달러 대비 약 86%의 비용 절감 효과를 보입니다.

활용 시나리오

  • 오류 수정: 오류를 유발하는 코드 위치를 빠르게 찾아 디버깅 시간을 단축합니다.

  • 기능 추가: 개발자가 새로운 기능을 추가해야 할 코드 위치를 찾는 데 도움을 줍니다.

  • 성능 최적화: 성능에 영향을 주는 코드 부분을 찾아 최적화를 수행합니다.

  • 보안 취약점 수정: 보안 취약점과 관련된 코드를 빠르게 찾아 즉시 수정합니다.

기술 원리

그래프 기반 코드 표현

  • LocAgent는 코드베이스를 방향성 이종 그래프로 분석하며, 노드는 코드 엔티티(파일, 클래스, 함수 등)를, 엣지는 호출, 상속 등의 의존 관계를 나타냅니다. 이 구조는 복잡한 코드베이스의 계층 구조와 의미적 연관성을 파악할 수 있습니다.

다층 인덱스 검색 체계

  • 엔티티 ID 인덱스: 정확한 매칭을 지원합니다(예: 특정 클래스 또는 메서드 검색).

  • 의미적 퍼지 인덱스: BM25 알고리즘을 기반으로 자연어 쿼리를 허용합니다(예: "주문 결제를 처리하는 로직").

  • 구조적 특징 인덱스: 코드 스켈레톤 특징(예: 함수 파라미터 리스트)을 통해 "구조로 유사 코드 찾기"를 지원합니다.

세 가지 지능형 도구

  • SearchEntity: 키워드 트리거智能扫描(지능형 스캔)을 통해 NLP로 핵심 엔티티를 추출하고 매칭 결과를 반환합니다.

  • TraverseGraph: 호출 체인, 상속 체인 등 관계를 따라 다중 홉 탐색을 수행하여 복잡한 의존 관계를 관통합니다.

  • RetrieveEntity: 엔티티의 전체 속성(코드 내용, 파일 경로 등)을 검색하여 심층 분석을 지원합니다.

LocAgent 사용 방법

환경 준비

의존성 설치: LocAgent는 Python 환경에 의존하며, Python 3.8 이상 버전이 필요합니다. 또한 torch, transformers 등 일부 Python 패키지도 설치해야 합니다. 다음 명령어로 설치할 수 있습니다:

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