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.
Utilisation d'index vectoriels dans DynamoDB
Les index vectoriels sont un type d'index dans Amazon DynamoDB qui permet de rechercher des similarités sur les intégrations vectorielles stockées dans les éléments de votre tableau. Contrairement aux index secondaires globaux et aux index secondaires locaux, qui prennent en charge les requêtes de correspondance exacte et de plage à l'aide d'Scanopérations Query et, les index vectoriels utilisent la recherche du voisin le plus proche (ANN) approximatif pour trouver les éléments dont les vecteurs sont les plus similaires à un vecteur de requête que vous fournissez. Vous effectuez ces recherches de similarité en appelant l'SearchVectorsAPI, qui renvoie les éléments les plus similaires classés selon un score de similarité.
Grâce aux index vectoriels, vous pouvez stocker des intégrations vectorielles à côté de vos données opérationnelles dans DynamoDB et effectuer des recherches de similarité sans avoir besoin d'une base de données vectorielle distincte. Il n'est donc plus nécessaire de recourir à des pipelines de réplication de données complexes entre DynamoDB et des magasins vectoriels externes.
Les index vectoriels sont gérés via CreateTable les mêmes UpdateTable API que celles que vous utilisez déjà, avec le VectorIndexes paramètre (pourCreateTable) et le VectorIndexUpdates paramètre (pourUpdateTable).
Rubriques
Cas d'utilisation des index vectoriels
Les index vectoriels prennent en charge divers cas d'utilisation impliquant la recherche d'éléments similaires sur la base de représentations vectorielles :
-
Recherche sémantique — Créez des moteurs de recherche qui comprennent la signification des requêtes plutôt que des mots clés correspondants. Stockez les intégrations de texte générées par des modèles d'apprentissage automatique et trouvez du contenu sémantiquement similaire.
-
Retrieval Augmented Generation (RAG) : connectez de grands modèles de langage (LLM) aux bases de connaissances pertinentes. Stockez les intégrations de documents dans DynamoDB et récupérez le contexte le plus pertinent pour les invites LLM.
-
Systèmes de recommandation : trouvez des produits, du contenu ou des utilisateurs similaires sur la base de représentations vectorielles de leurs caractéristiques ou de leur comportement.
-
Mémoire des agents IA : stockez les intégrations de conversations pour conserver le contexte entre les sessions et améliorer les performances des agents d'IA.
-
Détection des anomalies et des fraudes : comparez les nouveaux événements à l'intégration de comportements connus comme normaux afin de détecter les valeurs aberrantes, telles que des transactions inhabituelles ou des activités frauduleuses.
Comparaison d'indices vectoriels avec des indices secondaires
Le tableau suivant compare les index vectoriels avec les index secondaires globaux et les index secondaires locaux.
| Fonctionnalité | Indice vectoriel | GSI | Index secondaire local |
|---|---|---|---|
| Type de requête | Recherche de similarité | Correspondance et gamme exactes | Correspondance et gamme exactes |
| Lire l'API | SearchVectors |
Query, Scan |
Query, Scan |
| Schema | Attribut vectoriel, plus facultatif SearchSchema (clé de partition, filtres en ligne) | Clé (s) de partition et clé (s) de tri facultative (s) | Même clé de partition, clé de tri différente |
| Maximum par table | 5 | 20 | 5 |
| Mode capacité | On-demand uniquement | On-demand ou provisionné | On-demand ou provisionné |
Fonctions de distance
Lorsque vous créez un index vectoriel, vous choisissez une fonction de distance. La fonction de distance détermine comment DynamoDB mesure la similitude entre les vecteurs. Votre choix influe sur la qualité du classement et la précision de la recherche. Amazon DynamoDB prend en charge trois fonctions de distance.
| Fonction de distance | Interprétation des partitions | Meilleur match |
|---|---|---|
COSINE |
Des scores plus faibles indiquent une plus grande similitude. Mesure la distance en cosinus (1 moins la similitude du cosinus) entre deux vecteurs. Les valeurs sont comprises entre 0 (direction identique) et 2 (direction opposée). | Les plus petits scores |
DOT_PRODUCT |
Des scores plus élevés indiquent une plus grande similitude. Mesure le produit scalaire entre deux vecteurs. | Scores les plus élevés |
EUCLIDEAN |
Des scores plus faibles indiquent une plus grande similitude. Mesure la distance en ligne droite entre deux vecteurs. | Les plus petits scores |
Pour comparer la façon dont les fonctions de distance classent le même vecteur de requête, consultezComment les fonctions de distance classent les résultats.
Les conseils suivants vous aident à choisir la fonction de distance adaptée à votre charge de travail.
COSINE-
Compare la direction et ignore la magnitude. À utiliser
COSINEpour la similitude sémantique avec les modèles d'intégration de texte. Ces modèles codent le sens dans la direction, et la longueur du vecteur peut varier. Les exemples incluent Amazon Titan Text Embeddings et. Cohere EmbedCOSINEconvient parfaitement aux cas d'utilisation suivants :-
Recherche sémantique dans les descriptions de produits ou les documents
-
Génération augmentée de récupération (RAG)
-
Correspondance des FAQ
COSINEest la valeur par défaut sécurisée lorsque vous ne savez pas quelle fonction utiliser. -
DOT_PRODUCT-
DOT_PRODUCTest sensible à la fois à la direction et à l'amplitude (la longueur d'un vecteur). ChoisissezDOT_PRODUCTquand la documentation de votre modèle d'intégration recommande un produit scalaire comme mesure de similarité, ou quand vous souhaitez que la longueur du vecteur influence le classement.DOT_PRODUCTconvient parfaitement aux cas d'utilisation suivants :-
Systèmes de recommandation qui utilisent des scores de popularité ou de confiance pour étendre les intégrations et influencer le classement
-
Modèles dont la documentation recommande spécifiquement le produit par points comme mesure de similarité
-
Magnitude-sensitive classement où la longueur du vecteur transmet un signal significatif
Nous vous recommandons de normaliser vos intégrations en fonction de la longueur unitaire. Une fois normalisé, le
DOT_PRODUCTclassement donne les mêmes résultats queCOSINE. Ignorez la normalisation uniquement si vous souhaitez que l'ampleur affecte le classement.Exemple de cas d'utilisation : un système de recommandation de produits dans lequel vous redimensionnez chaque produit intégré en fonction de son score de popularité. Les produits les plus populaires obtiennent des vecteurs plus longs et sont mieux classés dans les résultats de recherche.
-
EUCLIDEAN-
Mesure la distance en ligne droite entre deux vecteurs.
EUCLIDEANest sensible à la magnitude. Utilisez-le lorsque la position absolue dans l'espace d'intégration est importante.EUCLIDEANconvient parfaitement aux cas d'utilisation suivants :-
Intégrations d'images ou de sons lorsque la distance spatiale est importante
-
Near-duplicate détection
-
Regroupement et détection des anomalies
Exemple de cas d'utilisation : recherche d'images quasi dupliquées à partir d'intégrations d'images.
-
Choisissez une fonction de distance qui correspond à votre modèle d'intégration
Si vous ne savez pas quelle fonction utiliser, consultez la documentation de votre modèle d'intégration. Validez votre choix par rapport à un ensemble de données représentatif. Vous ne pouvez pas modifier la fonction de distance après la création de l'index. Pour de plus amples informations, veuillez consulter Adaptez la fonction de distance à vos encastrements.
Comment les fonctions de distance classent les résultats
La fonction de distance que vous choisissez lorsque vous créez l'index détermine à la fois la Score valeur et l'ordre de tri des résultats. La même requête peut classer différemment les mêmes éléments selon différentes fonctions de distance. L'exemple suivant utilise le vecteur de requête par [1, 0, 0, 0] rapport à quatre vecteurs stockés.
| Vecteur stocké | COSINE(le plus bas est plus similaire) |
EUCLIDEAN(le plus bas est plus similaire) |
DOT_PRODUCT(plus élevé est plus similaire) |
|---|---|---|---|
[1, 0, 0, 0] |
0.0 | 0.0 | 1.0 |
[10, 0, 0, 0] |
0.0 | 9.0 | 10,0 |
[0.7071, 0.7071, 0, 0] |
0,29 | 0,77 | 0,71 |
[-1, 0, 0, 0] |
2.0 | 2.0 | -1,0 |
Deux comportements méritent d'être soulignés :
-
COSINEne tient pas compte de l'ampleur. Il obtient[1, 0, 0, 0]un score[10, 0, 0, 0]identique (les deux0.0) car ils pointent dans la même direction.EUCLIDEANse classe au[10, 0, 0, 0]dernier rang pour la même requête car elle mesure la distance absolue, qui augmente avec la magnitude d'un vecteur. -
DOT_PRODUCTles scores peuvent être négatifs. Un vecteur pointant dans la direction opposée ([-1, 0, 0, 0]) marque des points-1.0. Ne partez pas du principe que les scores sont toujours non négatifs lorsque vous triez ou appliquez des seuils aux résultats.
SearchSchema
Lorsque vous créez un index vectoriel, vous pouvez éventuellement en définir un SearchSchema qui spécifie les clés de partition de l'index vectoriel et les attributs de filtre en ligne.
HASH(clé de partition d'index vectoriel)-
Une clé de partition d'index vectoriel partitionne vos données d'index pour une mise à l'échelle indépendante. Lorsque vous spécifiez une clé de partition d'index vectoriel, les éléments ayant la même valeur de clé de partition sont stockés ensemble, ce qui permet au système de rechercher uniquement les données pertinentes. À grande échelle, cela réduit la latence de recherche car la recherche n'examine qu'un sous-ensemble de l'espace vectoriel au lieu de l'index entier. Utilisez des attributs dont la cardinalité est faible à moyenne, tels que ou.
CategoryCountryVous pouvez spécifier au plus une clé de partition d'index vectoriel.Si vous définissez une clé de partition d'index vectoriel dans le SearchSchema, vous devez fournir sa valeur dans le
SearchConditionExpressionlorsque vous appelezSearchVectors.Utiliser une clé de partition pour augmenter le débit de recherche
Définissez une clé de partition d'index vectoriel lorsque vous vous attendez à un index volumineux ou à un volume de recherche élevé. Chaque
SearchVectorsappel étant limité à une seule valeur de clé de partition, la répartition de vos données entre plusieurs valeurs de clé de partition vous permet d'exécuter plus d'opérations de recherche par seconde et de réduire la quantité de données examinée par chaque recherche. Consultez Choisissez une clé de partition qui correspond à vos modèles de requête. INLINE_FILTER-
Les attributs de filtre en ligne sont projetés dans l'index vectoriel afin que DynamoDB puisse filtrer lors de la recherche sur la couche de stockage.
Les filtres en ligne prennent en charge l'opérateur d'égalité (
=) dansSearchConditionExpression. Les opérateurs de comparaison, de plage et d'appartenance à un ensemble (<>,<,<=,>>=,IN) ne sont pas encore disponibles. Contrairement aux clés de partition d'index vectoriel, les filtres intégrés sont facultatifs lors de la recherche.
Vous pouvez créer un index vectoriel sans définir de clé de partition dans le SearchSchema. Dans ce cas, chaque SearchVectors appel recherche l'intégralité de l'index. C'est plus simple car vous n'avez pas besoin deSearchConditionExpression, mais l'échelle n'est pas horizontale. Au fur et à mesure que votre index augmente, chaque recherche examine davantage de données, ce qui augmente la latence et les coûts. Si votre charge de travail nécessite un débit élevé ou si votre index contient un grand nombre de vecteurs, définissez une clé de partition pour répartir les données entre les partitions et les dimensionner indépendamment. Consultez Choisissez une clé de partition qui correspond à vos modèles de requête.
Projections
À l'instar des index secondaires globaux, les index vectoriels prennent en charge les projections qui contrôlent quels attributs de la table de base sont copiés dans l'index. Vous spécifiez la projection lorsque vous créez l'indice vectoriel.
-
KEYS_ONLY— Seuls les attributs de clé primaire de la table de base, l'attribut vectoriel et tous les attributs de filtre en ligne définis dans le SearchSchema sont projetés dans l'index. -
INCLUDE— Outre lesKEYS_ONLYattributs, vous spécifiez d'autres attributs non clés pour le projet. Vous ne pouvez pas modifier l'ensemble des attributs inclus une fois l'index vectoriel créé. Pour projeter un ensemble d'attributs différent, supprimez l'index et recréez-le avec la projection de votre choix. -
ALL— Tous les attributs de la table de base sont projetés dans l'index.
La projection limite ce qui SearchVectors peut revenir
Les attributs qui ne sont pas projetés dans l'index vectoriel ne peuvent pas être renvoyés dans SearchVectors les réponses. Si vous avez besoin d'attributs spécifiques dans les résultats de recherche, incluez-les dans la projection ou utilisez-lesALL.
Utilisation d'index vectoriels avec d'autres fonctionnalités de DynamoDB
- DynamoDB Streams
-
Vous pouvez activer DynamoDB Streams sur une table qui possède un index vectoriel, soit à l'aide du
StreamSpecificationparamètre lors de la création de la table, soit via.UpdateTableLe flux capture les modifications apportées au niveau des éléments à la table de base et fonctionne indépendamment de l'indice vectoriel. - Tables globales
-
Vous pouvez ajouter un index vectoriel à une table globale, et vous pouvez convertir une table qui possède un index vectoriel en une table globale en ajoutant une réplique avec
UpdateTable. La définition de l'index vectoriel, y compris ses dimensions, sa fonction de distance et sa projection, est répliquée automatiquement dans chaque nouvelle région de réplication. SearchSchema Vous ne créez pas l'index vectoriel séparément dans la région du réplica.Les éléments que vous écrivez dans n'importe quelle région de réplication sont répliqués dans les autres régions et y sont indexés. Une fois la réplication terminée, le même ensemble de vecteurs est recherché
SearchVectorsdans chaque région. Étant donné que la recherche vectorielle utilise le voisin le plus proche approximatif (ANN), des recherches distinctes dans différentes régions peuvent renvoyer des résultats ou un ordre légèrement différents pour la même requête, même pour des données identiques. La réplication et l'indexation des vecteurs dans les autres régions sont asynchrones, même pour les tables globales MRSC (Multi-region strong consistency). Un vecteur que vous venez d'écrire dans une région peut ne pas apparaître dans lesSearchVectorsrésultats d'une autre région tant que la modification ne se sera pas propagée.On-demand capacité requise
Les index vectoriels nécessitent un mode de capacité à la demande, que les tables globales prennent également en charge. Créez l'index vectoriel et la réplique sur une table qui utilise déjà la capacité à la demande.
- Point-in-time restauration (PITR) et sauvegardes
-
Lorsque vous restaurez une table à partir d'une restauration instantanée ou d'une sauvegarde à la demande, DynamoDB restaure les données de la table de base et la définition de l'index vectoriel. Comme pour les index secondaires globaux, DynamoDB reconstruit l'index vectoriel à partir des données restaurées de la table de base plutôt que de le copier octet par octet. L'index est donc soumis à un remplissage avant d'être prêt pour la recherche. Attendez que
IndexStatusseBackfillingtrouveACTIVEetfalsefigure sur l'index restauré avant de lancerSearchVectors. - Durée de vie (TTL)
-
Vous pouvez utiliser DynamoDB TTL sur une table dotée d'un index vectoriel. Lorsque TTL supprime un élément expiré de la table de base, DynamoDB supprime l'entrée correspondante de l'index vectoriel, comme le fait une suppression manuelle. Les éléments expirés cessent donc d'apparaître dans les
SearchVectorsrésultats une fois que la suppression s'est propagée à l'index. - Importation et exportation de données de table
-
Vous pouvez exporter un tableau contenant un index vectoriel vers Amazon S3 ; l'exportation contient les éléments de la table de base, y compris les attributs vectoriels qui y sont stockés. Lorsque vous importez des données depuis Amazon S3 dans une nouvelle table, définissez l'index vectoriel dans la demande d'importation de la même manière que vous le feriez
CreateTable. DynamoDB indexe les éléments importés au fur et à mesure de leur écriture, et l'index vectoriel devient disponible une fois l'importation terminée. - DAX
-
L'accélérateur DynamoDB (DAX) ne prend pas en charge cette opération.
SearchVectorsEnvoyezSearchVectorsdes demandes directement à DynamoDB, même lorsque votre application utilise DAX pour d'autres opérations de lecture. La mise en cache DAX des lectures de la table de base n'est pas affectée par la présence d'un index vectoriel.