Vertex AI RAG Engine에서 RagManagedDb 사용

이 페이지에서는 RagManagedDb를 소개하고 계층 구성과 RAG 코퍼스 수준 검색 전략을 관리하는 방법을 보여줍니다.

Vertex AI RAG Engine은 문서의 벡터 표현을 저장하고 관리하는 데 사용되는 엔터프라이즈용 벡터 데이터베이스인 RagManagedDb를 사용합니다. 그런 다음 벡터 데이터베이스는 문서가 특정 쿼리와 얼마나 의미상 유사한지를 기반으로 관련 문서를 검색하는 데 사용됩니다.

검색 전략 관리

RagManagedDb는 RAG 사용 사례를 지원하기 위해 다음과 같은 검색 전략을 제공합니다.

검색 전략 설명
K-최근접 이웃 (KNN) (기본값) RAG 코퍼스의 모든 데이터 포인트를 비교하여 가장 가까운 이웃을 정확하게 찾습니다. RAG 자료 모음을 만들 때 전략을 지정하지 않으면 KNN이 사용되는 기본 검색 전략입니다.
  • 검색 중에 완벽한 재현율 (1.0)을 보장합니다.
  • 리콜에 민감한 애플리케이션에 적합합니다.
  • 10,000개 미만의 RAG 파일을 저장하는 소규모~중형 RAG 코퍼스에 적합합니다.
  • 모든 단일 데이터 포인트를 검색해야 하므로 코퍼스의 RAG 파일 수에 따라 지연 시간이 증가합니다.
근사 최근접 이웃 (ANN) 근사 기법을 사용하여 KNN 기법보다 빠르게 유사한 이웃을 찾습니다.
  • 대규모 RAG 코퍼스에서 쿼리 지연 시간을 크게 줄입니다.
  • 사용된 근사 기법으로 인해 재현율이 약간 낮아졌습니다.
  • 대규모 RAG 코퍼스(RAG 파일 약 10,000개 이상)를 사용하는 경우 매우 효과적입니다.
  • 허용되는 리콜 손실의 양은 사용 사례에 따라 다릅니다. 하지만 대부분의 대규모 사례에서 약간의 리콜 감소가 쿼리 성능 향상으로 이어진다면 합리적인 것으로 간주됩니다.

KNN RagManagedDb으로 RAG 코퍼스 만들기

이 코드 샘플은 KNN RagManagedDb을 사용하여 RAG 코퍼스를 만드는 방법을 보여줍니다.

Python

from vertexai import rag
import vertexai

PROJECT_ID = YOUR_PROJECT_ID
LOCATION = YOUR_RAG_ENGINE_LOCATION
DISPLAY_NAME = YOUR_RAG_CORPUS_DISPLAY_NAME

# Initialize Vertex AI API once per session
vertexai.init(project=PROJECT_ID, location=LOCATION)

vector_db = rag.RagManagedDb(retrieval_strategy=rag.KNN())
rag_corpus = rag.create_corpus(
    display_name=DISPLAY_NAME, backend_config=rag.RagVectorDbConfig(vector_db=vector_db))

REST

다음 변수를 바꿉니다.

  • PROJECT_ID: 프로젝트 ID.
  • LOCATION: 요청을 처리하는 리전.
  • CORPUS_DISPLAY_NAME: RAG 자료의 표시 이름.
PROJECT_ID=PROJECT_ID
LOCATION=LOCATION
CORPUS_DISPLAY_NAME=CORPUS_DISPLAY_NAME

curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json" \
https://${LOCATION}-aiplatform.googleapis.com/v1beta1/projects/${PROJECT_ID}/locations/${LOCATION}/ragCorpora \
-d '{
      "display_name" : '\""${CORPUS_DISPLAY_NAME}"\"',
      "vector_db_config": {
        "ragManagedDb": {
          "knn": {}
        }
      }
    }'

ANN RagManagedDb으로 RAG 코퍼스 만들기

ANN 기능을 제공하기 위해 RagManagedDb는 트리 기반 구조를 사용하여 데이터를 파티셔닝하고 더 빠른 검색을 지원합니다. 최적의 검색 결과와 지연 시간을 사용하려면 이 트리의 구조를 데이터 크기와 분포에 맞게 실험을 통해 구성해야 합니다. RagManagedDb를 사용하면 트리의 tree_depthleaf_count를 구성할 수 있습니다.

tree_depth는 트리의 레이어 수 또는 수준을 결정합니다. 다음 가이드라인을 준수해야 합니다.

  • RAG 코퍼스에 RAG 파일이 약 10,000개 있는 경우 값을 2로 설정합니다.
  • RAG 파일이 이보다 많은 경우 3으로 설정합니다.
  • tree_depth가 지정되지 않으면 Vertex AI RAG Engine은 이 매개변수에 기본값 2를 할당합니다.

