오늘 우리는 AI 코드 생성의 경계를 넓히는 최첨단 혁신을 발표합니다.NinjaTech AI의 과학팀은 “멀티 프로그래밍 언어 앙상블” (MPLE) 이라는 새로운 코드 생성 방식을 개발했습니다.

Lama 3.1 405B Instruct와 함께 이 접근 방식을 사용하여 HumanEval 벤치마크에서 측정한 OpenAI의 GPT-4O 및 Anthropic의 Sonnet 3.5보다 통계적으로 더 나은 성능을 보여줄 수 있었습니다.에 발표된 기술 백서에서 이러한 결과와 당사의 접근 방식에 대한 세부 정보를 확인할 수 있습니다. arxiv.org.

이 블로그 게시물에서는 모든 AI 어시스턴트의 코드 생성 기능을 크게 향상시킬 수 있는 MPLE (다중 프로그래밍 언어 앙상블) 과 관련된 세 가지 중추적인 결과를 자세히 살펴보겠습니다.

  1. 코드 생성을 위한 에이전트 워크플로 (MPLE) 접근 방식을 사용하면 비용 효율적인 방식으로 정확도가 2~ 9% 향상됩니다.
  2. MPLE를 리플렉션 및 몬테카를로 트리 검색 (MCTS) 과 같은 고급 추론 기법과 통합하여 기존 LLM 모델에 적용하면 성능이 추가로 향상됩니다.
  3. 놀랍게도 llama3.1-405b-명령으로 구동되는 MPLE+MCTS 기술이 다음과 같은 정확도에 도달했다는 사실을 알게 되었습니다. 인간 평가 벤치마크에서 96.25%.

코드 생성의 과제

프로그래밍 언어에 대한 깊은 이해와 복잡한 아이디어를 실행 가능한 코드로 변환하는 능력이 필요하기 때문에 코드를 작성하는 것은 어려울 수 있습니다.또한 개발자는 디버깅, 최적화 및 호환성과 같은 문제도 해결해야 합니다. 이로 인해 코딩 프로세스가 훨씬 더 복잡하고 시간이 많이 소요될 수 있습니다.

여기서 AI가 도움이 됩니다. 대규모 언어 모델 (LLM) 은 사용자의 지시에 따라 대량의 코드를 빠르게 생성할 수 있습니다.출시 이후 MyNinja.ai 2024년 5월 말에는 약 173,000명의 개발자가 수행한 734,000개 이상의 코더 작업을 처리했습니다.

하지만 AI 코드 생성으로 코드 작성의 모든 문제가 해결되는 것은 아닙니다.LLM은 100% 신뢰할 수 없습니다. LLM은 코드 생성 시 오류가 발생할 수 있습니다.

LLM에서 오류가 발생하는 이유는 AI 코드 생성에 대한 기존 접근 방식이 단일 프로그래밍 언어에 의존하기 때문에 언어별 오류와 편향이 발생할 수 있기 때문입니다.예를 들어 LLM은 Python으로 학습했기 때문에 Python 코드 생성에서 잘 작동할 수 있습니다.하지만 C++ 또는 Java 코드를 만들라는 메시지가 표시되면 오류 처리나 라이브러리 사용의 차이로 인해 정확한 결과를 생성하지 못할 수 있습니다.LLM이 정확한 코드를 생성하는 데 어려움을 겪을 수 있는 또 다른 이유는 사람이 읽을 수 있는 텍스트 (예: 사용자의 프롬프트) 를 코드로 변환하기가 어렵기 때문입니다.

이 문제에 대한 한 가지 해결책은 더 많은 모델 교육에 투자하는 것입니다.기업은 LLM을 처음 시도할 때 코딩 질문에 답하도록 교육하는 데 더 많은 시간과 비용을 투자할 수 있습니다.이를 제로샷 러닝 (zero-shot learning) 이라고 합니다. 즉, 모델이 예제가 없는 경우 프롬프트만으로 정답을 도출하고 사전 지식을 바탕으로 적절한 응답을 생성합니다.그러나 제로샷 접근 방식을 사용하려면 모델 정확도를 개선하기 위해 막대한 시간과 비용 투자 (1천만 달러~1억 달러 이상) 가 필요합니다.

하지만 추론 비용은 지난 2년간 100배 이상 감소했습니다. 계속해서 그렇게 하면서 CodeGen을 위한 에이전트 워크플로우라는 새로운 방식이 탄생했습니다.

우리의 솔루션: 다중 프로그래밍 언어 앙상블 (MPLE)

우리 팀은 멀티 프로그래밍 언어 앙상블 (MPLE) 이라는 AI 코드 생성에 대한 새로운 접근 방식을 제안했습니다.이 접근 방식은 다중 프로그래밍 언어의 강점을 활용하여 멀티샷 접근 방식을 사용하여 더 정확하고 강력한 코드를 생성합니다.

첫 번째 시도 (싱글 샷) 에서 모델에 의존하여 정답을 도출하는 대신 LLM과 여러 번 인터페이스하여 정답을 생성합니다.모델에 접속할 때마다 다른 프로그래밍 언어를 사용하여 사용자의 문제를 해결하도록 요청합니다.이를 통해 LLM의 고유한 강점, 즉 한 프로그래밍 언어에서 다른 프로그래밍 언어로 코드를 번역하는 기능을 활용할 수 있습니다.

