InfoGrab DocsInfoGrab Docs

자체 호스팅 모델 문제 해결

요약

문제 해결을 시작하기 전에 다음을 준비해야 합니다. GitLab Duo 문제 해결에 대한 자세한 내용은 다음을 참고합니다. 관리자가 자체 호스팅 모델 구성을 검증할 수 있도록 두 가지 디버깅 스크립트를 제공합니다. GitLab과 AI Gateway 사이의 연결을 디버그합니다.

히스토리

문제 해결을 시작하기 전에 다음을 준비해야 합니다.

  • gitlab-rails 콘솔에 접근할 수 있어야 합니다.
  • AI Gateway Docker 이미지에서 셸을 엽니다.
  • 다음 항목이 호스팅된 엔드포인트를 알고 있어야 합니다.
    • AI Gateway가 호스팅된 엔드포인트
    • 모델이 호스팅된 엔드포인트
  • GitLab에서 AI Gateway로 오가는 요청과 응답이 llm.log에 기록되도록 로깅을 활성화합니다.

GitLab Duo 문제 해결에 대한 자세한 내용은 다음을 참고합니다.

디버깅 스크립트 사용#

관리자가 자체 호스팅 모델 구성을 검증할 수 있도록 두 가지 디버깅 스크립트를 제공합니다.

  1. GitLab과 AI Gateway 사이의 연결을 디버그합니다. GitLab 인스턴스에서 Rake 태스크를 실행합니다.

    gitlab-rake "gitlab:duo:verify_self_hosted_setup[<username>]"
    

    선택 사항: 할당된 시트가 있는 <username>을 포함합니다. username 파라미터를 포함하지 않으면 Rake 태스크는 root 사용자를 사용합니다.

  2. AI Gateway 설정을 디버그합니다. AI Gateway 컨테이너에서 다음을 수행합니다.

    • 다음을 설정하여 인증을 비활성화한 상태로 AI Gateway 컨테이너를 재시작합니다.

      -e AIGW_AUTH__BYPASS_EXTERNAL=true
      

      문제 해결 명령이 System Exchange test를 실행하려면 이 설정이 필요합니다. 문제 해결을 마친 뒤에는 이 설정을 제거해야 합니다.

    • AI Gateway 컨테이너에서 다음을 실행합니다.

      docker exec -it <ai-gateway-container> sh
      poetry run troubleshoot [options]
      

      troubleshoot 명령은 다음 옵션을 지원합니다.

      Option Default Example Description
      --endpoint localhost:5052 --endpoint=localhost:5052 AI Gateway 엔드포인트
      --duo-workflow-endpoint localhost:50052 --duo-workflow-endpoint=localhost:50052 GitLab Duo Workflow Service(GitLab Duo Agent Platform) gRPC 엔드포인트
      --model-family - --model-family=mistral 테스트할 모델 패밀리. 사용할 수 있는 값은 mistral, mixtral, gpt, llama3입니다.
      --model-endpoint http://localhost:4000 --model-endpoint=http://localhost:4000/v1 모델 엔드포인트. vLLM에서 호스팅되는 모델은 /v1 접미사를 추가합니다.
      --model-identifier - --model-identifier=custom_openai/Mixtral-8x7B-Instruct-v0.1 모델 식별자.
      --api-key - --api-key=your-api-key 모델 API 키.

      예시:

      Amazon Bedrock Mantle에서 실행되는 gpt 모델의 경우:

      poetry run troubleshoot \
        --model-family=gpt \
        --model-identifier=bedrock_mantle/openai.gpt-oss-120b \
        --model-endpoint=https://bedrock-mantle.<region>.api.aws/v1 \
        --api-key=your-api-key
      

      vLLM에서 실행되는 mixtral 모델의 경우:

      poetry run troubleshoot \
        --model-family=mixtral \
        --model-identifier=custom_openai/Mixtral-8x7B-Instruct-v0.1 \
        --api-key=your-api-key \
        --model-endpoint=http://<your-model-endpoint>/v1
      

      모델 액세스 확인은 사용자가 제공한 모델 정보와 함께 AI Gateway /v4/code/suggestions 엔드포인트로 코드 생성 요청을 보냅니다.

문제 해결을 마친 뒤에는 AIGW_AUTH__BYPASS_EXTERNAL=true 없이 AI Gateway 컨테이너를 중지하고 다시 시작합니다.

Warning

프로덕션에서는 인증을 우회해서는 안 됩니다.

명령의 출력을 확인하고 그에 맞게 수정합니다.

두 명령이 모두 성공했지만 GitLab Duo Code Suggestions가 여전히 동작하지 않으면, 이슈 트래커에 이슈를 등록합니다.

GitLab Duo 상태 확인이 동작하지 않음#

GitLab Duo 상태 확인을 실행할 때 401 response from the AI Gateway 같은 오류가 발생할 수 있습니다.

이를 해결하려면 먼저 GitLab Duo 기능이 올바르게 동작하는지 확인합니다. 예를 들어 GitLab Duo Chat에 메시지를 보냅니다.

이 방법으로 해결되지 않으면 GitLab Duo 상태 확인의 알려진 문제 때문일 수 있습니다. 자세한 내용은 이슈 517097을 참고합니다.

GitLab이 모델에 요청할 수 있는지 확인#

GitLab Rails 콘솔에서 다음을 실행하여 GitLab이 자체 호스팅 모델에 연결할 수 있는지 확인합니다.

self_hosted_model = Ai::SelfHostedModel.find_by(name: "<your_model_name>")
user = User.find_by_id(1)
Gitlab::Llm::AiGateway::SelfHostedModels::ConnectionTester.new(user, self_hosted_model).execute

GitLab이 모델에 도달할 수 있으면 명령은 nil을 반환합니다. 그렇지 않으면 오류를 설명하는 문자열을 반환합니다.

그렇지 않은 경우 다음 중 하나를 의미할 수 있습니다.

사용자가 Code Suggestions를 요청할 수 있는지 확인#

GitLab Rails 콘솔에서 다음을 실행하여 사용자가 Code Suggestions를 요청할 수 있는지 확인합니다.

User.find_by_id("<user_id>").can?(:access_code_suggestions)

이 명령이 false를 반환하면 일부 구성이 빠져 있어 사용자가 Code Suggestions에 접근할 수 없다는 뜻입니다.

빠진 구성의 원인은 다음 중 하나일 수 있습니다.

GitLab 인스턴스가 자체 호스팅 모델을 사용하도록 구성되어 있는지 확인#