leaf_count는 트리 기반 구조의 리프 노드 수를 결정합니다. 각 리프 노드에는 해당 중심과 함께 밀접하게 관련된 벡터 그룹이 포함됩니다. 다음 가이드라인을 준수해야 합니다.

  • 권장 값은 10 * sqrt(num of RAG files in your RAG corpus)입니다.
  • 지정하지 않으면 Vertex AI RAG Engine은 이 매개변수에 기본값 500을 할당합니다.

Python

from vertexai import rag
import vertexai

PROJECT_ID = YOUR_PROJECT_ID
LOCATION = YOUR_RAG_ENGINE_LOCATION
DISPLAY_NAME = YOUR_RAG_CORPUS_DISPLAY_NAME
TREE_DEPTH = YOUR_TREE_DEPTH # Optional: Acceptable values are 2 or 3. Default is 2.
LEAF_COUNT = YOUR_LEAF_COUNT # Optional: Default is 500.

# Initialize Vertex AI API once per session
vertexai.init(project=PROJECT_ID, location=LOCATION)

ann_config = rag.ANN(tree_depth=TREE_DEPTH, leaf_count=LEAF_COUNT)
vector_db = rag.RagManagedDb(retrieval_strategy=ann_config)
rag_corpus = rag.create_corpus(
    display_name=DISPLAY_NAME, backend_config=rag.RagVectorDbConfig(vector_db=vector_db))

REST

다음 변수를 바꿉니다.

  • PROJECT_ID: 프로젝트 ID.
  • LOCATION: 요청을 처리하는 리전.
  • CORPUS_DISPLAY_NAME: RAG 자료의 표시 이름.
  • TREE_DEPTH: 트리 깊이입니다.
  • LEAF_COUNT: 리프 수입니다.
PROJECT_ID=PROJECT_ID
LOCATION=LOCATION
CORPUS_DISPLAY_NAME=CORPUS_DISPLAY_NAME
TREE_DEPTH=TREE_DEPTH
LEAF_COUNT=LEAF_COUNT

curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json" \
https://${LOCATION}-aiplatform.googleapis.com/v1beta1/projects/${PROJECT_ID}/locations/${LOCATION}/ragCorpora \
-d '{
      "display_name" : '\""${CORPUS_DISPLAY_NAME}"\"',
      "vector_db_config": {
        "ragManagedDb": {
          "ann": {
            "tree_depth": '"${TREE_DEPTH}"',
            "leaf_count": '"${LEAF_COUNT}"'
          }
        }
      }
    }'

ANN RagManagedDb로 데이터 가져오기

ImportRagFiles API 또는 UploadRagFile API를 사용하여 데이터를 ANN RagManagedDb로 가져올 수 있습니다. 그러나 KNN 검색 전략과 달리 ANN 접근 방식에서는 최적의 검색을 위해 기본 트리 기반 색인을 한 번 이상 다시 빌드해야 하며, 경우에 따라 상당한 양의 데이터를 가져온 후에 다시 빌드해야 합니다. Vertex AI RAG Engine에서 ANN 색인을 다시 빌드하도록 하려면 ImportRagFiles API 요청에서 rebuild_ann_index를 true로 설정하세요.

다음 사항이 중요합니다.

  1. RAG 자료에 쿼리하기 전에 ANN 색인을 한 번 이상 다시 빌드해야 합니다.
  2. 각 위치의 프로젝트에서 동시 색인 재빌드는 하나만 지원됩니다.

로컬 파일을 RAG 코퍼스에 업로드하려면 RAG 파일 업로드를 참고하세요. 데이터를 RAG 자료에 가져오고 ANN 색인 재빌드를 트리거하려면 Cloud Storage에서 가져오는 방법을 보여주는 다음 코드 샘플을 참고하세요. 지원되는 데이터 소스에 대해 알아보려면 RAG에서 지원되는 데이터 소스를 참고하세요.

Python

from vertexai import rag
import vertexai

PROJECT_ID = YOUR_PROJECT_ID
LOCATION = YOUR_RAG_ENGINE_LOCATION
CORPUS_ID = YOUR_CORPUS_ID
PATHS = ["gs://my_bucket/my_files_dir"]
REBUILD_ANN_INDEX = REBUILD_ANN_INDEX # Choose true or false.

# Initialize Vertex AI API once per session
vertexai.init(project=PROJECT_ID, location=LOCATION)

corpus_name = f"projects/{PROJECT_ID}/locations/{LOCATION}/ragCorpora/{CORPUS_ID}"
# This is a non blocking call.
response = await rag.import_files_async(
    corpus_name=corpus_name,
    paths=PATHS,
    rebuild_ann_index=REBUILD_ANN_INDEX
)

# Wait for the import to complete.
await response.result()

REST

GCS_URI=GCS_URI
REBUILD_ANN_INDEX=<true/false>

curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json" \
https://${LOCATION}-aiplatform.googleapis.com/v1beta1/projects/${PROJECT_ID}/locations/${LOCATION}/ragCorpora/${CORPUS_ID}/ragFiles:import \
-d '{
  "import_rag_files_config": {
    "gcs_source": {
      "uris": '\""${GCS_URI}"\"',
      },
    "rebuild_ann_index": '${REBUILD_ANN_INDEX}'
  }
}'

