AI 아키텍처

이 문서는 GitLab Duo AI 기능이 공유하는 아키텍처를 설명합니다. 이 아키텍처의 역사적 동기와 목표에 대한 내용은 AI 게이트웨이 아키텍처 설계 문서를 참조하세요.

소개

다음 다이어그램은 GitLab의 다양한 구성 요소가 상호 작용하는 간략한 모습을 보여줍니다.

  • AI 추상화 계층 - 모든 GitLab 인스턴스(자체 관리형, GitLab.com 등)는 단일 구조 내에서 새로운 AI 기능을 구현하기 위한 프레임워크를 제공하는 AI 추상화 계층을 포함합니다. 이 계층은 요청에 대한 맥락 정보를 추가하고 요청 전후 처리를 수행합니다.

시스템

  • GitLab 인스턴스 - 모든 유형의 GitLab 인스턴스를 지원하는 GitLab 단일 구조
  • CustomersDot - 고객이 더 많은 좌석을 추가하고 결제 기록을 추가/편집하여 구독을 구매하고 업그레이드할 수 있게 합니다. 또한 자체 관리형 라이센스를 관리합니다.
  • AI Gateway - 모델을 호출하기 위한 통합 인터페이스를 제공하는 시스템입니다. Google Cloud Run에 배포됩니다( Runway 사용).
  • 확장 프로그램

GitLab.com와 Self-Managed/Dedicated의 AI Gateway 접근 방식 차이

  • GitLab.com
    • GitLab.com 인스턴스는 개인 키로 서명된 JWT Auth 토큰을 자체 발급합니다.
  • 기타 유형의 인스턴스
    • Self-Managed 및 Dedicated는 정기적으로 CustomersDot과 라이센스 및 AI Access 토큰을 동기화합니다.
    • Self-Managed 및 Dedicated 인스턴스는 적절한 AI Gateway로 트래픽을 라우팅합니다.

SaaS 기반 AI 추상 계층

GitLab은 클라우드 호스팅된 AI 아키텍처를 운영합니다. 우리는 AI 게이트웨이를 사용하여 라이센스가 있는 자가 관리 인스턴스에 대한 액세스를 허용할 것입니다. 자세한 내용은 설계 문서를 참조하십시오.

이는 두 가지 주요 이유 때문입니다: 최고의 AI 모델은 클라우드 기반이며, 이러한 모델은 종종 이를 위해 설계된 특수 하드웨어에 의존하고, AI를 대규모로 운영하고 적절한 성능으로 자가 관리 인프라를 운영하는 것은 상당한 작업입니다. 우리는 AI에 관심 있는 자가 관리 고객을 적극적으로 추적하고 있습니다.

AI 게이트웨이

AI 게이트웨이(이전의 모델 게이트웨이)는 모든 GitLab 사용자에게 AI 기능에 대한 액세스를 제공하는 독립 실행형 서비스입니다. 사용 중인 인스턴스가 자가 관리, 전용 또는 GitLab.com인 경우에 관계없이 제공합니다. SaaS 기반 AI 추상 계층은 클라우드 기반 공급자에 직접 액세스하기보다는 이 게이트웨이에 연결하는 방식으로 전환할 것입니다.

GitLab-rails에서 AI 게이트웨이에 대한 호출은 추상 계층을 사용하여 수행할 수 있습니다.

기본적으로 이러한 작업은 Puma에서 장기 실행 요청을 방지하기 위해 Sidekiq 작업을 통해 비동기적으로 수행됩니다. 추가된 대기 시간으로 인해 비대기성 작업에 사용해야 합니다.

작성 당시, 추상 계층은 여전히 AI 공급자를 직접 호출합니다. Epic 11484는 이를 변경할 것을 제안합니다.

특정 작업이 대기 시간에 민감한 경우 AI 게이트웨이를 직접 호출하기로 결정할 수 있습니다. 이는 Sidekiq에 의해 추가된 대기 시간을 피할 수 있습니다. 우리는 code_suggestions에 대해 이미 이렇게 하고 있습니다 이는 /api/v4/code_suggestions에 중첩된 API 엔드포인트에 의해 처리됩니다. 추가되는 모든 새로운 엔드포인트는 /api/v4/ai_assisted 네임스페이스 내에 중첩해야 합니다. 이렇게 하면 GitLab.com의 요청이 자동으로 ai-assisted 플릿으로 라우팅되어 정규 API와 작업이 격리되고 필요한 경우 확장이 용이해집니다.

지원되는 기술

AI 작업 그룹의 일환으로, 우리는 다양한 기술을 조사하고 검증하고 있습니다. 아래는 GitLab 애플리케이션 내에서 사용이 승인된 도구 목록입니다.

