In Line with Context: Repository-Level Code Generation via Context Inlining
본 논문은 생성된 앵커, 상위 호출자, 하위 피호출자로 구성된 미완성 함수의 호출 그래프를 프롬프트에 인라인하여 복잡한 리포지토리 수준의 이해를 더 관리 가능한 함수 수준의 작업으로 전환함으로써 리포지토리 수준의 코드 생성을 개선하는 새로운 프레임워크인 InlineCoder를 소개합니다.
원본 논문은 CC BY 4.0 (http://creativecommons.org/licenses/by/4.0/) 라이선스로 제공됩니다. 이것은 아래 논문에 대한 AI 생성 설명입니다. 저자가 작성하거나 승인한 것이 아닙니다. 기술적 정확성을 위해서는 원본 논문을 참조하세요. 전체 면책 조항 읽기
큰 아이디어: "호출 스택" 관점으로 코드 작성하기
거대한 소프트웨어 회사에서 특정 함수를 작성하도록 고용된 신입 사원이라고 상상해 보세요. 예전에는 도움을 요청하면 사무실 다른 부분에서 가져온 비슷한 문장 목록만 받았을 것입니다. '계산'이나 '사용자' 같은 단어를 보고 무엇을 해야 할지 추측하려 했을 것입니다. 이는 누가 당신에게 작업을 요청했는지, 그리고 방에 어떤 도구가 있는지 알지 못했기 때문에 종종 실수를 초래했습니다.
InlineCoder는 이러한 대규모 프로젝트에서 AI 가 코드를 작성하는 방식을 바꾸는 새로운 시스템입니다. 단순히 AI 에게 유사한 문장 목록을 보여주는 대신, 새로운 코드가 실제 세계에 정확히 어디에 들어맞는지를 보여주기 위해 이야기를 물리적으로 다시 씁니다.
다음은 이를 간단한 단계로 분해한 작동 원리입니다:
1. 문제: "격리된 방" 함정
AI 가 거대한 소프트웨어 프로젝트 (저장소) 를 위한 코드 조각을 작성하려 할 때, 보통 "격리된 방"에 갇히게 됩니다.
- 구식 방식: AI 에게는 작업 설명 (함수 시그니처) 과 프로젝트에서 무작위로 선택된 몇 개의 유사한 문서만 제공됩니다. 이는 다른 자동차의 엔진 사진만 들고 눈가리개를 한 채 자동차 엔진을 수리하려는 것과 같습니다. 볼트는 올바르게 조일 수 있을지 모르지만, 벨트가 어느 방향으로 돌아가는지, 혹은 누가 그 차를 운전하는지는 알 수 없습니다.
- 결과: AI 는 단독으로 보면 괜찮아 보이는 코드를 작성하지만, 새로운 코드가 프로젝트의 나머지 부분과 어떻게 연결되는지 알지 못하기 때문에 전체 시스템을 망가뜨립니다.
2. 해결책: "컨텍스트 인라이닝"
이 논문의 저자인 InlineCoder는 작업을 이해하려면 두 가지를 봐야 한다는 것을 깨달았습니다:
- 누가 당신을 부르고 있는가? (상위 컨텍스트: 작업을 요청하는 상사).
- 당신은 누구를 부르고 있는가? (하위 컨텍스트: 작업을 수행하는 데 필요한 도구나 조력자).
InlineCoder 는 **인라이닝 (Inlining)**이라는 교묘한 트릭을 사용합니다. 연극 대본을 쓴다고 상상해 보세요. 배우에게 대본만 주는 것이 아니라, 배우의 대본을 다른 배우들이 그 배우와 대화하는 장면 안에 물리적으로 붙여넣는 것입니다. 갑자기 배우는 어떤 어조로 말해야 하는지, 어떤 소품이 건네지는지, 그리고 대본이 대화의 흐름에 어떻게 들어맞는지를 정확히 보게 됩니다.
3. InlineCoder 의 작동 방식 (3 단계 춤)
1 단계: "초안" (앵커)
먼저 AI 는 코드를 빠르게 대충 추측합니다. 완벽하지는 않지만 시작점이 됩니다. 이는 AI 가 "이 함수가 어떻게 보여야 할지에 대한 제 최선의 추측입니다"라고 말하는 것과 같습니다.
2 단계: "상위" 인라이닝 (상사 보기)
시스템은 그 대략적인 추측을 가져와 그것을 호출하는 함수들의 코드 안에 직접 붙여넣습니다.
- 비유: 당신이 요리사라고 상상해 보세요. 단순히 "수프를 만들어라"라고 말하는 대신, 시스템이 웨이터가 주문을 건네는 정확한 순간, 웨이터가 들고 있는 재료, 그리고 수프가 어떻게 제공될 것인지 보여줍니다.
- 왜 도움이 되는가: AI 는 이제 어떤 데이터가 들어오고 결과물이 어떤 형식이어야 하는지 정확히 봅니다. 추측을 멈추고 "호출자"의 구체적인 요구 사항에 맞추기 시작합니다.
3 단계: "하위" 검색 (도구 찾기)
시스템은 AI 가 사용하려 했던 도구 (다른 함수) 를 확인하기 위해 대략적인 추측을 살펴봅니다. 그런 다음 프로젝트 라이브러리로 가서 해당 도구의 실제 코드를 가져와 AI 가 올바른 버전을 사용하도록 보장합니다.
- 비유: 요리사의 초안에 "믹서를 사용하라"고 적혀 있다면, 시스템은 부엌에 있는 정확한 믹서를 찾아 요리사에게 사용법을 보여주고, 요리사가 어떤 기기를 집어야 할지 추측하게 하지 않습니다.
4. "신뢰도 확인"
시스템은 자신이 언제 불확실한지 알 만큼 똑똑합니다. 초안 작성의 난이도에 기반하여 "신뢰도 점수"를 계산합니다.
- 높은 신뢰도: "이것은 좋아 보이니 다듬기만 하면 됩니다."
- 낮은 신뢰도: "이것은 위험해 보입니다. 초안을 버리고 새로운 컨텍스트로 다시 시작하세요."
이를 통해 AI 는 자신이 먼저 작성했다는 이유만으로 나쁜 아이디어에 고집스럽게 매달리는 것을 방지합니다.
5. 결과: 왜 중요한가
이 논문은 다양한 AI 모델을 사용하여 두 개의 거대한 벤치마크 (DevEval 및 RepoExec) 에서 이를 테스트했습니다.
- 결과: InlineCoder 는 거의 모든 다른 방법들을 압도적인 차이로 능가했습니다.
- 획득: 일부 측정 항목에서 기존 최상의 방법과 비교하여 코드 정확도를 거의 30% 향상시켰습니다.
- 교훈: 유사한 단어 목록 대신 AI 에게 "호출 그래프"(누가 누구와 대화하는지) 를 보여줌으로써, AI 는 실제 소프트웨어 프로젝트의 복잡한 웹 내에서 실제로 작동하는 코드를 작성합니다.
요약
InlineCoder를 단순히 단어를 번역하는 것이 아니라 관계를 번역하는 번역기로 생각하세요. 코드를 격리된 문장으로 취급하는 것을 멈추고 대화를 취급하기 시작합니다. 새로운 코드를 주변에서 일어나는 대화 (호출자) 와 의존하는 도구 (호출 대상) 에 물리적으로 포함시킴으로써, AI 가 기존 소프트웨어 생태계에 완벽하게 들어맞는 코드를 작성하도록 보장합니다.
연구 분야의 논문에 파묻히고 계신가요?
연구 키워드에 맞는 최신 논문의 일일 다이제스트를 받아보세요 — 기술 요약 포함, 당신의 언어로.