Didacticiel : premiers pas avec S3 Vectors - Amazon Simple Storage Service

Didacticiel : premiers pas avec S3 Vectors

Note

Amazon S3 Vectors est en version préliminaire pour Amazon Simple Storage Service et sujet à modification.

Dans ce didacticiel, vous allez créer un compartiment de vecteur S3 et un index vectoriel dans une Région AWS dans la console Amazon S3. Ensuite, vous utilisez un modèle de vectorisation Amazon Bedrock pour générer des vectorisations de vos données et les stocker dans votre index vectoriel pour effectuer des recherches sémantiques.

Pour commencer, souscrivez à un compte AWS si vous n'en n'avez pas déjà un. Pour plus d’informations sur la configuration de règles avec un compte, consultez Premiers pas avec Amazon S3.

Étape 1 : création d’un compartiment de vecteur avec la console

Les compartiments de vecteur S3 sont un type de compartiment Amazon S3 conçu spécialement pour stocker et interroger les vecteurs. Vous utilisez des opérations d’API dédiées pour écrire et interroger des données vectorielles. Vous pouvez contrôler l’accès à vos données vectorielles à l’aide de mécanismes de contrôle d’accès tels que des politiques basées sur l’identité IAM et des politiques basées sur les ressources.

Dans cette étape, vous utilisez la console Amazon S3 pour créer votre premier compartiment de vecteur. Pour découvrir d’autres méthodes de création d’un compartiment de vecteur, consultez Création d’un compartiment de vecteur.

Pour créer un compartiment de vecteur

  1. Connectez-vous à la AWS Management Console et ouvrez la console Amazon S3 à l’adresse https://console.aws.amazon.com/s3/.

  2. Dans le volet de navigation de gauche, choisissez Compartiments de vecteur.

  3. Sur la page Compartiments de vecteur, choisissez Créer un compartiment de vecteur.

  4. Sur la page Créer un compartiment de vecteur, dans le champ Nom du compartiment de vecteur, saisissez un nom. Dans ce didacticiel, nous utilisons media-embeddings comme nom de compartiment de vecteur. Les noms de compartiment de vecteur doivent comporter de 3 à 63 caractères et être uniques dans une Région AWS. Les caractères valides sont les lettres minuscules (a-z), les chiffres (0-9) et les tirets (-).

    Note

    Vous ne pouvez pas modifier le nom de compartiment de vecteur une fois que vous l’avez créé.

  5. Sous Chiffrement, choisissez Spécifier le type de chiffrement. Vous avez la possibilité de spécifier le type de chiffrement en tant que Chiffrement côté serveur avec clés AWS Key Management Service (SSE-KMS) ou Chiffrement côté serveur avec des clés gérées par Amazon S3 (SSE-S3). Dans ce didacticiel, nous choisissons Chiffrement côté serveur avec des clés gérées par Amazon S3 (SSE-S3). Pour plus d’informations sur la définition de la configuration de chiffrement pour les compartiments de vecteur, consultez Protection et chiffrement des données dans S3 Vectors.

    Note

    Le type de chiffrement par défaut ne peut pas être modifié une fois le compartiment de vecteur créé.

  6. Choisissez Créer un compartiment de vecteur.

Étape 2 : création d’un index vectoriel dans un compartiment de vecteur avec la console

Note

Choisissez soigneusement les paramètres de configuration de votre index vectoriel. Après avoir créé un index vectoriel, vous ne pouvez pas mettre à jour le nom de l’index vectoriel, la dimension, la métrique de distance ou les clés de métadonnées non filtrables. Pour modifier l’une de ces valeurs, vous devez créer un nouvel index vectoriel.

Au cours de cette étape, vous allez créer un index vectoriel dans votre compartiment de vecteur. L’index vectoriel est utilisé pour stocker et interroger vos vectorisations. Pour plus d’informations sur les index vectoriels, consultez Index vectoriels.

