Generating Complex Code Analyzers from Natural Language Questions
본 논문은 대규모 언어 모델과 CodeQL 프로그램 분석 프레임워크를 새로운 RAG 기반의 반복적 생성 및 자기 테스트 접근법으로 결합하여 대규모 코드베이스에 관한 복잡한 자연어 질문에 효과적으로 답변함으로써 개발자 작업의 정확성과 효율성을 크게 향상시키는 Merlin 시스템을 소개합니다.
원본 논문은 CC BY 4.0 (http://creativecommons.org/licenses/by/4.0/) 라이선스로 제공됩니다. 이것은 아래 논문에 대한 AI 생성 설명입니다. 저자가 작성하거나 승인한 것이 아닙니다. 기술적 정확성을 위해서는 원본 논문을 참조하세요. 전체 면책 조항 읽기
수백만 권의 책 (코드베이스) 이 특정하고 기술적인 언어로 쓰여진 거대한 도서관이 있다고 상상해 보세요. 당신은 (개발자) "아기 태어나기 전에 자신을 소개하는 모든 책을 찾아라"라는 매우 구체적인 패턴을 찾아야 하는 사서입니다.
이 작업을 손으로 하는 것은 불가능합니다. "born"(태어났다) 이라는 단어를 검색하는 간단한 검색창 (grep 과 유사) 을 사용하는 것은 문장의 의미를 놓치기 때문에 무용지물입니다. 거대한 도서관 전체를 읽어 답을 알려달라고 초지능 AI 어시스턴트 (대규모 언어 모델 또는 LLM) 에게 요청하는 것도 실패하는 경우가 많습니다. 도서관이 너무 커서 AI 가 한 번에 기억할 수 없거나, AI 가 단순히 잘못 추측하기 때문입니다.
이제 Merlin이 등장합니다.
Merlin 은 초능력을 갖춘 번역가이자 탐정처럼 작동하는 새로운 시스템입니다. 자연어를 구사하는 당신과 코드의 기술적 구조를 완벽하게 이해하는 매우 엄격하고 강력한 데이터베이스 엔진인 CodeQL 사이에 위치합니다.
간단한 비유를 들어 Merlin 이 어떻게 작동하는지 살펴보겠습니다.
1. 번역가 (자연어에서 CodeQL 로)
당신은 Merlin 에게 평범한 영어로 질문합니다: "나중에 변경될 수 있는 메서드를 호출하는 생성자 (constructor) 가 있는 모든 위치를 보여줘."
Merlin 은 단순히 답을 추측하지 않습니다. 대신 CodeQL 데이터베이스에 대한 정확한 쿼리로 질문을 번역합니다. CodeQL 을 전체 코드의 거대한 구조화된 스프레드시트라고 생각하세요. Merlin 은 필요한 정확한 데이터를 그 스프레드시트에서 요청하기 위해 SQL 과 유사한 특정 명령어를 작성합니다.
2. "자기 테스트" (리트머스 시험지)
여기가 까다로운 부분입니다. Merlin 이 문법적으로 올바른 쿼리를 작성하더라도 논리적으로 잘못되었을 수 있습니다. 당신이 "과일"을 의도했는데 "사과"를 요청하거나, 너무 까다롭게 설정되어 아무것도 찾지 못할 수 있습니다.
이를 해결하기 위해 Merlin 에는 자기 테스트 기능이 있습니다. 거대한 도서관을 검색하기 전에 AI 에게 쿼리가 작동하는지 확인하기 위해 작고 가짜 예시 ("모크" 시나리오) 를 만들도록 요청합니다.
- 비유: 금속 탐지기를 테스트한다고 상상해 보세요. 도시 전체를 걷기 전에, 몇 개의 묻힌 동전이 있는 작은 정원을 걸어보세요. 금속 탐지기가 동전에 반응하여 경보음을 울리면 작동한다는 것을 알게 됩니다. 만약 침묵한다면 탐지기가 고장 났다는 뜻이므로, 도시를 검색하는 시간을 낭비하기 전에 고쳐야 합니다.
- 결과: 쿼리가 이 작은 테스트에 실패하면 Merlin 은 그것이 고장 났음을 알고 다시 시도합니다.
3. "보조 쿼리" (탐정의 손전등)
때로는 쿼리가 문법적으로 완벽하지만 AI 가 미묘한 세부 사항을 오해했기 때문에 여전히 아무것도 찾지 못할 수 있습니다.
Merlin 은 보조 쿼리 (Assistive Queries) 라는 기법을 사용합니다.
- 비유: 숲에서 특정 종류의 새를 찾고 있지만 쌍안경이 안개 낀 상태라고 상상해 보세요. 단순히 더 열심히 노려보는 대신, 도우미에게 지금 나무에서 보이는 모든 것을 외쳐달라고 요청합니다 ("빨간 새가 보여, 파란 새가 보여, 다람쥐가 보여...").
- 어떻게 도움이 되는가: 이 "목격자" 목록을 봄으로써 AI 는 "아! 나는 빨간 새를 찾고 있었는데, 숲은 파란 새로 가득 차 있구나. 검색 방식을 바꿔야겠다"라고 깨닫습니다. 이는 AI 가 자신의 논리를 디버깅하고 올바른 답을 찾도록 도와줍니다.
4. 결과: 왜 중요한가
연구진은 Merlin 을 다른 도구들과 인간 개발자들에게 테스트했습니다.
- 바늘 찾기: Merlin 은 기존 전문 도구가 찾은 거의 모든 버그를 찾았을 뿐만 아니라, 다른 도구들이 놓친 훨씬 더 많은 버그도 찾았습니다.
- 인간 속도: 실제 프로그래머들이 버그를 찾고 수정해야 했던 연구에서:
- Merlin 을 사용한 사람들은 사용하지 않은 사람들보다 3.8 배 더 정확했습니다.
- 작업 완료 시간은 31% 더 빨라졌습니다.
- "왜": Merlin 이 없으면 프로그래머들은 종종 지루한 수동 검색에 갇히거나 잘못된 답변을 주는 AI 에 의존하곤 했습니다. Merlin 은 그들에게 위치의 명확하고 감사 가능한 목록과 이를 찾은 정확한 논리를 제공하여 결과에 신뢰할 수 있게 했습니다.
요약
Merlin 은 "인간 영어"와 "기계 논리"를 모두 구사하는 번역가, 지시사항을 보내기 전에 테스트하는 품질 관리 검사관, 그리고 검색 실패 원인을 파악하기 위해 손전등을 사용하는 탐정과 같습니다. 이를 통해 개발자들은 거대한 코드베이스에 대해 복잡한 질문을 하고, 기술적 쿼리 언어의 전문가가 되지 않아도 신뢰할 수 있고 정확한 답변을 얻을 수 있습니다.
연구 분야의 논문에 파묻히고 계신가요?
연구 키워드에 맞는 최신 논문의 일일 다이제스트를 받아보세요 — 기술 요약 포함, 당신의 언어로.