RAG 기반 코드 지식화 플랫폼 AskON: 코드를 검색 가능한 지식으로!
AskON은 RAG(Retrieval-Augmented Generation) 기반 코드 지식화 플랫폼으로, 대규모 코드베이스를 검색 가능한 자산으로 변환
정적 분석(Static Analysis), LLM 분석(LLM Analysis), 벡터 데이터베이스(Vector DB)를 활용하여 코드의 비즈니스 맥락을 이해
Slack App을 통해 자연어 질문을 받고, 호출 그래프 확장(Call Graph Expansion) 및 도메인 휴리스틱(Domain Heuristic)을 적용하여 검색 품질 향상
검색 품질 개선을 위해 그래프 확장, 인덱싱, 검색 로직 설계에 대한 개선 방향 제시
AskON의 RAG 파이프라인 구조
AskON은 RAG(Retrieval-Augmented Generation) 아키텍처를 기반으로, 코드베이스를 지식화하는 과정을 3단계로 구성한다.
KnowledgeBase 구성: Git 저장소에서 코드를 가져와 정적 분석을 수행하고, LLM을 활용하여 코드의 의미를 요약 및 임베딩하여 벡터 데이터베이스에 저장
Slack 기반 질의응답: 사용자가 Slack App을 통해 자연어로 질문하면, 질문 임베딩, 벡터 유사도 검색, 호출 그래프 확장, LLM 답변 생성 과정을 거쳐 답변 제공
/askon-prepare: 코드 수집, 구조적 분해, 메서드 단위 추출, 의미 없는 코드 필터링, 호출 그래프 생성
이러한 과정을 통해 개발자는 코드의 비즈니스 맥락을 쉽게 파악하고, 코드 검색 시간을 단축할 수 있다.
코드 지식화를 위한 정적 분석 및 LLM 활용
AskON은 코드 지식화를 위해 정적 분석과 LLM을 활용하여 코드의 의미를 추출하고, 검색 가능한 형태로 변환한다.
정적 분석: 메서드 시그니처, 패키지/클래스 정보, 외부 의존성, 내부 호출 관계를 추출하고, 복잡도 점수를 계산하여 의미 없는 메서드를 필터링
LLM 분석: prepare 단계에서 생성된 JSON의 원문 코드를 LLM에 전달하여 메서드별 비즈니스 요약 및 규칙을 생성하고, 임베딩을 수행
임베딩: description(메서드 역할 요약)과 businessRules(핵심 비즈니스 규칙)를 이어 붙인 값을 벡터로 변환하여 저장
이러한 과정을 통해 코드의 의미를 자연어 형태로 표현하고, 검색 및 질의응답에 활용할 수 있다.
검색 품질 향상을 위한 그래프 확장 및 도메인 휴리스틱
AskON은 검색 정확도와 답변 품질을 높이기 위해 그래프 확장, 인덱싱, 검색 로직 설계를 개선했다.
그래프 확장: 질문 의도에 따라 호출 그래프(calls/calledBy)를 확장하는 방식을 분리하여, 흐름/구조를 묻는 경우 깊이를 우선하고, 규칙/조건을 묻는 경우 전체 참조 개수를 제한
인덱싱: 복잡도 점수를 활용하여 의미 있는 메서드만 포함하고, 요약·임베딩 입력 길이를 제한하여 검색 노이즈를 줄임
도메인 휴리스틱: 패키지 경로, called_by, 메서드 코드 크기를 활용하여 검색 결과의 순위를 보정
이러한 전략을 통해 개발자는 원하는 정보를 더 정확하고 빠르게 찾을 수 있다.
AskON의 배포 및 변경 관리
AskON은 코드 변경에 따른 지식 베이스 갱신을 위해 /askon-pull 기능을 제공하며, Git, GitLab API를 활용하여 효율적인 변경 관리를 수행한다.
변경분 반영: 정기 배포 시 release 브랜치가 master에 머지되면, 커밋 해시 기준으로 최신 변경분만 처리하여 지식 베이스 갱신
Git 활용: 최초 인덱싱 시에는 Git clone을 사용하고, pull 단계에서는 GitLab API로 최근 커밋만 조회
상태 관리: 브랜치, 컬렉션별로 마지막으로 인덱싱한 커밋 해시와 현재 원격 HEAD를 저장하여 중복 처리 방지
이러한 방식을 통해 AskON은 코드 변경에 유연하게 대응하고, 항상 최신 정보를 기반으로 검색 결과를 제공한다.
AskON의 개선 방향 및 향후 전망
AskON은 검색 품질 개선과 사용자 맥락 활용을 위해 다양한 개선 방향을 모색하고 있다.
Retrieval 품질 평가: 실제 질문과 정답 코드 쌍으로 평가 데이터셋을 구축하고, 검색 전략 개선의 정량적 기준 마련
사용자 맥락 기반 장기 기억: 주문 개발자는 주문/결제 코드를, 검색 개발자는 상품 검색 로직을 반복적으로 탐색하는 패턴을 저장해 개인화된 랭킹에 반영
질문 기반 지식 축적(Query Memory): 반복되는 질문–답변 쌍을 저장해 추가 Retrieval 지식으로 활용
GraphDB 전환: calls/calledBy 중심의 그래프 구조로 저장하여 다단계 호출 탐색과 역방향 추적에 효율성을 높임
이러한 개선을 통해 AskON은 개발자 생산성을 더욱 향상시킬 것으로 기대된다.