Pour créer un index vectoriel

  1. Accédez au compartiment de vecteur nouvellement créé dans la liste Compartiments de vecteur de la console Amazon S3.

  2. Choisissez Créer un index vectoriel.

  3. Sur la page Créer un index vectoriel, saisissez un nom dans le champ Nom de l’index vectoriel. Dans ce didacticiel, nous utilisons des films comme nom d’index vectoriel.

    Les noms d’index vectoriel doivent comporter de 3 à 63 caractères et être uniques dans ce compartiment de vecteur. Les caractères valides sont les lettres minuscules (a-z), les chiffres (0-9), les tirets (-) et les points (.).

    Le nom de l’index vectoriel ne peut pas être modifié après la création de l’index.

  4. Sous Dimension, spécifiez une valeur numérique comprise entre 1 et 4 096 qui détermine le nombre de nombres contenus dans chaque vecteur généré par votre modèle de vectorisation de vecteurs. Les modèles de vectorisation sont des modèles de machine learning (ML) spécialisés qui convertissent des données (telles que du texte ou des images) en vecteurs numériques. Les modèles de vectorisation produisent généralement des sorties comprises entre 500 et 2 000 dimensions, chaque dimension étant un nombre à virgule flottante. Dans ce didacticiel, nous allons utiliser le modèle de vectorisation Titan Text v2 d’Amazon Bedrock. Ce modèle de vectorisation utilise des vecteurs à 1 024 dimensions par défaut. Nous allons donc définir la dimension de l’index vectoriel sur 1024.

    La valeur de dimension ne peut pas être modifiée après la création de l’index. Spécifiez soigneusement la valeur de dimension en fonction des recommandations de votre modèle de vectorisation.

  5. Sous Métrique de distance, choisissez Cosinus (qui mesure la similarité angulaire) ou Euclidien (qui mesure la distance en ligne droite) comme métrique de distance pour définir le mode de calcul de la similitude entre les vecteurs lors des requêtes. Dans ce didacticiel, nous avons choisi Cosinus.

    La métrique de distance ne peut pas être modifiée après la création de l’index. Choisissez soigneusement la métrique de distance en fonction des recommandations de votre modèle de vectorisation.

  6. Sous Paramètres supplémentaires (facultatif), vous pouvez spécifier des clés de métadonnées non filtrables pour stocker des informations supplémentaires à côté de vos vectorisations.

    Note

    Vous pouvez attacher des métadonnées filtrables sous forme de paires clé-valeur à chaque vecteur lorsque vous insérez des données vectorielles après avoir créé un index. 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.

    Chaque clé de métadonnées non filtrable doit comporter entre 1 et 63 caractères et être unique dans l’index vectoriel. Ces clés sont utiles pour stocker des informations de référence que vous n’avez pas besoin de filtrer lors des requêtes de similarité. Par exemple, lorsque vous travaillez avec des vectorisations de texte, vous souhaiterez peut-être conserver les fragments de texte d’origine à des fins de référence. Dans ce didacticiel, nous ajoutons une clé de métadonnées non filtrable nommée source_text pour stocker les données de texte pour lesquelles nous voulons créer des vectorisations.

    Vous ne pouvez pas mettre à jour les clés de métadonnées non filtrables après la création de l’index. Planifiez soigneusement votre structure de métadonnées.

  7. Choisissez Créer un index vectoriel.

Vérifiez que votre nouvel index vectoriel apparaît dans le compartiment.

Étape 3 : insertion des vecteurs dans un index vectoriel avec le kit SDK pour Python (Boto3)

Pour insérer, répertorier et interroger des vecteurs, utilisez les kits AWS SDK, l’AWS CLI ou l’API REST Amazon S3.

Cette étape consiste à insérer des vectorisations dans votre index vectoriel à l’aide de l’opération d’API PutVectors.

Vous devez d’abord générer des vectorisations en utilisant le modèle de vectorisation de votre choix. Si vous utilisez Amazon Bedrock, générez des vectorisations à l’aide de l’opération d’API InvokeModel pour spécifier votre modèle de vectorisation préféré. Vous pouvez également générer et insérer des vectorisations à l’aide d’une seule commande, consultez (Facultatif) Automatisez la création de vectorisations avec S3 Vectors Embed CLI.

