AI 아키텍처
GitLab v19.4요약
이 문서는 GitLab Duo AI 기능이 공유하는 아키텍처를 설명합니다. 다음 다이어그램은 GitLab의 여러 구성 요소가 상호작용하는 방식을 단순화해 보여 줍니다. package Clients { [IDEs, Code Editors, Language Server] as IDE [GitLab Web Frontend] as GLWEB }
이 문서는 GitLab Duo AI 기능이 공유하는 아키텍처를 설명합니다. 이 아키텍처의 배경과 목표는 AI Gateway 아키텍처 설계 문서를 참고합니다.
개요#
다음 다이어그램은 GitLab의 여러 구성 요소가 상호작용하는 방식을 단순화해 보여 줍니다.
소스 코드 보기
@startuml
!theme cloudscape-design
skinparam componentStyle rectangle
package Clients {
[IDEs, Code Editors, Language Server] as IDE
[GitLab Web Frontend] as GLWEB
}
[GitLab.com] as GLCOM
[Self-Managed/Dedicated] as SMI
[CustomersDot API] as CD
[AI Gateway] as AIGW
package Models {
[3rd party models (Anthropic,VertexAI)] as THIRD
[GitLab Native Models] as GLNM
}
Clients -down-> GLCOM : REST/Websockets
Clients -down-> SMI : REST/Websockets
Clients -down-> AIGW : code completion direct connection
SMI -right-> CD : License + JWT Sync
GLCOM -down-> AIGW : Prompts + Telemetry + JWT (REST)
SMI -down-> AIGW : Prompts + Telemetry + JWT (REST)
AIGW -up-> GLCOM : JWKS public key sync
AIGW -up-> CD : JWKS public key sync
AIGW -down-> Models : prompts
@enduml
- AI 추상화 계층 - 모든 GitLab 인스턴스(Self-Managed, GitLab.com 등)에는 모놀리스에서 새 AI 기능을 구현하기 위한 프레임워크를 제공하는 AI 추상화 계층이 있습니다. 이 계층은 요청에 컨텍스트 정보를 추가하고 요청 전후 처리를 수행합니다.
시스템#
- GitLab 인스턴스 - 모든 유형의 GitLab 인스턴스를 구동하는 GitLab 모놀리스입니다
- CustomersDot - 고객이 시트를 추가해 구독을 구매하고 업그레이드하며 결제 정보를 추가하거나 수정할 수 있게 합니다. Self-Managed 라이선스도 관리합니다.
- AI Gateway - 모델 호출을 위한 통합 인터페이스를 제공하는 시스템입니다. Runway를 사용해 Google Cloud Run에 배포합니다.
- 확장 프로그램
- Language Server (VS Code, Windows 용 Visual Studio 2022, Neovim에서 Code Suggestions를 구동합니다)
- VS Code
- JetBrains
- Windows 용 Visual Studio 2022
- Neovim
GitLab.com과 Self-Managed/Dedicated의 AI Gateway 접근 방식 차이#
- GitLab.com
- GitLab.com 인스턴스는 개인 키로 서명한 JWT 인증 토큰을 스스로 발급합니다.
- 그 밖의 인스턴스 유형
- Self-Managed와 Dedicated는 라이선스와 AI 액세스 토큰을 CustomersDot과 주기적으로 동기화합니다.
- Self-Managed와 Dedicated 인스턴스는 트래픽을 적절한 AI Gateway로 라우팅합니다.
SaaS 기반 AI 추상화 계층#
GitLab은 클라우드 호스팅 AI 아키텍처를 운영합니다. 라이선스를 보유한 GitLab Self-Managed 인스턴스는 AI Gateway를 통해 이 아키텍처에 접근할 수 있습니다. 자세한 내용은 설계 문서를 참고합니다.
이렇게 하는 주된 이유는 두 가지입니다. 최고 수준의 AI 모델은 대개 전용 하드웨어에 의존하기 때문에 클라우드 기반이며, 대규모 AI를 적절한 성능으로 처리할 수 있는 자체 관리 인프라를 운영하는 일은 부담이 큽니다. GitLab은 AI에 관심 있는 Self-Managed 고객을 추적하고 있습니다.
AI Gateway#
AI Gateway(이전 명칭 model gateway)는 Self-Managed, Dedicated, GitLab.com 중 어떤 인스턴스를 사용하든 모든 GitLab 사용자에게 AI 기능을 제공하는 독립 서비스입니다. SaaS 기반 AI 추상화 계층은 클라우드 기반 공급자에 직접 접근하는 대신 이 게이트웨이에 연결하는 방식으로 전환됩니다.
GitLab Rails에서 AI Gateway를 호출할 때는 추상화 계층을 사용할 수 있습니다. 기본적으로 이러한 작업은 Puma에서 장시간 실행되는 요청을 막기 위해 Sidekiq job을 통해 비동기로 수행됩니다. Sidekiq으로 지연 시간이 늘어나므로 지연에 민감하지 않은 작업에 사용해야 합니다.
이 문서를 작성하는 시점에 추상화 계층은 여전히 AI 공급자를 직접 호출합니다. 에픽 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 Project Proposal 템플릿을 사용하고 이를 지원하는 데 필요한 새 도구를 함께 기재합니다.
모델#
다음 모델이 사용 승인을 받았습니다.
- Gemini Enterprise Agent Platform 및 Model Garden
- Anthropic 모델
- Suggested reviewer
Code Suggestions#
Code Suggestions는 GitLab Rails 리포지터리의 일부로 통합되고 있으며, 이를 통해 Code Suggestions와 추상화 계층을 사용하는 AI 기능의 아키텍처가 통일되고 다른 AI 기능에도 Self-Managed 지원이 제공됩니다.
다음 표는 Code Suggestions가 현재 제공하는 기능과 통합 과정에서 그 변화가 어떤 모습이 될지를 정리한 것입니다.
| 주제 | 세부 내용 | 현재 처리 위치 | 향후 처리 위치 |
|---|---|---|---|
| 요청 처리 | |||
| IDE(VS Code, GitLab Web IDE, Windows 용 MS Visual Studio 2022, IntelliJ, JetBrains, VIM, Emacs, Sublime)에서 커서 앞뒤의 코드를 포함한 요청을 받습니다 | GitLab Rails | GitLab Rails | |
| 현재 사용자를 인증하고 이 프로젝트에서 Code Suggestions를 사용할 권한이 있는지 확인합니다 | 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 | 양쪽 | |
| 모니터링 | 양쪽 | 양쪽 | |
| 모델 라우팅 | |||
| 현재 사용하지는 않지만, Code Suggestions는 트래픽 비율에 따라 여러 모델로 라우팅하는 기능을 지원합니다 | AI Gateway | 양쪽 | |
| 내부 모델 | |||
| 현재 유지 보수되지 않는 기능으로, 자체 인스턴스에서 Triton 안에 모델을 실행하고 요청을 자체 모델로 라우팅하는 기능입니다 | AI Gateway | AI Gateway |
Self-Managed 지원#
GitLab Self-Managed 용 Code Suggestions는 Cloud Connector MVC의 일부로 도입되었습니다.
이 프로젝트의 기술적 해법에 관한 자세한 내용은 Cloud Connector 아키텍처 문서를 참고합니다.
이 해법은 Cloud Connector 제품군 아래의 다른 AI 기능에도 적용되도록 발전시킬 계획입니다.
Code Suggestions 지연 시간#
Code Suggestions의 수락률은 지연 시간에 매우 민감합니다. AI 어시스턴트로 코드를 작성할 때 사용자는 아주 짧게만 멈춘 뒤 코드 블록을 직접 입력합니다. 사용자가 다음 키를 누르는 순간 기존 제안은 무효가 되고 Code Suggestions 엔드포인트로 새 요청을 보내야 합니다. 그 요청 역시 지연 시간에 매우 민감합니다.
지연이 충분히 큰 최악의 경우, IDE가 연속으로 요청을 보내고 사용자는 응답을 기다리지 않고 작업을 이어가면서 그 요청들이 모두 무시될 수 있습니다. 이는 사용자에게 아무런 가치를 주지 못하면서 서비스에 부하만 더합니다.
이 기능의 지연 시간을 어떻게 개선해 나갈지에 관한 논의는 이슈 418955를 참고합니다.
아키텍처의 향후 변경 사항#
- 지연 시간을 개선하기 위해 AI Gateway를 여러 리전에 배포할 계획입니다(에픽 Multi-region support for AI Gateway 참고).
- 텔레메트리를 중앙화하려고 하지만, AI(또는 Cloud Connector) 텔레메트리의 중앙화는 현재로서는 어렵고 해결되지 않은 과제입니다.