GitLab Duo Self-Hosted를 위한 AI 기능 개발
GitLab v19.5요약
이 문서는 GitLab Duo Self-Hosted 용 AI 기능을 개발하는 절차를 설명합니다. 현재 GitLab 팀 구성원이 개발 목적으로 사용할 수 있는 모델 목록은 지원 모델 문서를 참고합니다. OpenAI 접근 권한을 얻으려면 먼저 액세스 요청을 생성하고, 승인된 뒤 @wortschi, @timzallmann, @mnohr 중 한 명에게 배정합니다.
이 문서는 GitLab Duo Self-Hosted 용 AI 기능을 개발하는 절차를 설명합니다. GitLab Duo Self-Hosted 용 AI 기능 개발은 GitLab Duo SaaS 용 AI 기능 개발과 상당히 비슷하지만 몇 가지 차이가 있습니다.
호스팅 모델 접근 권한 획득#
현재 GitLab 팀 구성원이 개발 목적으로 사용할 수 있는 모델 목록은 지원 모델 문서를 참고합니다.
OpenAI 접근 권한 획득#
OpenAI 접근 권한을 얻으려면 먼저 액세스 요청을 생성하고, 승인된 뒤 @wortschi, @timzallmann, @mnohr 중 한 명에게 배정합니다.
접근 권한이 부여되면 https://platform.openai.com/api-keys로 이동해 API 키를 생성합니다.
Fireworks AI 모델 접근 권한 획득#
Fireworks AI 접근 권한을 얻으려면 먼저 Lumos App Store에서 액세스 요청을 생성합니다.
GitLab의 Fireworks AI 계정은 Code Creation Group이 관리합니다. 접근 권한이 부여되면 https://app.fireworks.ai/settings/users/api-keys로 이동해 API 키를 생성합니다.
AWS Bedrock 모델 접근 권한 획득#
AWS Bedrock의 모델에 접근하려면 aws_services_account_iam_update 템플릿으로 액세스 요청을 생성합니다. 어떤 정보를 입력해야 할지 확실하지 않다면 액세스 요청 예시를 참고합니다.
액세스 요청이 승인되면 https://gitlabsandbox.cloud/login에서 AWS 자격 증명을 받을 수 있습니다.
gitlabsandbox.cloud에 로그인한 뒤 다음 단계를 수행합니다.
cstm-mdls-dev-bedrockAWS 계정을 선택합니다.- 페이지 오른쪽 위에서 View IAM Credentials를 선택합니다.
- 열리는 모달에서
AWS Console URL,Username,Password를 확인할 수 있습니다. 이 AWS Console URL로 이동해 확인한 사용자 이름과 비밀번호를 입력하고 로그인합니다.
AWS Bedrock에서는 사용하려는 모델에 대한 접근 권한을 별도로 얻어야 합니다. 다음과 같이 진행합니다.
- AWS Model Catalog Console로 이동합니다.
- 위치가
us-east-1로 설정되어 있는지 확인합니다. - 모델 목록에서 사용하려는 모델을 찾아 Available to request 링크 위에 마우스를 올린 다음 Request access를 선택합니다.
- 양식을 작성해 해당 모델에 대한 접근을 요청합니다.
접근 권한은 보통 몇 분 안에 부여됩니다.
AWS에서 Access Key 및 Secret Key 생성#
AWS Bedrock 모델을 사용하려면 액세스 키를 생성해야 합니다. 액세스 키를 생성하려면 다음과 같이 합니다.
- IAM Console로 이동합니다.
- Users 탭을 선택합니다.
- 사용자 이름을 선택합니다.
- Security credentials 탭을 선택합니다.
- Create access key를 선택합니다.
- Download .csv를 선택해 액세스 키를 내려받습니다.
액세스 키는 안전한 곳에 보관합니다. 모델을 구성할 때 필요합니다.
AWS에서 액세스 키를 생성하는 다른 방법으로 AWS에서 액세스 키와 시크릿 키를 만드는 영상을 따라 할 수도 있습니다.
GDK 환경 설정#
GitLab Duo Self-Hosted는 GDK 환경이 GitLab Self-Managed 모드로 실행되어야 합니다. Multi-Tenant/SaaS 모드에서는 동작하지 않습니다.
GitLab Duo Self-Hosted를 실행하도록 GDK 환경을 설정하려면 이 AI 개발 문서의 GitLab Self-Managed / Dedicated mode 항목에 있는 단계를 따릅니다.
환경 변수 설정#
호스팅 모델을 사용하려면 AI Gateway에 다음 환경 변수를 설정합니다.
-
GDK_ROOT/gitlab-ai-gateway/.env파일에 다음 변수를 설정합니다.AWS_ACCESS_KEY_ID=your-access-key-id AWS_SECRET_ACCESS_KEY=your-secret-access-key AWS_REGION=us-east-1 FIREWORKS_AI_API_KEY=your-fireworks-api-key AIGW_CUSTOM_MODELS__ENABLED=true DUO_WORKFLOW_AUTH__OIDC_CUSTOMER_PORTAL_URL=https://customers.staging.gitlab.com # useful for debugging AIGW_LOGGING__ENABLE_REQUEST_LOGGING=true AIGW_LOGGING__ENABLE_LITELLM_LOGGING=true -
GDK_ROOT/env.runit파일에 다음 변수를 설정합니다.export GITLAB_SIMULATE_SAAS=0 -
변경 사항을 적용하려면
gdk restart로 GDK를 다시 시작합니다.
rake 작업을 통한 자체 호스팅 모델 시딩#
bundle exec rake gitlab:duo:seed_self_hosted_models를 실행합니다.- 확인하려면
bundle exec rake gitlab:duo:list_self_hosted_models를 실행해 생성된 모델 목록을 출력합니다
GitLab Duo Self-Hosted 모델의 구성 및 사용#
자체 호스팅 모델 활성화#
GitLab 인스턴스에서 자체 호스팅 모델을 사용하도록 활성화하려면 다음 단계를 따릅니다.
- GDK 인스턴스에서
/admin/gitlab_duo/configuration으로 이동합니다. - Use beta models and features in GitLab Duo Self-Hosted 체크박스를 선택합니다.
- Local AI Gateway URL에는 AI Gateway 인스턴스의 URL을 입력합니다. 대부분의 경우
http://localhost:5052입니다. - 변경 사항을 저장합니다.
Admin UI를 통한 자체 호스팅 모델 추가#
- Admin page -> GitLab Duo로 이동합니다
- Configure models for GitLab Duo 버튼을 선택합니다
- Model Selection 페이지에서 Add self-hosted model 버튼을 선택합니다
- 모델 세부 정보를 입력합니다
- Add self-hosted model을 선택해 변경 사항을 저장합니다
AI 기능을 구동하는 자체 호스팅 모델 사용#
생성한 자체 호스팅 모델로 AI 네이티브 기능을 구동하려면 다음과 같이 합니다.
- GDK 인스턴스에서
/admin/gitlab_duo/model_selection으로 이동합니다. - 자체 호스팅 모델과 함께 사용할 각 AI 기능(예: Code Generation, Code Completion, General Chat, Explain Code 등)에 대해, 해당 드롭다운 목록에서 새로 생성한 자체 호스팅 모델(예: Claude 3.5 Sonnet on Bedrock)을 선택합니다.
- 선택 사항. 특정 카테고리의 모든 기능에 구성을 복사하려면 옆에 있는 복사 아이콘을 선택합니다.
- 선택을 마치면 변경 사항은 대개 자동으로 저장됩니다.

