벡터 쿼리 - Amazon Simple Storage Service

벡터 쿼리

참고

Amazon S3 Vectors는 Amazon Simple Storage Service의 미리 보기 릴리스이며 변경될 수 있습니다.

쿼리 벡터, 반환할 관련 결과 수(가장 가까운 Top K 근사치), 인덱스 ARN을 지정하는 QueryVectors API 작업을 사용하여 유사성 쿼리를 실행할 수 있습니다. 또한 쿼리에서 메타데이터 필터를 사용하여 필터와 일치하는 벡터만 검색할 수 있습니다. 필터링 불가능한 메타데이터 필드를 기준으로 필터링하도록 요청하면 요청이 400 Bad Request 오류를 반환합니다. 메타데이터 필터링에 대한 자세한 내용은 메타데이터 필터링 섹션을 참조하세요.

응답에서 벡터 키는 기본적으로 반환됩니다. 필요에 따라 응답에 거리와 메타데이터를 포함할 수 있습니다.

쿼리 벡터를 생성할 때 벡터 인덱스에 저장된 초기 벡터를 생성하는 데 사용된 것과 동일한 벡터 임베딩 모델을 사용해야 합니다. 예를 들어 Amazon Bedrock에서 Amazon Titan Text Embeddings V2 모델을 사용하여 문서의 벡터 임베딩을 만드는 경우 동일한 임베딩 모델을 사용하여 질문을 쿼리 벡터로 변환합니다. 또한 Amazon Bedrock 지식 기반은 Amazon Bedrock이 S3 데이터 소스에서 데이터를 자동으로 가져오고, 콘텐츠를 텍스트 블록으로 변환하고, 임베딩을 생성하고, 벡터 인덱스에 저장하는 포괄적인 완전관리형 RAG 워크플로를 제공합니다. 그런 다음 지식 기반을 쿼리하고 소스 데이터에서 검색된 청크를 기반으로 응답을 생성할 수 있습니다. 콘솔의 Amazon Bedrock 지식 기반에서 벡터를 쿼리하는 방법에 대한 자세한 내용은 (선택 사항) S3 Vectors를 Amazon Bedrock 지식 기반과 통합 섹션을 참조하세요.

또한 오픈 소스 Amazon S3 Vectors Embed CLI 도구는 명령줄에서 시맨틱 검색을 수행하는 간소화된 방법을 제공합니다. 이 오픈 소스 도구는 Amazon Bedrock 파운데이션 모델을 사용하여 벡터 임베딩 생성을 처리하고 S3 벡터 인덱스에 대해 시맨틱 검색 작업을 실행하여 쿼리 프로세스를 간소화합니다. 이 도구를 사용하여 벡터 데이터를 쿼리하는 방법에 대한 자세한 내용은 s3vectors-embed-cli를 사용하여 벡터 임베딩 생성 및 시맨틱 검색 수행 섹션을 참조하세요.

S3 Vectors는 1초 미만의 쿼리 지연 시간을 제공합니다. S3 Vectors는 Amazon S3의 탄력적 처리량을 사용하여 수백만 개의 벡터에서 검색을 처리하며 쿼리 빈도가 낮은 워크로드에 적합합니다. 벡터 임베딩에 대한 유사성 쿼리를 수행하려면 벡터 임베딩 모델, 벡터 데이터세트 크기(벡터 및 차원 수), 쿼리 분포 등 몇 가지 요인이 평균 재현율 성능에 영향을 미칠 수 있습니다. S3 Vectors는 대부분의 데이터세트에 대해 90% 이상의 평균 재현율을 제공합니다. 평균 재현율은 쿼리 결과의 품질을 측정합니다. 평균 재현율 90%는 응답에 쿼리 벡터를 기준으로 벡터 인덱스에 저장된 실제 가장 가까운 벡터(실측 정보)의 90%가 포함되어 있음을 의미합니다. 그러나 실제 성능은 특정 사용 사례에 따라 다를 수 있으므로 대표 데이터 및 쿼리를 사용하여 자체 테스트를 수행함으로써 S3 Vectors가 재현 요구 사항을 충족하는지 검증하는 것이 좋습니다.

SDK for Python
# 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))