사전 요구 사항:

  • 관리자 접근 권한.

GitLab Duo가 올바르게 구성되었는지 확인하려면 다음을 수행합니다.

  1. 오른쪽 상단에서 Admin을 선택합니다.
  2. 왼쪽 사이드바에서 Self-hosted models를 선택합니다
  3. AI-native features를 확장합니다.
  4. Features에서 Code Suggestions와 Code generation 이 Self-hosted model로 설정되어 있는지 확인합니다.

AI Gateway URL이 올바르게 설정되어 있는지 확인#

AI Gateway URL이 올바른지 확인하려면 GitLab Rails 콘솔에서 다음을 실행합니다.

ApplicationSetting.current.ai_gateway_url == "<your-ai-gateway-instance-url>"

AI Gateway가 설정되지 않았다면 GitLab 인스턴스가 AI Gateway에 접근할 수 있도록 구성합니다.

GitLab Duo Agent Platform 서비스 URL 유효성 검사#

Agent Platform 서비스의 URL이 올바른지 확인하려면 GitLab Rails 콘솔에서 다음을 실행합니다.

ApplicationSetting.current.duo_agent_platform_service_url == "<your-duo-agent-platform-instance-url>"

Agent Platform 서비스의 URL은 TCP URL이며 http:// 또는 https:// 접두사를 붙일 수 없습니다.

Agent Platform의 URL이 설정되지 않았다면 GitLab 인스턴스가 해당 URL에 접근할 수 있도록 구성해야 합니다.

GitLab이 AI Gateway에 HTTP 요청을 할 수 있는지 확인#

GitLab Rails 콘솔에서 다음을 실행하여 GitLab이 AI Gateway에 HTTP 요청을 할 수 있는지 확인합니다.

HTTParty.get('<your-aigateway-endpoint>/monitoring/healthz', headers: { 'accept' => 'application/json' }).code

응답이 200이 아니면 다음 중 하나를 의미합니다.

  • GitLab이 AI Gateway 컨테이너에 도달할 수 있도록 네트워크가 올바르게 구성되지 않았습니다. 네트워크 관리자에게 연락해 설정을 확인합니다.
  • AI Gateway가 요청을 처리할 수 없습니다. 이 문제를 해결하려면 AI Gateway가 모델에 요청할 수 있는지 확인합니다.

AI Gateway가 모델에 요청할 수 있는지 확인#

자체 호스팅 모델 연결을 확인하려면 AI Gateway 컨테이너에서 AI Gateway API에 HTTP 요청을 보냅니다. 다음 값을 교체합니다.

  • <your_model_name>: 사용 중인 모델의 모델 패밀리로 교체합니다. 예를 들어 mistral 또는 codegemma입니다.
  • <your_model_identifier>: 모델 배포의 식별자로 교체합니다. 예를 들어 custom_openai/mistral:instruct입니다.
  • <your_model_endpoint>: 모델이 호스팅된 엔드포인트로 교체합니다.
docker exec -it <ai-gateway-container> sh
curl --request POST "http://localhost:5052/v1/prompts/model_configuration%2Fcheck" \
     --header 'accept: application/json' \
     --header 'Content-Type: application/json' \
     --data '{ "stream": false, "inputs": {}, "model_metadata": { "name": "<your_model_name>", "identifier": "<your_model_identifier>", "endpoint": "<your_model_endpoint>", "provider": "openai" } }'

요청이 실패하면 다음이 원인일 수 있습니다.

AI Gateway가 요청을 처리할 수 있는지 확인#

docker exec -it <ai-gateway-container> sh
curl '<your-aigateway-endpoint>/monitoring/healthz'

응답이 200이 아니면 AI Gateway가 올바르게 설치되지 않았다는 뜻입니다. 이를 해결하려면 AI Gateway 설치 방법 문서를 따릅니다.

AI Gateway 환경 변수가 올바르게 설정되어 있는지 확인#

AI Gateway 환경 변수가 올바르게 설정되어 있는지 확인하려면 AI Gateway 컨테이너의 콘솔에서 다음을 실행합니다.

docker exec -it <ai-gateway-container> sh
echo $AIGW_CUSTOM_MODELS__ENABLED # must be true

환경 변수가 올바르게 설정되지 않았다면 컨테이너를 생성합니다.

AI Gateway에서 모델에 도달할 수 있는지 확인#

AI Gateway 컨테이너에서 셸을 생성하고 모델에 curl 요청을 보냅니다. AI Gateway가 그 요청을 보낼 수 없다면 다음이 원인일 수 있습니다.

  1. 모델 서버가 올바르게 동작하지 않습니다.
  2. 컨테이너 주변의 네트워크 설정이 모델이 호스팅된 곳으로 요청을 허용하도록 올바르게 구성되지 않았습니다.

이를 해결하려면 네트워크 관리자에게 연락합니다.

AI Gateway가 GitLab 인스턴스에 요청을 할 수 있는지 확인#

AIGW_GITLAB_URL에 정의된 GitLab 인스턴스는 요청 인증을 위해 AI Gateway 컨테이너에서 접근할 수 있어야 합니다. 인스턴스에 도달할 수 없으면(예를 들어 프록시 구성 오류 때문에) 요청이 다음과 같은 오류와 함께 실패할 수 있습니다.

  • jose.exceptions.JWTError: Signature verification failed
    
  • gitlab_cloud_connector.providers.CompositeProvider.CriticalAuthError: No keys founds in JWKS; are OIDC providers up?
    

이 경우 AIGW_GITLAB_URL과 $AIGW_GITLAB_API_URL이 컨테이너에 올바르게 설정되어 있고 접근할 수 있는지 확인합니다. 컨테이너에서 실행할 때 다음 명령이 성공해야 합니다.

poetry run troubleshoot
curl "$AIGW_GITLAB_API_URL/projects"

성공하지 않으면 네트워크 구성을 확인합니다.

이미지의 플랫폼이 호스트와 일치하지 않음#

AI Gateway 이미지를 사용할 때 The requested image's platform (linux/amd64) does not match the detected host 오류가 발생할 수 있습니다.

이 오류를 우회하려면 docker run 명령에 --platform linux/amd64를 추가합니다.

docker run --platform linux/amd64 -e AIGW_GITLAB_URL=<your-gitlab-endpoint> <image>

AI Gateway 컨테이너 내부에서 LLM 서버를 사용할 수 없음#

LLM 서버가 AI Gateway 컨테이너와 같은 인스턴스에 설치되어 있으면 로컬 호스트를 통해 접근할 수 없을 수 있습니다.

