InfoGrab Docs

시맨틱 코드 검색

요약

시맨틱 코드 검색은 AI를 사용하여 키워드 매칭이 아닌 의미를 기반으로 저장소에서 관련 코드 스니펫을 찾습니다. 시맨틱 코드 검색은 코드베이스를 벡터 임베딩으로 변환하고 이 임베딩을 벡터 데이터베이스에 저장합니다. 이 기능의 개선 사항은 에픽 18018과 에픽 20110에서 제안됩니다.

히스토리

시맨틱 코드 검색은 AI를 사용하여 키워드 매칭이 아닌 의미를 기반으로 저장소에서 관련 코드 스니펫을 찾습니다.

시맨틱 코드 검색은 코드베이스를 벡터 임베딩으로 변환하고 이 임베딩을 벡터 데이터베이스에 저장합니다. 검색 쿼리도 임베딩으로 변환된 다음 코드 임베딩과 비교하여 의미적으로 가장 유사한 결과를 찾습니다. 이 접근 방식은 키워드가 일치하지 않더라도 관련 코드를 찾습니다.

이 기능의 개선 사항은 에픽 18018에픽 20110에서 제안됩니다.

사전 조건#

  • GitLab AI Gateway에 액세스.
  • 다음 기능이 켜져 있어야 합니다:
    • GitLab.com의 경우 최상위 그룹에 대한 실험 기능.
    • GitLab Self-Managed의 경우 인스턴스에 대한 GitLab Duo 실험 및 베타 기능.
  • 프로젝트에 대해 GitLab Duo가 켜져 있어야 합니다.
  • 다음 벡터 스토어 중 하나가 구성되어 있어야 합니다:
    • Elasticsearch 8.0 이상.
    • OpenSearch 2.0 이상.
    • pgvector 확장을 사용하는 PostgreSQL.
  • 관리자 액세스.

시맨틱 코드 검색 활성화#

UI로#

GitLab 인스턴스가 고급 검색을 위해 Elasticsearch 또는 OpenSearch를 사용하는 경우 동일한 클러스터에 연결하여 시맨틱 코드 검색을 활성화할 수 있습니다:

  1. 오른쪽 상단 모서리에서 관리자를 선택합니다.
  2. 왼쪽 사이드바에서 설정 > 검색을 선택합니다.
  3. 시맨틱 검색을 확장합니다.
  4. 고급 검색 클러스터에 연결을 선택합니다.

Rails 콘솔로#

Elasticsearch, OpenSearch 또는 PostgreSQL의 사용자 정의 벡터 스토어 연결을 만들려면 Rails 콘솔에서 adapteroptions를 사용하여 연결을 만드세요.

Note

중간 규모에서 대규모 저장소에는 Elasticsearch 또는 OpenSearch를 사용해야 합니다. 소수의 작은 저장소가 있는 설정에만 pgvector와 함께 PostgreSQL을 사용하세요. pgvector를 사용하면 인덱싱 및 쿼리 성능이 제한될 수 있습니다.

Elasticsearch#

connection = Ai::ActiveContext::Connection.create!(
  name: "elasticsearch",
  options: options,
  adapter_class: "ActiveContext::Databases::Elasticsearch::Adapter"
)
connection.activate!

연결 옵션:

옵션 유형 필수 기본값 설명
url 문자열 배열 없음 Elasticsearch 클러스터의 URL 배열 (예: ["http://localhost:9200"]).
client_adapter 문자열 아니오 typhoeus 사용할 HTTP 어댑터. 가능한 값: typhoeus, net_http.
client_request_timeout 정수 아니오 30 요청 타임아웃(초).
retry_on_failure 정수 아니오 0 실패 시 재시도 횟수.
debug 불리언 아니오 false 디버그 로깅 활성화.

OpenSearch#

connection = Ai::ActiveContext::Connection.create!(
  name: "opensearch",
  options: options,
  adapter_class: "ActiveContext::Databases::Opensearch::Adapter"
)
connection.activate!

연결 옵션:

옵션 유형 필수 기본값 설명
url 문자열 배열 없음 OpenSearch 클러스터의 URL 배열 (예: ["http://localhost:9200"]).
client_adapter 문자열 아니오 typhoeus 사용할 HTTP 어댑터. 가능한 값: typhoeus, net_http.
client_request_timeout 정수 아니오 30 요청 타임아웃(초).
retry_on_failure 정수 아니오 0 실패 시 재시도 횟수.
debug 불리언 아니오 false 디버그 로깅 활성화.
aws 불리언 아니오 false AWS Signature Version 4 서명 활성화.
aws_region 문자열 아니오 없음 OpenSearch 도메인의 AWS 지역.
aws_access_key 문자열 아니오 없음 AWS 액세스 키 ID.
aws_secret_access_key 문자열 아니오 없음 AWS 시크릿 액세스 키.

pgvector를 사용하는 PostgreSQL#

