

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.

# Déployez un cas d'utilisation de RAG AWS en utilisant Terraform et Amazon Bedrock
<a name="deploy-rag-use-case-on-aws"></a>

*Martin Maritsch, Nicolas Jacob Baer, Olivier Brique, Julian Ferdinand Grueber, Alice Morano et Nicola D Orazio, Amazon Web Services*

## Résumé
<a name="deploy-rag-use-case-on-aws-summary"></a>

AWS propose diverses options pour créer vos cas d'utilisation de l'IA générative compatibles avec le [Retrieval Augmented Generation (RAG)](https://aws.amazon.com/what-is/retrieval-augmented-generation/). Ce modèle vous fournit une solution pour une application basée sur RAG basée sur Amazon Aurora PostgreSQL LangChain et compatible avec Amazon Aurora en tant que magasin vectoriel. Vous pouvez déployer directement cette solution avec Terraform dans votre Compte AWS et implémenter le cas d'utilisation simple suivant de RAG :

1. L'utilisateur télécharge manuellement un fichier dans un compartiment Amazon Simple Storage Service (Amazon S3), tel qu'un fichier Microsoft Excel ou un document PDF. (Pour plus d'informations sur les types de fichiers pris en charge, consultez la documentation [non structurée](https://docs.unstructured.io/open-source/core-functionality/partitioning).)

1. Le contenu du fichier est extrait et intégré dans une base de connaissances basée sur la compatibilité sans serveur Aurora PostgreSQL, qui prend en charge l'ingestion de documents en temps quasi réel dans le magasin vectoriel. Cette approche permet au modèle RAG d'accéder aux informations pertinentes et de les récupérer pour les cas d'utilisation où les faibles latences sont importantes.

1. Lorsque l'utilisateur utilise le modèle de génération de texte, il améliore l'interaction en récupérant davantage de contenu pertinent à partir des fichiers précédemment téléchargés.

Le modèle utilise [Amazon Titan Text Embeddings v2](https://docs.aws.amazon.com/bedrock/latest/userguide/titan-embedding-models.html) comme modèle d'intégration et [Anthropic Claude 3 Sonnet](https://aws.amazon.com/bedrock/claude/) comme modèle de génération de texte, tous deux disponibles sur Amazon Bedrock.

## Conditions préalables et limitations
<a name="deploy-rag-use-case-on-aws-prereqs"></a>

**Conditions préalables**
+ Un actif Compte AWS.
+ AWS Command Line Interface (AWS CLI) installé et configuré avec votre Compte AWS. Pour les instructions d'installation, voir [Installer ou mettre à jour vers la dernière version AWS CLI de](https://docs.aws.amazon.com/cli/latest/userguide/install-cliv2.html) la AWS CLI documentation. Pour vérifier vos AWS informations d'identification et votre accès à votre compte, consultez la section [Configuration et paramètres des fichiers d'identification](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-files.html) dans la AWS CLI documentation.
+ Accès aux modèles activé pour les grands modèles linguistiques requis (LLMs) dans la console Amazon Bedrock de votre Compte AWS. Ce modèle nécessite les éléments suivants LLMs :
  + `amazon.titan-embed-text-v2:0`
  + `anthropic.claude-3-sonnet-20240229-v1:0`

**Limites**
+ Cet exemple d'architecture n'inclut pas d'interface permettant de répondre aux questions par programmation avec la base de données vectorielle. Si votre cas d'utilisation nécessite une API, pensez à ajouter [Amazon API Gateway](https://docs.aws.amazon.com/apigateway/latest/developerguide) avec une AWS Lambda fonction qui exécute des tâches de récupération et de réponse aux questions. 
+ Cet exemple d'architecture n'inclut pas de fonctionnalités de surveillance pour l'infrastructure déployée. Si votre cas d'utilisation nécessite une surveillance, pensez à ajouter [AWS des services de surveillance](https://docs.aws.amazon.com/prescriptive-guidance/latest/implementing-logging-monitoring-cloudwatch/welcome.html).
+ Si vous chargez un grand nombre de documents dans un court laps de temps dans le compartiment Amazon S3, la fonction Lambda peut rencontrer des limites de débit. Comme solution, vous pouvez dissocier la fonction Lambda d'une file d'attente Amazon Simple Queue Service (Amazon SQS) dans laquelle vous pouvez contrôler le taux d'invocations Lambda.
+ Certains Services AWS ne sont pas disponibles du tout Régions AWS. Pour connaître la disponibilité par région, voir [Services AWS par région](https://aws.amazon.com/about-aws/global-infrastructure/regional-product-services/). Pour des points de terminaison spécifiques, consultez [Points de terminaison de service et quotas](https://docs.aws.amazon.com/general/latest/gr/aws-service-information.html), puis choisissez le lien correspondant au service.

**Versions du produit**
+ [AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html) version 2 ou ultérieure
+ [Docker](https://docs.docker.com/get-started/) version 26.0.0 ou ultérieure
+ [Poetry](https://pypi.org/project/poetry/) version 1.7.1 ou ultérieure
+ [Python](https://www.python.org/downloads/) version 3.10 ou ultérieure
+ [Terraform](https://developer.hashicorp.com/terraform/install) version 1.8.4 ou ultérieure

## Architecture
<a name="deploy-rag-use-case-on-aws-architecture"></a>

Le schéma suivant montre les composants du flux de travail et de l'architecture de ce modèle.

![Flux de travail pour créer une application basée sur RAG à l'aide d'Aurora PostgreSQL LLMs et sur Amazon Bedrock.](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/images/pattern-img/8f184945-7f17-4760-8806-6d0eaeef372a/images/3771b7a0-05bd-4eb3-ad5b-199e22f86184.png)


Ce schéma illustre ce qui suit :

1. Lorsqu'un objet est créé dans le compartiment Amazon S3`bedrock-rag-template-<account_id>`, une [notification Amazon S3](https://docs.aws.amazon.com/AmazonS3/latest/userguide/EventNotifications.html) invoque la fonction `data-ingestion-processor` Lambda.

1. La fonction Lambda `data-ingestion-processor` est basée sur une image Docker stockée dans le référentiel Amazon Elastic Container Registry (Amazon ECR). `bedrock-rag-template`

   La fonction utilise le [LangChain S3 FileLoader](https://python.langchain.com/v0.1/docs/integrations/document_loaders/aws_s3_file/) pour lire le fichier en tant que [LangChain document](https://api.python.langchain.com/en/v0.0.339/schema/langchain.schema.document.Document.html). Ensuite, chaque document [LangChain RecursiveCharacterTextSplitter](https://python.langchain.com/v0.1/docs/modules/data_connection/document_transformers/recursive_text_splitter/)est découpé en un `CHUNK_SIZE` et un `CHUNK_OVERLAP` qui dépendent de la taille maximale du jeton du modèle d'intégration Amazon Titan Text Embedding V2. Ensuite, la fonction Lambda invoque le modèle d'intégration sur Amazon Bedrock pour intégrer les segments dans des représentations vectorielles numériques. Enfin, ces vecteurs sont stockés dans la base de données Aurora PostgreSQL. Pour accéder à la base de données, la fonction Lambda extrait d'abord le nom d'utilisateur et le mot de passe de. AWS Secrets Manager

1. Sur l'[instance de bloc-notes](https://docs.aws.amazon.com/sagemaker/latest/dg/nbi.html) Amazon SageMaker AI`aws-sample-bedrock-rag-template`, l'utilisateur peut rédiger une demande de questions. Le code invoque Claude 3 sur Amazon Bedrock et ajoute les informations de la base de connaissances au contexte de l'invite. Claude 3 fournit donc des réponses en utilisant les informations contenues dans les documents.

L'approche de ce modèle en matière de mise en réseau et de sécurité est la suivante :
+ La fonction Lambda `data-ingestion-processor` se trouve dans un sous-réseau privé au sein du cloud privé virtuel (VPC). La fonction Lambda n'est pas autorisée à envoyer du trafic vers l'Internet public en raison de son groupe de sécurité. Par conséquent, le trafic vers Amazon S3 et Amazon Bedrock est acheminé uniquement via les points de terminaison VPC. Par conséquent, le trafic ne traverse pas l'Internet public, ce qui réduit la latence et ajoute une couche de sécurité supplémentaire au niveau du réseau.
+ Toutes les ressources et données sont chiffrées le cas échéant à l'aide de la clé AWS Key Management Service (AWS KMS) avec l'alias`aws-sample/bedrock-rag-template`.

**Automatisation et mise à l'échelle**

Ce modèle utilise Terraform pour déployer l'infrastructure depuis le référentiel de code dans un. Compte AWS

## Outils
<a name="deploy-rag-use-case-on-aws-tools"></a>

**Services AWS**
+ [Amazon Aurora PostgreSQL Compatible Edition](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/Aurora.AuroraPostgreSQL.html) est un moteur de base de données relationnelle entièrement géré et compatible ACID qui vous aide à configurer, exploiter et dimensionner les déploiements PostgreSQL. Dans ce modèle, Aurora PostgreSQL compatible utilise le plugin pgvector comme base de données vectorielle.
+ [Amazon Bedrock](https://docs.aws.amazon.com/bedrock/latest/userguide/what-is-bedrock.html) est un service entièrement géré qui met à votre disposition des modèles de base très performants (FMs) issus des principales startups d'IA et d'Amazon via une API unifiée.
+ [AWS Command Line Interface (AWS CLI)](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html) est un outil open source qui vous permet d'interagir Services AWS par le biais de commandes dans votre interface de ligne de commande.
+ [Amazon Elastic Container Registry (Amazon ECR](https://docs.aws.amazon.com/AmazonECR/latest/userguide/what-is-ecr.html)) est un service géré de registre d'images de conteneurs sécurisé, évolutif et fiable. Dans ce modèle, Amazon ECR héberge l'image Docker pour la fonction Lambda`data-ingestion-processor`.
+ [Gestion des identités et des accès AWS (IAM)](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html) vous aide à gérer en toute sécurité l'accès à vos AWS ressources en contrôlant qui est authentifié et autorisé à les utiliser.
+ [AWS Key Management Service (AWS KMS)](https://docs.aws.amazon.com/kms/latest/developerguide/overview.html) vous aide à créer et à contrôler des clés cryptographiques afin de protéger vos données.
+ [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html) est un service de calcul qui vous aide à exécuter du code sans avoir à allouer ni à gérer des serveurs. Il exécute votre code uniquement lorsque cela est nécessaire et évolue automatiquement, de sorte que vous ne payez que pour le temps de calcul que vous utilisez. Dans ce modèle, Lambda ingère des données dans le magasin vectoriel.
+ [Amazon SageMaker AI](https://docs.aws.amazon.com/sagemaker/?id=docs_gateway) est un service géré d'apprentissage automatique (ML) qui vous aide à créer et à former des modèles de machine learning, puis à les déployer dans un environnement hébergé prêt pour la production.
+ [AWS Secrets Manager](https://docs.aws.amazon.com/secretsmanager/latest/userguide/intro.html) vous aide à remplacer les informations d'identification codées en dur dans votre code, y compris les mots de passe, par un appel d'API à Secrets Manager pour récupérer le secret par programmation.
+ [Amazon Simple Storage Service (Amazon S3)](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html) est un service de stockage d'objets basé sur le cloud qui vous permet de stocker, de protéger et de récupérer n'importe quel volume de données.
+ [Amazon Virtual Private Cloud (Amazon VPC)](https://docs.aws.amazon.com/vpc/latest/userguide/what-is-amazon-vpc.html) vous aide à lancer AWS des ressources dans un réseau virtuel que vous avez défini. Ce réseau virtuel ressemble à un réseau traditionnel que vous pourriez exécuter dans votre propre centre de données et présente l'avantage d'utiliser l'infrastructure évolutive d' AWS. Le VPC inclut des sous-réseaux et des tables de routage pour contrôler le flux de trafic.

**Autres outils**
+ [Docker](https://docs.docker.com/manuals/) est un ensemble de produits de plateforme en tant que service (PaaS) qui utilisent la virtualisation au niveau du système d'exploitation pour fournir des logiciels dans des conteneurs.
+ [HashiCorp Terraform](https://www.terraform.io/docs) est un outil d'infrastructure en tant que code (IaC) qui vous aide à utiliser le code pour provisionner et gérer l'infrastructure et les ressources du cloud.
+ [Poetry](https://pypi.org/project/poetry/) est un outil de gestion des dépendances et d'empaquetage en Python.
+ [Python](https://www.python.org/) est un langage de programmation informatique polyvalent.

**Référentiel de code**

Le code de ce modèle est disponible dans le dépôt GitHub [terraform-rag-template-using-amazon-bedrock](https://github.com/aws-samples/terraform-rag-template-using-amazon-bedrock).

## Bonnes pratiques
<a name="deploy-rag-use-case-on-aws-best-practices"></a>
+ Bien que cet exemple de code puisse être déployé dans n'importe quel environnement Région AWS, nous vous recommandons d'utiliser l'est des États-Unis (Virginie du Nord) `us-east-1` ou l'ouest des États-Unis (Californie du Nord)`us-west-1`. Cette recommandation est basée sur la disponibilité des modèles de base et d'intégration dans Amazon Bedrock au moment de la publication de ce modèle. Pour obtenir la up-to-date liste des modèles Amazon Bedrock Foundation pris en charge dans Régions AWS, consultez la section [Model support by Région AWS](https://docs.aws.amazon.com/bedrock/latest/userguide/models-regions.html) dans la documentation Amazon Bedrock. Pour plus d'informations sur le déploiement de cet exemple de code dans d'autres régions, consultez la section [Informations supplémentaires](#deploy-rag-use-case-on-aws-additional).
+ Ce modèle fournit uniquement une démonstration proof-of-concept (PoC) ou pilote. Si vous souhaitez mettre le code en production, veillez à suivre les meilleures pratiques suivantes :
  + Activez la journalisation des accès au serveur pour Amazon S3.
  + Configurez [la surveillance et les alertes](https://docs.aws.amazon.com/lambda/latest/dg/lambda-monitoring.html) pour la fonction Lambda.
  + Si votre cas d'utilisation nécessite une API, pensez à ajouter Amazon API Gateway avec une fonction Lambda qui exécute des tâches de récupération et de réponse aux questions.
+ Respectez le principe du moindre privilège et accordez les autorisations minimales requises pour effectuer une tâche. Pour plus d'informations, consultez les sections [Accorder le moindre privilège](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html#grant-least-priv) et [Bonnes pratiques en matière de sécurité](https://docs.aws.amazon.com/IAM/latest/UserGuide/IAMBestPracticesAndUseCases.html) dans la documentation IAM.

## Épopées
<a name="deploy-rag-use-case-on-aws-epics"></a>

### Déployez la solution dans un Compte AWS
<a name="deploy-the-solution-in-an-aws-account"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Pour cloner le référentiel. | Pour cloner le GitHub référentiel fourni avec ce modèle, utilisez la commande suivante :<pre>git clone https://github.com/aws-samples/terraform-rag-template-using-amazon-bedrock</pre> | AWS DevOps | 
| Configurez les variables. | Pour configurer les paramètres de ce modèle, procédez comme suit :[See the AWS documentation website for more details](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/deploy-rag-use-case-on-aws.html) | AWS DevOps | 
| Déployez la solution. | Pour déployer la solution, procédez comme suit :[See the AWS documentation website for more details](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/deploy-rag-use-case-on-aws.html)<br />Le déploiement de l'infrastructure fournit une instance d' SageMaker IA au sein du VPC et dispose des autorisations nécessaires pour accéder à la base de données Aurora PostgreSQL. | AWS DevOps | 

### Tester la solution
<a name="test-the-solution"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Lancez la démo. | Une fois le déploiement de l'infrastructure précédent réussi, suivez les étapes suivantes pour exécuter la démonstration dans un bloc-notes Jupyter :[See the AWS documentation website for more details](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/deploy-rag-use-case-on-aws.html)<br />Le bloc-notes Jupyter vous guide tout au long du processus suivant :[See the AWS documentation website for more details](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/deploy-rag-use-case-on-aws.html) | AWS général | 

### Nettoyer l'infrastructure
<a name="clean-up-infrastucture"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Nettoyez l'infrastructure. | Pour supprimer toutes les ressources que vous avez créées lorsqu'elles ne sont plus nécessaires, utilisez la commande suivante :<pre>terraform destroy -var-file=commons.tfvars</pre> | AWS DevOps | 

## Ressources connexes
<a name="deploy-rag-use-case-on-aws-resources"></a>

**AWS resources**
+ [Création de fonctions Lambda avec Python](https://docs.aws.amazon.com/lambda/latest/dg/lambda-python.html)
+ [Paramètres d'inférence pour les modèles de base](https://docs.aws.amazon.com/bedrock/latest/userguide/model-parameters.html)
+ [Accès aux modèles de fondations Amazon Bedrock](https://docs.aws.amazon.com/bedrock/latest/userguide/model-access.html)
+ [Le rôle des bases de données vectorielles dans les applications d'IA générative](https://aws.amazon.com/blogs/database/the-role-of-vector-datastores-in-generative-ai-applications/) (AWS Database Blog)
+ [Utilisation d'Amazon Aurora PostgreSQL](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/Aurora.AuroraPostgreSQL.html)

**Autres ressources**
+ [documentation pgvector](https://github.com/pgvector/pgvector)

## Informations supplémentaires
<a name="deploy-rag-use-case-on-aws-additional"></a>

**Mettre en œuvre une base de données vectorielle**

Ce modèle utilise la compatibilité avec Aurora PostgreSQL pour implémenter une base de données vectorielle pour RAG. Comme alternative à Aurora PostgreSQL, il fournit d'autres fonctionnalités et services pour RAG AWS , tels que les bases de connaissances Amazon Bedrock et Amazon Service. OpenSearch Vous pouvez choisir la solution qui répond le mieux à vos besoins spécifiques :
+ [Amazon OpenSearch Service](https://docs.aws.amazon.com/opensearch-service/latest/developerguide/what-is.html) fournit des moteurs de recherche et d'analyse distribués que vous pouvez utiliser pour stocker et interroger de gros volumes de données.
+ [Les bases de connaissances Amazon Bedrock](https://docs.aws.amazon.com/bedrock/latest/userguide/knowledge-base.html) sont conçues pour créer et déployer des bases de connaissances sous forme d'abstraction supplémentaire afin de simplifier le processus d'ingestion et de récupération de RAG. Les bases de connaissances Amazon Bedrock peuvent fonctionner à la fois avec Aurora PostgreSQL et Amazon Service. OpenSearch 

**Déploiement vers d'autres Régions AWS**

Comme décrit dans [Architecture](#deploy-rag-use-case-on-aws-architecture), nous vous recommandons d'utiliser la région USA Est (Virginie du Nord) `us-east-1` ou USA Ouest (Californie du Nord) `us-west-1` pour déployer cet exemple de code. Cependant, il existe deux manières de déployer cet exemple de code dans des régions autres que `us-east-1` et`us-west-1`. Vous pouvez configurer la région de déploiement dans le `commons.tfvars` fichier. Pour l'accès au modèle de fondation interrégional, considérez les options suivantes :
+ **Traverser l'Internet public** — Si le trafic peut traverser l'Internet public, ajoutez des passerelles Internet au VPC. Ajustez ensuite le groupe de sécurité attribué à la fonction Lambda `data-ingestion-processor` et à l'instance de bloc-notes SageMaker AI pour autoriser le trafic sortant vers l'Internet public.
+ **Ne pas passer par l'Internet public** — Pour déployer cet exemple dans une région autre que `us-east-1` ou`us-west-1`, procédez comme suit :

1. Dans la `us-west-1` région `us-east-1` ou, créez un VPC supplémentaire, y compris un point de terminaison VPC pour. `bedrock-runtime` 

1. Créez une connexion d'appairage en utilisant l'appairage [VPC](https://docs.aws.amazon.com/vpc/latest/peering/what-is-vpc-peering.html) ou [une passerelle de transit](https://docs.aws.amazon.com/vpc/latest/tgw/tgw-peering.html) vers le VPC de l'application.

1. Lorsque vous configurez le client `bedrock-runtime` boto3 dans une fonction Lambda en dehors de `us-east-1` ou`us-west-1`, transmettez le nom DNS privé du point de terminaison VPC pour in `bedrock-runtime` ou `us-east-1` us-west-1 au client boto3. `endpoint_url`