이를 해결하려면 다음을 수행합니다.

  1. AI Gateway 컨테이너에서 오는 로컬 요청을 허용하려면 docker run 명령에 --network host를 포함합니다.
  2. 포트 충돌을 해결하려면 -e AIGW_FASTAPI__METRICS_PORT=8083 플래그를 사용합니다.
docker run --network host -e AIGW_GITLAB_URL=<your-gitlab-endpoint> -e AIGW_FASTAPI__METRICS_PORT=8083 <image>

vLLM 404 오류#

vLLM을 사용하는 중에 404 오류가 발생하면 다음 단계에 따라 문제를 해결합니다.

  1. 다음 내용으로 chat_template.jinja라는 채팅 템플릿 파일을 생성합니다.

    
      
        {{- "[INST] " + message["content"] + "[/INST]" }}
      
        {{- message["content"] }}
      
        {{- bos_token }}{{- message["content"] }}
      
    
    
  2. vLLM 명령을 실행할 때 --served-model-name을 반드시 지정합니다. 예시는 다음과 같습니다.

    vllm serve "mistralai/Mistral-7B-Instruct-v0.3" --port <port> --max-model-len 17776 --served-model-name mistral --chat-template chat_template.jinja
    
  3. GitLab UI에서 vLLM 서버 URL을 확인하여 해당 URL에 /v1 접미사가 포함되어 있는지 확인합니다. 올바른 형식은 다음과 같습니다.

    http(s)://<your-host>:<your-port>/v1
    

Code Suggestions 접근 오류#

설정 후 Code Suggestions 접근에 문제가 있으면 다음 단계를 시도합니다.

  1. Rails 콘솔에서 라이선스 파라미터를 확인하고 검증합니다.

    sudo gitlab-rails console
    user = User.find(id) # Replace id with the user provisioned with GitLab Duo Enterprise seat
    Ability.allowed?(user, :access_code_suggestions) # Must return true
    
  2. 필요한 기능이 활성화되어 사용 가능한지 확인합니다.

    ::Ai::FeatureSetting.exists?(feature: [:code_generations, :code_completions], provider: :self_hosted) # Should be true
    

오류 A1000#

자체 호스팅 모델로 GitLab Duo 기능을 사용할 때 다음 오류가 발생할 수 있습니다.

I'm sorry, I couldn't respond in time. Please try again. Error code: A1000

이 문제는 모델에 대한 요청이 구성된 시간 초과 기간보다 오래 걸릴 때 발생합니다.

일반적인 원인은 다음과 같습니다.

  • 큰 컨텍스트 창 또는 복잡한 프롬프트
  • 모델 성능 제한
  • AI Gateway와 모델 엔드포인트 간의 네트워크 지연
  • 리전 간 추론 지연(AWS Bedrock 배포의 경우)

시간 초과 오류를 해결하려면 다음을 수행합니다.

  1. 더 높은 AI Gateway 시간 초과 값을 구성합니다. 시간 초과는 60초에서 600초(10분) 사이로 설정할 수 있습니다.
  2. GitLab Duo Chat의 경우 요청이 여전히 시간 초과되면 AI Gateway에서 Chat 모델 요청 시간 초과를 늘립니다.
  3. 시간 초과를 조정한 뒤 로그를 모니터링하여 오류가 해결되었는지 확인합니다.
  4. 더 높은 시간 초과 값으로도 시간 초과 오류가 계속되면 다음을 수행합니다.
    • 모델의 성능과 리소스 할당을 확인합니다.
    • AI Gateway와 모델 엔드포인트 간의 네트워크 연결을 확인합니다.
    • 성능이 더 좋은 모델 또는 배포 구성을 사용하는 방안을 검토합니다.

A1000으로 실패하는 대신 응답이 오류 없이 중간에 끊기면 응답이 오류 없이 잘림을 참고합니다.

응답이 오류 없이 잘림#

특히 대규모 모델이나 추론 모델의 긴 응답은 오류 메시지 없이 중간에 멈출 수 있습니다. 모델이 완료되기 전에 스트림이 끝나므로, 부분 응답이 완전한 것처럼 보일 수 있습니다.

이 문제는 구성 요소 사이의 프록시, 로드 밸런서, 방화벽이 모델이 응답을 마치기 전에 연결을 종료할 때 발생합니다. GitLab이 끊긴 스트림을 감지하면, 대기 중 시간이 초과된 경우에는 Error A1000을, 스트림 자체가 실패한 경우에는 Error A1003을 반환합니다.

각 홉의 시간 초과를 확인하고 오류가 표시되는지 살펴봅니다. 이 문제를 해결하려면 다음을 수행합니다.

  1. AI Gateway의 경우 GitLab이 게이트웨이를 충분히 오래 기다리도록 더 높은 시간 초과 값을 구성합니다.
  2. GitLab Duo Chat의 경우 AI Gateway가 모델을 충분히 오래 기다리도록 Chat 모델 요청 시간 초과를 늘립니다.
  3. AI Gateway 앞단의 리버스 프록시나 로드 밸런서를 확인합니다. NGINX 리버스 프록시를 사용한다면, 응답 청크 사이의 가장 긴 멈춤을 포괄하도록 proxy_read_timeout을 높이고 proxy_buffering off를 유지합니다.
  4. AI Gateway와 모델 서빙 플랫폼 사이의 프록시나 로드 밸런서에서도 비슷한 요청 시간 초과나 유휴 시간 초과가 있는지 확인합니다.
  5. GitLab Duo Agentic Chat의 경우 GitLab 앞단의 리버스 프록시에서 길게 스트리밍되는 답변을 끊을 수 있는 WebSocket 유휴 또는 읽기 시간 초과를 확인합니다. 자세한 내용은 Agentic Chat 응답이 UI에 표시되지 않음을 참고합니다.

GitLab 설정 확인#

GitLab Self-Managed 설정을 검증하려면 다음 명령을 실행합니다.

gitlab-rake gitlab:duo:verify_self_hosted_setup

AI Gateway 서버에서 로그가 생성되지 않음#

AI Gateway 서버에서 로그가 생성되지 않으면 다음 단계에 따라 문제를 해결합니다.

  1. AI 로그가 활성화되어 있는지 확인합니다.

  2. 다음 명령을 실행하여 GitLab Rails 로그에서 오류를 확인합니다.

    sudo gitlab-ctl tail
    sudo gitlab-ctl tail sidekiq
    
  3. 로그에서 "Error" 또는 "Exception" 같은 키워드를 찾아 근본 문제를 파악합니다.