MPLE은 각기 다른 프로그래밍 언어에 정통한 전문가들로 구성된 팀으로 첫 시도에서 가장 정확한 코드를 만들기 위해 함께 작업한다고 생각하시면 됩니다.각 전문가 (또는 프로그래밍 언어) 는 각자의 고유한 강점을 제시하고, 각각의 강점을 결합하여 더 정확하고 신뢰할 수 있는 솔루션을 만들 수 있습니다.MPLE은 시스템에서 올바른 사용자 요청 코드를 생성하는 동안 이러한 모든 전문가에게 “전문 지식”을 제공할 것을 요청합니다.

MPLE의 작동 방식은 다음과 같습니다.

  1. 초기 코드 생성: 사용자가 코드 관련 질문을 시스템에 입력하면 AI 모델이 사용자가 요청한 프로그래밍 언어로 초기 응답을 생성합니다.
  2. 다국어 샘플링 및 번역: 응답이 사용자에게 반환되기 전에 코드의 품질과 정확성을 보장하기 위해 코드를 테스트합니다.코드가 모든 테스트를 통과하지 못하면 모델이 다른 프로그래밍 언어로 새 코드를 생성합니다.그러면 새 코드가 사용자 요청 프로그래밍 언어로 다시 변환됩니다.이 대체 버전은 대체 언어의 장점을 활용하여 테스트 실패의 원인이 된 오류를 잠재적으로 제거한다는 점에서 원래 버전과 다릅니다.
  3. 반복적 개선: 개선된 코드 버전은 테스트 케이스에 대해 다시 테스트됩니다.모든 테스트를 통과하지 못하면 해당 버전이 모든 테스트를 성공적으로 통과할 때까지 다른 코딩 언어를 반복하여 프로세스를 진행합니다.프로세스가 완료되면 사용자에게 응답 (즉, 코드의 최종 버전) 이 반환됩니다.
  4. 앙상블 통합: 앙상블 프레임워크는 반복 과정에서 여러 언어의 강점을 통합하여 프로그램을 점진적으로 개선합니다.프레임워크는 각 언어별 코드 생성을 개별 “약한 전문가”로 취급함으로써 결과물을 결합하여 언어별 오류와 편향을 완화합니다.

이 접근 방식은 새로운 모델이 아니며 모델을 재교육할 필요도 없다는 점에 유의하는 것이 중요합니다.이 시스템은 기존 LLM과의 여러 상호 작용을 조율하여 멀티샷 접근 방식을 사용하여 가능한 최상의 해답을 도출하는 시스템입니다.추론 비용이 계속 낮아짐에 따라 경제적으로 실행 가능한 AI 기반 결과의 미래는 복잡한 질문에 답하기 위해 대량의 토큰을 생성하는 추론 중심의 기술을 활용하는 에이전틱 워크플로우가 주도할 것이라고 생각합니다.

테스트를 통한 MPLE 검증

널리 알려진 두 가지 코드 생성 벤치마크에서 MPLE 프레임워크를 테스트했습니다. 인간 평가휴먼 네발 플러스.이 벤치마크는 LLM이 사용자 프롬프트를 기반으로 기능 코드를 생성할 수 있는 능력을 측정합니다.

HumanEval은 입력이 프로그램의 의도된 기능을 설명하는 사용자 프롬프트인 텍스트-코드 생성 작업을 위해 설계되었습니다.그런 다음 LLM 출력은 지정된 요구 사항의 단위 테스트를 통과한 능력을 기준으로 평가됩니다.HumanEval-Plus는 코드의 견고성과 정확성을 엄격하게 평가하기 위해 다수의 추가 테스트 사례를 통합하여 HumanEval을 확장합니다.

Pass @1 를 사용하여 MPLE의 효과를 측정했습니다.이 코드 평가 방법은 생성된 코드가 첫 번째 시도에서 성공적으로 완료한 작업의 비율을 측정합니다.

우리는 독자적인 LLM과 GPT-4o, 클로드-소네트-3.5, LLAMA3.1-405b와 같은 잘 알려진 다른 모델을 모두 사용하여 실험을 수행했습니다.

테스트 결과 제안된 MPLE 프레임워크는 테스트된 모든 LLM에서 기준선과 비교할 때 Pass @1 정확도를 일관되게 향상시키는 것으로 나타났습니다.예를 들어, MPLE를 사용하면 GPT3.5 터보의 정확도가 베이스라인의 65.83% 에서 74.17% 로 증가했습니다.여러 프로그래밍 언어를 활용하여 언어별 편향과 오류를 줄이는 효과를 강조합니다 (표 1 참조).

표 1: 다양한 LLM에 적용된 MPLE에 대한 인적 평가 테스트 결과

MPLE를 리플렉션 및 몬테카를로와 통합하면 더 나은 결과를 얻을 수 있습니다.