히스토리

PostgreSQL의 경우 pgvector 확장을 사용합니다:

  1. PostgreSQL 데이터베이스에서 확장을 만듭니다:

    CREATE EXTENSION vector;
    
  2. Rails 콘솔에서 연결을 만듭니다:

    connection = Ai::ActiveContext::Connection.create!(
      name: "postgres",
      options: options,
      adapter_class: "ActiveContext::Databases::Postgresql::Adapter"
    )
    connection.activate!
    

연결 옵션:

옵션 유형 필수 기본값 설명
host 문자열 없음 PostgreSQL 호스트.
port 정수 아니오 없음 PostgreSQL 포트.
database 문자열 아니오 없음 데이터베이스 이름.
user 문자열 아니오 없음 PostgreSQL 사용자.
password 문자열 아니오 없음 PostgreSQL 비밀번호.
connect_timeout 정수 아니오 5 연결 타임아웃(초).
pool_size 정수 아니오 5 연결 풀 크기.

시맨틱 코드 검색 상태 확인#

히스토리

사전 조건:

  • 관리자 액세스.

인덱싱 상태, 벡터 스토어 연결 세부 정보, 저장소 통계, 임베딩 큐 크기 등 시맨틱 코드 검색의 상태를 확인하려면 이 Rake 태스크를 실행합니다:

sudo gitlab-rake gitlab:semantic_search:code:info

상태를 지속적으로 모니터링하려면 감시 간격을 초 단위로 제공합니다:

sudo gitlab-rake "gitlab:semantic_search:code:info[5]"

이 태스크는 지정된 간격으로 출력을 새로 고칩니다. 태스크를 중지하려면 Control+C를 누릅니다.

시맨틱 코드 검색 사용#

시맨틱 코드 검색은 GitLab MCP 서버 도구로 사용할 수 있습니다. 이 도구를 사용하는 방법에 대한 자세한 내용은 semantic_code_search를 참조하세요.

GitLab 프로젝트에서 시맨틱 코드 검색을 처음 사용할 때:

  • 저장소 코드가 인덱싱되어 벡터 임베딩으로 변환됩니다.
  • 이 임베딩은 구성된 벡터 스토어에 저장됩니다.
  • 코드가 기본 브랜치에 머지될 때 업데이트가 점진적으로 처리됩니다.

초기 인덱싱은 저장소 크기에 따라 시간이 걸릴 수 있습니다.

시맨틱 코드 검색

Tier: Premium, Ultimate
Offering: GitLab.com, GitLab Self-Managed
원문 보기
요약

시맨틱 코드 검색은 AI를 사용하여 키워드 매칭이 아닌 의미를 기반으로 저장소에서 관련 코드 스니펫을 찾습니다. 시맨틱 코드 검색은 코드베이스를 벡터 임베딩으로 변환하고 이 임베딩을 벡터 데이터베이스에 저장합니다. 이 기능의 개선 사항은 에픽 18018과 에픽 20110에서 제안됩니다.

히스토리

시맨틱 코드 검색은 AI를 사용하여 키워드 매칭이 아닌 의미를 기반으로 저장소에서 관련 코드 스니펫을 찾습니다.

시맨틱 코드 검색은 코드베이스를 벡터 임베딩으로 변환하고 이 임베딩을 벡터 데이터베이스에 저장합니다. 검색 쿼리도 임베딩으로 변환된 다음 코드 임베딩과 비교하여 의미적으로 가장 유사한 결과를 찾습니다. 이 접근 방식은 키워드가 일치하지 않더라도 관련 코드를 찾습니다.

이 기능의 개선 사항은 에픽 18018에픽 20110에서 제안됩니다.

사전 조건#

  • GitLab AI Gateway에 액세스.
  • 다음 기능이 켜져 있어야 합니다:
    • GitLab.com의 경우 최상위 그룹에 대한 실험 기능.
    • GitLab Self-Managed의 경우 인스턴스에 대한 GitLab Duo 실험 및 베타 기능.
  • 프로젝트에 대해 GitLab Duo가 켜져 있어야 합니다.
  • 다음 벡터 스토어 중 하나가 구성되어 있어야 합니다:
    • Elasticsearch 8.0 이상.
    • OpenSearch 2.0 이상.
    • pgvector 확장을 사용하는 PostgreSQL.
  • 관리자 액세스.

시맨틱 코드 검색 활성화#

UI로#

GitLab 인스턴스가 고급 검색을 위해 Elasticsearch 또는 OpenSearch를 사용하는 경우 동일한 클러스터에 연결하여 시맨틱 코드 검색을 활성화할 수 있습니다:

  1. 오른쪽 상단 모서리에서 관리자를 선택합니다.
  2. 왼쪽 사이드바에서 설정 > 검색을 선택합니다.
  3. 시맨틱 검색을 확장합니다.
  4. 고급 검색 클러스터에 연결을 선택합니다.

