← 최신 논문
💻 computer science

ProjAgent: Procedural Similarity Retrieval for Repository-Level Code Generation

ProjAgent는 에이전트 워크플로우를 통해 절차적 유사성에 기반하여 함수를 검색하고 정적 분석 피드백을 통해 출력을 정제함으로써 REPOCOD 벤치마크에서 41.14%의 Pass@1을 달로성하는 저장소 수준의 코드 생성 시스템입니다.

원저자: QiHong Chen, Aaron Imani, Iftekhar Ahmed

게시일 2026-07-10
📖 4 분 읽기☕ 가벼운 읽기

원저자: QiHong Chen, Aaron Imani, Iftekhar Ahmed

원본 논문은 CC BY 4.0 (http://creativecommons.org/licenses/by/4.0/) 라이선스로 제공됩니다. 이것은 아래 논문에 대한 AI 생성 설명입니다. 저자가 작성하거나 승인한 것이 아닙니다. 기술적 정확성을 위해서는 원본 논문을 참조하세요. 전체 면책 조항 읽기

당신이 10,000페이지에 달하는 거대한 미스터리 소설의 새로운 장을 쓰려고 한다고 상상해 보세요. 당신은 달성해야 할 줄거리 포인트는 알고 있지만, 등장인물의 이름이나 마을의 구체적인 규칙, 혹은 탐정이 평소에 범죄를 해결하는 방식은 모릅니다. 만약 그냥 추측해서 쓴다면, 존재하지 않는 캐릭터를 만들어내거나 마을의 법을 어겨서 이야기를 망칠 수도 있습니다. 이것은 인공지능이 대규모 소프트웨어 프로젝트를 위한 코드를 작성하려고 할 때 발생하는 일과 정확히 일치합니다.

오랫동안 AI 어시스턴트들은 "닮은꼴"을 찾는 방식으로 도움을 얻으려 노력했습니다. 만약 당신이 온도를 계산하는 함수를 요청한다면, AI는 "temperature(온도)"라는 단어를 사용하거나 표면적으로 유사해 보이는 다른 코드를 검색할 것입니다. 이 논문은 이것이 마치 케이크 레시피를 찾기 위해 다른 레시피에서 "설탕"이라는 단어가 언급되었다는 이유만으로 찾는 것과 같다고 주장합니다. 이는 실제 마법, 즉 어떻게 요리가 이루어지는지를 놓치는 것입니다.

저자인 Qihong Chen, Aaron Imani, 그리고 Iftekhar Ahmed는 ProjAgent라고 불리는 새로운 시스템을 구축했습니다. 그들은 가장 도움이 되는 코드는 항상 겉모습이 같은 코드가 아니라, 생각하는 방식이 같은 코드라는 것을 발견했습니다.

"생각하기" vs "말하기"

이 논문은 코드가 두 가지 층을 가지고 있다고 제안합니다. 바로 코드가 사용하는 단어들(변수명이나 주석 등)과 문제를 해결하기 위해 실제로 취하는 단계들(로직)입니다.

두 명의 요리사를 상상해 보세요. 요리사 A는 피자를 만들고 있고, 요리사 B는 샐러드를 만들고 있습니다.

  • 기존 방식 (어휘적/의미적 검색): 만약 당신이 피자를 만드는 데 도움을 요청하면, 기존의 AI는 피자를 만드는 다른 요리사만을 찾을 것이며, 요리사 B가 샐러드를 만들고 있다는 이유로 무시할 것입니다.
  • 새로운 방식 (ProjAgent): ProjAgent는 두 요리사 모두 동일한 일을 해야 한다는 점을 깨닫습니다. 바로 재료를 다지고, 신선한지 확인하고, 그릇에 담는 것입니다. 한 명은 샐러드를 만들고 다른 한 명은 피자를 만들더라도, 그들의 **절차적 단계(procedural steps)**는 동일합니다. ProjAgent는 요리사 B를 찾아내어 이렇게 말합니다. "헤이, 요리사 B가 상추가 신선한지 어떻게 확인하는지 봐! 너도 토마토가 신선한지 확인하는 데 그 로직을 사용할 수 있어!"

이 논문은 표면적인 유사성(단어를 보는 것)이 충분하다는 생각을 명시적으로 부정합니다. 저자들은 단어나 단순한 의미에만 의존하는 것은 서로 다른 프로젝트에서 동일한 동작에 대해 서로 다른 이름을 사용하기 때문에, 결정적인 "방법(how-to)" 단계를 놓치기 쉽다고 주장합니다.

ProjAgent의 작동 방식: 탐정 에이전트

ProjAgent는 특수한 도구를 가진 매우 똑똑한 탐정처럼 행동합니다. 이 미스터리를 해결하는 방법은 다음과 같습니다.

  1. 분해하기: 작성하고자 하는 새로운 코드를 가져와서 "숫자가 음수인지 확인하기" 또는 "단위 변환하기"와 같은 아주 작은 논리적 단계로 분해합니다.
  2. "생각하기" 검색: 단순히 단어를 읽는 대신, ProjAgent는 AI 모델의 "숨겨진 생각"을 들여다보는 특별한 기술을 사용합니다. 화려한 어휘를 제거하고 순수한 로직만을 봅니다. 이를 통해 프로젝트 내에서 비록 완전히 다른 부분에 작성되어 있더라도, 이와 똑같은 정신적 댄스(mental dance)를 수행하는 다른 코드를 찾아냅니다.
  3. 에이전트의 사냥: 첫 번째 검색에서 충분한 결과를 찾지 못하면, 디지털 "에이전트"(작은 AI 로봇)가 프로젝트 파일들을 뒤지며 보물찾기를 떠납니다. 파일을 읽고, 함수를 검색하며, "여기에 이와 비슷하게 생각하는 무언가가 있는가?"라고 묻습니다.
  4. 재검토: 속임수에 빠지지 않기 위해, 시스템은 "정적 분석(static analysis)" 도구를 사용합니다. 이것은 로직을 위한 맞춤법 검사기라고 생각하면 됩니다. 코드가 충돌 없이 실제로 실행되는지 확인합니다. 만약 AI가 실수를 하면, 시스템은 "앗, 이건 작동하지 않을 거예요"라고 말하며 AI에게 다시 시도하도록 요청합니다. 이 루프는 코드가 견고해질 때까지 최대 10번까지 반복됩니다.

결과: 효과가 있었는가?

저자들은 980개의 실제 코딩 문제와 11개의 서로 다른 소프트웨어 프로젝트를 포함하는 REPOCOD라는 벤치마크를 통해 ProjAgent를 테스트했습니다.

  • 점수: ProjAgent는 **41.14%**의 Pass@1 점수를 기록했습니다. 이는 첫 번째 시도에서 약 100문제 중 41문제를 해결하는 작동하는 코드를 작성했다는 의미입니다.
  • 비교: 이는 이전의 최고 방법들을 앞질렀습니다. 기존의 "밀집 검색(dense search)" 방식은 **28.83%**를 기록했고, "희소 검색(sparse search, 키워드 찾기)"은 **26.58%**를 기록했습니다. 심지어 SpecAgent라는 최상위 시스템조차 **34.52%**에 그쳤습니다.
  • 증거: 논문은 가장 큰 상승폭이 이러한 "절차적으로 유사한" 단계들을 찾아낸 데서 왔다고 제안합니다. 절차적 검색을 제거했을 때 점수는 **25.76%**로 떨어졌습니다. 의미적 검색(단어 매칭 부분)을 제거했을 때는 **32.29%**로 떨어졌습니다. 이는 성공하기 위해서는 "무엇(what)"과 "어떻게(how)"가 모두 필요하다는 것을 증명합니다.

이 논문이 주장하지 않는 것

이 논문이 말하지 않는 내용을 아는 것도 중요합니다.

  • 모든 코딩 문제를 해결했다고 주장하지 않습니다. 점수가 41.14%라는 것은 여전히 절반 이상의 경우에 실패한다는 것을 의미합니다.
  • 이 방식이 모든 프로그래밍 언어에 작동한다고 말하지 않습니다. 테스트는 오직 Python 프로젝트를 대상으로 진행되었습니다.
  • "에이전트"가 완벽하다고 주장하지 않습니다. 저자들은 가끔 에이전트가 시간이나 메모리가 부족하여 최적의 코드를 찾지 못하는 경우가 있다고 인정하며, 더 나은 탐색 도구가 여전히 필요함을 시사했습니다.

핵심 요약

이 논문은 좋은 코드를 작성하기 위해서 AI가 단순히 일치하는 단어를 찾는 것을 넘어, 생각의 패턴을 찾기 시작해야 한다고 제안합니다. 단어가 완전히 다르더라도 문제를 해결하는 방식이 같은 코드를 찾음으로써, ProjAgent는 AI가 더 나은 소프트웨어를 작성할 수 있도록 돕습니다. 이는 진일보한 결과이지만, 완벽한 코드 생성으로 가는 여정은 여전히 진행 중입니다.

연구 분야의 논문에 파묻히고 계신가요?

연구 키워드에 맞는 최신 논문의 일일 다이제스트를 받아보세요 — 기술 요약 포함, 당신의 언어로.

Digest 사용해 보기 →