查詢向量 - Amazon Simple Storage Service

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

查詢向量

注意

Amazon S3 Vectors 為 Amazon Simple Storage Service 的預覽版本,可能會有所變更。

您可以使用 QueryVectors API 操作執行相似性查詢,您可以在其中指定查詢向量、要傳回的相關結果數目 (最接近 K 的鄰),以及索引 ARN。此外,您可以在查詢中使用中繼資料篩選條件,只搜尋符合篩選條件的向量。如果您請求對不可篩選的中繼資料欄位進行篩選,請求將傳回400 Bad Request錯誤。如需中繼資料篩選的詳細資訊,請參閱 中繼資料篩選

在回應中,依預設會傳回向量索引鍵。您可以選擇在回應中包含距離和中繼資料。

產生查詢向量時,您應該使用用來產生存放在向量索引中初始向量的相同向量內嵌模型。例如,如果您在 Amazon Bedrock 中使用 Amazon Titan Text Embeddings V2 模型來產生文件的向量內嵌,請使用相同的內嵌模型將問題轉換為查詢向量。此外,Amazon Bedrock 知識庫提供全受管end-to-end RAG 工作流程,其中 Amazon Bedrock 會自動從 S3 資料來源擷取資料、將內容轉換為文字區塊、產生內嵌,並將它們存放在向量索引中。然後,您可以查詢知識庫,並根據從來源資料擷取的區塊產生回應。如需如何在主控台中從 Amazon Bedrock 知識庫查詢向量的詳細資訊,請參閱 (選用) 整合 S3 向量與 Amazon Bedrock 知識庫

此外,開放原始碼 Amazon S3 Vectors 內嵌 CLI 工具提供從命令列執行語意搜尋的簡化方式。此開放原始碼工具透過使用 Amazon Bedrock 基礎模型處理向量內嵌產生,並根據 S3 向量索引執行語意搜尋操作,簡化查詢程序。如需使用此工具查詢向量資料的詳細資訊,請參閱 使用 建立向量內嵌和執行語意搜尋 s3vectors-embed-cli

S3 向量提供次秒的查詢延遲時間。S3 Vectors 使用 Amazon S3 的彈性輸送量來處理數百萬個向量的搜尋,非常適合查詢頻率較低的工作負載。為了執行向量內嵌的相似性查詢,數個因素可能會影響平均取回效能,包括向量內嵌模型、向量資料集的大小 (向量和維度的數量),以及查詢的分佈。S3 向量可為大多數資料集提供 90% 以上的平均取回率。平均取回會測量查詢結果的品質。90% 的平均取回表示回應包含 90% 的實際最接近向量 (地面真相),這些向量存放在相對於查詢向量的向量索引中。不過,由於實際效能可能會因您的特定使用案例而有所不同,我們建議您使用代表性資料和查詢進行自己的測試,以驗證 S3 向量是否符合您的召回需求。

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))