우리는 MPLE을 한 단계 더 발전시키고 MPLE을 반사 및 MCTS와 같은 고급 추론 기술과 통합하는 시스템을 설계했습니다.이러한 기법은 LLM의 문제 해결 및 추론 능력을 향상시키는 데 사용되며, 특히 전략적 또는 다단계 의사 결정이 필요한 작업의 경우 더욱 그렇습니다.우리의 가설은 이러한 시스템을 조합하면 MPLE만 사용하는 것보다 훨씬 더 높은 결과를 얻을 수 있다는 것이었습니다.일련의 테스트를 통해 이 가설이 사실임을 증명할 수 있었습니다.

또한 Humaneval-Plus 벤치마크를 사용하여 MPLE을 테스트했으며 그 결과는 다국어 앙상블 접근 방식의 이점을 더욱 입증합니다.특히, llama3.1-8bInstruct의 성능은 베이스라인의 60.00% 에서 MPLE+리플렉션을 사용한 71.88% 로 향상되었습니다. (표 2 참조).

표 2: 다양한 LLM에 적용된 MPLE, 리플렉션 또는 MCTS에 대한 휴먼 네발 플러스 테스트 결과

또한 MPLE+리플렉션과 MPLE+MCTS는 여러 모델 (GPT-4Omini, GPT-4o, 클로드-소네-3.5 및 라마3.1-405b-인스트럭트) 이 87.50% 의 성과를 달성하는 등 경쟁력 있는 결과를 제공합니다 (표 3 참조).

표 3: 다양한 LLM에 적용된 MPLE, 리플렉션 또는 MCTS에 대한 휴먼 네발 플러스 테스트 결과

우리의 결과는 MPLE 프레임워크가 특히 추가 추론 알고리즘과 함께 사용될 때 여러 LLM에서 코드 생성을 향상시키는 강력하고 유연한 접근 방식을 제공한다는 것을 분명히 보여줍니다.MPLE의 일관된 성능 개선은 AI 기반 소프트웨어 개발에 실용적으로 적용할 수 있는 잠재력을 강조합니다.

라마 3.1-405b는 MPLE 및 MCTS를 사용하여 96.25% 의 정확도를 달성한 최첨단 결과를 달성했습니다!

분석 과정에서 MPLE+MCTS의 조합을 적용했을 때의 MPLE의 성능에 특히 깊은 인상을 받았습니다. llama3.1-405b-instruct와 같은 여러 모델에서 가장 높은 정확도를 달성하여 SOTA Pass @1 정확도 96.25% 에 도달했습니다 (표 4 참조).

표 4: 다양한 LLM에 적용된 MPLE 및 MCTS에 대한 인간 평가 테스트 결과

더 로드 어헤드

MPLE로 가능한 것의 한계를 계속해서 넓혀 나가면서 새로운 연구 개발 영역을 탐구하게 되어 기쁩니다.잠재적 중점 분야는 다음과 같습니다.

  1. 보다 강력한 평가 지표 개발: 효과적인 평가 지표를 만드는 것은 MPLE의 성능을 정확하게 측정하는 데 매우 중요합니다.보다 포괄적인 지표에 집중함으로써 다양한 영역에 걸쳐 프레임워크의 정확성, 신뢰성 및 실제 적용 가능성을 보장할 수 있습니다.
  2. MPLE을 실제 문제에 적용: MPLE은 비즈니스 프로세스 자동화, 소프트웨어 개발 파이프라인 최적화, 사이버 보안 조치 개선과 같은 복잡한 실제 문제를 해결할 수 있는 잠재력을 가지고 있습니다.광범위한 데이터 세트와 실제 애플리케이션에서 MPLE를 평가하는 것은 MPLE의 일반화 가능성과 영향을 평가하는 데 매우 중요합니다.
  3. 코딩 작업을 위한 NinJALLM 개선: 저희 닌자엘름 3.0 (llama3.1-405b의 미세 조정 및 양자화된 버전) 은 다음에서 구매 가능합니다. MyNinja.ai 휴먼에벌 (93.85%) 과 휴먼네벌 플러스 (86.67%) 에서 유망한 점수를 획득했으며, 우리는 그 성능을 더욱 개선할 수 있는 길을 걷고 있습니다.한 달 안에 MPLE 기반 닌자 코더를 출시할 예정입니다.

MPLE에 대한 연구를 전 세계와 공유하게 되어 기쁩니다.이러한 접근 방식이 LLM 코드 생성에 상당한 영향을 미칠 가능성이 있다고 생각합니다.MPLE은 언어별 오류와 편향을 줄여 보다 정확하고 강력한 코드 생성을 가능하게 합니다. 즉, 개발자가 더 큰 문제를 해결하는 데 더 많은 시간을 할애할 수 있습니다.우리는 이 분야에 대한 지속적인 연구와 개발을 위해 최선을 다하고 있으며, 앞으로도 MPLE의 혁신적인 응용 프로그램을 볼 수 있기를 기대합니다.

P.S. Future는 버그가 훨씬 적습니다 :-)

추신: 이 블로그 게시물 작성을 지원하기 위해 MyNinja.ai 를 사용했습니다.