AI Gateway 컨테이너에서 SSL 인증서 오류 및 키 역직렬화 문제#

AI Gateway 컨테이너 내부에서 GitLab Duo Chat을 시작하려고 할 때 SSL 인증서 오류와 키 역직렬화 문제가 발생할 수 있습니다.

시스템이 PEM 파일을 로드하는 데 문제가 생겨 다음과 같은 오류가 발생할 수 있습니다.

JWKError: Could not deserialize key data. The data may be in an incorrect format, the provided password may be incorrect, or it may be encrypted with an unsupported algorithm.

SSL 인증서 오류를 해결하려면 다음을 수행합니다.

  • 다음 환경 변수를 사용하여 Docker 컨테이너에 적절한 인증서 번들 경로를 설정합니다.
    • SSL_CERT_FILE=/path/to/ca-bundle.pem
    • REQUESTS_CA_BUNDLE=/path/to/ca-bundle.pem

오류: meta 모델 ID 호출이 지원되지 않음#

모델 식별자의 형식이 올바르지 않으면 AIGW 로그에 다음 오류가 표시됩니다.

Invocation of model ID meta.llama3-3-70b-instruct-v1:0 with on-demand throughput isn\u2019t supported. Retry your request with the ID or ARN of an inference profile that contains this model

model identifier가 bedrock/<region>.<model-id> 형식인지 확인합니다. 각 항목은 다음과 같습니다.

  • <region>은 AWS 리전입니다(예: us)
  • <model-id>는 전체 모델 식별자입니다.

예를 들어 bedrock/us.meta.llama3-3-70b-instruct-v1:0입니다. 올바른 형식을 사용하도록 모델 구성을 업데이트합니다.

Azure OpenAI 배포가 Chat Completions API 요청을 거부함#

일부 Azure OpenAI 배포는 Responses API를 통해서만 사용할 수 있습니다. 모델 식별자가 azure/<deployment name> 형식이면 AI Gateway가 Chat Completions API로 요청을 보냅니다. 이러한 배포는 해당 요청을 거부합니다.

이 문제를 해결하려면 모델 식별자를 azure/responses/<deployment name> 형식으로 변경합니다. 자세한 내용은 Responses API 사용을 참고합니다.

기능에 접근할 수 없거나 기능 버튼이 표시되지 않음#

기능이 동작하지 않거나 기능 버튼(예: /troubleshoot)이 표시되지 않으면 다음을 수행합니다.

  1. 해당 기능의 unit_primitive가 gitlab-cloud-connector gem 구성의 자체 호스팅 모델 unit primitive 목록에 있는지 확인합니다.

    이 파일에 해당 기능이 없다면 그것이 접근할 수 없는 이유일 수 있습니다.

  2. 선택 사항. 해당 기능이 목록에 없다면 GitLab 인스턴스에서 다음을 설정하여 이것이 문제의 원인인지 확인할 수 있습니다.

    CLOUD_CONNECTOR_SELF_SIGN_TOKENS=1
    

    그다음 GitLab을 재시작하고 해당 기능에 접근할 수 있게 되는지 확인합니다.

    [!warning] 프로덕션에서는 CLOUD_CONNECTOR_SELF_SIGN_TOKENS=1을 사용하지 않습니다. 문제 해결을 마친 뒤에는 이 플래그를 설정하지 않은 상태로 GitLab을 재시작합니다. 개발 환경은 숨은 플래그나 내부 전용 우회 방법 없이 프로덕션과 최대한 비슷해야 합니다.

  3. 이 문제를 해결하려면 다음을 수행합니다.

오류: 이 워크플로의 인증 토큰을 가져오는 중 오류가 발생했습니다#

이 오류는 GitLab이나 로컬 환경에서 agentic Chat을 사용하려고 할 때 발생할 수 있습니다.

IDE의 GitLab Language Server 로그에서 다음을 볼 수도 있습니다.

2026-01-09T20:17:43:419 [error]: [WorkflowRailsService] Failed to fetch the workflow token
    Error: Fetching direct_access from https://gitlab.example.com/api/v4/ai/duo_workflows/direct_access failed.
{"message":"400 Bad request - 14:failed to connect to all addresses; last error: UNKNOWN: ipv4:172.x.x.x:50052: Ssl handshake failed (TSI_PROTOCOL_FAILURE): SSL_ERROR_SSL: error:100000f7:SSL routines:OPENSSL_internal:WRONG_VERSION_NUMBER: Invalid certificate verification context. debug_error_string:{UNKNOWN:Error received from peer  {grpc_status:14, grpc_message:\"failed to connect to all addresses; last error: UNKNOWN: ipv4:172.x.x.x:50052: Ssl handshake failed (TSI_PROTOCOL_FAILURE): SSL_ERROR_SSL: error:100000f7:SSL routines:OPENSSL_internal:WRONG_VERSION_NUMBER: Invalid certificate verification context\"}}"}
2026-01-09T20:17:43:433 [error]: Max retries exceeded or non-retryable error: An error occurred while fetching an authentication token for this workflow.
2026-01-09T20:17:43:435 [error]: Workflow failed with status code "50": An error occurred while fetching an authentication token for this workflow.

이는 인증서 문제 때문에 language server가 JWT 토큰을 생성하기 위해 direct_access 엔드포인트와 통신할 수 없었다는 뜻입니다.

자체 호스팅 모델을 Agent Platform에 연결할 때 TLS를 사용하지 않는다면, 이 문제를 해결하기 위해 GitLab Duo Agent Platform 서비스에 대한 TLS 연결을 해제합니다.

Agentic Chat 응답이 UI에 표시되지 않음#

Chat 응답에는 브라우저와 GitLab 사이의 지속적인 WebSocket 연결이 필요합니다. 리버스 프록시가 WebSocket 업그레이드를 지원하지 않으면 응답은 정상적으로 생성되지만 GitLab UI의 채팅에는 나타나지 않습니다.

증상#

  • llm.log에 오류 없이 chunk_received, streaming_finished, final_answer_received가 표시됩니다.
  • AI Gateway 로그에 모델 응답이 성공한 것으로 표시됩니다.
  • GitLab Duo Chat UI는 요청을 처리하는 것처럼 보이지만 응답을 표시하지 않습니다.

이 문제를 해결하려면 리버스 프록시가 인바운드 연결 요구 사항을 충족하도록 구성되어 있는지 확인합니다.

자체 호스팅 모델 문제 해결