등급 관리

Vertex AI RAG Engine을 사용하면 두 가지 등급 중에서 선택하여 사용량과 성능 요구사항에 따라 RagManagedDb 인스턴스를 확장할 수 있습니다.

  • 엔터프라이즈 등급 (기본값): 이 등급은 자동 확장 기능과 함께 프로덕션 규모의 성능을 제공합니다. 대용량 데이터 또는 성능에 민감한 워크로드가 있는 고객에게 적합합니다.

  • 기본 등급: 이 등급은 비용 효율적이고 컴퓨팅이 적은 등급으로, 다음과 같은 경우에 적합할 수 있습니다.

    • RagManagedDb를 실험합니다.
    • 데이터 크기가 작습니다.
    • 지연 시간에 민감하지 않은 워크로드
    • Vertex AI RAG Engine은 다른 벡터 데이터베이스와 함께만 사용하세요.

등급은 RagEngineConfig 리소스에서 사용할 수 있는 프로젝트 수준 설정이며 RagManagedDb를 사용하는 RAG 코퍼스에 영향을 미칩니다. 등급을 가져오거나 업데이트하려면 각각 GetRagEngineConfig API와 UpdateRagEngineConfig API를 사용하세요.

RagEngineConfig 읽기

다음 샘플 코드는 RagEngineConfig를 읽는 방법을 보여줍니다.

Python

from vertexai import rag
import vertexai

PROJECT_ID = "PROJECT_ID"
LOCATION = "LOCATION"

# Initialize Vertex AI API once per session
vertexai.init(project=PROJECT_ID, location=LOCATION)

rag_engine_config = rag.rag_data.get_rag_engine_config(
    name=f"projects/{PROJECT_ID}/locations/{LOCATION}/ragEngineConfig"
)

print(rag_engine_config)

REST

다음 변수를 바꿉니다.

  • PROJECT_ID: 프로젝트 ID.
  • LOCATION: 요청을 처리하는 리전.
curl -X GET \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
https://${LOCATION}-aiplatform.googleapis.com/v1beta1/projects/${PROJECT_ID}/locations/${LOCATION}/ragEngineConfig

RagEngineConfig를 Enterprise 등급으로 업데이트

다음 코드 샘플은 RagEngineConfig를 Enterprise 등급으로 설정하는 방법을 보여줍니다.

Python

from vertexai import rag
import vertexai

PROJECT_ID = "PROJECT_ID"
LOCATION = "LOCATION"

# Initialize Vertex AI API once per session
vertexai.init(project=PROJECT_ID, location=LOCATION)

rag_engine_config_name=f"projects/{PROJECT_ID}/locations/{LOCATION}/ragEngineConfig"

new_rag_engine_config = rag.RagEngineConfig(
    name=rag_engine_config_name,
    rag_managed_db_config=rag.RagManagedDbConfig(tier=rag.Enterprise()),
)

updated_rag_engine_config = rag.rag_data.update_rag_engine_config(
    rag_engine_config=new_rag_engine_config
)

print(updated_rag_engine_config)

REST

다음 변수를 바꿉니다.

  • PROJECT_ID: 프로젝트 ID.
  • LOCATION: 요청을 처리하는 리전.
curl -X PATCH \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
https://${LOCATION}-aiplatform.googleapis.com/v1beta1/projects/${PROJECT_ID}/locations/${LOCATION}/ragEngineConfig -d "{'ragManagedDbConfig': {'enterprise': {}}}"

RagEngineConfig를 Basic 등급으로 업데이트

모든 RAG 자료에서 RagManagedDb에 대량의 데이터가 있는 경우 기본 등급으로 다운그레이드하지 못할 수 있습니다. 리소스를 보유할 수 있는 최소 컴퓨팅 및 스토리지 용량이 있어야 합니다.

Python

from vertexai import rag
import vertexai

PROJECT_ID = "PROJECT_ID"
LOCATION = "LOCATION"

# Initialize Vertex AI API once per session
vertexai.init(project=PROJECT_ID, location=LOCATION)

rag_engine_config_name=f"projects/{PROJECT_ID}/locations/{LOCATION}/ragEngineConfig"

new_rag_engine_config = rag.RagEngineConfig(
    name=rag_engine_config_name,
    rag_managed_db_config=rag.RagManagedDbConfig(tier=rag.Basic()),
)

updated_rag_engine_config = rag.rag_data.update_rag_engine_config(
    rag_engine_config=new_rag_engine_config
)

print(updated_rag_engine_config)

REST

다음 변수를 바꿉니다.

  • PROJECT_ID: 프로젝트 ID입니다.
  • LOCATION: 요청을 처리할 리전입니다.
curl -X PATCH \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
https://${LOCATION}-aiplatform.googleapis.com/v1beta1/projects/${PROJECT_ID}/locations/${LOCATION}/ragEngineConfig -d "{'ragManagedDbConfig': {'basic': {}}}"

다음 단계