AI 아키텍처

GitLab은 제품 그룹과 그들의 AI 활용을 지원하기 위한 공통 도구 세트를 만들었습니다. 우리의 공통 아키텍처의 목표는 다음과 같습니다:

  1. 고품질의 사용 준비가 완료된 도구 세트를 제공함으로써 피쳐 팀의 속도를 높이기
  2. 기술을 빠르고 쉽게 전환할 수 있는 능력

AI는 매우 빠르게 변화하고 있으며, 우리는 이 분야의 변화에 발 맞출 수 있어야 합니다. 이를 위해 추상화 계층을 구축하여 REST API 내에서의 코드 중복을 피할 수 있도록 했습니다. 이를 통해 우리는 기술 모델, 데이터 저장소 및 다른 기술에 대한 “변경 가능한” 접근 방식을 취할 수 있습니다.

다음 아키텍처 청사진에서 확인할 수 있는 다이어그램은 GitLab의 다른 구성 요소가 어떻게 상호 작용하는지를 간소화된 형태로 보여줍니다. 이 추상화 계층은 REST API 내에서의 코드 중복을 피하는 데 도움을 줍니다.

아키텍처 다이어그램

SaaS 기반 AI 추상화 계층

GitLab은 현재 클라우드 호스팅된 AI 아키텍처를 운영하고 있습니다. 현재 우리는 라이선스가 있는 셀프 매니지드 인스턴스에서 이에 대한 액세스를 허용할 것입니다. 자세한 내용은 청사진을 참조하세요.

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

AI 게이트웨이

AI 게이트웨이(이전에는 모델 게이트웨이)는 GitLab의 모든 사용자에게 AI 기능에 액세스를 제공하는 독립적인 서비스입니다. 이를 어떤 인스턴스를 사용하던지(셀프 매니지드, 전용 또는 GitLab.com) 상관없이 액세스할 수 있을 것입니다. SaaS 기반 AI 추상화 계층은 이 게이트웨이에 연결되도록 전환될 것이며, 클라우드 기반 공급업체에 직접 액세스하는 대신 이 게이트웨이에 연결할 것입니다.

GitLab-rails로부터 AI 게이트웨이에 대한 호출은 추상화 계층을 사용하여 이루어질 수 있습니다. 기본적으로 이러한 동작은 Sidekiq 작업을 통해 비동기적으로 수행되어 Puma에서 장기 실행 요청을 방지합니다. 추가적인 지연 시키우는 부작용으로 인해 지연에 민감하지 않은 작업에 사용해야 합니다.

작성 당시에는 추상화 계층이 아직 AI 제공업체들을 직접 호출합니다. Epic 11484에서 이를 변경하기로 제안되었습니다.

특정 작업이 지연에 민감할 때, AI 게이트웨이를 직접 호출할 수 있습니다. 이렇게 함으로써 Sidekiq에 의한 추가 지연을 방지할 수 있습니다. code_suggestions에 대해서 이미 이를 수행하고 있으며, 새로운 엔드포인트를 추가할 경우 /api/v4/ai_assisted 네임스페이스에 중첩시켜야 합니다. 이렇게 함으로써 GitLab.com에서 요청을 ai-assisted 플릿으로 자동 라우트하고 정규 API의 워크로드와 격리시켜 필요시 더 쉽게 확장할 수 있게 됩니다.

지원되는 기술

AI 워킹 그룹의 일환으로 우리는 다양한 기술을 조사하고 평가해 왔습니다. 아직 승인되어 GitLab 응용프로그램 안에서 사용하기 위한 도구 목록은 다음과 같습니다.

다른 모델이나 기술을 활용하는 것은 가능하지만 사용 전에 검토 과정을 거쳐야 할 것입니다. AI 프로젝트 제안 템플릿을 사용하여 아이디어의 일환으로 그것을 제안하고 지원하는 새로운 도구를 포함시키세요.

모델

다음 모델들이 사용을 위해 승인되었습니다:

벡터 저장소

다음 벡터 저장소들이 사용을 위해 승인되었습니다:

  • pgvector는 벡터 임베딩을 저장하고 ANN(근사 최근접 이웃)을 계산하는 기능을 추가하는 포스트그리스 확장 프로그램입니다.

인덱싱 업데이트

우리는 현재 완벽한 회수를 제공하는 순차 검색을 사용하고 있습니다. 해당 설정이 정확한 결과를 여전히 생성할 수 있다면 인덱스를 추가하는 것을 고려하고 있습니다. 이 문서에 언급된 것처럼 pgvector 인덱싱에 대한 업데이트된 설정으로 향후 배포하기 전에 이 데이터 세트 크기에 대한 최적의 구성을 확인하기 위해 추가 테스트가 필요할 수 있습니다.

인덱스를 업데이트하는 데 있어서 검색 속도를 개선할 가능성이 높은데, 이는 높은 정확도를 유지하면서 수천 개의 항목을 테이블에 포함할 때 유용합니다. 그러나 본 데이터 집합 크기에 대한 최적의 구성을 확인하기 위해 추가 테스트가 필요할 수 있습니다.