다른 모델이나 기술을 활용하는 것도 가능하지만, 사용하기 전에 검토 프로세스를 거쳐야 합니다. 아이디어의 일환으로 AI 프로젝트 제안서 템플릿을 사용하고 이를 지원하는 데 필요한 새로운 도구를 포함해야 합니다.

모델

다음 모델이 사용 승인을 받았습니다:

임베딩

GitLab 임베딩에 대한 추가 정보는 AI 임베딩 아키텍처를 참조하세요.

코드 제안

코드 제안은 GitLab-Rails 리포지토리의 일부로 통합되고 있으며, 이는 코드 제안과 추상 계층을 사용하는 AI 기능 간의 아키텍처를 통합하고, 다른 AI 기능에 대한 자체 관리 지원을 제공합니다.

다음 표는 현재 코드 제안이 제공하는 기능과 통합의 일환으로 이러한 변경 사항이 어떻게 나타날지를 문서화합니다:

주제 세부 정보 현재 발생하는 곳 앞으로 발생할 곳
요청 처리      
  커서 전후의 코드를 포함하여 IDE(VS Code, GitLab WebIDE, Windows용 MS Visual Studio 2022, IntelliJ, JetBrains, VIM, Emacs, Sublime)에서 요청을 수신합니다. GitLab Rails GitLab Rails
  현재 사용자를 인증하고 해당 사용자가 이 프로젝트에 대해 코드 제안을 사용할 수 있는 권한이 있는지 확인합니다. GitLab Rails + AI Gateway GitLab Rails + AI Gateway
  TreeSitter를 통해 가져오기와 같은 문맥을 추가하기 위해 요청을 전처리합니다. AI Gateway 미결정
  요청을 AI 제공자에게 라우팅합니다. AI Gateway AI Gateway
  응답을 IDE에 반환합니다. GitLab Rails GitLab Rails
  타임스탬프, 응답 시간, 모델 등 요청을 기록합니다. 두 곳 모두 두 곳 모두
텔레메트리      
  IDE에서 사용자 수용 또는 거부 AI Gateway 두 곳 모두
  하루에 고유한 사용자 수 GitLab Rails, AI gateway 미결정
  오류 비율, 모델 사용, 응답 시간, IDE 사용 AI Gateway 두 곳 모두
  언어당 제안 AI Gateway 두 곳 모두
모니터링   두 곳 모두 두 곳 모두
       
모델 라우팅      
  현재 이 기능을 사용하지 않지만, 코드 제안은 트래픽 비율에 따라 여러 모델로의 라우팅을 지원할 수 있습니다. AI Gateway 두 곳 모두
내부 모델      
  현재 유지 관리되지 않으며, 우리 자신의 인스턴스에서 모델을 실행하고, Triton 내에서 실행하며, 요청을 우리 자신의 모델로 라우팅하는 기능입니다. AI Gateway AI Gateway

자체 관리 지원

자체 관리 사용자에 대한 코드 제안은 클라우드 커넥터 MVC의 일환으로 도입되었습니다.

이 프로젝트의 기술 솔루션에 대한 자세한 내용은 클라우드 커넥터 아키텍처 문서를 참조하세요.

이 솔루션을 발전시켜 클라우드 커넥터 제품 우산 아래의 다른 AI 기능을 제공할 계획입니다.

코드 제안 대기 시간

코드 제안의 수용률은 높은 대기 시간에 민감합니다. AI 도우미와 함께 코드를 작성하는 동안 사용자는 코드 블록을 수동으로 입력하기 전에 짧은 시간 동안만 멈출 것입니다. 사용자가 다음 키 입력을 하면 기존 제안이 무효화되며 코드 제안 엔드포인트에 새 요청이 필요합니다. 이 요청 또한 대기 시간에 매우 민감합니다.

대기 시간이 충분히 긴 최악의 경우, IDE는 일련의 요청을 발생시킬 수 있으며, 각 요청은 사용자가 응답을 기다리지 않고 진행함에 따라 무시됩니다. 이는 사용자에게 아무런 가치를 제공하지 않으며, 여전히 우리의 서비스에 부하를 줍니다.

이 기능의 대기 시간에 대해 우리가 어떻게 개선할 계획인지에 대한 논의는 여기에서 확인하세요.

아키텍처에 대한 향후 변경사항

  • 대기 시간을 개선하기 위해 AI 게이트웨이를 다른 지역에 배포할 계획입니다 (엔드 포인트 AI 게이트웨이를 위한 다중 지역 지원 참조).

  • 우리는 원거리 관측을 중앙 집중화하고 싶습니다. 그러나 AI(즉, 클라우드 커넥터) 관측을 중앙 집중화하는 것은 현재로선 어려운 미해결 문제입니다.