L’exemple de code suivant génère des vectorisations à 1 024 dimensions avec le modèle Titan Text Embeddings V2 d’Amazon Bedrock en utilisant le kit AWS SDK pour Python (Boto3), et les stocke dans votre index vectoriel à l’aide de l’API PutVectors. À chaque vecteur, nous attachons des paires clé-valeur sous forme de métadonnées filtrables. De plus, nous utilisons une clé de métadonnées non filtrable nommée source_text pour préserver le texte original dont chaque vecteur est dérivé. Pour optimiser le débit des demandes et optimiser la vitesse et l’efficacité, nous vous recommandons d’insérer et de supprimer des vecteurs par lots. Pour plus d’informations, consultez Bonnes pratiques relatives à S3 Vectors.

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

Étape 4 : Interrogation des vecteurs dans un index vectoriel avec le kit SDK pour Python (Boto3)

Après avoir stocké les vectorisations dans l’index vectoriel, vous pouvez effectuer une recherche de similarité à l’aide de l’opération d’API QueryVectors.

Vous devez d’abord générer vos vectorisations de requête en utilisant le même modèle de vectorisation que celui utilisé lors de l’insertion dans Étape 3 : insertion des vecteurs dans un index vectoriel avec le kit SDK pour Python (Boto3). Dans ce didacticiel, utilisez le modèle Titan Text Embeddings V2 d’Amazon Bedrock via le kit SDK pour Python (Boto3).

Vous pouvez effectuer une recherche de similarité pour obtenir les vecteurs correspondants les plus proches. Dans une recherche de similarité, vous pouvez éventuellement filtrer à l’aide de clés de métadonnées pour affiner les résultats en fonction de critères spécifiques tout en préservant la pertinence sémantique.

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

(Facultatif) Automatisez la création de vectorisations avec S3 Vectors Embed CLI

Amazon S3 Vectors Embed CLI est un outil de ligne de commande autonome qui simplifie le processus d’utilisation des vectorisations dans S3 Vectors. À l’aide de commandes uniques, vous pouvez créer des vectorisations pour vos données à l’aide d’Amazon Bedrock, puis les stocker et les interroger dans votre index vectoriel S3. L’outil prend en charge les commandes suivantes :

  • s3vectors-embed put : générez des vectorisations de texte, de contenu de fichier ou d’objets S3, et stockez-les sous forme de vecteurs dans un index vectoriel S3.

  • s3vectors-embed query : incorporez une entrée de requête et recherchez des vecteurs similaires dans un index vectoriel S3.

Pour plus d’informations sur les commandes et leur utilisation, consultez le Référentiel GitHub Amazon S3 Vectors Embed CLI.

(Facultatif) Intégrez S3 Vectors aux bases de connaissances d’Amazon Bedrock

Les bases de connaissances d’Amazon Bedrock s’intègrent à S3 Vectors pour un stockage rentable et à long terme des jeux de données vectorielles.

Prérequis

Suivez les prérequis pour vous assurer que vous disposez des autorisations nécessaires pour créer une base de connaissances d’Amazon Bedrock.

  • Autorisations IAM appropriées pour S3 Vectors et les services Amazon Bedrock. Pour plus d’informations sur les autorisations IAM pour S3 Vectors, consultez Identity and Access Management dans S3 Vectors.

  • Vos documents sources ont été préparés pour être intégrés à la base de connaissances.

  • Compréhension des exigences de votre modèle de vectorisation.

Création d’une base de connaissances d’Amazon Bedrock avec S3 Vectors dans la console

Les bases de connaissances d’Amazon Bedrock fournissent un flux de travail RAG de bout en bout entièrement géré. Lorsque vous créez une base de connaissances avec S3 Vectors, Amazon Bedrock extrait automatiquement les données de votre source de données S3, convertit le contenu en blocs de texte, génère des vectorisations 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.