이것으로 GitLab 인스턴스의 AI 네이티브 기능을 구동할 자체 호스팅 모델 구성이 끝났습니다. 예를 들어 Chat으로 기능을 테스트하려면 Chat을 열고 Hello를 입력합니다. 자체 호스팅 모델이 생성한 응답이 채팅에 표시됩니다.
GitLab Duo Self-Hosted 정리#
.com 구성으로 되돌리고 GitLab Duo Self-Hosted 관련 데이터를 제거하려면 bundle exec rake gitlab:duo:clean_up_duo_self_hosted를 사용합니다.
GitLab.com 또는 GitLab Self-Managed에서 사용 가능한 기능을 GitLab Duo Self-Hosted로 이동#
GitLab.com 또는 GitLab Self-Managed에서 사용할 수 있는 기능을 GitLab Duo Self-Hosted로 옮기려면 다음과 같이 합니다.
- 자체 호스팅 모델을 사용하도록 기능을 구성할 수 있게 만듭니다.
- 지원하려는 모델 제품군마다 해당 기능의 프롬프트를 추가합니다.
자체 호스팅 모델을 사용하도록 기능 구성 가능하게 만들기#
기능이 GitLab.com 또는 GitLab Self-Managed에서 제공된다면, 자체 호스팅 모델을 사용하도록 구성할 수 있어야 합니다. 자체 호스팅 모델을 사용하도록 기능을 구성 가능하게 만들려면 다음과 같이 합니다.
- 해당 기능의 이름을
ee/app/models/ai/feature_setting.rb에 안정 기능 또는 베타/실험 기능으로 추가합니다. - 해당 기능의 이름을 지원하는 모델 제품군 목록과 함께
ee/lib/gitlab/ai/feature_settings/feature_metadata.yml파일에 추가합니다. gitlab-cloud-connector리포지터리의config/services/self_hosted_models.yml에 unit primitive를 추가합니다. 이 머지 리퀘스트를 참고할 수 있습니다.- 위 변경 사항에 따른 스펙 변경도 함께 반영합니다.
참고할 머지 리퀘스트는 다음과 같습니다.
- Move Code Review Summary to Beta in GitLab Duo Self-Hosted
- Move Vulnerability Explanation to Beta in GitLab Duo Self-Hosted
기능에 프롬프트 추가#
해당 기능에서 지원하려는 모델 제품군마다 프롬프트를 추가해야 합니다. 프롬프트는 AI Gateway 리포지터리에 저장됩니다.
대부분의 경우 GitLab.com에서 사용하는 프롬프트를 GitLab Duo Self-Hosted에서도 그대로 사용합니다.
참고할 머지 리퀘스트는 다음과 같습니다.
이제 해당 기능을 GitLab Duo Self-Hosted에서 사용할 수 있습니다. 변경 사항을 적용하려면 GDK 인스턴스를 다시 시작한 뒤 기능을 테스트합니다.
기능 테스트#
AI 기능을 구현한 뒤에는 그 품질과 효과를 검증해야 합니다. 이 절에서는 중앙 평가 프레임워크(Centralized Evaluation Framework, CEF)로 기능을 테스트하는 방법을 설명합니다.
평가를 설계할 때는 해당 기능에 가장 적합한 지표(예: LLM 심사자가 3점 또는 4점을 준 응답의 비율)를 선택하고 수용 가능한 성능을 나타내는 임계값을 설정하는 일이 담당자의 몫입니다. 모든 평가는 표준화된 신호등 점수 체계를 사용합니다.
- 초록 / 완전 호환: 선택한 지표에서 결과가 정의한 임계값을 충족하거나 넘어섭니다.
- 노랑 / 대체로 호환: 결과가 임계값에 근접하지만 완전히 충족하지는 못합니다.
- 빨강 / 비호환: 결과가 임계값에 크게 못 미칩니다.
신호등 체계는 이 임계값에 따라 결과를 자동으로 해석하므로, 모든 AI 기능에 걸쳐 일관된 분류가 이루어집니다.
예를 들어 GitLab 문서 질문에 대한 GitLab Duo Chat의 성능을 평가할 때는 LLM 기반 점수 체계를 사용합니다. 다른 언어 모델이 각 응답을 1~4점으로 평가하고, 3점 또는 4점을 받은 응답의 비율을 계산합니다. 이 비율은 서로 다른 LLM의 효과를 비교하는 벤치마크 지표가 되며, 신호등 체계는 정의된 임계값을 기준으로 각 모델의 호환 수준을 나타냅니다.
기능을 테스트하는 일반적인 절차는 다음과 같습니다.
- 데이터셋 생성: 해당 기능이 처리해야 할 시나리오를 대표하는 데이터셋을 준비합니다.
- 평가 지표와 임계값 정의: 기능의 목표를 반영하는 지표를 최소 하나 선택하고 신호등 체계에 사용할 임계값을 설정합니다.
- 평가 자동화: evaluation-runner로 평가 파이프라인 실행을 자동화합니다. 설정 방법은 evaluation-runner의 README를 참고합니다.
- 검토와 반복: 평가를 실행한 뒤 결과를 검토합니다. 결과가 만족스럽지 않다면 프롬프트, 데이터셋, 모델 구성을 조정해 평가를 다시 실행합니다.