자습서: S3 Vectors 시작
참고
Amazon S3 Vectors는 Amazon Simple Storage Service의 미리 보기 릴리스이며 변경될 수 있습니다.
이 자습서에서는 Amazon S3 콘솔을 사용하여 AWS 리전에 S3 벡터 버킷과 벡터 인덱스를 만듭니다. 그런 다음 Amazon Bedrock 임베딩 모델을 사용하여 데이터의 벡터 임베딩을 생성하고 벡터 인덱스에 저장하여 시맨틱 검색을 수행합니다.
아직 계정이 없는 경우 AWS 계정에 가입하여 시작합니다. 계정을 설정하는 방법에 대한 자세한 내용은 Amazon S3 시작하기 섹션을 참조하세요.
주제
1단계: 콘솔을 사용하여 벡터 버킷 만들기
S3 벡터 버킷은 벡터를 저장하고 쿼리하기 위해 특별히 구축된 Amazon S3 버킷의 한 유형입니다. 전용 API 작업을 사용하여 벡터 데이터를 작성하고 쿼리합니다. IAM ID 기반 정책 및 리소스 기반 정책과 같은 액세스 제어 메커니즘을 사용하여 벡터 데이터에 대한 액세스를 제어할 수 있습니다.
이 단계에서는 Amazon S3 콘솔을 사용하여 첫 번째 벡터 버킷을 만듭니다. 벡터 버킷을 만드는 다른 방법은 벡터 버킷 만들기 섹션을 참조하세요.
벡터 버킷 생성
AWS Management Console에 로그인한 후 https://console.aws.amazon.com/s3/
에서 S3 콘솔을 엽니다. -
왼쪽 탐색 창에서 벡터 버킷을 선택합니다.
-
벡터 버킷 페이지에서 벡터 버킷 생성을 선택합니다.
-
벡터 버킷 생성 페이지의 벡터 버킷 이름 필드에 이름을 입력합니다. 이 자습서에서는
media-embeddings
를 벡터 버킷 이름으로 사용합니다. 벡터 버킷 이름은 3~63자여야 하며 AWS 리전 버킷 내에서 고유해야 합니다. 유효한 문자는 소문자(a~z), 숫자(0~9), 하이픈(-)입니다.참고
버킷을 만든 후에는 벡터 버킷 이름을 변경할 수 없습니다.
-
암호화에서 암호화 유형 지정을 선택합니다. 암호화 유형을 AWS Key Management Service 키를 사용한 서버 측 암호화(SSE-KMS) 또는 기본값인 Amazon S3 관리형 키를 사용한 서버 측 암호화(SSE-S3)로 지정할 수 있습니다. 이 자습서에서는 Amazon S3 관리형 키(SSE-S3)를 사용한 서버 측 암호화를 선택합니다. 벡터 버킷의 암호화 구성 설정에 대한 자세한 내용은 S3 Vectors의 데이터 보호 및 암호화 섹션을 참조하세요.
참고
벡터 버킷을 만든 후에는 암호화 유형을 변경할 수 없습니다.
-
벡터 버킷 생성을 선택합니다.
2단계: 콘솔을 사용하여 벡터 버킷에 벡터 인덱스 만들기
참고
벡터 인덱스 구성 파라미터를 신중하게 선택합니다. 벡터 인덱스를 만든 후에는 벡터 인덱스 이름, 차원, 거리 지표 또는 필터링할 수 없는 메타데이터 키를 업데이트할 수 없습니다. 이러한 값을 변경하려면 새 벡터 인덱스를 만들어야 합니다.
이 단계에서는 벡터 버킷에 벡터 인덱스를 만듭니다. 벡터 인덱스는 벡터 임베딩을 저장하고 쿼리하는 데 사용됩니다. 벡터 인덱스에 대한 자세한 내용은 벡터 인덱스 섹션을 참조하세요.
벡터 인덱스 생성
-
Amazon S3 콘솔의 벡터 버킷 목록에서 새로 만든 벡터 버킷으로 이동합니다.
-
그런 다음 벡터 인덱스 생성을 선택합니다.
-
벡터 인덱스 생성 페이지의 벡터 인덱스 이름 필드에 이름을 입력합니다. 이 자습서에서는
movies
를 벡터 인덱스 이름으로 사용합니다.벡터 인덱스 이름은 3~63자여야 하며이 벡터 버킷 내에서 고유해야 합니다. 유효한 문자는 소문자(a~z), 숫자(0~9), 하이픈(-), 점(.)입니다.
인덱스를 만든 후에는 벡터 인덱스 이름을 변경할 수 없습니다.
-
차원에서 1~4,096 사이의 숫자 값을 지정하여 벡터 임베딩 모델에서 생성되는 각 벡터의 숫자 수를 결정합니다. 임베딩 모델은 데이터(예: 텍스트 또는 이미지)를 숫자 벡터로 변환하는 특수 기계 학습(ML) 모델입니다. 임베딩 모델은 일반적으로 500~2,000개 차원의 출력을 생성하며, 각 차원은 부동 소수점 숫자입니다. 이 자습서에서는 Amazon Bedrock의 Titan Text v2 임베딩 모델을 사용합니다. 이 임베딩 모델은 1,024개 차원 벡터를 기본값으로 사용하므로 벡터 인덱스의 차원을
1024
로 설정합니다.인덱스를 만든 후에는 차원 값을 변경할 수 없습니다. 임베딩 모델의 권장 사항에 따라 차원 값을 신중하게 지정합니다.
-
거리 지표에서 거리 지표로 코사인(각형 유사성 측정) 또는 유클리드(직선 거리 측정)를 선택하여 쿼리 중에 벡터 간의 유사성을 계산하는 방법을 정의합니다. 이 자습서에서는 코사인을 선택합니다.
인덱스를 만든 후에는 거리 지표를 변경할 수 없습니다. 임베딩 모델의 권장 사항에 따라 거리 지표를 신중하게 선택합니다.
-
추가 설정(선택 사항)에서 필터링 불가능한 메타데이터 키를 지정하여 벡터 임베딩과 함께 보조 정보를 저장할 수 있습니다.
참고
인덱스를 만든 후 벡터 데이터를 삽입할 때 필터링 가능한 메타데이터를 키-값 페어로 각 벡터에 연결할 수 있습니다. 기본적으로 벡터에 연결된 모든 메타데이터 키는 필터링이 가능하며, 유사성 쿼리에서 필터로 사용할 수 있습니다. 벡터 인덱스 만들기 중에 필터링 불가능한 것으로 지정된 메타데이터 키만 필터링에서 제외됩니다.
필터링 불가능한 각 메타데이터 키는 1~63자여야 하며 벡터 인덱스 내에서 고유해야 합니다. 이러한 키는 유사성 쿼리 중에 필터링할 필요가 없는 참조 정보를 저장하는 데 유용합니다. 예를 들어 텍스트 임베딩 작업 시 참조용으로 원본 텍스트 청크를 보존할 수 있습니다. 이 자습서에서는 벡터 임베딩을 만들려는 텍스트 데이터를 저장하기 위해 이름이
source_text
인 필터링 불가능한 메타데이터 키를 추가합니다.인덱스 생성 후에는 필터링 불가능한 메타데이터 키를 업데이트할 수 없습니다. 메타데이터 구조를 신중하게 계획합니다.
-
그런 다음 벡터 인덱스 생성을 선택합니다.
새 벡터 인덱스가 버킷 내에 나타나는지 확인합니다.
3단계: SDK for Python(Boto3)을 사용하여 벡터 인덱스에 벡터 삽입
벡터를 삽입, 나열 및 쿼리하려면 AWS SDK, AWS CLI 또는 Amazon S3 REST API를 사용합니다.
이 단계는 PutVectors API 작업을 사용하여 벡터 인덱스에 벡터 임베딩을 삽입하는 것입니다.
먼저 선택한 임베딩 모델을 사용하여 벡터 임베딩을 생성해야 합니다. Amazon Bedrock을 사용하는 경우 InvokeModel API 작업으로 원하는 임베딩 모델을 지정하여 임베딩을 생성합니다. 또는 단일 명령으로 벡터 임베딩을 생성하고 삽입하려면 (선택 사항) S3 Vectors Embed CLI를 사용하여 벡터 임베딩 생성 자동화 섹션을 참조하세요.
다음 예제 코드는 AWS SDK for Python (Boto3)를 사용하여 Amazon Bedrock에서 Titan Text Embeddings V2 모델로 1,024개 차원 벡터 임베딩을 생성하고 PutVectors
API를 사용하여 벡터 인덱스에 저장합니다. 각 벡터와 함께 키-값 페어를 필터링 가능한 메타데이터로 연결합니다. 또한 source_text
라는 필터링 불가능한 메타데이터 키를 사용하여 각 벡터가 파생되는 원본 텍스트를 보존합니다. 요청 처리량을 극대화하고 속도와 효율성을 최적화하려면 벡터를 배치로 삽입 및 삭제하는 것이 좋습니다. 자세한 정보는 S3 Vectors 모범 사례을 참조하세요.
# Populate a vector index with embeddings from Amazon Titan Text Embeddings V2. import boto3 import json # Create Bedrock Runtime and S3 Vectors clients in the AWS Region of your choice. bedrock = boto3.client("bedrock-runtime", region_name="us-west-2") s3vectors = boto3.client("s3vectors", region_name="us-west-2") # Texts to convert to embeddings. texts = [ "Star Wars: A farm boy joins rebels to fight an evil empire in space", "Jurassic Park: Scientists create dinosaurs in a theme park that goes wrong", "Finding Nemo: A father fish searches the ocean to find his lost son" ] # Generate vector embeddings. embeddings = [] for text in texts: response = bedrock.invoke_model( modelId="amazon.titan-embed-text-v2:0", body=json.dumps({"inputText": text}) ) # Extract embedding from response. response_body = json.loads(response["body"].read()) embeddings.append(response_body["embedding"]) # Write embeddings into vector index with metadata. s3vectors.put_vectors( vectorBucketName="media-embeddings", indexName="movies", vectors=[ { "key": "Star Wars", "data": {"float32": embeddings[0]}, "metadata": {"source_text": texts[0], "genre":"scifi"} }, { "key": "Jurassic Park", "data": {"float32": embeddings[1]}, "metadata": {"source_text": texts[1], "genre":"scifi"} }, { "key": "Finding Nemo", "data": {"float32": embeddings[2]}, "metadata": {"source_text": texts[2], "genre":"family"} } ] )
4단계. SDK for Python(Boto3)을 사용하여 벡터 인덱스의 벡터 쿼리
벡터 인덱스에 벡터 임베딩을 저장한 후 QueryVectors API 작업을 사용하여 유사성 검색을 수행할 수 있습니다.
먼저 3단계: SDK for Python(Boto3)을 사용하여 벡터 인덱스에 벡터 삽입에서 삽입하는 동안 사용된 것과 동일한 임베딩 모델을 사용하여 쿼리 벡터 임베딩을 생성해야 합니다. 이 자습서에서는 SDK for Python(Boto3)을 통해 Amazon Bedrock의 Titan Text Embeddings V2 모델을 사용합니다.
유사성 검색을 수행하여 가장 가까운 일치 벡터를 반환할 수 있습니다. 유사성 검색에서는 선택적으로 메타데이터 키를 사용하여 필터링하여 특정 기준에 따라 결과를 좁히는 동시에 시맨틱 관련성을 유지할 수 있습니다.
# Query a vector index with an embedding from Amazon Titan Text Embeddings V2. import boto3 import json # Create Bedrock Runtime and S3 Vectors clients in the AWS Region of your choice. bedrock = boto3.client("bedrock-runtime", region_name="us-west-2") s3vectors = boto3.client("s3vectors", region_name="us-west-2") # Query text to convert to an embedding. input_text = "adventures in space" # Generate the vector embedding. response = bedrock.invoke_model( modelId="amazon.titan-embed-text-v2:0", body=json.dumps({"inputText": input_text}) ) # Extract embedding from response. model_response = json.loads(response["body"].read()) embedding = model_response["embedding"] # Query vector index. response = s3vectors.query_vectors( vectorBucketName="media-embeddings", indexName="movies", queryVector={"float32": embedding}, topK=3, returnDistance=True, returnMetadata=True ) print(json.dumps(response["vectors"], indent=2)) # Query vector index with a metadata filter. response = s3vectors.query_vectors( vectorBucketName="media-embeddings", indexName="movies", queryVector={"float32": embedding}, topK=3, filter={"genre": "scifi"}, returnDistance=True, returnMetadata=True ) print(json.dumps(response["vectors"], indent=2))
(선택 사항) S3 Vectors Embed CLI를 사용하여 벡터 임베딩 생성 자동화
Amazon S3 Vectors Embed CLI는 S3 Vectors의 벡터 임베딩 작업을 간소화하는 독립형 명령줄 도구입니다. 단일 명령으로 Amazon Bedrock을 사용하여 데이터에 대한 벡터 임베딩을 만들고 S3 벡터 인덱스에 저장하고 쿼리할 수 있습니다. 이 도구는 다음과 같은 명령을 지원합니다.
-
s3vectors-embed put
: 텍스트, 파일 콘텐츠 또는 S3 객체의 벡터 임베딩을 생성하고 S3 벡터 인덱스에 벡터로 저장합니다. -
s3vectors-embed query
: 쿼리 입력을 임베딩하고 S3 벡터 인덱스에서 유사한 벡터를 검색합니다.
명령 및 사용에 대한 자세한 내용은 Amazon S3 Vectors Embed CLI GitHub 리포지토리
(선택 사항) S3 Vectors를 Amazon Bedrock 지식 기반과 통합
Amazon Bedrock 지식 기반은 S3 Vectors와 통합되어 벡터 데이터세트의 비용 효과적이고 장기적인 스토리지를 제공합니다.
사전 조건
사전 조건에 따라 Amazon Bedrock 지식 기반을 생성하는 데 필요한 권한이 있는지 확인합니다.
-
S3 Vectors 및 Amazon Bedrock 서비스 모두에 대한 적절한 IAM 권한. S3 Vectors의 IAM 권한에 대한 자세한 내용은 S3 Vectors의 Identity and Access Management 섹션을 참조하세요.
-
지식 기반으로 수집하기 위해 준비된 소스 문서.
-
임베딩 모델 요구 사항에 대한 이해.
콘솔에서 S3 Vectors를 사용하여 Amazon Bedrock 지식 기반 만들기
Amazon Bedrock 지식 기반은 포괄적인 완전관리형 RAG 워크플로를 제공합니다. S3 Vectors로 지식 기반을 만들면 Amazon Bedrock은 S3 데이터 소스에서 데이터를 자동으로 가져오고, 콘텐츠를 텍스트 블록으로 변환하고, 임베딩을 생성하고, 벡터 인덱스에 저장합니다. 그런 다음 지식 기반을 쿼리하고 소스 데이터에서 검색된 청크를 기반으로 응답을 생성할 수 있습니다.
콘솔에서 S3 Vectors를 사용하여 Amazon Bedrock 지식 기반 생성
-
Amazon Bedrock 권한이 있는 IAM 역할을 사용하여 AWS Management Console에 로그인하고 https://console.aws.amazon.com/bedrock/
에서 Amazon Bedrock 콘솔을 엽니다. -
왼쪽 탐색 창에서 지식 기반을 선택합니다.
-
지식 기반 섹션에서 만들기를 선택합니다. 드롭다운 목록에서 벡터 저장소가 있는 지식 기반을 선택합니다.
-
이 자습서에서는 지식 기반 이름, 지식 기반 설명 및 IAM 권한을 기본값으로 유지합니다.
-
데이터 소스 유형 선택에서 지식 기반을 연결할 데이터 소스를 선택합니다. 이 자습서에서는 Amazon S3를 선택합니다.
-
(선택 사항) 태그 또는 애플리케이션 로그를 제공합니다.
-
다음을 선택합니다.
-
데이터 소스 구성 페이지에서 데이터 소스 이름, 데이터 소스 위치, 구문 분석 전략 및 청크 전략을이 자습서의 기본 설정으로 유지합니다.
-
S3 URI에서 소스 파일이 포함된 S3 범용 버킷을 입력하거나 S3 찾아보기를 선택하고 S3 범용 버킷을 선택합니다.
-
암호화된 S3 데이터의 경우 S3 데이터에 대해 고객 관리형 KMS 키 추가를 선택하고 고객 관리형 KMS 키를 지정합니다.
-
다음을 선택하여 임베딩 모델 및 벡터 스토어 옵션을 지정하는 다음 단계로 진행합니다.
-
임베딩 모델 섹션에서 모델 선택을 선택하고 S3 Vectors와 호환되는 임베딩 모델을 선택합니다. 부동 소수점 임베딩을 사용해야 합니다. 바이너리 유형은 지원되지 않습니다.
-
(선택 사항) 추가 구성 섹션을 확장하여 다음 구성 옵션을 확인합니다(모든 모델이 모든 구성을 지원하는 것은 아님).
-
임베딩 유형 - 데이터를 부동 소수점(float32) 벡터 임베딩(더 정확하지만 비용이 많이 듦) 또는 바이너리 벡터 임베딩(덜 정확하지만 비용이 적게 듦)으로 변환할지 여부입니다. S3 Vectors와 통합하려면 부동 소수점 벡터 임베딩을 선택해야 합니다.
-
벡터 차원 - 임베딩 모델 권장 차원 크기를 선택합니다.
-
-
벡터 스토어 섹션에서 새 벡터 버킷의 자동 설정을 위해 권장 방법인 빠른 새 벡터 스토어 생성을 선택하거나, 사용 가능한 경우 기존 벡터 스토어 사용을 선택하여 기존 벡터 버킷을 사용합니다. 기존 벡터 스토어 흐름 사용에 대한 자세한 내용은 Amazon Bedrock 사용 설명서의 Prerequisites for using a vector store you created for a knowledge base를 참조하세요.
-
추가 구성의 경우 - 기본적으로 벡터 버킷은 Amazon S3 관리형 키(SSE-S3)를 사용한 서버 측 암호화를 사용합니다. 암호화 설정에 대한 향상된 제어를 위해 AWS Key Management Service 키(SSE-KMS)를 사용한 서버 측 암호화에 자체 KMS 키를 사용하도록 선택할 수 있습니다.
-
다음을 선택하여 지식 기반 세부 정보를 검토한 다음 지식 기반 생성을 선택합니다.
참고
지식 기반을 만드는 데 걸리는 시간은 구체적인 구성에 따라 달라집니다. 지식 기반 만들기가 완료되면 지식 기반 상태가 준비 또는 사용 가능 상태로 변경됩니다. 지식 기반이 준비되고 사용 가능해지면 데이터 소스를 최초로 한 번 동기화하고, 이후에는 콘텐츠를 최신 상태로 유지하고 싶을 때마다 동기화하세요. 콘솔에서 지식 기반을 선택하고 데이터 소스 개요 섹션에서 동기화를 선택하면 됩니다.
(선택 사항) S3 Vectors를 Amazon OpenSearch와 통합
Amazon OpenSearch Service
자세한 정보는 OpenSearch Service에서 S3 Vectors 사용을 참조하세요.