Pour créer une base de connaissances d’Amazon Bedrock avec S3 Vectors dans la console
  1. Connectez-vous à la AWS Management Console à laide d’un rôle IAM avec les autorisations Amazon Bedrock et ouvrez la console Amazon Bedrock à l’adresse https://console.aws.amazon.com/bedrock/.

  2. Dans le volet de navigation gauche, sélectionnez Bases de connaissances.

  3. Dans la section Bases de connaissances, choisissez Créer. Dans la liste déroulante, choisissez Base de connaissances avec magasin de vecteurs.

  4. Dans ce didacticiel, conservez Nom de la base de connaissances, Description de la base de connaissances et Autorisations IAM à leurs valeurs par défaut.

  5. Pour Sélection d’un type de source de données, choisissez la source de données à laquelle connecter votre base de connaissances. Dans ce didacticiel, choisissez Amazon S3.

  6. (Facultatif) Fournissez des balises ou des journaux d’application.

  7. Choisissez Suivant.

  8. Sur la page Configurer la source de données, conservez les paramètres par défaut de Nom de la source de données, Emplacement de la source de données, Stratégie d’analyse et Stratégie de découpage de ce didacticiel.

  9. Dans l’URI S3, entrez le compartiment S3 à usage général qui contient vos fichiers source, ou choisissez Parcourir S3 et choisissez le compartiment à usage général S3.

  10. Pour les données S3 chiffrées, sélectionnez Ajouter une clé KMS gérée par le client pour les données S3 et spécifiez votre clé KMS gérée par le client.

  11. Choisissez Suivant pour passer à l’étape suivante qui spécifie le Modèle de vectorisation et les options de Magasin de vecteurs.

  12. Dans la section Modèle de vectorisation, choisissez Sélectionner le modèle et choisissez un modèle de vectorisation compatible avec S3 Vectors. Vous devez utiliser des vectorisations à virgule flottante. Le type binaire n’est pas pris en charge.

  13. (Facultatif) Développez la section Configurations supplémentaires pour afficher les options de configuration suivantes (sachant que certains modèles ne prennent pas en charge certaines configurations) :

    • Type de vectorisations : indiquez si vous souhaitez convertir les données en vectorisations à virgule flottante (float32) (plus précises, mais plus coûteuses) ou en vectorisations binaires (moins précises, mais moins coûteuses). Pour l’intégration à S3 Vectors, vous devez choisir Vectorisation à virgule flottante.

    • Dimensions vectorielles : choisissez la taille de dimension recommandée pour les modèles de vectorisation.

  14. Dans la section Magasin de vecteurs, choisissez la méthode recommandée Création rapide d’un magasin de vecteurs pour la configuration automatique d’un nouveau compartiment de vecteur, ou choisissez Utiliser un magasin de vecteurs existant pour utiliser un compartiment de vecteur existant s’il est disponible. Pour en savoir plus sur l’utilisation d’un flux de magasin de vecteurs existant, consultez Conditions préalables à l’utilisation d’un magasin de vecteurs que vous avez créé pour une base de connaissances dans le Guide de l’utilisateur Amazon Bedrock.

  15. Pour Configurations supplémentaires : par défaut, le compartiment de vecteur utilise le chiffrement côté serveur avec des clés gérées par Amazon S3 (SSE-S3). Vous pouvez choisir d’utiliser votre propre clé KMS pour le chiffrement côté serveur avec les clés AWS Key Management Service (SSE-KMS) pour un meilleur contrôle des paramètres de chiffrement.

  16. Choisissez Suivant pour consulter les détails de la base de connaissances, puis choisissez Créer une base de connaissances.

Note

Le temps nécessaire pour créer une base de connaissances dépend de vos configurations spécifiques. Une fois la base de connaissances créée, son statut change pour indiquer qu’elle est prête ou disponible. Une fois votre base de connaissances prête et disponible, synchronisez votre source de données pour la première fois ou chaque fois que vous souhaitez tenir votre contenu à jour. Pour synchroniser votre source de données, sélectionnez votre base de connaissances dans la console, puis choisissez Synchroniser dans la section de présentation des sources de données.

(Facultatif) Intégrez S3 Vectors à Amazon OpenSearch

Amazon OpenSearch Service est un service entièrement géré qui simplifie le déploiement, la mise à l’échelle et le fonctionnement d’OpenSearch dans le Cloud AWS. Il existe deux intégrations entre S3 Vectors et OpenSearch. La première consiste à exporter les données vectorielles de S3 Vectors vers OpenSearch sans serveur pour des capacités de recherche performantes. L’autre utilise S3 Vectors comme moteur de stockage rentable au sein d’OpenSearch tout en conservant l’accès aux fonctionnalités d’OpenSearch.

Pour plus d’informations, consultez Utilisation de S3 Vectors avec OpenSearch Service.