1. Minions의 핵심 아키텍처: 계획, 실행, 그리고 검증
Minions는 단순히 코드를 생성하는 모델이 아니라, 문제를 해결하기 위해 일련의 단계를 밟는 자율 에이전트입니다. 이들의 작업 방식은 크게 세 가지 단계로 나뉩니다.
- 계획(Planning): LLM은 주어진 작업 설명과 코드베이스 컨텍스트를 바탕으로 수행해야 할 단계별 계획을 수립합니다. 이 단계에서 에이전트는 어떤 파일을 수정해야 하고 어떤 도구를 사용할지 결정하며, 복잡한 문제를 작은 단위의 하위 작업으로 분해합니다.
- 실행(Execution): 수립된 계획에 따라 에이전트는 파일 읽기, 검색, 코드 수정, 테스트 실행 등의 도구를 호출합니다. Stripe는 에이전트가 코드베이스를 안전하게 탐색할 수 있도록 전용 API와 추상화된 도구 세트를 제공하여 LLM이 시스템 내부 구조를 이해하도록 돕습니다.
- 검증(Verification): 수정이 완료되면 에이전트는 스스로 테스트를 실행하여 변경 사항이 의도대로 동작하는지 확인합니다. 만약 테스트가 실패하면 오류 메시지를 분석하여 코드를 다시 수정하는 루프를 수행하며, 이는 인간의 개입 없이도 높은 품질의 결과물을 보장하는 핵심 요소입니다.
2. 원샷(One-Shot) 접근 방식의 중요성
기존의 챗봇 형태 AI는 사용자와의 지속적인 상호작용이 필요하지만, Minions는 ‘원샷’ 방식을 지향합니다. 사용자가 작업을 할당하면 에이전트가 백그라운드에서 독립적으로 작업을 완수하고 최종 결과물인 Pull Request를 제출합니다.
이러한 방식은 엔지니어가 맥락 전환(Context Switching) 없이 다른 중요한 업무에 집중할 수 있게 하며, 비동기적인 작업 처리를 가능하게 하여 전체적인 개발 사이클의 속도를 획기적으로 높입니다. 또한, 에이전트가 스스로 오류를 수정하는 능력을 갖춤으로써 단순한 제안자가 아닌 실행자로서의 역할을 수행합니다.
3. 기술적 구현 및 도구 활용
Stripe의 거대한 코드베이스를 다루기 위해 Minions는 다음과 같은 기술적 요소들을 활용합니다.
- LSP(Language Server Protocol) 및 Sorbet 연동: Stripe의 Ruby 환경에서 사용되는 Sorbet 정적 분석 도구와 연동하여 코드의 정의 이동, 참조 찾기, 타입 체크 등을 정확하게 수행합니다. 이를 통해 에이전트는 단순 텍스트 매칭 이상의 의미론적 코드 이해가 가능해집니다.
- 샌드박스 환경: 에이전트가 실행하는 모든 명령은 격리된 샌드박스 환경에서 수행됩니다. 이는 실제 인프라에 영향을 주지 않으면서도 실제 프로덕션과 동일한 라이브러리와 테스트 환경을 제공하여 안전한 코드 수정 및 실행을 가능케 합니다.
- 컨텍스트 관리 전략: LLM의 컨텍스트 윈도우 한계를 극복하기 위해 관련성 높은 코드 조각만을 선별하여 제공하는 메커니즘을 사용합니다. 파일 시스템 탐색 도구와 검색 도구를 통해 에이전트가 필요한 정보만 스스로 찾아내도록 설계되었습니다.
4. 성능 평가 및 벤치마킹: ‘Minion-Bench’
에이전트의 성능을 객관적으로 측정하기 위해 Stripe는 ‘Minion-Bench’라는 자체 벤치마크를 구축했습니다. 이는 실제 Stripe 엔지니어들이 수행했던 과거의 수백 가지 작업들을 데이터셋으로 변환한 것입니다.
각 벤치마크 케이스는 작업 설명, 초기 코드 상태, 그리고 정답 코드와 테스트 코드로 구성됩니다. 에이전트가 생성한 PR이 실제 정답과 얼마나 유사한지, 그리고 모든 테스트를 통과하는지를 자동으로 평가함으로써 모델 업데이트나 프롬프트 변경 시 발생할 수 있는 퇴보(Regression)를 방지하고 지속적인 성능 향상을 도모합니다.