GitLab v19.5
Tier: Premium, Ultimate
Offering: GitLab Self-Managed, GitLab Dedicated for Government
원문 보기

요약

문제 해결을 시작하기 전에 다음을 준비해야 합니다. GitLab Duo 문제 해결에 대한 자세한 내용은 다음을 참고합니다. 관리자가 자체 호스팅 모델 구성을 검증할 수 있도록 두 가지 디버깅 스크립트를 제공합니다. GitLab과 AI Gateway 사이의 연결을 디버그합니다.

히스토리

문제 해결을 시작하기 전에 다음을 준비해야 합니다.

  • gitlab-rails 콘솔에 접근할 수 있어야 합니다.
  • AI Gateway Docker 이미지에서 셸을 엽니다.
  • 다음 항목이 호스팅된 엔드포인트를 알고 있어야 합니다.
    • AI Gateway가 호스팅된 엔드포인트
    • 모델이 호스팅된 엔드포인트
  • GitLab에서 AI Gateway로 오가는 요청과 응답이 llm.log에 기록되도록 로깅을 활성화합니다.

GitLab Duo 문제 해결에 대한 자세한 내용은 다음을 참고합니다.

디버깅 스크립트 사용#

관리자가 자체 호스팅 모델 구성을 검증할 수 있도록 두 가지 디버깅 스크립트를 제공합니다.

  1. GitLab과 AI Gateway 사이의 연결을 디버그합니다. GitLab 인스턴스에서 Rake 태스크를 실행합니다.

    gitlab-rake "gitlab:duo:verify_self_hosted_setup[<username>]"
    

    선택 사항: 할당된 시트가 있는 <username>을 포함합니다. username 파라미터를 포함하지 않으면 Rake 태스크는 root 사용자를 사용합니다.

  2. AI Gateway 설정을 디버그합니다. AI Gateway 컨테이너에서 다음을 수행합니다.

    • 다음을 설정하여 인증을 비활성화한 상태로 AI Gateway 컨테이너를 재시작합니다.

      -e AIGW_AUTH__BYPASS_EXTERNAL=true
      

      문제 해결 명령이 System Exchange test를 실행하려면 이 설정이 필요합니다. 문제 해결을 마친 뒤에는 이 설정을 제거해야 합니다.

    • AI Gateway 컨테이너에서 다음을 실행합니다.

      docker exec -it <ai-gateway-container> sh
      poetry run troubleshoot [options]
      

      troubleshoot 명령은 다음 옵션을 지원합니다.

      Option Default Example Description
      --endpoint localhost:5052 --endpoint=localhost:5052 AI Gateway 엔드포인트
      --duo-workflow-endpoint localhost:50052 --duo-workflow-endpoint=localhost:50052 GitLab Duo Workflow Service(GitLab Duo Agent Platform) gRPC 엔드포인트
      --model-family - --model-family=mistral 테스트할 모델 패밀리. 사용할 수 있는 값은 mistral, mixtral, gpt, llama3입니다.
      --model-endpoint http://localhost:4000 --model-endpoint=http://localhost:4000/v1 모델 엔드포인트. vLLM에서 호스팅되는 모델은 /v1 접미사를 추가합니다.
      --model-identifier - --model-identifier=custom_openai/Mixtral-8x7B-Instruct-v0.1 모델 식별자.
      --api-key - --api-key=your-api-key 모델 API 키.

      예시:

      Amazon Bedrock Mantle에서 실행되는 gpt 모델의 경우:

      poetry run troubleshoot \
        --model-family=gpt \
        --model-identifier=bedrock_mantle/openai.gpt-oss-120b \
        --model-endpoint=https://bedrock-mantle.<region>.api.aws/v1 \
        --api-key=your-api-key
      

      vLLM에서 실행되는 mixtral 모델의 경우:

      poetry run troubleshoot \
        --model-family=mixtral \
        --model-identifier=custom_openai/Mixtral-8x7B-Instruct-v0.1 \
        --api-key=your-api-key \
        --model-endpoint=http://<your-model-endpoint>/v1
      

      모델 액세스 확인은 사용자가 제공한 모델 정보와 함께 AI Gateway /v4/code/suggestions 엔드포인트로 코드 생성 요청을 보냅니다.

문제 해결을 마친 뒤에는 AIGW_AUTH__BYPASS_EXTERNAL=true 없이 AI Gateway 컨테이너를 중지하고 다시 시작합니다.

Warning

프로덕션에서는 인증을 우회해서는 안 됩니다.

명령의 출력을 확인하고 그에 맞게 수정합니다.

두 명령이 모두 성공했지만 GitLab Duo Code Suggestions가 여전히 동작하지 않으면, 이슈 트래커에 이슈를 등록합니다.

GitLab Duo 상태 확인이 동작하지 않음#

GitLab Duo 상태 확인을 실행할 때 401 response from the AI Gateway 같은 오류가 발생할 수 있습니다.

이를 해결하려면 먼저 GitLab Duo 기능이 올바르게 동작하는지 확인합니다. 예를 들어 GitLab Duo Chat에 메시지를 보냅니다.

이 방법으로 해결되지 않으면 GitLab Duo 상태 확인의 알려진 문제 때문일 수 있습니다. 자세한 내용은 이슈 517097을 참고합니다.

GitLab이 모델에 요청할 수 있는지 확인#

GitLab Rails 콘솔에서 다음을 실행하여 GitLab이 자체 호스팅 모델에 연결할 수 있는지 확인합니다.

self_hosted_model = Ai::SelfHostedModel.find_by(name: "<your_model_name>")
user = User.find_by_id(1)
Gitlab::Llm::AiGateway::SelfHostedModels::ConnectionTester.new(user, self_hosted_model).execute

GitLab이 모델에 도달할 수 있으면 명령은 nil을 반환합니다. 그렇지 않으면 오류를 설명하는 문자열을 반환합니다.

그렇지 않은 경우 다음 중 하나를 의미할 수 있습니다.

사용자가 Code Suggestions를 요청할 수 있는지 확인#

GitLab Rails 콘솔에서 다음을 실행하여 사용자가 Code Suggestions를 요청할 수 있는지 확인합니다.

User.find_by_id("<user_id>").can?(:access_code_suggestions)

이 명령이 false를 반환하면 일부 구성이 빠져 있어 사용자가 Code Suggestions에 접근할 수 없다는 뜻입니다.

빠진 구성의 원인은 다음 중 하나일 수 있습니다.

GitLab 인스턴스가 자체 호스팅 모델을 사용하도록 구성되어 있는지 확인#