Rails 콘솔로#

Elasticsearch, OpenSearch 또는 PostgreSQL의 사용자 정의 벡터 스토어 연결을 만들려면 Rails 콘솔에서 adapteroptions를 사용하여 연결을 만드세요.

Note

중간 규모에서 대규모 저장소에는 Elasticsearch 또는 OpenSearch를 사용해야 합니다. 소수의 작은 저장소가 있는 설정에만 pgvector와 함께 PostgreSQL을 사용하세요. pgvector를 사용하면 인덱싱 및 쿼리 성능이 제한될 수 있습니다.

Elasticsearch#

connection = Ai::ActiveContext::Connection.create!(
  name: "elasticsearch",
  options: options,
  adapter_class: "ActiveContext::Databases::Elasticsearch::Adapter"
)
connection.activate!

연결 옵션:

옵션 유형 필수 기본값 설명
url 문자열 배열 없음 Elasticsearch 클러스터의 URL 배열 (예: ["http://localhost:9200"]).
client_adapter 문자열 아니오 typhoeus 사용할 HTTP 어댑터. 가능한 값: typhoeus, net_http.
client_request_timeout 정수 아니오 30 요청 타임아웃(초).
retry_on_failure 정수 아니오 0 실패 시 재시도 횟수.
debug 불리언 아니오 false 디버그 로깅 활성화.

OpenSearch#

connection = Ai::ActiveContext::Connection.create!(
  name: "opensearch",
  options: options,
  adapter_class: "ActiveContext::Databases::Opensearch::Adapter"
)
connection.activate!

연결 옵션:

옵션 유형 필수 기본값 설명
url 문자열 배열 없음 OpenSearch 클러스터의 URL 배열 (예: ["http://localhost:9200"]).
client_adapter 문자열 아니오 typhoeus 사용할 HTTP 어댑터. 가능한 값: typhoeus, net_http.
client_request_timeout 정수 아니오 30 요청 타임아웃(초).
retry_on_failure 정수 아니오 0 실패 시 재시도 횟수.
debug 불리언 아니오 false 디버그 로깅 활성화.
aws 불리언 아니오 false AWS Signature Version 4 서명 활성화.
aws_region 문자열 아니오 없음 OpenSearch 도메인의 AWS 지역.
aws_access_key 문자열 아니오 없음 AWS 액세스 키 ID.
aws_secret_access_key 문자열 아니오 없음 AWS 시크릿 액세스 키.

pgvector를 사용하는 PostgreSQL#

히스토리

PostgreSQL의 경우 pgvector 확장을 사용합니다:

  1. PostgreSQL 데이터베이스에서 확장을 만듭니다:

    CREATE EXTENSION vector;
    
  2. Rails 콘솔에서 연결을 만듭니다:

    connection = Ai::ActiveContext::Connection.create!(
      name: "postgres",
      options: options,
      adapter_class: "ActiveContext::Databases::Postgresql::Adapter"
    )
    connection.activate!
    

연결 옵션:

옵션 유형 필수 기본값 설명
host 문자열 없음 PostgreSQL 호스트.
port 정수 아니오 없음 PostgreSQL 포트.
database 문자열 아니오 없음 데이터베이스 이름.
user 문자열 아니오 없음 PostgreSQL 사용자.
password 문자열 아니오 없음 PostgreSQL 비밀번호.
connect_timeout 정수 아니오 5 연결 타임아웃(초).
pool_size 정수 아니오 5 연결 풀 크기.

시맨틱 코드 검색 상태 확인#

히스토리

사전 조건:

  • 관리자 액세스.

인덱싱 상태, 벡터 스토어 연결 세부 정보, 저장소 통계, 임베딩 큐 크기 등 시맨틱 코드 검색의 상태를 확인하려면 이 Rake 태스크를 실행합니다:

sudo gitlab-rake gitlab:semantic_search:code:info

상태를 지속적으로 모니터링하려면 감시 간격을 초 단위로 제공합니다:

sudo gitlab-rake "gitlab:semantic_search:code:info[5]"

이 태스크는 지정된 간격으로 출력을 새로 고칩니다. 태스크를 중지하려면 Control+C를 누릅니다.

시맨틱 코드 검색 사용#

시맨틱 코드 검색은 GitLab MCP 서버 도구로 사용할 수 있습니다. 이 도구를 사용하는 방법에 대한 자세한 내용은 semantic_code_search를 참조하세요.

GitLab 프로젝트에서 시맨틱 코드 검색을 처음 사용할 때:

  • 저장소 코드가 인덱싱되어 벡터 임베딩으로 변환됩니다.
  • 이 임베딩은 구성된 벡터 스토어에 저장됩니다.
  • 코드가 기본 브랜치에 머지될 때 업데이트가 점진적으로 처리됩니다.

초기 인덱싱은 저장소 크기에 따라 시간이 걸릴 수 있습니다.