Inserimento di vettori in un indice vettoriale - Amazon Simple Storage Service

Inserimento di vettori in un indice vettoriale

Nota

Amazon S3 Vectors è disponibile in versione di anteprima per Amazon Simple Storage Service ed è soggetto a modifiche.

È possibile aggiungere vettori a un indice vettoriale con l’operazione API PutVectors. Ogni vettore è costituito da una chiave, che lo identifica in modo univoco in un indice vettoriale. Se si inserisce un vettore con una chiave già esistente nell’indice, il vettore esistente verrà completamente sovrascritto, rendendo il vettore precedente non più ricercabile. Per massimizzare il throughput di scrittura, è consigliabile inserire i vettori in batch di grandi dimensioni, fino alla dimensione massima del batch per PutVectors. Per ulteriori informazioni sulla dimensione massima del batch per PutVectors, che è il limite di vettori per chiamata API PutVectors, consulta Limitazioni e restrizioni. Inoltre, è possibile collegare a ciascun vettore i metadati (ad esempio anno, autore, genere, posizione) come coppie chiave-valore. Per impostazione predefinita, tutte le chiavi di metadati collegate ai vettori sono filtrabili e possono essere utilizzate come filtri in una query di somiglianza. Solo le chiavi di metadati specificate come non filtrabili durante la creazione dell’indice vettoriale non possono essere utilizzate come filtro. Gli indici vettoriali S3 supportano i metadati di tipo stringa, numerico, booleano ed elenco. Per ulteriori informazioni sul limite della dimensione totale dei metadati per vettore e sul limite della dimensione dei metadati filtrabili per vettore, consulta Limitazioni e restrizioni. Se la dimensione dei metadati supera questi limiti, l’operazione API PutVectors restituirà un errore 400 Bad Request.

Prima di aggiungere dati vettoriali all’indice vettoriale con l’operazione API PutVectors, è necessario convertire i dati non elaborati in embedding vettoriali, che sono rappresentazioni numeriche dei contenuti sotto forma di array di numeri a virgola mobile. Gli embedding vettoriali acquisiscono il significato semantico dei contenuti, consentendo le ricerche per similarità una volta archiviati nell’indice vettoriale tramite l’operazione PutVectors. È possibile generare embedding vettoriali utilizzando vari metodi a seconda del tipo di dati e del caso d’uso. Questi metodi includono l’utilizzo di framework di machine learning, librerie di embedding specializzate o servizi AWS come Amazon Bedrock. Ad esempio, utilizzando Amazon Bedrock è possibile generare embedding con l’operazione API InvokeModel e il modello di embedding preferito.

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.

Inoltre, lo strumento open source Amazon S3 Vectors Embed CLI offre un modo semplificato per generare embedding ed eseguire ricerche semantiche dalla riga di comando. Per ulteriori informazioni su questo strumento open source che automatizza sia la generazione di embedding vettoriali con i modelli di fondazione di Amazon Bedrock sia le operazioni di ricerca semantica all’interno degli indici vettoriali S3, consulta Creazione di embedding vettoriali ed esecuzione di ricerche semantiche con s3vectors-embed-cli.

Nota

Quando inserisci dati vettoriali nell’indice vettoriale, è necessario fornire i dati vettoriali come valori float32 (in virgola mobile a 32 bit). Se passi valori ad alta precisione ad AWS SDK, S3 Vectors converte i valori in virgola mobile a 32 bit prima di archiviarli e le operazioni GetVectors, ListVectors, e QueryVectors restituiscono i valori float32. AWS SDK diversi possono avere tipi numerici predefiniti diversi, quindi assicurati che i vettori siano formattati correttamente come valori float32 indipendentemente dall’SDK che utilizzi. Ad esempio, in Python utilizza numpy.float32 o converti in modo esplicito i valori.

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