

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 un assistant entièrement automatisé basé sur le chat en utilisant les agents et les bases de connaissances Amazon Bedrock
<a name="develop-a-fully-automated-chat-based-assistant-by-using-amazon-bedrock-agents-and-knowledge-bases"></a>

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

## Résumé
<a name="develop-a-fully-automated-chat-based-assistant-by-using-amazon-bedrock-agents-and-knowledge-bases-summary"></a>

De nombreuses entreprises sont confrontées à des défis lorsqu'elles créent un assistant basé sur le chat capable d'orchestrer diverses sources de données afin de proposer des réponses complètes. Ce modèle présente une solution pour développer un assistant basé sur le chat capable de répondre aux requêtes provenant à la fois de la documentation et des bases de données, avec un déploiement simple.

À commencer par [Amazon Bedrock](https://docs.aws.amazon.com/bedrock/latest/userguide/what-is-bedrock.html), ce service d'intelligence artificielle générative (IA) entièrement géré fournit un large éventail de modèles de base avancés (FMs). Cela facilite la création efficace d'applications d'IA génératives en mettant fortement l'accent sur la confidentialité et la sécurité. Dans le contexte de la récupération de documentation, la [génération augmentée de récupération (RAG)](https://docs.aws.amazon.com/sagemaker/latest/dg/jumpstart-foundation-models-customize-rag.html) est une fonctionnalité essentielle. Il utilise des [bases de connaissances](https://docs.aws.amazon.com/bedrock/latest/userguide/knowledge-base.html) pour compléter les instructions FM avec des informations contextuelles pertinentes provenant de sources externes. Un index [Amazon OpenSearch Serverless](https://docs.aws.amazon.com/opensearch-service/latest/developerguide/serverless-overview.html) sert de base de données vectorielle à l'origine des bases de connaissances d'Amazon Bedrock. Cette intégration est améliorée grâce à une ingénierie rapide et minutieuse afin de minimiser les inexactitudes et de garantir que les réponses sont ancrées dans une documentation factuelle. Pour les requêtes de base FMs de données, Amazon Bedrock transforme les requêtes textuelles en requêtes SQL structurées, en incorporant des paramètres spécifiques. Cela permet de récupérer avec précision les données des bases de données gérées par des bases de [AWS Glue données](https://docs.aws.amazon.com/glue/latest/dg/define-database.html). [Amazon Athena](https://docs.aws.amazon.com/athena/latest/ug/what-is.html) est utilisé pour ces requêtes.

Pour traiter des requêtes plus complexes, l'obtention de réponses complètes nécessite des informations provenant à la fois de la documentation et des bases de données. [Agents for Amazon Bedrock](https://docs.aws.amazon.com/bedrock/latest/userguide/agents.html) est une fonctionnalité d'intelligence artificielle générative qui vous aide à créer des agents autonomes capables de comprendre des tâches complexes et de les décomposer en tâches plus simples à des fins d'orchestration. La combinaison des informations extraites des tâches simplifiées, facilitée par les agents autonomes d'Amazon Bedrock, améliore la synthèse des informations et permet d'obtenir des réponses plus complètes et exhaustives. Ce modèle montre comment créer un assistant basé sur le chat en utilisant Amazon Bedrock et les services et fonctionnalités d'IA générative associés au sein d'une solution automatisée.

## Conditions préalables et limitations
<a name="develop-a-fully-automated-chat-based-assistant-by-using-amazon-bedrock-agents-and-knowledge-bases-prereqs"></a>

**Conditions préalables**
+ Un actif Compte AWS
+ [Docker, installé](https://docs.docker.com/engine/install/)
+ AWS Cloud Development Kit (AWS CDK), [installé](https://docs.aws.amazon.com/cdk/v2/guide/getting_started.html#getting_started_tools) et [démarré sur le](https://docs.aws.amazon.com/cdk/v2/guide/getting_started.html#getting_started_bootstrap) ou `us-east-1` `us-west-2` Régions AWS
+ AWS CDK [Toolkit version 2.114.1 ou ultérieure, installée](https://docs.aws.amazon.com/cdk/v2/guide/cli.html)
+ AWS Command Line Interface (AWS CLI), [installé](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html) et [configuré](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-configure.html)
+ [Python version 3.11 ou ultérieure, installée](https://www.python.org/downloads/)
+ Dans Amazon Bedrock, [activez l'accès](https://docs.aws.amazon.com/bedrock/latest/userguide/model-access.html) à Claude 2, Claude 2.1, Claude Instant et Titan Embeddings G1 — Text

**Limites**
+ Cette solution est déployée sur un seul Compte AWS.
+ Cette solution ne peut être déployée que Régions AWS là où Amazon Bedrock et Amazon OpenSearch Serverless sont pris en charge. Pour plus d'informations, consultez la documentation d'[Amazon Bedrock](https://docs.aws.amazon.com/bedrock/latest/userguide/bedrock-regions.html) et d'[Amazon OpenSearch Serverless](https://docs.aws.amazon.com/opensearch-service/latest/developerguide/serverless-overview.html#serverless-regions).

**Versions du produit**
+ LLAMA-Index version 0.10.6 ou ultérieure
+ Sqlalchemy version 2.0.23 ou ultérieure
+ OpenSearch-PY version 2.4.2 ou ultérieure
+ Requests\$1AWS4Auth version 1.2.3 ou ultérieure
+ AWS SDK pour Python (Boto3) version 1.34.57 ou ultérieure

## Architecture
<a name="develop-a-fully-automated-chat-based-assistant-by-using-amazon-bedrock-agents-and-knowledge-bases-architecture"></a>

**Pile technologique cible**

Il s'[AWS Cloud Development Kit (AWS CDK)](https://docs.aws.amazon.com/cdk/v2/guide/home.html)agit d'un framework de développement de logiciels open source permettant de définir l'infrastructure cloud dans le code et de la provisionner via AWS CloudFormation ce dernier. La AWS CDK pile utilisée dans ce modèle déploie les AWS ressources suivantes : 
+ AWS Key Management Service (AWS KMS)
+ Amazon Simple Storage Service (Amazon S3)
+ AWS Glue Data Catalog, pour le composant de AWS Glue base de données
+ AWS Lambda
+ Gestion des identités et des accès AWS (JE SUIS)
+ Amazon OpenSearch sans serveur
+ Amazon Elastic Container Registry (Amazon ECR) 
+ Amazon Elastic Container Service (Amazon ECS)
+ AWS Fargate
+ Amazon Virtual Private Cloud (Amazon VPC)
+ [Application Load Balancer](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/introduction.html) 

**Architecture cible**

![\[Schéma d'architecture utilisant une base de connaissances et un agent Amazon Bedrock\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/images/pattern-img/15372718-3a5d-4918-9cfa-422c455f288d/images/ff19152e-0bb6-4758-a6dd-4f6140e55113.png)


Le schéma montre une configuration AWS cloud native complète au sein d'une seule installation Région AWS, en utilisant plusieurs Services AWS. L'interface principale de l'assistant basé sur le chat est une application [Streamlit](https://docs.streamlit.io/) hébergée sur un cluster Amazon ECS. Un [Application Load Balancer](https://aws.amazon.com/elasticloadbalancing/application-load-balancer/) gère l'accessibilité. Les requêtes effectuées via cette interface activent la fonction `Invocation` Lambda, qui s'interface ensuite avec les agents d'Amazon Bedrock. Cet agent répond aux demandes des utilisateurs en consultant les bases de connaissances d'Amazon Bedrock ou en invoquant une fonction Lambda`Agent executor`. Cette fonction déclenche un ensemble d'actions associées à l'agent, selon un schéma d'API prédéfini. Les bases de connaissances d'Amazon Bedrock utilisent un index OpenSearch sans serveur comme base de données vectorielle. En outre, la `Agent executor` fonction génère des requêtes SQL qui sont exécutées sur la AWS Glue base de données via Amazon Athena. 

## Outils
<a name="develop-a-fully-automated-chat-based-assistant-by-using-amazon-bedrock-agents-and-knowledge-bases-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 AWS cloud sous forme de code.
+ [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 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.
+ [Elastic Load Balancing](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é.
+ [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 AWS Glue robot et une AWS Glue Data Catalog table.
+ [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.
+ [Amazon OpenSearch Serverless](https://docs.aws.amazon.com/opensearch-service/latest/developerguide/serverless-overview.html) est une configuration sans serveur à la demande pour Amazon OpenSearch Service. Dans ce modèle, un index OpenSearch sans serveur sert de base de données vectorielle pour les bases de connaissances d'Amazon Bedrock.
+ [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.

**Autres outils**
+ [Streamlit](https://docs.streamlit.io/) est un framework Python open source permettant de créer des applications de données.

**Référentiel de code**

Le code de ce modèle est disponible dans le GitHub [genai-bedrock-agent-chatbot](https://github.com/awslabs/genai-bedrock-agent-chatbot/)référentiel. Le référentiel de code contient les fichiers et dossiers suivants :
+ `assets`dossier — Les actifs statiques, tels que le schéma d'architecture et le jeu de données public.
+ `code/lambdas/action-lambda`dossier — Le code Python de la fonction Lambda qui agit comme une action pour l'agent Amazon Bedrock.
+ `code/lambdas/create-index-lambda`dossier — Le code Python de la fonction Lambda qui crée l'index OpenSearch Serverless.
+ `code/lambdas/invoke-lambda`dossier — Le code Python de la fonction Lambda qui appelle l'agent Amazon Bedrock, qui est appelé directement depuis l'application Streamlit.
+ `code/lambdas/update-lambda`dossier — Le code Python de la fonction Lambda qui met à jour ou supprime les ressources une fois celles-ci déployées AWS via le. AWS CDK
+ `code/layers/boto3_layer`dossier — La AWS CDK pile qui crée une couche Boto3 partagée entre toutes les fonctions Lambda.
+ `code/layers/opensearch_layer`dossier — La AWS CDK pile qui crée une couche OpenSearch sans serveur qui installe toutes les dépendances pour créer l'index.
+ `code/streamlit-app`dossier — Le code Python qui est exécuté en tant qu'image du conteneur dans Amazon ECS.
+ `code/code_stack.py`— Les fichiers Python de AWS CDK construction qui créent des AWS ressources.
+ `app.py`— Les fichiers Python de AWS CDK pile qui déploient AWS les ressources dans le AWS compte cible.
+ `requirements.txt`— La liste de toutes les dépendances Python qui doivent être installées pour AWS CDK.
+ `cdk.json`— Le fichier d'entrée fournissant les valeurs requises pour créer des ressources. De plus, dans les `context/config` champs, vous pouvez personnaliser la solution en conséquence. Pour plus d'informations sur la personnalisation, consultez la section [Informations supplémentaires](#develop-a-fully-automated-chat-based-assistant-by-using-amazon-bedrock-agents-and-knowledge-bases-additional).

## Bonnes pratiques
<a name="develop-a-fully-automated-chat-based-assistant-by-using-amazon-bedrock-agents-and-knowledge-bases-best-practices"></a>
+ L'exemple de code fourni ici est uniquement destiné à proof-of-concept (PoC) ou à des fins pilotes. Si vous souhaitez mettre le code en production, veillez à suivre les meilleures pratiques suivantes :
  + Activer la [journalisation des accès Amazon S3](https://docs.aws.amazon.com/AmazonS3/latest/userguide/enable-server-access-logging.html)
  + Activer les [journaux de flux VPC](https://docs.aws.amazon.com/vpc/latest/userguide/flow-logs.html)
+ Configurez la surveillance et les alertes pour les fonctions 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, consultez les [meilleures pratiques d'utilisation des AWS Lambda fonctions](https://docs.aws.amazon.com/lambda/latest/dg/best-practices.html).

## Épopées
<a name="develop-a-fully-automated-chat-based-assistant-by-using-amazon-bedrock-agents-and-knowledge-bases-epics"></a>

### Configurez les AWS informations d'identification sur votre poste de travail local
<a name="set-up-aws-credentials-on-your-local-workstation"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Exportez les variables du compte et de la région. | Pour fournir des AWS informations d'identification pour AWS CDK le à 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> | AWS DevOps, DevOps ingénieur | 
| Configurez le profil AWS CLI nommé. | Pour configurer le profil AWS CLI nommé pour le compte, suivez les instructions de la section [Configuration et paramètres du fichier d'identification](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-files.html). | AWS DevOps, DevOps ingénieur | 

### 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 poste de travail local. | Pour cloner le dépôt, exécutez la commande suivante dans votre terminal.<pre>git clone https://github.com/awslabs/genai-bedrock-agent-chatbot.git</pre> | DevOps ingénieur, AWS DevOps | 
| Configurez l'environnement virtuel Python. | Pour configurer l'environnement virtuel Python, exécutez les commandes suivantes.<pre>cd genai-bedrock-agent-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' AWS CDK environnement. | Pour convertir le code en AWS CloudFormation modèle, exécutez la commande`cdk synth`. | AWS DevOps, DevOps ingénieur | 

### Configuration et déploiement de l'application
<a name="configure-and-deploy-the-application"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Déployez des ressources dans le compte. | Pour déployer des ressources dans le Compte AWS à l'aide du 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-a-fully-automated-chat-based-assistant-by-using-amazon-bedrock-agents-and-knowledge-bases.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 l'onglet **Sorties** de la CloudFormation console. | DevOps ingénieur, AWS DevOps | 

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


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Supprimez les AWS ressources. | Après avoir testé la solution, exécutez la commande pour nettoyer les ressources`cdk destroy`. | AWS DevOps, DevOps ingénieur | 

## Ressources connexes
<a name="develop-a-fully-automated-chat-based-assistant-by-using-amazon-bedrock-agents-and-knowledge-bases-resources"></a>

**AWS documentation**
+ Ressources 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)
  + [Agents pour Amazon Bedrock](https://docs.aws.amazon.com/bedrock/latest/userguide/agents.html)
  + [Bases de connaissances pour Amazon Bedrock](https://docs.aws.amazon.com/bedrock/latest/userguide/knowledge-base.html)
+ [Création de fonctions Lambda avec Python](https://docs.aws.amazon.com/lambda/latest/dg/lambda-python.html)
+ AWS CDK ressources :
  + [Commencez avec le AWS CDK](https://docs.aws.amazon.com/cdk/v2/guide/getting_started.html)
  + [Résolution des AWS CDK problèmes courants](https://docs.aws.amazon.com/cdk/v2/guide/troubleshooting.html)
  + [Travailler avec le AWS CDK 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)

**Autres AWS ressources**
+ [Moteur vectoriel pour Amazon OpenSearch Serverless](https://aws.amazon.com/opensearch-service/serverless-vector-engine/)

**Autres ressources**
+ [LlamaIndex documentation](https://docs.llamaindex.ai/en/stable/)
+ [Documentation simplifiée](https://docs.streamlit.io/)

## Informations supplémentaires
<a name="develop-a-fully-automated-chat-based-assistant-by-using-amazon-bedrock-agents-and-knowledge-bases-additional"></a>

**Personnalisez l'assistant basé sur le chat avec vos propres données**

Pour intégrer vos données personnalisées dans le cadre du déploiement de la solution, suivez ces directives structurées. Ces étapes sont conçues pour garantir un processus d'intégration fluide et efficace, vous permettant de déployer efficacement la solution avec vos données personnalisées.

*Pour l'intégration des données de la base de connaissances*

**Préparation des données**

1. Localisez le `assets/knowledgebase_data_source/` répertoire.

1. Placez votre ensemble de données dans ce dossier.

**Ajustements de configuration**

1. Ouvrez le fichier `cdk.json`.

1. Accédez au `context/configure/paths/knowledgebase_file_name` champ, puis mettez-le à jour en conséquence.

1. Accédez au `bedrock_instructions/knowledgebase_instruction` champ, puis mettez-le à jour pour refléter avec précision les nuances et le contexte de votre nouveau jeu de données.

*Pour l'intégration des données structurelles*

**Organisation des données**

1. Dans le `assets/data_query_data_source/` répertoire, créez un sous-répertoire, tel que`tabular_data`.

1. Placez votre jeu de données structuré (les formats acceptables incluent CSV, JSON, ORC et Parquet) dans ce sous-dossier nouvellement créé.

1. Si vous vous connectez à une base de données existante, mettez à jour la fonction `code/lambda/action-lambda/build_query_engine.py` pour vous connecter `create_sql_engine()` à votre base de données.

**Mises à jour de configuration et de code**

1. Dans le `cdk.json` fichier, mettez à jour le `context/configure/paths/athena_table_data_prefix` champ pour l'aligner sur le nouveau chemin de données.

1. Révisez `code/lambda/action-lambda/dynamic_examples.csv` en incorporant de nouveaux text-to-SQL exemples correspondant à votre ensemble de données.

1. Révisez `code/lambda/action-lambda/prompt_templates.py` pour refléter les attributs de votre jeu de données structuré.

1. Dans le `cdk.json` fichier, mettez à jour le `context/configure/bedrock_instructions/action_group_description` champ pour expliquer le but et les fonctionnalités de la fonction `Action group` Lambda.

1. Dans le `assets/agent_api_schema/artifacts_schema.json` fichier, expliquez les nouvelles fonctionnalités de votre fonction `Action group` Lambda.

*Mise à jour générale*

Dans le `cdk.json` fichier, dans la `context/configure/bedrock_instructions/agent_instruction` section, fournissez une description complète des fonctionnalités et de l'objectif de conception prévus de l'agent Amazon Bedrock, en tenant compte des données récemment intégrées.