사전 요구 사항:

  • 관리자 접근 권한.

GitLab Duo가 올바르게 구성되었는지 확인하려면 다음을 수행합니다.

  1. 오른쪽 상단에서 Admin을 선택합니다.
  2. 왼쪽 사이드바에서 Self-hosted models를 선택합니다
  3. AI-native features를 확장합니다.
  4. Features에서 Code Suggestions와 Code generation 이 Self-hosted model로 설정되어 있는지 확인합니다.

AI Gateway URL이 올바르게 설정되어 있는지 확인#

AI Gateway URL이 올바른지 확인하려면 GitLab Rails 콘솔에서 다음을 실행합니다.

ApplicationSetting.current.ai_gateway_url == "<your-ai-gateway-instance-url>"

AI Gateway가 설정되지 않았다면 GitLab 인스턴스가 AI Gateway에 접근할 수 있도록 구성합니다.

GitLab Duo Agent Platform 서비스 URL 유효성 검사#

Agent Platform 서비스의 URL이 올바른지 확인하려면 GitLab Rails 콘솔에서 다음을 실행합니다.

ApplicationSetting.current.duo_agent_platform_service_url == "<your-duo-agent-platform-instance-url>"

Agent Platform 서비스의 URL은 TCP URL이며 http:// 또는 https:// 접두사를 붙일 수 없습니다.

Agent Platform의 URL이 설정되지 않았다면 GitLab 인스턴스가 해당 URL에 접근할 수 있도록 구성해야 합니다.

GitLab이 AI Gateway에 HTTP 요청을 할 수 있는지 확인#

GitLab Rails 콘솔에서 다음을 실행하여 GitLab이 AI Gateway에 HTTP 요청을 할 수 있는지 확인합니다.

HTTParty.get('<your-aigateway-endpoint>/monitoring/healthz', headers: { 'accept' => 'application/json' }).code

응답이 200이 아니면 다음 중 하나를 의미합니다.

  • GitLab이 AI Gateway 컨테이너에 도달할 수 있도록 네트워크가 올바르게 구성되지 않았습니다. 네트워크 관리자에게 연락해 설정을 확인합니다.
  • AI Gateway가 요청을 처리할 수 없습니다. 이 문제를 해결하려면 AI Gateway가 모델에 요청할 수 있는지 확인합니다.

AI Gateway가 모델에 요청할 수 있는지 확인#

자체 호스팅 모델 연결을 확인하려면 AI Gateway 컨테이너에서 AI Gateway API에 HTTP 요청을 보냅니다. 다음 값을 교체합니다.

  • <your_model_name>: 사용 중인 모델의 모델 패밀리로 교체합니다. 예를 들어 mistral 또는 codegemma입니다.
  • <your_model_identifier>: 모델 배포의 식별자로 교체합니다. 예를 들어 custom_openai/mistral:instruct입니다.
  • <your_model_endpoint>: 모델이 호스팅된 엔드포인트로 교체합니다.
docker exec -it <ai-gateway-container> sh
curl --request POST "http://localhost:5052/v1/prompts/model_configuration%2Fcheck" \
     --header 'accept: application/json' \
     --header 'Content-Type: application/json' \
     --data '{ "stream": false, "inputs": {}, "model_metadata": { "name": "<your_model_name>", "identifier": "<your_model_identifier>", "endpoint": "<your_model_endpoint>", "provider": "openai" } }'

요청이 실패하면 다음이 원인일 수 있습니다.

AI Gateway가 요청을 처리할 수 있는지 확인#

docker exec -it <ai-gateway-container> sh
curl '<your-aigateway-endpoint>/monitoring/healthz'

응답이 200이 아니면 AI Gateway가 올바르게 설치되지 않았다는 뜻입니다. 이를 해결하려면 AI Gateway 설치 방법 문서를 따릅니다.

AI Gateway 환경 변수가 올바르게 설정되어 있는지 확인#

AI Gateway 환경 변수가 올바르게 설정되어 있는지 확인하려면 AI Gateway 컨테이너의 콘솔에서 다음을 실행합니다.

docker exec -it <ai-gateway-container> sh
echo $AIGW_CUSTOM_MODELS__ENABLED # must be true

환경 변수가 올바르게 설정되지 않았다면 컨테이너를 생성합니다.

AI Gateway에서 모델에 도달할 수 있는지 확인#

AI Gateway 컨테이너에서 셸을 생성하고 모델에 curl 요청을 보냅니다. AI Gateway가 그 요청을 보낼 수 없다면 다음이 원인일 수 있습니다.

  1. 모델 서버가 올바르게 동작하지 않습니다.
  2. 컨테이너 주변의 네트워크 설정이 모델이 호스팅된 곳으로 요청을 허용하도록 올바르게 구성되지 않았습니다.

이를 해결하려면 네트워크 관리자에게 연락합니다.

AI Gateway가 GitLab 인스턴스에 요청을 할 수 있는지 확인#

AIGW_GITLAB_URL에 정의된 GitLab 인스턴스는 요청 인증을 위해 AI Gateway 컨테이너에서 접근할 수 있어야 합니다. 인스턴스에 도달할 수 없으면(예를 들어 프록시 구성 오류 때문에) 요청이 다음과 같은 오류와 함께 실패할 수 있습니다.

  • jose.exceptions.JWTError: Signature verification failed
    
  • gitlab_cloud_connector.providers.CompositeProvider.CriticalAuthError: No keys founds in JWKS; are OIDC providers up?
    

이 경우 AIGW_GITLAB_URL과 $AIGW_GITLAB_API_URL이 컨테이너에 올바르게 설정되어 있고 접근할 수 있는지 확인합니다. 컨테이너에서 실행할 때 다음 명령이 성공해야 합니다.

poetry run troubleshoot
curl "$AIGW_GITLAB_API_URL/projects"

성공하지 않으면 네트워크 구성을 확인합니다.

이미지의 플랫폼이 호스트와 일치하지 않음#

AI Gateway 이미지를 사용할 때 The requested image's platform (linux/amd64) does not match the detected host 오류가 발생할 수 있습니다.

이 오류를 우회하려면 docker run 명령에 --platform linux/amd64를 추가합니다.

docker run --platform linux/amd64 -e AIGW_GITLAB_URL=<your-gitlab-endpoint> <image>

AI Gateway 컨테이너 내부에서 LLM 서버를 사용할 수 없음#