인덱스 기능을 개선하기 위해 ivfflat.probes 값을 10으로 설정하여 로컬에서 테스트되었습니다. 다음 SQL 명령어를 사용하여 이를 수행하겠습니다:

::Embedding::Vertex::GitlabDocumentation.connection.execute("SET ivfflat.probes = 10")

인덱싱을 위한 probeslists 값을 최적으로 설정하기 위해:

  • 1백만 행까지의 테이블에 대해 listsrows / 1000으로 설정하고, 더 큰 데이터 집합에 대해서는 sqrt(rows)으로 설정하세요.
  • 1백만 행까지의 테이블에 대해 probeslists / 10으로 시작하고, 더 큰 데이터 집합에 대해서는 sqrt(lists)으로 시작하세요.

적절한 probeslists 값을 위해: - 테이블이 천 개의 항목을 포함하는 경우 listsrows / 1000으로 사용하고, 더 큰 데이터 집합의 경우 sqrt(rows)를 사용하세요. - probes를 설정할 때는 테이블이 천 개의 항목을 포함하는 경우 lists / 10으로 시작하고, 더 큰 데이터 집합에 대해서는 sqrt(lists)으로 시작하세요.

코드 제안

코드 제안은 GitLab-Rails 저장소의 일부로 통합되고, 추상화 레이어를 사용하는 AI 기능과의 아키텍처를 통합할 것이며, 다른 AI 기능에 대한 셀프 매니지드 지원을 제공할 것입니다.

다음 표는 코드 제안이 오늘 제공하는 기능과 통합의 일환으로 어떻게 변화될지에 대해 설명합니다:

주제 세부 정보 오늘 이 기능이 발생하는 위치 앞으로 이 기능이 발생할 위치
요청 처리      
  IDE(Visual Studio Code, GitLab WebIDE, MS Visual Studio, IntelliJ, JetBrains, VIM, Emacs, Sublime)에서 요청을 수신하고, 커서 앞뒤의 코드를 포함하여 수신합니다. GitLab Rails GitLab Rails
  현재 사용자를 인증하고, 이 프로젝트에서 코드 제안을 사용할 권한이 있는지 확인합니다. GitLab Rails + AI Gateway GitLab Rails + AI Gateway
  TreeSitter를 통해 import를 포함한 컨텍스트를 추가하는 등 요청을 전처리합니다. AI Gateway 미정
  요청을 AI 프로바이더로 라우팅합니다. AI Gateway AI Gateway
  IDE로 응답을 반환합니다. GitLab Rails GitLab Rails
  타임스탬프, 응답 시간, 모델 등을 포함한 요청을 로그에 남깁니다. 양쪽 양쪽
텔레메트리      
  IDE에서 사용자의 수락 또는 거부 AI Gateway 양쪽
  매일 고유 사용자 수 GitLab Rails, AI 게이트웨이 미정
  에러율, 모델 사용량, 응답 시간, IDE 사용량 AI 게이트웨이 양쪽
  언어별 제안 수 AI 게이트웨이 양쪽
모니터링   양쪽 양쪽
모델 라우팅      
  현재 이 기능을 사용하지는 않지만, 코드 제안은 교통의 백분율을 기반으로 여러 모델로 라우팅을 지원할 수 있습니다. AI 게이트웨이 양쪽
내부 모델      
  현재 유지되지 않았으며, 자체 인스턴스에서 모델을 실행하고, Triton 내부에서 실행하며, 자체 모델로 요청을 라우팅할 수 있는 기능입니다. AI 게이트웨이 AI 게이트웨이

셀프 매니지드 지원

셀프 매니지드 사용자를 위한 코드 제안은 Cloud Connector MVC의 일환으로 소개되었습니다.

이 프로젝트의 기술적인 솔루션에 대한 자세한 정보는 Cloud Connector 아키텍처 문서에서 확인할 수 있습니다.

이 솔루션을 발전시켜 Cloud Connector 제품군 아래에 다른 AI 기능을 서비스하는 것이 목표입니다.

코드 제안 대기 시간

코드 제안 수락률은 대기 시간에 매우 민감합니다. AI 어시스턴트와 함께 코드를 작성하는 동안 사용자는 코드 블록을 수동으로 입력하기 전에 짧은 시간 동안 일시적으로 일시정지합니다. 사용자가 다음 키를 누르는 즉시 기존 제안이 무효화되고, 코드 제안 엔드포인트로 새 요청이 발행되어야 합니다. 결과적으로, 이 요청 또한 대기 시간에 매우 민감합니다.

최악의 경우에는 충분한 대기 시간으로 IDE가 요청 문자열을 발행하고, 사용자가 응답을 기다리지 않고 진행하게 될 수 있습니다. 이는 사용자에게 가치를 제공하지 않으면서도 여전히 서비스에 부하를 줍니다.

이 기능에 대한 대기 시간을 어떻게 반복할 계획인지에 대한 논의는 여기에서 확인할 수 있습니다.