AI 아키텍처
이 문서는 GitLab Duo AI 기능에서 공유하는 아키텍처를 설명합니다. 이 아키텍처의 역사적 동기와 목표에 대해서는 AI Gateway Architecture blueprint를 참조하십시오.
소개
다음 다이어그램은 GitLab의 다른 컴포넌트들이 상호 작용하는 간소화된 형태를 보여줍니다.
- AI 추상화 레이어 - 모든 GitLab 인스턴스(Self-Managed, GitLab.com, ..)에는 AI 추상화 레이어가 포함되어 있으며, 이를 통해 몰리스에서 새로운 AI 기능을 구현하는 프레임워크를 제공합니다. 이 레이어는 요청에 맥락 정보를 추가하고 요청 전/후 처리를 수행합니다.
시스템들
- GitLab 인스턴스 - 모든 유형의 GitLab 인스턴스를 구동하는 GitLab 몰리스
- CustomersDot - 고객이 추가 좌석을 구입하고 업그레이드하며, 결제 기록을 추가/편집할 수 있게 하는 시스템입니다. 또한 Self-Managed 라이선스를 관리합니다.
- AI Gateway - 모델을 호출하기 위한 통합 인터페이스를 제공하는 시스템으로, Google Cloud Run에 배포되었습니다(Runway를 사용).
확장팩 - 언어 서버 (VS Code, VisualStudio 및 Neovim에서 코드 제안 기능을 제공) - VS Code - JetBrains - Visual Studio - Neovim
GitLab.com 및 Self-Managed/Dedicated이 AI Gateway에 액세스하는 방식의 차이
- GitLab.com
- GitLab.com 인스턴스는 개인 키로 서명된 JWT Auth 토큰을 자체 발급합니다.
- 다른 유형의 인스턴스
- Self-Managed와 Dedicated는 정기적으로 라이선스 및 AI 액세스 토큰을 CustomersDot와 동기화합니다.
- Self-Managed 및 Dedicated 인스턴스는 적절한 AI Gateway로 트래픽을 라우팅합니다.
SaaS 기반 AI 추상화 레이어
GitLab은 현재 클라우드 호스팅된 AI 아키텍처를 운영하고 있습니다. 우리는 AI 게이트웨이를 사용하여 라이선스를 받은 Self Managed 인스턴스가 액세스할 수 있도록 할 것입니다. 자세한 내용은 blueprint를 참조하십시오.
이에는 주된 이유가 두 가지 있습니다. 최고의 AI 모델은 종종 이러한 목적으로 설계된 전문 하드웨어에 의존하므로 클라우드 기반입니다. 그리고 적절한 성능으로 대규모의 AI를 수행할 수 있는 Self-Managed 인프라를 운영하는 것은 상당한 작업이기 때문입니다. 우리는 현재 AI에 관심 있는 Self-Managed 고객들을 적극적으로 추적하고 있습니다.
AI Gateway
AI Gateway(이전의 model gateway)는 GitLab의 모든 사용자가 AI 기능에 액세스할 수 있는 독립형 서비스입니다. Self-Managed, Dedicated 또는 GitLab.com을 사용하더라도 SaaS 기반 AI 추상화 레이어는 직접 클라우드 기반 제공업체에 액세스하는 대신 이 게이트웨이에 연결하게 될 것입니다.
GitLab-rails에서 AI-gateway로의 호출은 추상화 레이어를 사용하여 이루어질 수 있습니다. 기본적으로 이러한 작업들은 Puma에서 오래 실행되는 요청을 방지하기 위해 Sidekiq 작업을 통해 비동기적으로 수행되어야 합니다. 추가된 Sidekiq에 의한 지연으로 인해 레이턴시가 중요하지 않은 작업에 사용되어야 합니다.
작성 시점에서 추상화 레이어는 아직 AI 제공자들을 직접 호출합니다. Epic 11484에서 이를 변경하기로 제안되었습니다.
어떤 작업이 레이턴시에 민감할 경우 AI-gateway를 직접 호출하기로 결정할 수 있습니다. 이렇게 하면 Sidekiq에 의해 추가되는 레이턴시를 피할 수 있습니다. 우리는 이미 이를 code_suggestions
에 대해 수행하고 있습니다, 이는 /api/v4/code_suggestions
에 중첩된 API 엔드포인트에서 처리됩니다. 새 엔드포인트를 추가하는 경우에는 반드시 /api/v4/ai_assisted
네임스페이스 내에 중첩해야 합니다. 이를 수행함으로써 GitLab.com에서의 요청을 GitLab.com을 위한 ai-assisted
플리트로 자동으로 라우팅하여, 정규 API에서의 작업 부하와 격리시켜 필요시 쉽게 확장할 수 있도록 만들 수 있습니다.
지원되는 기술들
AI 워킹 그룹의 일환으로 우리는 다양한 기술들을 조사하고 있으며, 그들을 검토하고 있습니다. 아래는 GitLab 애플리케이션 내에서 사용이 이미 승인된 도구들의 디렉터리입니다.
다른 모델 또는 기술을 활용하는 것이 가능하지만, 사용 전에 검토 프로세스를 거쳐야 합니다. 아이디어에 대한 일환으로 AI 프로젝트 제안 템플릿을 사용하고 그에 필요한 새로운 도구를 포함시켜야 합니다.
모델들
다음 모델들이 사용이 승인되었습니다:
- Google의 Vertex AI 및 model garden
- Anthropic models
- 제안된 리뷰어
벡터 리포지터리
다음 벡터 리포지터리가 사용이 승인되었습니다:
-
pgvector
는 벡터 임베딩을 저장하고 ANN(근사 최근 이웃)을 계산하는 PostgreSQL 확장 프로그램입니다.
인덱싱 업데이트
우리는 현재 완벽한 검색 결과를 제공하는 순차 스캔을 사용하고 있으며, 이로 인해 완벽한 회수가 이루어지고 있습니다. pgvector
인덱싱 문서에서 언급된 바와 같이 여전히 정확한 결과를 보장할 수 있다면 인덱스를 추가하는 것을 고려하고 있습니다.
이 테이블에는 수천 개의 항목이 있으므로, 이러한 업데이트된 설정으로의 인덱싱은 검색 속도를 향상시킬 가능성이 높을 것이지만, 운영 환경으로의 배포 전에 최적의 설정을 검증하기 위해 추가적인 테스트가 필요할 수도 있습니다.
인덱스 함수가 업데이트되어 검색 품질이 향상되었습니다. 이는 다음과 같은 SQL 명령을 사용하여 로컬에서 테스트 되었습니다.
ruby
::Embedding::Vertex::GitlabDocumentation.connection.execute("SET ivfflat.probes = 10")
인덱싱을 위한 probes
값을 설정하는 것은 결과를 개선시킵니다(문서 참조).
최적의 probes
및 lists
값을 위해:
- 100만 개의 행을 가진 테이블에
lists
는rows / 1000
으로, 큰 데이터셋의 경우에는sqrt(rows)
로 설정합니다. - 100만 개의 행까지의 테이블에
probes
는lists / 10
로, 더 큰 데이터셋의 경우에는sqrt(lists)
로 시작합니다.
안내문을 참조하세요.
최적의 probes
및 lists
값을 설정하는데 마지막 테스트가 필요할 수 있습니다.
코드 제안
코드 제안은 Self-Managed support를 제공하며, 추상화 계층을 사용하는 코드 제안과 AI 기능 간의 아키텍처를 통합하는 GitLab-Rails 리포지터리의 일부로 통합되고 있습니다.
다음 표는 코드 제안이 오늘날 제공하는 기능 및 그러한 변경이 통합의 일부로 보일 것입니다.
주제 | 상세정보 | 현재 이곳에서 발생하는 위치 | 앞으로 진행될 위치 |
---|---|---|---|
요청 처리 | |||
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 Gateway | 미결정 | |
오류율, 모델 사용, 응답 시간, IDE 사용 | AI Gateway | 둘 다 | |
언어별 제안 수 | AI Gateway | 둘 다 | |
모니터링 | 둘 다 | 둘 다 | |
모델 라우팅 | |||
현재는 이 기능을 사용하고 있지는 않지만 코드 제안은 트래픽의 백분율을 기반으로 여러 모델로 라우팅하는 것을 지원함 | AI Gateway | 둘 다 | |
내부 모델 | |||
현재 유지되지 않으며, 우리 자체 인스턴스에서 모델 실행 및 Triton 내에서 실행하고 우리 모델에 대한 요청을 라우팅하는 기능 | AI Gateway | AI Gateway |
Self-Managed support
Self-Managed형 사용자를 위한 코드 제안은 Cloud Connector MVC의 일환으로 소개되었습니다.
이 프로젝트의 기술적 솔루션에 대한 자세한 내용은 Cloud Connector architecture documentation을 참조하세요.
이 솔루션을 발전시켜 Cloud Connector 제품군에 속한 다른 AI 기능들을 지원할 계획입니다.
코드 제안 지연
코드 제안의 수락률은 대기 시간에 매우 민감합니다. AI 어시스턴트로 코드를 작성하는 동안 사용자는 코드 블록을 매뉴얼으로 입력하기 전에 잠시 멈출 것입니다. 사용자가 후속 키를 누르자마자 기존 제안은 무효화되며 새 요청이 코드 제안 엔드포인트에 전달되어야 합니다. 결과적으로 해당 요청 또한 대기 시간에 매우 민감합니다.
충분한 대기 시간이 있는 최악의 경우에는 IDE가 사용자가 응답을 기다리지 않고 계속 전진하는데, 이로 인해 무시된 요청 문자열이 발생할 수 있습니다. 이는 사용자에게 가치를 제공하지 않으면서도 서비스에 부하를 발생시킵니다.
이러한 기능에 대한 대기 시간을 어떻게 발전시킬 계획인지에 대한 토론은 여기에서 확인하세요.
아키텍처에 대한 미래 변경 사항
- AI Gateway를 여러 지역에 배포할 계획입니다. (ed epic Multi-region support for AI Gateway 참조).
- 텔레메트리를 중앙 집중화하고 싶습니다. 그러나 현재 AI(또는 Cloud Connector) 텔레메트리를 중앙 집중화하는 것은 어려운 문제입니다.