LLM 서버가 AI Gateway 컨테이너와 같은 인스턴스에 설치되어 있으면 로컬 호스트를 통해 접근할 수 없을 수 있습니다.

이를 해결하려면 다음을 수행합니다.

  1. AI Gateway 컨테이너에서 오는 로컬 요청을 허용하려면 docker run 명령에 --network host를 포함합니다.
  2. 포트 충돌을 해결하려면 -e AIGW_FASTAPI__METRICS_PORT=8083 플래그를 사용합니다.
docker run --network host -e AIGW_GITLAB_URL=<your-gitlab-endpoint> -e AIGW_FASTAPI__METRICS_PORT=8083 <image>

vLLM 404 오류#

vLLM을 사용하는 중에 404 오류가 발생하면 다음 단계에 따라 문제를 해결합니다.

  1. 다음 내용으로 chat_template.jinja라는 채팅 템플릿 파일을 생성합니다.

    
      
        {{- "[INST] " + message["content"] + "[/INST]" }}
      
        {{- message["content"] }}
      
        {{- bos_token }}{{- message["content"] }}
      
    
    
  2. vLLM 명령을 실행할 때 --served-model-name을 반드시 지정합니다. 예시는 다음과 같습니다.

    vllm serve "mistralai/Mistral-7B-Instruct-v0.3" --port <port> --max-model-len 17776 --served-model-name mistral --chat-template chat_template.jinja
    
  3. GitLab UI에서 vLLM 서버 URL을 확인하여 해당 URL에 /v1 접미사가 포함되어 있는지 확인합니다. 올바른 형식은 다음과 같습니다.

    http(s)://<your-host>:<your-port>/v1
    

Code Suggestions 접근 오류#

설정 후 Code Suggestions 접근에 문제가 있으면 다음 단계를 시도합니다.

  1. Rails 콘솔에서 라이선스 파라미터를 확인하고 검증합니다.

    sudo gitlab-rails console
    user = User.find(id) # Replace id with the user provisioned with GitLab Duo Enterprise seat
    Ability.allowed?(user, :access_code_suggestions) # Must return true
    
  2. 필요한 기능이 활성화되어 사용 가능한지 확인합니다.

    ::Ai::FeatureSetting.exists?(feature: [:code_generations, :code_completions], provider: :self_hosted) # Should be true
    

오류 A1000#

자체 호스팅 모델로 GitLab Duo 기능을 사용할 때 다음 오류가 발생할 수 있습니다.

I'm sorry, I couldn't respond in time. Please try again. Error code: A1000

이 문제는 모델에 대한 요청이 구성된 시간 초과 기간보다 오래 걸릴 때 발생합니다.

일반적인 원인은 다음과 같습니다.

  • 큰 컨텍스트 창 또는 복잡한 프롬프트
  • 모델 성능 제한
  • AI Gateway와 모델 엔드포인트 간의 네트워크 지연
  • 리전 간 추론 지연(AWS Bedrock 배포의 경우)

시간 초과 오류를 해결하려면 다음을 수행합니다.

  1. 더 높은 AI Gateway 시간 초과 값을 구성합니다. 시간 초과는 60초에서 600초(10분) 사이로 설정할 수 있습니다.
  2. GitLab Duo Chat의 경우 요청이 여전히 시간 초과되면 AI Gateway에서 Chat 모델 요청 시간 초과를 늘립니다.
  3. 시간 초과를 조정한 뒤 로그를 모니터링하여 오류가 해결되었는지 확인합니다.
  4. 더 높은 시간 초과 값으로도 시간 초과 오류가 계속되면 다음을 수행합니다.
    • 모델의 성능과 리소스 할당을 확인합니다.
    • AI Gateway와 모델 엔드포인트 간의 네트워크 연결을 확인합니다.
    • 성능이 더 좋은 모델 또는 배포 구성을 사용하는 방안을 검토합니다.

A1000으로 실패하는 대신 응답이 오류 없이 중간에 끊기면 응답이 오류 없이 잘림을 참고합니다.

응답이 오류 없이 잘림#

특히 대규모 모델이나 추론 모델의 긴 응답은 오류 메시지 없이 중간에 멈출 수 있습니다. 모델이 완료되기 전에 스트림이 끝나므로, 부분 응답이 완전한 것처럼 보일 수 있습니다.

이 문제는 구성 요소 사이의 프록시, 로드 밸런서, 방화벽이 모델이 응답을 마치기 전에 연결을 종료할 때 발생합니다. GitLab이 끊긴 스트림을 감지하면, 대기 중 시간이 초과된 경우에는 Error A1000을, 스트림 자체가 실패한 경우에는 Error A1003을 반환합니다.

각 홉의 시간 초과를 확인하고 오류가 표시되는지 살펴봅니다. 이 문제를 해결하려면 다음을 수행합니다.

  1. AI Gateway의 경우 GitLab이 게이트웨이를 충분히 오래 기다리도록 더 높은 시간 초과 값을 구성합니다.
  2. GitLab Duo Chat의 경우 AI Gateway가 모델을 충분히 오래 기다리도록 Chat 모델 요청 시간 초과를 늘립니다.
  3. AI Gateway 앞단의 리버스 프록시나 로드 밸런서를 확인합니다. NGINX 리버스 프록시를 사용한다면, 응답 청크 사이의 가장 긴 멈춤을 포괄하도록 proxy_read_timeout을 높이고 proxy_buffering off를 유지합니다.
  4. AI Gateway와 모델 서빙 플랫폼 사이의 프록시나 로드 밸런서에서도 비슷한 요청 시간 초과나 유휴 시간 초과가 있는지 확인합니다.
  5. GitLab Duo Agentic Chat의 경우 GitLab 앞단의 리버스 프록시에서 길게 스트리밍되는 답변을 끊을 수 있는 WebSocket 유휴 또는 읽기 시간 초과를 확인합니다. 자세한 내용은 Agentic Chat 응답이 UI에 표시되지 않음을 참고합니다.

GitLab 설정 확인#

GitLab Self-Managed 설정을 검증하려면 다음 명령을 실행합니다.

gitlab-rake gitlab:duo:verify_self_hosted_setup

AI Gateway 서버에서 로그가 생성되지 않음#

AI Gateway 서버에서 로그가 생성되지 않으면 다음 단계에 따라 문제를 해결합니다.

  1. AI 로그가 활성화되어 있는지 확인합니다.

  2. 다음 명령을 실행하여 GitLab Rails 로그에서 오류를 확인합니다.

    sudo gitlab-ctl tail
    sudo gitlab-ctl tail sidekiq
    
  3. 로그에서 "Error" 또는 "Exception" 같은 키워드를 찾아 근본 문제를 파악합니다.

