Belangrijkste concepten
본 논문에서는 젯브레인 IntelliJ 플랫폼에서 구현된 AI 기반 전체 코드 완성 기능(FLCC)의 개발 과정과 평가 결과를 소개합니다. 로컬 환경에서 작동하는 Transformer 기반 모델을 활용하여 개발자에게 빠르고 안전하며 IDE에 완벽하게 통합된 코드 작성 경험을 제공합니다.
Samenvatting
젯브레인의 전체 코드 완성 기능: 데스크톱 환경에 AI 도입
본 연구 논문에서는 젯브레인 IntelliJ 플랫폼에 통합된 AI 기반 전체 코드 완성 기능(FLCC)의 개발 및 평가에 대해 자세히 설명합니다. 저자들은 개발자가 코드를 더 빨리 작성할 수 있도록 돕고 소프트웨어 엔지니어링 활동의 속도를 높이는 것을 목표로, 기존 단일 토큰 코드 완성 기능을 넘어서는 다중 토큰 코드 완성 엔진을 구축하고자 했습니다.
코드 완성은 개발자가 코드 문자를 수동으로 입력하는 데 걸리는 시간을 줄여 생산성을 높여주는 IDE의 핵심 기능입니다. 기존의 코드 완성 엔진은 일반적으로 단일 토큰 모드에서 작동하여 변수나 메서드 이름과 같은 단일 식별자만 생성합니다. 최근 몇 년 동안 Copilot, TabNine, Codeium과 같은 다중 토큰 코드 완성을 위한 여러 제품이 등장했지만, 대부분 클라우드 기반이기 때문에 방화벽 내 사용자, 인터넷 액세스가 제한된 사용자, 코드 전송에 대한 개인 정보 보호 문제가 있는 사용자를 위한 틈새시장을 놓치고 있습니다.
젯브레인에서 개발한 FLCC 기능은 핵심에서 Transformer 기반 신경망을 활용하고 구문적으로 올바른 코드만 제안하는 다중 토큰 코드 완성 엔진입니다. 이 기능은 IntelliJ 플랫폼용 플러그인 형태로 구현되어 있으며 IntelliJ IDEA, PyCharm Pro, WebStorm 등 모든 젯브레인 IDE에 번들로 제공됩니다. FLCC는 로컬에서 완전히 작동하며 데이터 쿼리 및 제안 생성을 포함한 모든 계산은 최종 사용자의 컴퓨터에서 이루어집니다.
주요 제약 조건 및 설계 원칙
저자들은 FLCC 기능에 대해 다음과 같은 제약 조건과 설계 원칙을 공식화하고 충족했습니다.
로컬 기반: 모델과 실행 엔진은 인터넷을 통해 아무것도 전송하지 않고 사용자의 컴퓨터에서 완전히 작동해야 합니다.
컴팩트한 메모리 사용량: 솔루션의 메모리 사용량은 실현 가능해야 하며 IDE 메모리 사용량의 적절한 부분을 차지해야 합니다.
빠른 속도: 솔루션은 개발자가 입력하는 동안 자연스럽게 느껴질 만큼 빨라야 합니다.
원활한 통합: 이 기능은 개발자의 기존 코드 완성 사용 파이프라인에 적절하게 통합되어야 합니다.
데이터 수집 및 전처리
Python의 경우 The Stack의 하위 집합인 StarCoder 데이터 세트를 사용했으며, 허용되는 라이선스만 유지하도록 추가로 처리했습니다. 데이터 전처리에는 주석 제거, 들여쓰기 변환, 가져오기 삭제와 같은 단계가 포함되었습니다.
모델 학습
FLCC는 소스 코드에 대해 Transformer 기반 모델을 사용하며, 이러한 모델에 대한 표준 접근 방식인 바이트 쌍 인코딩(BPE)을 약간 수정하여 사용했습니다. 모델 학습에는 토큰화, 학습 예제 구성, Transformer 기반 모델 학습, 양자화와 같은 여러 단계가 포함되었습니다.
시퀀스 생성 알고리즘
FLCC는 표준 접근 방식에 비해 몇 가지 주요 수정 사항이 있는 빔 검색을 구현했습니다. 여기에는 토큰 치유, 종료된 가설 수집, 동적 빔 검색 반복 횟수와 같은 기술이 포함됩니다.
플러그인 및 사용자 경험
IntelliJ 플랫폼용 FLCC 플러그인은 설명된 코드 완성이 이루어지는 곳입니다. 코드 완성 호출 및 모델 추론부터 후처리 및 제안 표시에 이르기까지 필요한 모든 단계를 구현합니다. 플러그인은 Kotlin으로 작성되었으며 모델 추론을 위해 llama.cpp를 사용하는 네이티브 C++ 서버를 활용합니다.