

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éveloppez des assistants avancés basés sur l'IA générative basés sur le chat en utilisant RAG et des instructions ReAct
<a name="develop-advanced-generative-ai-chat-based-assistants-by-using-rag-and-react-prompting"></a>

*Praveen Kumar Jeyarajan, Shuai Cao, Noah Hamilton, Kiowa Jackson, Jundong Qiao et Kara Yang, Amazon Web Services*

## Résumé
<a name="develop-advanced-generative-ai-chat-based-assistants-by-using-rag-and-react-prompting-summary"></a>

En général, 70 % des données d'une entreprise sont bloquées dans des systèmes cloisonnés. Vous pouvez utiliser des assistants basés sur le chat basés sur l'IA générative pour obtenir des informations et établir des relations entre ces silos de données grâce à des interactions en langage naturel. Pour tirer le meilleur parti de l'IA générative, les résultats doivent être fiables, précis et inclure les données d'entreprise disponibles. Le succès des assistants basés sur le chat dépend des éléments suivants :
+ Modèles d'IA génératifs (tels qu'Anthropic Claude 2)
+ Vectorisation des sources de données
+ Techniques de raisonnement avancées, telles que le [ReAct cadre](https://www.promptingguide.ai/techniques/react), pour orienter le modèle

Ce modèle propose des approches de récupération de données à partir de sources de données telles que les buckets Amazon Simple Storage Service (Amazon S3), AWS Glue et Amazon Relational Database Service (Amazon RDS). La valeur est obtenue à partir de ces données en entrelacant la [génération augmentée de récupération (RAG)](https://docs.aws.amazon.com/bedrock/latest/userguide/knowledge-base.html) avec des méthodes. chain-of-thought Les résultats permettent des conversations d'assistant complexes basées sur le chat qui s'appuient sur l'intégralité des données stockées par votre entreprise.

Ce modèle utilise les SageMaker manuels Amazon et les tableaux de données de tarification comme exemple pour explorer les fonctionnalités d'un assistant génératif basé sur le chat basé sur l'IA. Vous allez créer un assistant basé sur le chat qui aidera les clients à évaluer le SageMaker service en répondant à des questions sur les prix et les fonctionnalités du service. La solution utilise une bibliothèque Streamlit pour créer l'application frontale et le LangChain framework pour développer le backend de l'application basé sur un modèle de langage étendu (LLM).

Les demandes adressées à l'assistant basé sur le chat sont traitées selon une classification d'intention initiale pour être acheminées vers l'un des trois flux de travail possibles. Le flux de travail le plus sophistiqué combine des conseils généraux avec une analyse tarifaire complexe. Vous pouvez adapter le modèle en fonction des cas d'utilisation en entreprise, corporatif et industriel.

## Conditions préalables et limitations
<a name="develop-advanced-generative-ai-chat-based-assistants-by-using-rag-and-react-prompting-prereqs"></a>

**Conditions préalables**
+ [Interface de ligne de commande (AWS CLI) (AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html)) installée et configurée
+ [AWS Cloud Development Kit (AWS CDK) Toolkit 2.114.1 ou version ultérieure installée](https://docs.aws.amazon.com/cdk/v2/guide/getting_started.html) et configurée
+ Connaissance de base de Python et d'AWS CDK
+ [Git](https://git-scm.com/book/en/v2/Getting-Started-Installing-Git) installé
+ [Docker installé](https://docs.docker.com/get-docker/)
+ [Python 3.11 ou version ultérieure](https://www.python.org/downloads/) installé et configuré (pour plus d'informations, consultez la section [Outils](#develop-advanced-generative-ai-chat-based-assistants-by-using-rag-and-react-prompting-tools))
+ [Un [compte AWS actif](https://docs.aws.amazon.com/accounts/latest/reference/manage-acct-creating.html) démarré à l'aide d'AWS CDK](https://docs.aws.amazon.com/cdk/v2/guide/bootstrapping.html)
+ [Accès aux modèles](https://docs.aws.amazon.com/bedrock/latest/userguide/model-access.html#add-model-access) Amazon Titan et Anthropic Claude activé dans le service Amazon Bedrock
+ [Informations d'identification de sécurité AWS](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-envvars.html)`AWS_ACCESS_KEY_ID`, y compris celles correctement configurées dans votre environnement de terminal

**Limites**
+ LangChain ne prend pas en charge tous les LLM pour le streaming. Les modèles Anthropic Claude sont pris en charge, mais pas les modèles de AI21 Labs.
+ Cette solution est déployée sur un seul compte AWS.
+ Cette solution ne peut être déployée que dans les régions AWS où Amazon Bedrock et Amazon Kendra sont disponibles. Pour plus d'informations sur la disponibilité, consultez la documentation d'[Amazon Bedrock](https://docs.aws.amazon.com/bedrock/latest/userguide/what-is-bedrock.html#bedrock-regions) et d'[Amazon Kendra](https://docs.aws.amazon.com/general/latest/gr/kendra.html).

**Versions du produit**
+ Python version 3.11 ou ultérieure
+ Streamlit version 1.30.0 ou ultérieure
+ StreamLit-Chat version 0.1.1 ou ultérieure
+ LangChain version 0.1.12 ou ultérieure
+ AWS CDK version 2.132.1 ou ultérieure

## Architecture
<a name="develop-advanced-generative-ai-chat-based-assistants-by-using-rag-and-react-prompting-architecture"></a>

**Pile technologique cible**
+ Amazon Athena
+ Amazon Bedrock
+ Amazon Elastic Container Service (Amazon ECS)
+ AWS Glue
+ AWS Lambda
+ Amazon S3
+ Amazon Kendra
+ Elastic Load Balancing

**Architecture cible**

Le code AWS CDK déploiera toutes les ressources nécessaires pour configurer l'application d'assistant basée sur le chat dans un compte AWS. L'application d'assistance basée sur le chat illustrée dans le schéma suivant est conçue pour répondre aux questions SageMaker connexes des utilisateurs. Les utilisateurs se connectent via un Application Load Balancer à un VPC contenant un cluster Amazon ECS hébergeant l'application Streamlit. Une fonction Lambda d'orchestration se connecte à l'application. Les sources de données du compartiment S3 fournissent des données à la fonction Lambda via Amazon Kendra et AWS Glue. La fonction Lambda se connecte à Amazon Bedrock pour répondre aux requêtes (questions) des utilisateurs assistants basés sur le chat.

![\[Diagramme d’architecture.\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/images/pattern-img/b4df6405-76ab-4493-a722-15ceca067254/images/4e5856cf-9489-41f8-a411-e3b8d8a50748.png)


1. La fonction Lambda d'orchestration envoie la demande d'invite LLM au modèle Amazon Bedrock (Claude 2).

1. Amazon Bedrock renvoie la réponse LLM à la fonction Lambda d'orchestration.

**Flux logique au sein de la fonction Lambda d'orchestration**

Lorsque les utilisateurs posent une question via l'application Streamlit, celle-ci invoque directement la fonction Lambda d'orchestration. Le schéma suivant montre le flux logique lorsque la fonction Lambda est invoquée.

![\[Diagramme d’architecture.\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/images/pattern-img/b4df6405-76ab-4493-a722-15ceca067254/images/70ae4736-06a6-4d3a-903a-edc5c10d78a0.png)

+ Étape 1 — L'entrée `query` (question) est classée dans l'une des trois intentions suivantes :
  + Questions SageMaker d'orientation générales
  + Questions générales SageMaker sur la tarification (formation/inférence)
  + Questions complexes relatives à la tarification SageMaker et à la tarification
+ Étape 2 — L'entrée `query` initie l'un des trois services :
  + `RAG Retrieval service`, qui extrait le contexte pertinent de la base de données vectorielle [Amazon](https://aws.amazon.com/kendra/) Kendra et appelle le LLM [via Amazon](https://aws.amazon.com/bedrock/) Bedrock pour résumer le contexte extrait sous forme de réponse.
  + `Database Query service`, qui utilise le LLM, les métadonnées de la base de données et des exemples de lignes provenant de tables pertinentes pour convertir l'`query`entrée en requête SQL. Le service Database Query exécute la requête SQL par rapport à la base de données de SageMaker tarification via [Amazon Athena](https://aws.amazon.com/athena/) et résume les résultats de la requête sous forme de réponse.
  + `In-context ReACT Agent service`, qui décompose la saisie `query` en plusieurs étapes avant de fournir une réponse. L'agent utilise `RAG Retrieval service` et `Database Query service` comme outils pour récupérer les informations pertinentes au cours du processus de raisonnement. Une fois les processus de raisonnement et d'action terminés, l'agent génère la réponse finale en tant que réponse.
+ Étape 3 — La réponse de la fonction Lambda d'orchestration est envoyée à l'application Streamlit en sortie.

## Outils
<a name="develop-advanced-generative-ai-chat-based-assistants-by-using-rag-and-react-prompting-tools"></a>

**Services AWS**
+ [Amazon Athena](https://docs.aws.amazon.com/athena/latest/ug/what-is.html) est un service de requêtes interactif qui vous permet d'analyser les données directement dans Amazon Simple Storage Service (Amazon S3) à l'aide du langage SQL standard.
+ [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 Cloud Development Kit (AWS CDK)](https://docs.aws.amazon.com/cdk/latest/guide/home.html) est un framework de développement logiciel qui vous aide à définir et à provisionner l'infrastructure du cloud AWS sous forme de code.
+ [L'interface de ligne de commande AWS (AWS CLI)](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html) est un outil open source qui vous permet d'interagir avec les services AWS par le biais de commandes dans votre shell de ligne de commande.
+ [Amazon Elastic Container Service (Amazon ECS)](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/Welcome.html) est un service de gestion de conteneurs évolutif et rapide, qui facilite l'exécution, l'arrêt et la gestion de conteneurs Docker sur un cluster.
+ [AWS Glue](https://docs.aws.amazon.com/glue/) est un service d'extraction, de transformation et de chargement (ETL) entièrement géré. Il vous aide à classer, nettoyer, enrichir et déplacer les données de manière fiable entre les magasins de données et les flux de données. Ce modèle utilise un robot d'exploration AWS Glue et une table du catalogue de données AWS Glue.
+ [Amazon Kendra](https://docs.aws.amazon.com/kendra/latest/dg/what-is-kendra.html) est un service de recherche intelligent qui utilise le traitement du langage naturel et des algorithmes d'apprentissage automatique avancés pour renvoyer des réponses spécifiques aux questions de recherche à partir de vos données.
+ [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html) est un service de calcul qui vous permet d'exécuter du code sans avoir à provisionner ou à 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.
+ [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.
+ [Elastic Load Balancing (ELB)](https://docs.aws.amazon.com/elasticloadbalancing/latest/userguide/what-is-load-balancing.html) répartit le trafic applicatif ou réseau entrant sur plusieurs cibles. Par exemple, vous pouvez répartir le trafic entre les instances, les conteneurs et les adresses IP Amazon Elastic Compute Cloud (Amazon EC2) dans une ou plusieurs zones de disponibilité.

**Référentiel de code**

Le code de ce modèle est disponible dans le GitHub [genai-bedrock-chatbot](https://github.com/awslabs/genai-bedrock-chatbot)référentiel.

Le référentiel de code contient les fichiers et dossiers suivants :
+ `assets`dossier — Les actifs statiques, le schéma d'architecture et le jeu de données public
+ `code/lambda-container`dossier — Le code Python exécuté dans la fonction Lambda
+ `code/streamlit-app`dossier — Le code Python qui est exécuté en tant qu'image de conteneur dans Amazon ECS
+ `tests`dossier — Les fichiers Python exécutés pour tester unitaires les constructions du kit AWS CDK
+ `code/code_stack.py`— Le CDK AWS construit des fichiers Python utilisés pour créer des ressources AWS
+ `app.py`— Les fichiers Python de pile AWS CDK utilisés pour déployer les ressources AWS dans le compte AWS cible
+ `requirements.txt`— La liste de toutes les dépendances Python qui doivent être installées pour AWS CDK
+ `requirements-dev.txt`— La liste de toutes les dépendances Python qui doivent être installées pour qu'AWS CDK exécute la suite de tests unitaires
+ `cdk.json`— Le fichier d'entrée fournissant les valeurs requises pour faire tourner les ressources


| 
| 
| Remarque : Le code AWS CDK utilise des structures [L3 (couche 3) et des politiques](https://docs.aws.amazon.com/cdk/latest/guide/getting_started.html) [AWS Identity and Access Management (IAM) gérées par AWS](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_managed-vs-inline.html#aws-managed-policies) pour déployer la solution. | 
| --- |

## Bonnes pratiques
<a name="develop-advanced-generative-ai-chat-based-assistants-by-using-rag-and-react-prompting-best-practices"></a>
+ L'exemple de code fourni ici concerne uniquement une démonstration proof-of-concept (PoC) ou pilote. Si vous souhaitez transférer le code en mode de production, veillez à suivre les meilleures pratiques suivantes :
  + La [journalisation des accès Amazon S3 est activée](https://docs.aws.amazon.com/AmazonS3/latest/userguide/enable-server-access-logging.html).
  + Les [journaux de flux VPC sont](https://docs.aws.amazon.com/vpc/latest/userguide/flow-logs.html) activés.
  + L'[index Amazon Kendra Enterprise Edition est activé](https://docs.aws.amazon.com/whitepapers/latest/how-aws-pricing-works/amazon-kendra.html).
+ Configurez la surveillance et les alertes pour la fonction Lambda. Pour plus d'informations, consultez la section [Surveillance et résolution des problèmes des fonctions Lambda](https://docs.aws.amazon.com/lambda/latest/dg/lambda-monitoring.html). Pour connaître les meilleures pratiques générales relatives à l'utilisation des fonctions Lambda, consultez la documentation [AWS](https://docs.aws.amazon.com/lambda/latest/dg/best-practices.html).

## Épopées
<a name="develop-advanced-generative-ai-chat-based-assistants-by-using-rag-and-react-prompting-epics"></a>

### Configurer les informations d'identification AWS sur votre machine locale
<a name="set-up-aws-credentials-on-your-local-machine"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Exportez des variables pour le compte et la région AWS où la pile sera déployée. | Pour fournir des informations d'identification AWS pour AWS CDK à l'aide de variables d'environnement, exécutez les commandes suivantes.<pre>export CDK_DEFAULT_ACCOUNT=<12 Digit AWS Account Number><br />export CDK_DEFAULT_REGION=<region></pre> | DevOps ingénieur, AWS DevOps | 
| Configurez le profil de la CLI AWS. | Pour configurer le profil de la CLI AWS pour le compte, suivez les instructions de la [documentation AWS](https://docs.aws.amazon.com/toolkit-for-visual-studio/latest/user-guide/keys-profiles-credentials.html). | DevOps ingénieur, AWS DevOps | 

### Configuration de votre environnement
<a name="set-up-your-environment"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Clonez le dépôt sur votre machine locale. | Pour cloner le dépôt, exécutez la commande suivante dans votre terminal.<pre>git clone https://github.com/awslabs/genai-bedrock-chatbot.git</pre> | DevOps ingénieur, AWS DevOps | 
| Configurez l'environnement virtuel Python et installez les dépendances requises. | Pour configurer l'environnement virtuel Python, exécutez les commandes suivantes.<pre>cd genai-bedrock-chatbot<br />python3 -m venv .venv<br />source .venv/bin/activate</pre>Pour configurer les dépendances requises, exécutez la commande suivante.<pre>pip3 install -r requirements.txt</pre> | DevOps ingénieur, AWS DevOps | 
| Configurez l'environnement AWS CDK et synthétisez le code AWS CDK. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/develop-advanced-generative-ai-chat-based-assistants-by-using-rag-and-react-prompting.html) | DevOps ingénieur, AWS DevOps | 

### Configuration et déploiement de l'application d'assistance basée sur le chat
<a name="configure-and-deploy-the-chat-based-assistant-application"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Fournir un accès au modèle Claude. | Pour activer l'accès au modèle Anthropic Claude pour votre compte AWS, suivez les instructions de la documentation [Amazon Bedrock](https://docs.aws.amazon.com/bedrock/latest/userguide/model-access.html#add-model-access). | AWS DevOps | 
| Déployez des ressources dans le compte. | Pour déployer des ressources dans le compte AWS à l'aide du kit AWS CDK, procédez comme suit :[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/develop-advanced-generative-ai-chat-based-assistants-by-using-rag-and-react-prompting.html)Une fois le déploiement réussi, vous pouvez accéder à l'application d'assistance basée sur le chat en utilisant l'URL fournie dans la section CloudFormation **Sorties**. | AWS DevOps, DevOps ingénieur | 
| Exécutez le robot d'exploration AWS Glue et créez la table du catalogue de données. | Un [robot d'exploration AWS Glue](https://docs.aws.amazon.com/glue/latest/dg/add-crawler.html) est utilisé pour maintenir le schéma de données dynamique. La solution crée et met à jour des partitions dans la [table du catalogue de données AWS Glue](https://docs.aws.amazon.com/athena/latest/ug/querying-glue-catalog.html) en exécutant le robot d'exploration à la demande. Une fois les fichiers du jeu de données CSV copiés dans le compartiment S3, exécutez le robot d'exploration AWS Glue et créez le schéma de table du catalogue de données à des fins de test :[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/develop-advanced-generative-ai-chat-based-assistants-by-using-rag-and-react-prompting.html)Le code AWS CDK configure le robot d'exploration AWS Glue pour qu'il s'exécute à la demande, mais vous pouvez également le [planifier](https://docs.aws.amazon.com/glue/latest/dg/schedule-crawler.html) pour qu'il s'exécute périodiquement. | DevOps ingénieur, AWS DevOps | 
| Lancez l'indexation des documents. | Une fois les fichiers copiés dans le compartiment S3, utilisez Amazon Kendra pour les explorer et les indexer :[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/develop-advanced-generative-ai-chat-based-assistants-by-using-rag-and-react-prompting.html)[Le code AWS CDK configure la synchronisation de l'index Amazon Kendra pour qu'elle s'exécute à la demande, mais vous pouvez également l'exécuter périodiquement à l'aide du paramètre Schedule.](https://docs.aws.amazon.com/kendra/latest/dg/data-source.html#cron) | AWS DevOps, DevOps ingénieur | 

### Nettoyez toutes les ressources AWS de la solution
<a name="clean-up-all-aws-resources-in-the-solution"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Supprimez les ressources AWS. | Après avoir testé la solution, nettoyez les ressources :[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/develop-advanced-generative-ai-chat-based-assistants-by-using-rag-and-react-prompting.html) | DevOps ingénieur, AWS DevOps | 

## Résolution des problèmes
<a name="develop-advanced-generative-ai-chat-based-assistants-by-using-rag-and-react-prompting-troubleshooting"></a>


| Problème | Solution | 
| --- | --- | 
| AWS CDK renvoie des erreurs. | Pour obtenir de l'aide concernant les problèmes liés au CDK AWS, consultez la section [Résolution des problèmes courants liés au CDK AWS](https://docs.aws.amazon.com/cdk/v2/guide/troubleshooting.html). | 

## Ressources connexes
<a name="develop-advanced-generative-ai-chat-based-assistants-by-using-rag-and-react-prompting-resources"></a>
+ Amazon Bedrock :
  + [Accès aux modèles](https://docs.aws.amazon.com/bedrock/latest/userguide/model-access.html)
  + [Paramètres d'inférence pour les modèles de base](https://docs.aws.amazon.com/bedrock/latest/userguide/model-parameters.html)
+ [Création de fonctions Lambda avec Python](https://docs.aws.amazon.com/lambda/latest/dg/lambda-python.html)
+ [Commencez avec le kit AWS CDK](https://docs.aws.amazon.com/cdk/v2/guide/getting_started.html)
+ [Utilisation du kit de développement logiciel AWS en Python](https://docs.aws.amazon.com/cdk/v2/guide/work-with-cdk-python.html)
+ [Générateur d'applications d'IA générative sur AWS](https://docs.aws.amazon.com/solutions/latest/generative-ai-application-builder-on-aws/solution-overview.html)
+ [LangChain documentation](https://python.langchain.com/docs/get_started/introduction)
+ [Documentation simplifiée](https://docs.streamlit.io/)

## Informations supplémentaires
<a name="develop-advanced-generative-ai-chat-based-assistants-by-using-rag-and-react-prompting-additional"></a>

**Commandes AWS CDK**

Lorsque vous travaillez avec AWS CDK, gardez à l'esprit les commandes utiles suivantes :
+ Répertorie toutes les piles de l'application

  ```
  cdk ls
  ```
+ Émet le modèle AWS synthétisé CloudFormation 

  ```
  cdk synth
  ```
+ Déploie la pile sur votre compte AWS et votre région par défaut

  ```
  cdk deploy
  ```
+ Compare la pile déployée avec l'état actuel

  ```
  cdk diff
  ```
+ Ouvre la documentation du kit AWS CDK

  ```
  cdk docs
  ```
+ Supprime la CloudFormation pile et retire les ressources déployées par AWS

  ```
  cdk destroy
  ```