AI Gateway 컨테이너에서 SSL 인증서 오류 및 키 역직렬화 문제#

AI Gateway 컨테이너 내부에서 GitLab Duo Chat을 시작하려고 할 때 SSL 인증서 오류와 키 역직렬화 문제가 발생할 수 있습니다.

시스템이 PEM 파일을 로드하는 데 문제가 생겨 다음과 같은 오류가 발생할 수 있습니다.

JWKError: Could not deserialize key data. The data may be in an incorrect format, the provided password may be incorrect, or it may be encrypted with an unsupported algorithm.

SSL 인증서 오류를 해결하려면 다음을 수행합니다.

  • 다음 환경 변수를 사용하여 Docker 컨테이너에 적절한 인증서 번들 경로를 설정합니다.
    • SSL_CERT_FILE=/path/to/ca-bundle.pem
    • REQUESTS_CA_BUNDLE=/path/to/ca-bundle.pem

오류: meta 모델 ID 호출이 지원되지 않음#

모델 식별자의 형식이 올바르지 않으면 AIGW 로그에 다음 오류가 표시됩니다.

Invocation of model ID meta.llama3-3-70b-instruct-v1:0 with on-demand throughput isn\u2019t supported. Retry your request with the ID or ARN of an inference profile that contains this model

model identifier가 bedrock/<region>.<model-id> 형식인지 확인합니다. 각 항목은 다음과 같습니다.

  • <region>은 AWS 리전입니다(예: us)
  • <model-id>는 전체 모델 식별자입니다.

예를 들어 bedrock/us.meta.llama3-3-70b-instruct-v1:0입니다. 올바른 형식을 사용하도록 모델 구성을 업데이트합니다.

Azure OpenAI 배포가 Chat Completions API 요청을 거부함#

일부 Azure OpenAI 배포는 Responses API를 통해서만 사용할 수 있습니다. 모델 식별자가 azure/<deployment name> 형식이면 AI Gateway가 Chat Completions API로 요청을 보냅니다. 이러한 배포는 해당 요청을 거부합니다.

이 문제를 해결하려면 모델 식별자를 azure/responses/<deployment name> 형식으로 변경합니다. 자세한 내용은 Responses API 사용을 참고합니다.

기능에 접근할 수 없거나 기능 버튼이 표시되지 않음#

기능이 동작하지 않거나 기능 버튼(예: /troubleshoot)이 표시되지 않으면 다음을 수행합니다.

  1. 해당 기능의 unit_primitive가 gitlab-cloud-connector gem 구성의 자체 호스팅 모델 unit primitive 목록에 있는지 확인합니다.

    이 파일에 해당 기능이 없다면 그것이 접근할 수 없는 이유일 수 있습니다.

  2. 선택 사항. 해당 기능이 목록에 없다면 GitLab 인스턴스에서 다음을 설정하여 이것이 문제의 원인인지 확인할 수 있습니다.

    CLOUD_CONNECTOR_SELF_SIGN_TOKENS=1
    

    그다음 GitLab을 재시작하고 해당 기능에 접근할 수 있게 되는지 확인합니다.

    [!warning] 프로덕션에서는 CLOUD_CONNECTOR_SELF_SIGN_TOKENS=1을 사용하지 않습니다. 문제 해결을 마친 뒤에는 이 플래그를 설정하지 않은 상태로 GitLab을 재시작합니다. 개발 환경은 숨은 플래그나 내부 전용 우회 방법 없이 프로덕션과 최대한 비슷해야 합니다.

  3. 이 문제를 해결하려면 다음을 수행합니다.

오류: 이 워크플로의 인증 토큰을 가져오는 중 오류가 발생했습니다#

이 오류는 GitLab이나 로컬 환경에서 agentic Chat을 사용하려고 할 때 발생할 수 있습니다.

IDE의 GitLab Language Server 로그에서 다음을 볼 수도 있습니다.

2026-01-09T20:17:43:419 [error]: [WorkflowRailsService] Failed to fetch the workflow token
    Error: Fetching direct_access from https://gitlab.example.com/api/v4/ai/duo_workflows/direct_access failed.
{"message":"400 Bad request - 14:failed to connect to all addresses; last error: UNKNOWN: ipv4:172.x.x.x:50052: Ssl handshake failed (TSI_PROTOCOL_FAILURE): SSL_ERROR_SSL: error:100000f7:SSL routines:OPENSSL_internal:WRONG_VERSION_NUMBER: Invalid certificate verification context. debug_error_string:{UNKNOWN:Error received from peer  {grpc_status:14, grpc_message:\"failed to connect to all addresses; last error: UNKNOWN: ipv4:172.x.x.x:50052: Ssl handshake failed (TSI_PROTOCOL_FAILURE): SSL_ERROR_SSL: error:100000f7:SSL routines:OPENSSL_internal:WRONG_VERSION_NUMBER: Invalid certificate verification context\"}}"}
2026-01-09T20:17:43:433 [error]: Max retries exceeded or non-retryable error: An error occurred while fetching an authentication token for this workflow.
2026-01-09T20:17:43:435 [error]: Workflow failed with status code "50": An error occurred while fetching an authentication token for this workflow.

이는 인증서 문제 때문에 language server가 JWT 토큰을 생성하기 위해 direct_access 엔드포인트와 통신할 수 없었다는 뜻입니다.

자체 호스팅 모델을 Agent Platform에 연결할 때 TLS를 사용하지 않는다면, 이 문제를 해결하기 위해 GitLab Duo Agent Platform 서비스에 대한 TLS 연결을 해제합니다.

Agentic Chat 응답이 UI에 표시되지 않음#

Chat 응답에는 브라우저와 GitLab 사이의 지속적인 WebSocket 연결이 필요합니다. 리버스 프록시가 WebSocket 업그레이드를 지원하지 않으면 응답은 정상적으로 생성되지만 GitLab UI의 채팅에는 나타나지 않습니다.

증상#

  • llm.log에 오류 없이 chunk_received, streaming_finished, final_answer_received가 표시됩니다.
  • AI Gateway 로그에 모델 응답이 성공한 것으로 표시됩니다.
  • GitLab Duo Chat UI는 요청을 처리하는 것처럼 보이지만 응답을 표시하지 않습니다.

이 문제를 해결하려면 리버스 프록시가 인바운드 연결 요구 사항을 충족하도록 구성되어 있는지 확인합니다.