View a markdown version of this page

Query sui vettori - Amazon Simple Storage Service

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Query sui vettori

È possibile eseguire una query di similarità con l'operazione QueryVectorsAPI, in cui si specifica il vettore di query, il numero di risultati pertinenti da restituire (i primi K vicini più vicini) e l'indice ARN. Inoltre, si possono utilizzare i filtri di metadati in una query per cercare solo i vettori che corrispondono al filtro. Se si effettua una richiesta di filtro in base a un campo di metadati non filtrabili, la richiesta restituirà un errore 400 Bad Request. Per ulteriori informazioni sul filtro dei metadati, consulta Filtro dei metadati.

Nella risposta, per impostazione predefinita vengono restituite le chiavi del vettore. Facoltativamente, è possibile includere nella risposta la distanza e i metadati. Quando topK supera la dimensione della pagina, i risultati vengono restituiti su più pagine. La risposta include un messaggio nextToken che viene utilizzato per recuperare la pagina successiva. Continua a fare QueryVectors richieste con gli stessi filter parametri queryVectortopK, e, passando il nextToken da ogni risposta, finché non nextToken è più presente. In alternativa, puoi utilizzare gli impaginatori integrati negli SDK AWS per iterare automaticamente su tutte le pagine senza gestirle manualmente. nextToken I token di paginazione rimangono validi per diversi minuti dopo l'esecuzione della query. Se un token di impaginazione scade, emetti nuovamente la query originale per iniziare una nuova sessione. Le scritture sull'indice vettoriale tra i recuperi di pagina non si rifletteranno in quella sessione di interrogazione. Per i limiti specifici relativi alle topK dimensioni della pagina, consulta. Limitazioni e restrizioni

Quando si genera il vettore di query, è necessario utilizzare lo stesso modello di embedding vettoriale utilizzato per generare i vettori iniziali archiviati nell’indice vettoriale. Ad esempio, se si utilizza il modello Embedding di testo Amazon Titan V2 in Amazon Bedrock per generare embedding vettoriali dei documenti, è necessario utilizzare lo stesso modello di embedding per convertire una domanda in un vettore di query. Inoltre, Knowledge Base per Amazon Bedrock fornisce un flusso di lavoro RAG end-to-end completamente gestito in cui Amazon Bedrock recupera automaticamente i dati dall’origine dati S3, converte i contenuti in blocchi di testo, genera embedding e li archivia nell’indice vettoriale. È quindi possibile eseguire query sulla knowledge base e ottenere risposte basate sui blocchi recuperati dai dati di origine. Per ulteriori informazioni su come eseguire query sui vettori da una knowledge base per Amazon Bedrock nella console, consulta (Facoltativo) Integrazione di S3 Vectors con Knowledge Base per Amazon Bedrock.

Inoltre, lo strumento open source della CLI di Amazon S3 Vectors Embed offre un modo semplificato per eseguire ricerche semantiche dalla riga di comando. Questo strumento open source semplifica il processo di query gestendo sia la generazione di embedding vettoriali con i modelli di fondazione di Amazon Bedrock sia l’esecuzione di operazioni di ricerca semantica sugli indici vettoriali S3. Per ulteriori informazioni sull’utilizzo di questo strumento per effettuare query sui dati vettoriali, consulta Creazione di embedding vettoriali ed esecuzione di ricerche semantiche con s3vectors-embed-cli.

S3 Vectors offre tempi di risposta inferiori al secondo per le cold query, sfruttando il throughput elastico di Amazon S3 per eseguire ricerche efficienti tra miliardi di vettori. Ciò lo rende estremamente conveniente per i carichi di lavoro con richieste poco frequenti. Per le query più frequenti, S3 Vectors è in grado di fornire tempi di risposta di appena 100 ms, a vantaggio dei carichi di lavoro con modelli di query ripetuti o frequenti. Quando i risultati delle query vengono restituiti su più pagine, è possibile accedere immediatamente alle pagine successive.

Per l’esecuzione di query di somiglianza per gli embedding vettoriali, diversi fattori possono influire sulle prestazioni di richiamata medie, tra cui il modello di embedding vettoriale, la dimensione del set di dati vettoriali (il numero di vettori e le dimensioni) e la distribuzione delle query. S3 Vectors offre una richiamata media superiore al 90% per la maggior parte dei set di dati. La richiamata media misura la qualità dei risultati delle query. Una richiamata media del 90% significa che la risposta contiene il 90% dei vettori effettivi più vicini (dati acquisiti) archiviati nell’indice vettoriale relativo al vettore di query. Tuttavia, poiché le prestazioni effettive possono variare a seconda dei casi d’uso specifici, è consigliabile eseguire test personalizzati con dati e query rappresentativi per verificare che S3 Vectors soddisfi i requisiti di richiamata.

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)) # Paginated query with manual nextToken handling. query_params = dict( vectorBucketName="media-embeddings", indexName="movies", queryVector={"float32": embedding}, topK=500, returnDistance=True, returnMetadata=True, ) response = s3vectors.query_vectors(**query_params) for vector in response["vectors"]: print(vector) while response.get("nextToken") is not None: response = s3vectors.query_vectors(**query_params, nextToken=response["nextToken"]) for vector in response["vectors"]: print(vector) # Use the built-in paginator to automatically iterate through all pages. paginator = s3vectors.get_paginator("query_vectors") for page in paginator.paginate( vectorBucketName="media-embeddings", indexName="movies", queryVector={"float32": embedding}, topK=500, returnDistance=True, returnMetadata=True, ): for vector in page["vectors"]: print(vector)