

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.

# Intelligence artificielle générative Amazon DocumentDB
<a name="generative-ai"></a>

Amazon DocumentDB propose des fonctionnalités permettant aux modèles d'apprentissage automatique (ML) et d'intelligence artificielle générative (IA) de fonctionner avec les données stockées dans Amazon DocumentDB en temps réel. Les clients n'ont plus à perdre de temps à gérer une infrastructure distincte, à écrire du code pour se connecter à un autre service et à dupliquer les données de leur base de données principale.

Pour plus d'informations sur l'intelligence artificielle et sur la manière dont AWS vous pouvez répondre à vos besoins en matière d'IA, consultez cet article [« Qu'est-ce que c'est ».](https://aws.amazon.com/what-is/artificial-intelligence/)

**Topics**
+ [Apprentissage automatique sans code avec Amazon SageMaker AI Canvas](no-code-machine-learning.md)
+ [Recherche vectorielle pour Amazon DocumentDB](vector-search.md)

# Apprentissage automatique sans code avec Amazon SageMaker AI Canvas
<a name="no-code-machine-learning"></a>

[Amazon SageMaker AI Canvas](https://docs.aws.amazon.com/sagemaker/latest/dg/canvas.html) vous permet de créer vos propres AI/ML modèles sans avoir à écrire une seule ligne de code. Vous pouvez créer des modèles de machine learning pour des cas d'utilisation courants tels que la régression et les prévisions, et vous pouvez accéder à des modèles de base (FMs) et les évaluer depuis Amazon Bedrock. Vous pouvez également accéder au public FMs depuis Amazon SageMaker AI JumpStart pour la génération de contenu, l'extraction de texte et la synthèse de texte afin de prendre en charge les solutions d'IA génératives.

## Comment créer des modèles de machine learning sans code avec SageMaker AI Canvas
<a name="w2aac21b9b5"></a>

Amazon DocumentDB s'intègre désormais à Amazon SageMaker AI Canvas pour permettre l'apprentissage automatique (ML) sans code avec les données stockées dans Amazon DocumentDB. Vous pouvez désormais créer des modèles de machine learning pour les besoins de régression et de prévision et utiliser des modèles de base pour la synthèse et la génération de contenu à l'aide de données stockées dans Amazon DocumentDB sans écrire une seule ligne de code.

SageMaker AI Canvas fournit une interface visuelle qui permet aux clients d'Amazon DocumentDB de générer des prédictions sans avoir besoin d' AI/ML expertise ou d'écrire une seule ligne de code. Les clients peuvent désormais lancer l'espace de travail SageMaker AI Canvas depuis les données Amazon DocumentDB AWS Management Console, les importer et les joindre à des fins de préparation des données et de formation des modèles. Les données d'Amazon DocumentDB peuvent désormais être utilisées dans SageMaker AI Canvas pour créer et améliorer des modèles destinés à prévoir le taux de désabonnement des clients, à détecter les fraudes, à prévoir les défaillances de maintenance, à prévoir les indicateurs commerciaux et à générer du contenu. Les clients peuvent désormais publier et partager des informations basées sur le ML entre les équipes grâce à l'intégration native d' SageMaker AI Canvas avec Quick. Les pipelines d'ingestion de données dans SageMaker AI Canvas s'exécutent par défaut sur les instances secondaires d'Amazon DocumentDB, ce qui garantit que les performances des applications et des charges de travail d'ingestion d' SageMaker AI Canvas ne sont pas entravées.

Les clients Amazon DocumentDB peuvent commencer à utiliser SageMaker AI Canvas en accédant à la nouvelle page de la console Amazon DocumentDB No-Code ML et en se connectant à des espaces de travail AI Canvas nouveaux ou disponibles. SageMaker 

## Configuration du domaine SageMaker AI et du profil utilisateur
<a name="sagemaker-domain"></a>

Vous pouvez vous connecter aux clusters Amazon DocumentDB à partir de domaines SageMaker AI qui s'exécutent en mode VPC uniquement. En lançant un domaine SageMaker AI dans votre VPC, vous pouvez contrôler le flux de données depuis vos environnements SageMaker AI Studio et Canvas. Cela vous permet de restreindre l'accès à Internet, de surveiller et d'inspecter le trafic à l'aide de fonctionnalités AWS réseau et de sécurité standard, et de vous connecter à d'autres AWS ressources via des points de terminaison VPC. Reportez-vous à [Amazon SageMaker AI Canvas Getting started](https://docs.aws.amazon.com/sagemaker/latest/dg/canvas-getting-started.html) and [Configure Amazon SageMaker AI Canvas dans un VPC sans accès à Internet](https://docs.aws.amazon.com/sagemaker/latest/dg/canvas-vpc.html), qui se trouve dans le manuel *Amazon SageMaker AI Developer Guide* pour créer votre domaine SageMaker AI afin de vous connecter à votre cluster Amazon DocumentDB.

## Configuration des autorisations d'accès IAM pour Amazon DocumentDB SageMaker et AI Canvas
<a name="iam-access-canvas"></a>

Un utilisateur Amazon DocumentDB `AmazonDocDBConsoleFullAccess` attaché au rôle et à l'identité qui lui sont associés peut accéder au. AWS Management Console Ajoutez les actions suivantes au rôle ou à l'identité susmentionnés pour donner accès à l'apprentissage automatique sans code avec Amazon SageMaker AI Canvas.

```
"sagemaker:CreatePresignedDomainUrl",
"sagemaker:DescribeDomain",
"sagemaker:ListDomains",
"sagemaker:ListUserProfiles"
```

## Création d'utilisateurs et de rôles de base de données pour SageMaker AI Canvas
<a name="w2aac21b9c11"></a>

Vous pouvez restreindre l'accès aux actions que les utilisateurs peuvent effectuer sur les bases de données à l'aide du contrôle d'accès basé sur les rôles (RBAC) dans Amazon DocumentDB. Le RBAC fonctionne en accordant un ou plusieurs rôles à un utilisateur. Ces rôles déterminent les opérations qu'un utilisateur peut effectuer sur les ressources de base de données. 

En tant qu'utilisateur de Canvas, vous vous connectez à une base de données Amazon DocumentDB avec un nom d'utilisateur et un mot de passe. Vous pouvez créer une base de données user/role pour un utilisateur de Canvas disposant d'un accès en lecture aux bases de données spécifiques à l'aide de la fonctionnalité RBAC d'Amazon DocumentDB.

Par exemple, utilisez l'`createUser`opération :

```
db.createUser({
user: "canvas_user", 
pwd: "<insert-password>", 
roles: [{role: "read", db: "sample-database-1"}]
})
```

Cela crée un `canvas_user` qui dispose d'autorisations de lecture sur la `sample-database-1` base de données. Vos analystes Canvas peuvent utiliser ces informations d'identification pour accéder aux données de votre cluster Amazon DocumentDB. Reportez-vous [Accès à la base de données à l'aide du contrôle d'accès basé sur les rôles](role_based_access_control.md) à pour en savoir plus. 

## Régions disponibles
<a name="available-regions"></a>

L'intégration sans code est disponible dans les régions où Amazon DocumentDB et SageMaker Amazon AI Canvas sont pris en charge. Les régions incluent :
+ us-east-1 (Virginie du Nord)
+ us-east-2 (Ohio)
+ us-west-2 (Oregon)
+ ap-northeast-1 (Tokyo)
+ ap-northeast-2 (Séoul)
+ ap-south-1 (Bombay)
+ ap-southeast-1 (Singapour)
+ ap-southeast-2 (Sydney)
+ eu-central-1 (Francfort)
+ eu-west-1 (Irlande)

Reportez-vous à [Amazon SageMaker AI Canvas](https://docs.aws.amazon.com/sagemaker/latest/dg/canvas.html) dans le manuel *Amazon SageMaker AI Developer Guide* pour connaître les dernières régions disponibles.

# Recherche vectorielle pour Amazon DocumentDB
<a name="vector-search"></a>

La recherche vectorielle est une méthode utilisée en apprentissage automatique pour trouver des points de données similaires à un point de données donné en comparant leurs représentations vectorielles à l'aide de métriques de distance ou de similarité. Plus les deux vecteurs sont proches de l'espace vectoriel, plus les éléments sous-jacents sont considérés comme similaires. Cette technique permet de saisir le sens sémantique des données. Cette approche est utile dans diverses applications, telles que les systèmes de recommandation, le traitement du langage naturel et la reconnaissance d'images.

La recherche vectorielle pour Amazon DocumentDB associe la flexibilité et la riche capacité d'interrogation d'une base de données de documents basée sur JSON à la puissance de la recherche vectorielle. Si vous souhaitez utiliser vos données Amazon DocumentDB existantes ou une structure de données documentaire flexible pour créer des cas d'utilisation de l'apprentissage automatique et de l'IA générative, tels que l'expérience de recherche sémantique, la recommandation de produits, la personnalisation, les chatbots, la détection de fraudes et la détection d'anomalies, la recherche vectorielle pour Amazon DocumentDB est le choix idéal pour vous. La recherche vectorielle est disponible sur les clusters basés sur des instances Amazon DocumentDB 5.0.

**Topics**
+ [Insertion de vecteurs](#w2aac21c11b9)
+ [Création d'un index vectoriel](#w2aac21c11c11)
+ [Obtenir une définition d'index](#w2aac21c11c13)
+ [Interrogation des vecteurs](#w2aac21c11c15)
+ [Caractéristiques et limites](#vector-limitations)
+ [Bonnes pratiques](#w2aac21c11c19)

## Insertion de vecteurs
<a name="w2aac21c11b9"></a>

Pour insérer des vecteurs dans votre base de données Amazon DocumentDB, vous pouvez utiliser les méthodes d'insertion existantes : 

**Exemple**

Dans l'exemple suivant, une collection de cinq documents dans une base de données de test est créée. Chaque document comprend deux champs : le nom du produit et son incorporation vectorielle correspondante.

```
db.collection.insertMany([
  {"product_name": "Product A", "vectorEmbedding": [0.2, 0.5, 0.8]},
  {"product_name": "Product B", "vectorEmbedding": [0.7, 0.3, 0.9]},
  {"product_name": "Product C", "vectorEmbedding": [0.1, 0.2, 0.5]},
  {"product_name": "Product D", "vectorEmbedding": [0.9, 0.6, 0.4]},
  {"product_name": "Product E", "vectorEmbedding": [0.4, 0.7, 0.2]}
]);
```

## Création d'un index vectoriel
<a name="w2aac21c11c11"></a>

Amazon DocumentDB prend en charge à la fois l'indexation Hierarchical Navigable Small World (HNSW) et les méthodes d'indexation Inverted File with Flat Compression (). IVFFlat Un IVFFlat index sépare les vecteurs en listes et recherche ensuite un sous-ensemble sélectionné de ces listes les plus proches du vecteur de requête. D'autre part, un indice HNSW organise les données vectorielles dans un graphique multicouche. Bien que les temps de construction de HNSW soient plus lents que ceux de HNSW IVFFlat, il offre de meilleures performances de requête et un meilleur rappel. Contrairement à HNSW IVFFlat, aucune étape d'apprentissage n'est impliquée, ce qui permet de générer l'index sans aucun chargement de données initial. Dans la majorité des cas d'utilisation, nous recommandons d'utiliser le type d'index HNSW pour la recherche vectorielle.

Si vous ne créez pas d'index vectoriel, Amazon DocumentDB effectue une recherche avec le voisin le plus proche, garantissant ainsi un rappel parfait. Cependant, dans les scénarios de production, la rapidité est cruciale. Nous vous recommandons d'utiliser des index vectoriels, qui peuvent échanger un certain rappel contre une amélioration de la vitesse. Il est important de noter que l'ajout d'un index vectoriel peut entraîner des résultats de requête différents.

**Modèles**

Vous pouvez utiliser les `runCommand` modèles suivants `createIndex` pour créer un index vectoriel sur un champ vectoriel :

------
#### [ Using createIndex ]

Dans certains pilotes, tels que Mongosh et Java, l'utilisation `vectorOptions` des paramètres `createIndex` peut entraîner une erreur. Dans de tels cas, nous vous recommandons d'utiliser `runCommand` :

```
db.collection.createIndex(
  { "<vectorField>": "vector" },
  { "name": "<indexName>",
    "vectorOptions": {
      "type": " <hnsw> | <ivfflat> ",
      "dimensions": <number_of_dimensions>,
      "similarity": " <euclidean> | <cosine> | <dotProduct> ",
      "lists": <number_of_lists> [applicable for IVFFlat],
      "m": <max number of connections> [applicable for HNSW],
      "efConstruction": <size of the dynamic list for index build> [applicable for HNSW]
    }
  }
);
```

------
#### [ Using runCommand ]

Dans certains pilotes, tels que Mongosh et Java, l'utilisation `vectorOptions` des paramètres `createIndex` peut entraîner une erreur. Dans de tels cas, nous vous recommandons d'utiliser `runCommand` :

```
db.runCommand(
  { "createIndexes": "<collection>", 
  "indexes": [{
      key: { "<vectorField>": "vector" },
      vectorOptions: {
          type: " <hnsw> | <ivfflat> ",
          dimensions: <number of dimensions>,
          similarity: " <euclidean> | <cosine> | <dotProduct> ",
          lists: <number_of_lists> [applicable for IVFFlat],
          m: <max number of connections> [applicable for HNSW],
          efConstruction: <size of the dynamic list for index build> [applicable for HNSW]
          },
      name: "myIndex" 
      }] 
  }
);
```

------


| Paramètre | Exigence | Type de données | Description | Valeur (s) | 
| --- | --- | --- | --- | --- | 
|  **name**  |  facultatif  |  chaîne  |  Spécifie le nom de l'index.  |  Alphanumérique  | 
|  **type**  |  facultatif  |    |  Spécifie le type d'index.  |  Supporté : hnsw ou ivfflat Par défaut : HNSW (patch moteur 3.0.4574 et versions ultérieures)  | 
|  **dimensions**  |  obligatoire  |  entier  |  Spécifie le nombre de dimensions des données vectorielles.  |  Maximum de 2 000 dimensions.  | 
|  **similarity**  |  obligatoire  |  chaîne  |  Spécifie la métrique de distance utilisée pour le calcul de similarité.  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/documentdb/latest/developerguide/vector-search.html)  | 
|  **lists**  |  requis pour IVFFlat  |  entier  |  Spécifie le nombre de clusters utilisés par l' IVFFlat index pour regrouper les données vectorielles. Le paramètre recommandé est le nombre de documents/1000 pour un maximum de 1 million de documents et `sqrt(# of documents)` pour plus d'un million de documents.  |  Minimum : 1 Maximum : reportez-vous au tableau des listes par type d'instance [Caractéristiques et limites](#vector-limitations) ci-dessous.  | 
|  **m**  |  facultatif  |  entier  |  Spécifie le nombre maximum de connexions pour un index HNSW  |  Par défaut: 16 Gamme [2, 100]  | 
|  **efConstruction**  |  facultatif  |  entier  |  Spécifie la taille de la liste dynamique de candidats pour la construction du graphique pour l'indice HNSW. `efConstruction`doit être supérieur ou égal à (2 \$1 m)  |  Par défaut: 64 Gamme [4, 1000]  | 

Il est important que vous définissiez correctement la valeur des sous-paramètres tels que `lists` for IVFFlat `m` et `efConstruction` pour HNSW, car cela affectera la précision/le rappel, le temps de création et les performances de votre recherche. Une valeur de liste plus élevée augmente la vitesse de la requête car elle réduit le nombre de vecteurs dans chaque liste, ce qui réduit la taille des régions. Cependant, une taille de région plus petite peut entraîner un plus grand nombre d'erreurs de rappel, ce qui se traduit par une baisse de la précision. Pour HNSW, l'augmentation de la valeur `m` et de la précision de l'index `efConstruction` augmente, tout en augmentant le temps et la taille de l'index. Voir les exemples suivants :

**Exemples**

------
#### [ HNSW ]

```
db.collection.createIndex(
  { "vectorEmbedding": "vector" },
  { "name": "myIndex",
    "vectorOptions": {
      "type": "hnsw",
      "dimensions": 3,
      "similarity": "euclidean",
      "m": 16,
      "efConstruction": 64
    }
  }
);
```

------
#### [ IVFFlat ]

```
db.collection.createIndex(
  { "vectorEmbedding": "vector" },
  { "name": "myIndex",
    "vectorOptions": {
      "type": "ivfflat",
      "dimensions": 3,
      "similarity": "euclidean",
      "lists":1
    }
  }
)
```

------

## Obtenir une définition d'index
<a name="w2aac21c11c13"></a>

Vous pouvez consulter les détails de vos index, y compris les index vectoriels, à l'aide de la `getIndexes` commande suivante :

**Exemple**

```
db.collection.getIndexes()
```

**Exemple de sortie**

```
[
 {
  "v" : 4,
  "key" : {
   "_id" : 1
  },
  "name" : "_id_",
  "ns" : "test.collection"
 },
 {
  "v" : 4,
  "key" : {
   "vectorEmbedding" : "vector"
  },
  "name" : "myIndex",
  "vectorOptions" : {
   "type" : "ivfflat",
   "dimensions" : 3,
   "similarity" : "euclidean",
   "lists" : 1
  },
  "ns" : "test.collection"
 }
]
```

## Interrogation des vecteurs
<a name="w2aac21c11c15"></a>

Amazon DocumentDB prend en charge deux opérateurs de recherche vectorielle pour interroger des vecteurs :

### Opérateur de recherche vectorielle classique
<a name="w2aac21c11c15b5"></a>

Utilisez le modèle suivant pour interroger un vecteur :

```
db.collection.aggregate([
  {
    $search: {
      "vectorSearch": {
        "vector": <query vector>, 
        "path": "<vectorField>", 
        "similarity": "<distance metric>",
        "k": <number of results>,
        "probes":<number of probes> [applicable for IVFFlat],
        "efSearch":<size of the dynamic list during search> [applicable for HNSW]
      }
    }
  }
]);
```


| Paramètre | Exigence | Type | Description | Valeur (s) | 
| --- | --- | --- | --- | --- | 
|  **vectorSearch**  |  obligatoire  |  opérateur  |  Utilisée dans la commande \$1search pour interroger les vecteurs.  |    | 
|  **vector**  |  obligatoire  |  array  |  Indique le vecteur de requête qui sera utilisé pour trouver des vecteurs similaires.  |    | 
|  **path**  |  obligatoire  |  chaîne  |  Définit le nom du champ vectoriel.  |    | 
|  **k**  |  obligatoire  |  entier  |  Spécifie le nombre de résultats renvoyés par la recherche.  |    | 
|  **similarity**  |  obligatoire  |  chaîne  |  Spécifie la métrique de distance utilisée pour le calcul de similarité.  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/documentdb/latest/developerguide/vector-search.html)  | 
|  **probes**  |  facultatif  |  entier  |  Le nombre de clusters que la recherche vectorielle doit inspecter. Une valeur plus élevée permet un meilleur rappel au détriment de la rapidité. Il peut être défini sur le nombre de listes pour la recherche du voisin le plus proche exact (auquel cas le planificateur n'utilisera pas l'index). Le paramètre recommandé pour commencer le réglage fin est`sqrt(# of lists)`.  |  Valeur par défaut : 1  | 
|  **efSearch**  |  facultatif  |  entier  |  Spécifie la taille de la liste dynamique de candidats utilisée par l'index HNSW lors de la recherche. Une valeur plus élevée de `efSearch` permet un meilleur rappel au détriment de la rapidité.  |  Valeur par défaut : 40 Gamme [1, 1000]  | 

Il est important de régler avec précision la valeur de `efSearch` (HNSW) ou `probes` (IVFFlat) pour obtenir les performances et la précision souhaitées. Consultez les exemples d'opérations suivants :

------
#### [ HNSW ]

```
db.collection.aggregate([
  {
    $search: {
      "vectorSearch": {
        "vector": [0.2, 0.5, 0.8], 
        "path": "vectorEmbedding", 
        "similarity": "euclidean",
        "k": 2,
        "efSearch": 40
      }
    }
  }
]);
```

------
#### [ IVFFlat ]

```
db.collection.aggregate([
  {
    $search: {
      "vectorSearch": {
        "vector": [0.2, 0.5, 0.8], 
        "path": "vectorEmbedding", 
        "similarity": "euclidean",
        "k": 2,
        "probes": 1
      }
    }
  }
]);
```

------

**Exemple de sortie**

Le résultat de cette opération ressemble à ce qui suit :

```
{ "_id" : ObjectId("653d835ff96bee02cad7323c"), "product_name" : "Product A", "vectorEmbedding" : [ 0.2, 0.5, 0.8 ] }
{ "_id" : ObjectId("653d835ff96bee02cad7323e"), "product_name" : "Product C", "vectorEmbedding" : [ 0.1, 0.2, 0.5 ] }
```

### `$vectorSearch`opérateur (disponible dans Amazon DocumentDB 8.0 et versions ultérieures)
<a name="w2aac21c11c15b7"></a>

Utilisez le modèle suivant pour interroger un vecteur :

```
db.collection.aggregate([
{
  "$vectorSearch": {
    "exact": true | false,
    "index": "<index-name>" [supports only HNSW index],
    "limit": <number-of-results> [same as k],
    "path": "<vector field-to-search>",
    "queryVector": <array-of-numbers>,
    "numCandidates": <number-of-candidates> [same as efSearch], 
  }
}])
```

## Caractéristiques et limites
<a name="vector-limitations"></a>

**Compatibilité des versions**
+ La recherche vectorielle pour Amazon DocumentDB n'est disponible que sur les clusters basés sur des instances Amazon DocumentDB 5.0\$1.

**Vecteurs**
+ Amazon DocumentDB peut indexer des vecteurs de 2 000 dimensions maximum. Cependant, il est possible de stocker jusqu'à 16 000 dimensions sans index.

**Index**
+ Pour la création d' IVFFlat index, le paramètre recommandé pour le paramètre des listes est le nombre de documents/1000 pour un maximum de 1 million de documents et `sqrt(# of documents)` pour plus d'un million de documents. En raison d'une limite de mémoire de travail, Amazon DocumentDB prend en charge une certaine valeur maximale du paramètre des listes en fonction du nombre de dimensions. À titre de référence, le tableau suivant fournit les valeurs maximales du paramètre des listes pour les vecteurs de 500, 1 000 et 2 000 dimensions :    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/documentdb/latest/developerguide/vector-search.html)
+ Aucune autre option d'index telle que`compound`, `sparse` ou n'est prise `partial` en charge par les index vectoriels.
+ La création d'index parallèle n'est pas prise en charge pour l'index HNSW dans Amazon DocumentDB 5.0.

**Requête vectorielle**
+ Pour les requêtes de recherche vectorielle, il est important d'affiner les paramètres tels que `probes` ou `efSearch` pour obtenir des résultats optimaux. Plus la valeur `probes` ou le `efSearch` paramètre est élevée, plus le rappel est élevé et plus la vitesse est faible. Le réglage recommandé pour commencer à affiner le paramètre des sondes est`sqrt(# of lists)`. 

## Bonnes pratiques
<a name="w2aac21c11c19"></a>

Découvrez les meilleures pratiques relatives à l'utilisation de la recherche vectorielle dans Amazon DocumentDB. Cette section est mise à jour en continu à mesure que de nouvelles bonnes pratiques sont identifiées.
+ La création d'un index de fichier inversé avec compression plate (IVFFlat) implique le regroupement et l'organisation des points de données en fonction des similitudes. Par conséquent, pour qu'un index soit plus efficace, nous vous recommandons de charger au moins certaines données avant de créer l'index. 
+ Pour les requêtes de recherche vectorielle, il est important d'affiner les paramètres, par exemple `probes` ou `efSearch` pour obtenir des résultats optimaux. Plus la valeur du `efSearch` paramètre `probes` or est élevée, plus le rappel est élevé et plus la vitesse est faible. Le réglage recommandé pour commencer à affiner le `probes` paramètre est`sqrt(lists)`. 

**Ressources**
+ [Recherche vectorielle : quels sont les nouveaux articles de blog](https://aws.amazon.com/blogs/aws/vector-search-for-amazon-documentdb-with-mongodb-compatibility-is-now-generally-available)
+ [Exemple de code de recherche sémantique](https://github.com/aws-samples/amazon-documentdb-samples/tree/master/blogs/semanticsearch-docdb)
+ [Exemples de code de recherche vectorielle Amazon DocumentDB](https://github.com/aws-samples/amazon-documentdb-samples/tree/master/samples/vector-search)