이 페이지에서는 Vertex AI RAG Engine이 문서의 벡터 표현을 저장하고 관리하는 데 사용되는 엔터프라이즈 지원 벡터 데이터베이스인 RagManagedDb
를 사용하는 방법을 보여줍니다. 그런 다음 벡터 데이터베이스를 사용하여 특정 쿼리에 대한 문서의 시맨틱 유사성을 기반으로 관련 문서를 검색합니다.
또한 이 페이지에서는 CMEK를 구현하는 방법을 보여줍니다.
검색 전략 관리
RagManagedDb
는 RAG 사용 사례를 지원하기 위해 다음과 같은 검색 전략을 제공합니다.
검색 전략 | 설명 | |
---|---|---|
k-최근접 이웃 (KNN) (기본값) | RAG 코퍼스의 모든 데이터 포인트를 비교하여 정확한 최근접 이웃을 찾습니다. RAG 코퍼스를 만드는 동안 전략을 지정하지 않으면 KNN이 사용되는 기본 검색 전략입니다. |
|
최근접 이웃 탐색 (ANN) | 근사 기법을 사용하여 KNN 기법보다 더 빠르게 유사한 이웃을 찾습니다. |
|
KNN으로 RAG 코퍼스 만들기 RagManagedDb
이 코드 샘플은 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으로 RAG 코퍼스 만들기 RagManagedDb
ANN 기능을 제공하기 위해 RagManagedDb
는 트리 기반 구조를 사용하여 데이터를 파티셔닝하고 더 빠른 검색을 지원합니다. 최상의 재현율과 지연 시간을 지원하려면 데이터 크기와 분포에 맞게 실험을 통해 이 트리의 구조를 구성해야 합니다. RagManagedDb
를 사용하면 트리의 tree_depth
및 leaf_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로 설정하세요.
다음 사항이 중요합니다.
- RAG 코퍼스를 쿼리하기 전에 ANN 색인을 한 번 이상 다시 빌드해야 합니다.
- 각 위치의 프로젝트에서 동시 색인 재빌드는 하나만 지원됩니다.
로컬 파일을 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
내의 모든 사용자 데이터는 기본 설정인 Google-owned and Google-managed encryption key를 사용하여 암호화됩니다. 이 기본 설정을 사용하면 특정 구성을 요구하지 않고도 데이터가 안전한지 확인할 수 있습니다.
암호화에 사용되는 키를 더 세부적으로 제어해야 하는 경우 Vertex AI RAG Engine은 고객 관리 암호화 키(CMEK)를 지원합니다. CMEK를 사용하면 Cloud Key Management Service (KMS) 내에서 관리되는 암호화 키를 사용하여 RAG 코퍼스 데이터를 보호할 수 있습니다.
RAG 코퍼스의 CMEK 제한사항에 대한 자세한 내용은 Vertex AI RAG Engine의 CMEK 제한사항을 참고하세요.
KMS 키 설정 및 권한 부여
CMEK로 암호화된 RAG 코퍼스를 만들려면 먼저 Google Cloud KMS에서 암호화 키를 설정하고 Vertex AI RAG Engine 서비스 계정에 이 키를 사용할 수 있는 필요한 권한을 부여해야 합니다.
기본 요건
다음 설정 단계를 수행하려면 사용자 계정에 KMS 키와 RAG 코퍼스를 만들려는 Google Cloud 프로젝트에 적절한 Identity and Access Management (IAM) 권한이 있는지 확인하세요. 일반적으로 Cloud KMS 관리자 역할 (roles/cloudkms.admin
)과 같은 역할이 필요합니다.
API 사용 설정
Cloud KMS API를 사용 설정하려면 다음을 수행하세요.
- Google Cloud 콘솔로 이동합니다.
- 키를 관리할 프로젝트를 선택하고 RAG 코퍼스를 만듭니다.
- 검색창에 '키 관리'를 입력하고 '키 관리' 서비스를 선택합니다.
- API가 사용 설정되지 않은 경우 사용 설정을 클릭합니다. API가 완전히 프로비저닝될 때까지 몇 분 정도 기다려야 할 수 있습니다.
KMS 키링 및 키 만들기
키링을 만들려면 다음 단계를 따르세요.
키 관리 섹션에서 키링 만들기를 클릭합니다.
다음을 입력합니다.
- 키링 이름: rag-engine-cmek-keys와 같은 키링의 고유한 이름을 입력합니다.
- 위치 유형: 리전을 선택합니다. CMEK로 RAG 코퍼스를 암호화할 때 사용하는 Vertex AI RAG Engine 엔드포인트와 동일한 리전에 Cloud Key Management Service 키링이 있어야 합니다.
- 위치:
us-central1
와 같은 선택한 지역을 선택합니다. 이 리전은 RAG 엔진 리소스가 상주할 리전과 일치해야 합니다.
만들기를 클릭합니다.
키링 내에 키를 만들려면 다음 단계를 따르세요.
키링이 생성되면 메시지가 표시되거나 키 만들기로 이동할 수 있습니다.
다음을 입력합니다.
- 키 이름: 키의 고유한 이름을 입력합니다(예:
my-rag-corpus-key
). - 보호 수준: 보호 수준 (소프트웨어 또는 HSM)을 선택합니다. 하드웨어 지원 키가 필요한 경우 HSM을 선택합니다.
- 용도: 대칭 암호화/복호화를 선택합니다. CMEK에 필요합니다.
- 키 자료 소스: 생성된 키를 선택합니다.
- 순환 기간: 선택사항입니다. Recommended. 조직의 보안 정책(예: 90일마다)에 따라 키 순환 일정을 구성합니다.
- 키 이름: 키의 고유한 이름을 입력합니다(예:
만들기를 클릭합니다.
키 리소스 이름을 복사하려면 다음 단계를 따르세요.
키가 생성되면 세부정보 페이지로 이동합니다.
리소스 이름을 찾습니다. 형식은
projects/YOUR_PROJECT_ID/locations/YOUR_REGION/keyRings/YOUR_KEY_RING_NAME/cryptoKeys/YOUR_KEY_NAME/cryptoKeyVersions/1
입니다.리소스 이름을 복사하고
/cryptoKeyVersions/VERSION_NUMBER
부분을 삭제합니다. 올바른 형식의 리소스 이름은projects/YOUR_PROJECT_ID/locations/YOUR_REGION/keyRings/YOUR_KEY_RING_NAME/cryptoKeys/YOUR_KEY_NAME
입니다.
Vertex AI RAG Engine 서비스 에이전트에 권한 부여
Vertex AI RAG Engine이 KMS 키를 사용하여 데이터를 암호화하고 복호화하려면 서비스 에이전트에 해당 키에 대한 적절한 권한이 있어야 합니다.
Vertex AI RAG Engine 서비스 에이전트를 식별하려면 다음 단계를 따르세요.
프로젝트의 Google Cloud 콘솔에서 IAM 및 관리자 > IAM 페이지로 이동합니다.
Identity and Access Management 페이지에서 Google 제공 역할 부여 포함 체크박스를 사용 설정합니다.
주 구성원 목록의 필터 또는 검색창에서 Vertex AI RAG Engine 서비스 에이전트를 검색합니다.
service-YOUR_PROJECT_NUMBER@gcp-sa-vertex-rag.iam.gserviceaccount.com
패턴을 따릅니다.여기에서 YOUR_PROJECT_NUMBER를 Google Cloud 프로젝트 번호로 바꿉니다.
Vertex AI RAG Engine 서비스 에이전트가 아직 없는 경우 다음 단계에 따라 서비스 에이전트 생성을 트리거하세요.
Cloud Shell 또는 명령줄에서 다음 명령어를 실행합니다.
gcloud beta services identity create --service=aiplatform.googleapis.com \ --projects=PROJECT_ID
또는 REST API 호출을 전송합니다.
curl -X POST -H "Authorization: Bearer $(gcloud auth print-access-token)" -H "Content-Type: application/json; charset=utf-8" -d "" "https://serviceusage.googleapis.com/v1beta1/projects/PROJECT_ID/services/aiplatform.googleapis.com:generateServiceIdentity"
Vertex AI RAG Engine 서비스 에이전트가 생성되었는지 확인합니다.
KMS 키에 대한 권한을 부여하려면 다음을 실행하세요.
Google Cloud 콘솔에서 키 관리 서비스로 돌아갑니다.
생성한 키가 포함된 키링을 선택합니다.
생성한 특정 키를 선택합니다.
키 세부정보 페이지에서 권한 탭으로 이동합니다.
주 구성원 추가를 클릭합니다.
새 주 구성원 필드에 Vertex AI RAG Engine 서비스 에이전트의 이메일 주소를 입력합니다.
역할 선택 드롭다운에서 Cloud KMS CryptoKey 암호화/복호화 역할 (
roles/cloudkms.cryptoKeyEncrypterDecrypter
)을 선택합니다. 이 역할은 서비스 에이전트에 암호화 및 복호화 작업에 키를 사용할 수 있는 필요한 권한을 부여합니다.저장을 클릭합니다.
고객 관리 암호화로 RAG 코퍼스 만들기
이 코드 샘플은 고객 관리 암호화 키 (CMEK)로 암호화된 RAG 코퍼스를 만드는 방법을 보여줍니다.
다음 코드 샘플의 변수를 바꿉니다.
Python
import vertexai
from google.cloud import aiplatform
from vertexai import rag
from google.cloud.aiplatform_v1.types.encryption_spec import EncryptionSpec
PROJECT_ID = YOUR_PROJECT_ID
LOCATION = YOUR_RAG_ENGINE_LOCATION
DISPLAY_NAME = YOUR_RAG_CORPUS_DISPLAY_NAME
KMS_KEY_NAME = YOUR_KMS_KEY_NAME
vertexai.init(project=PROJECT_ID)
rag_corpus = rag.create_corpus(display_name=DISPLAY_NAME, encryption_spec=EncryptionSpec(kms_key_name=KMS_KEY_NAME))
REST
PROJECT_ID = YOUR_PROJECT_ID
LOCATION = YOUR_RAG_ENGINE_LOCATION
DISPLAY_NAME = YOUR_RAG_CORPUS_DISPLAY_NAME
KMS_KEY_NAME = YOUR_KMS_KEY_NAME
curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json" \
https://${LOCATION}-aiplatform.googleapis.com/v1/projects/${PROJECT_ID}/locations/${LOCATION}/ragCorpora \
-d '{
"display_name" : '\""${CORPUS_DISPLAY_NAME}"\"',
"encryption_spec" : {
"kms_key_name" : '\""${KMS_KEY_NAME}"\"'
}
}'
할당량
Vertex AI RAG Engine과 같은 Vertex AI 서비스에서 CMEK를 사용하는 경우 리전별 프로젝트당 사용할 수 있는 고유한 Cloud KMS 키 수에 할당량이 적용됩니다. 이 할당량은 aiplatform.googleapis.com/in_use_customer_managed_encryption_keys
측정항목으로 추적됩니다.
프로젝트 및 리전 내에서 RAG 코퍼스와 같은 리소스를 만들기 위해 고유한 새 KMS 키를 사용할 때마다 KMS 키가 이 할당량의 한 단위를 사용합니다. 이 할당량 단위는 해당 특정 키를 사용하는 리소스가 삭제되더라도 해제되지 않습니다.
현재 한도보다 더 많은 고유 키가 필요한 경우 선택한 리전의 aiplatform.googleapis.com/in_use_customer_managed_encryption_keys
에 대한 할당량 상향을 요청해야 합니다.
할당량 상향을 요청하는 방법에 대한 자세한 내용은 Google Cloud 콘솔에서 할당량 보기 및 수정을 참고하세요.
다음 단계
- RagManagedDb에 대해 자세히 알아보려면 RagManagedDb 이해하기를 참고하세요.
- Google Drive 또는 Cloud Storage에서 파일과 폴더를 가져오려면 RAG 파일 가져오기 예시를 참고하세요.
- RAG 파일을 나열하려면 RAG 파일 나열 예시를 참고하세요.