Insertion de vecteurs dans un index vectoriel - Amazon Simple Storage Service

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Insertion de vecteurs dans un index vectoriel

Vous pouvez ajouter des vecteurs à un index vectoriel à l'aide de l'opération PutVectorsAPI. Chaque vecteur est constitué d’une clé qui identifie de manière unique chaque vecteur dans un index vectoriel. Si vous insérez un vecteur avec une clé qui existe déjà dans l’index, il remplace complètement le vecteur existant, ce qui rend le vecteur précédent impossible à rechercher. Pour optimiser le débit d'écriture et optimiser les coûts, il est recommandé d'insérer des vecteurs par lots volumineux, jusqu'à la taille de lot maximale pour. PutVectors Toutefois, pour les charges de travail qui doivent utiliser des lots plus petits (par exemple, en temps réel, les données vectorielles entrantes doivent être immédiatement consultables), vous pouvez obtenir un débit d'écriture plus élevé en utilisant un plus grand nombre de PutVectors demandes simultanées, jusqu'à la limite maximale autorisée par seconde. Pour plus d'informations sur la taille de lot maximale pourPutVectors, qui est la limite de vecteurs par appel d'PutVectorsAPI, et la limite maximale de demandes et de vecteurs par seconde, consultezLimites et restrictions. En outre, vous pouvez attacher des métadonnées (par exemple, année, auteur, genre, lieu) sous forme de paires clé-valeur à chaque vecteur. Par défaut, toutes les clés de métadonnées attachées à des vecteurs sont filtrables et utilisables comme filtres dans une requête de similarité. Seules les clés de métadonnées spécifiées comme non filtrables lors de la création de l’index vectoriel sont exclues du filtrage. Les index vectoriels S3 prennent en charge les types des métadonnées Chaîne, Nombre, Booléen et Liste. Pour plus d’informations sur la limite de taille totale des métadonnées par vecteur et la limite de taille des métadonnées filtrables par vecteur, consultez Limites et restrictions. Si la taille des métadonnées dépasse ces limites, l’opération d’API PutVectors renvoie une erreur 400 Bad Request.

Avant d’ajouter des données vectorielles à votre index vectoriel à l’aide de l’opération d’API PutVectors, vous devez convertir vos données brutes en vectorisations vectorielles, qui sont des représentations numériques de votre contenu sous forme de tables de nombres à virgule flottante. Les vectorisations capturent la signification sémantique de votre contenu, permettant ainsi des recherches de similarité une fois qu’elles sont stockées dans votre index vectoriel au cours de l’opération PutVectors. Vous pouvez générer des vectorisations à l’aide de différentes méthodes en fonction de votre type de données et de votre cas d’utilisation. Ces méthodes incluent l’utilisation de cadre de machine learning, de bibliothèques de vectorisation spécialisées ou de services AWS tels qu’Amazon Bedrock. Par exemple, si vous utilisez Amazon Bedrock, vous pouvez générer des intégrations à l'aide de l'opération InvokeModelAPI et de votre modèle d'intégration préféré.

En outre, les bases de connaissances Amazon Bedrock fournissent un flux de travail end-to-end RAG entièrement géré dans lequel Amazon Bedrock récupère automatiquement les données de votre source de données S3, convertit le contenu en blocs de texte, génère des intégrations et les stocke dans votre index vectoriel. Vous pouvez ensuite interroger la base de connaissances et générer des réponses basées sur des blocs récupérés de vos données sources.

En outre, l’outil open source Amazon S3 Vectors Embed CLI fournit un moyen simplifié de générer des vectorisations et d’effectuer des recherches sémantiques à partir de la ligne de commande. Pour plus d’informations sur cet outil open source qui automatise à la fois la génération de vectorisations avec les modèles de fondation Amazon Bedrock et les opérations de recherche sémantique dans vos index vectoriels S3, consultez Création de vectorisation et réalisation de recherches sémantiques avec s3vectors-embed-cli.

Note

Lorsque vous insérez des données vectorielles dans votre index vectoriel, vous devez fournir les données vectorielles sous forme de valeurs float32 (virgule flottante 32 bits). Si vous transmettez des valeurs plus précises à un AWS SDK, S3 Vectors les convertit en virgule flottante 32 bits avant de les stocker GetVectorsListVectors, et les QueryVectorsopérations renvoient les valeurs. float32 Différents AWS SDKs peuvent avoir des types numériques par défaut différents. Assurez-vous donc que vos vecteurs sont correctement formatés en tant que float32 valeurs, quel que soit le SDK que vous utilisez. Par exemple, en Python, utilisez numpy.float32 ou convertissez explicitement vos valeurs.

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"} } ] )