Accéder au contenu principal

Amazon Lex Tutorial : Guide du débutant pour les chatbots d'IA

Une introduction à la création de chatbots avec Amazon Lex. Apprenez à mettre en place et à configurer un bot, à l'utiliser avec des services dorsaux et à le déployer sur différentes plateformes.
Actualisé 25 févr. 2025  · 35 min de lecture

Les chatbots tenant compte du contexte gardent la trace des entrées précédentes de l'utilisateur et les mettent en relation avec les interactions récentes. Cela leur permet d'interagir avec les utilisateurs dans un style conversationnel et d'améliorer l'expérience de l'utilisateur. Amazon Lex est un chatbot contextuel de la suite Amazon Web Services (AWS). Il a été publié en 2017 et une version améliorée, Lex V2, a été lancée en 2021.

Dans ce tutoriel, je présente les concepts de base d'AWS Lex V2 et je montre comment l'utiliser. Je vous expliquerai comment mettre en place et configurer Lex, créer votre premier chatbot Lex et vous interfacer avec des backends externes. Je vous donnerai également un aperçu de l'intégration de Lex avec des plateformes tierces telles que les sites web et les applications de messagerie. 

Qu'est-ce que Amazon Lex ?

Amazon Lex est un moteur conversationnel basé sur l'IA proposé par AWS. Lex accepte les données de l'utilisateur sous forme de voix et de texte. Le développeur spécifie le flux de la conversation. Sur cette base, Lex gère le dialogue en répondant à l'entrée de l'utilisateur. L'interface conversationnelle peut ensuite être déployée sous la forme d'un bot vocal, d'une application web, d'une plateforme de chat (comme Slack ou Facebook Messenger), etc.  Lex est également utilisé pour construire Amazon Alexa.

Lex combine deux fonctionnalités de base : la compréhension du langage naturel (NLU) et la reconnaissance automatique de la parole (ASR). Il permet aux développeurs sans expertise en apprentissage profond de créer des interfaces conversationnelles pour les chatbots, les assistants virtuels, etc.

Comme il s'agit d'une offre d'Amazon, il s'intègre à d'autres services AWS tels que :

  • Amazon Cognito (pour la gestion des identités)
  • Amazon CloudWatch (pour la surveillance du service)
  • DynamoDB (pour la base de données)
  • Amazon Lambda (pour se connecter à des sources de données externes comme Salesforce et HubSpot), etc.

Ces intégrations facilitent le déploiement et l'évolution du service d'IA conversationnelle. 

Mise en place d'Amazon Lex

Dans cette section, je vous explique comment configurer Amazon Lex. 

Notez que l'interface utilisateur d'AWS change fréquemment. Ainsi, la présentation et le texte des différentes sections et titres des instructions et des captures d'écran peuvent changer au fil du temps ou d'une région à l'autre. 

Étape 1 : Connectez-vous à la console AWS

Je suppose que vous avez déjà un compte AWS. Si ce n'est pas le cas, suivez les instructions de la pagee AWS Signup et créez un nouveau compte.

Dans ce guide, nous utilisons la console AWS pour configurer et utiliser Lex. Entrez vos identifiants AWS pour vous connecter à la console AWS Lex et arrivez sur la page d'accueil de Lex.

Étape 2 : Créer un nouveau robot

Ce qui précède mène à la page d'accueil de Bots (voir ci-dessous). Cette page affiche la liste des robots que vous avez déjà créés.

Page d'accueil Amazon Lex Bots.

Page d'accueil Amazon Lex Bots.

  • Sur cette page, sélectionnez Créer un robot.

Vous accéderez à la page de configuration d'un nouveau robot. Il présente deux méthodes de création de robots : Traditionnel et générative AI.

Créez un nouveau bot dans Amazon Lex.

Créez un nouveau robot.

Nous voulons apprendre à mettre en place et à configurer des robots. Choisissez donc laméthode traditionnelle ( ) et commencez avec un robot vierge .

  • Nom du bot: Donnez un nom et une description au robot. Dans cet article, nous créons un bot simple nommé "CabBookBot" pour réserver un taxi.
  • Autorisations IAM: Choisissez le bon rôle pour gérer l'autorisation et l'authentification pour le bot.
    • Si vous avez déjà créé des robots, choisissez dans la liste déroulante des rôles existants.
    • S'il s'agit de votre premier bot, choisissez "Créer un rôle avec les autorisations de base Amazon Lex". 
  • COPPA: Si ce robot est conçu pour les enfants et les mineurs, précisez qu'il est soumis à la loi sur la protection de la vie privée des enfants en ligne (Children's Online Privacy Protection Act - COPPA). Nous choisissons "Non". 
  • Délai d'attente de la session inactive: Les robots doivent se souvenir des messages précédents de l'utilisateur pour maintenir le "contexte" tout au long de la conversation. Si un utilisateur n'a pas répondu depuis un certain temps, nous supposons qu'il n'utilise plus le robot et nous réinitialisons le contexte pour un nouvel utilisateur. Laissez la valeur par défaut. 

Vous n'avez pas besoin de mettre à jour les paramètres avancés facultatifs ; passez simplement à la section suivante. 

Vous devez également définir la ou les langues du robot, car les robots Lex sont baséssur le traitement du langage naturel (NLP).

  • Dans cet exemple, nous utilisons l'option par défaut anglais (US) langue.
  • Conservez les paramètres par défaut et sélectionnez Terminé.

Ensuite, vous serez dirigé vers la page Intents que nous allons configurer dans la section suivante.

Après avoir créé un robot de base, j'explique maintenant comment le configurer pour notre cas d'utilisation souhaité : la réservation d'un taxi.

Étape 3 : Configurer les intentions

Comme leur nom l'indique, les intentions représentent l'intention de l'utilisateur ou le but de la conversation. Par exemple, l'utilisateur peut vouloir réserver un hôtel ou un vol. Chaque robot peut servir plusieurs objectifs. 

En fournissant quelques textes d'exemple (appelés exemples d'énoncés) pour chaque intention, Lex utilise le NLP pour reconnaîtreet faire correspondre l'entrée de l'utilisateur à l'intention correcte sur la base de ces énoncés. Par exemple, un robot de réservation de taxi peut disposer d'échantillons d'énoncés tels que "Je veux réserver un taxi", "Réservez-moi un taxi de X à Y à telle date", etc. 

Après avoir sélectionné Terminé sur la page de création du bot à l'étape précédente, vous serez amené à la page où vous pouvez créer une nouvelle intention appelée NewIntent.

Sur la page Intent :

  • Trouvez le flux de conversation en haut de la page. Ce document illustre le déroulement et les exemples de messages textuels pour chaque étape de la conversation. 
  • Mettez à jour le nom de l'intention avec quelque chose de significatif, comme "CabBookIntent", et fournissez une description pertinente.

Étape 4 : Ajouter des exemples d'énoncés

Lex a besoin de quelques exemples d'énoncés pour chaque intention afin de déterminer si le besoin de l'utilisateur correspond à l'intention actuelle. 

  • Sur la page Intention, faites défiler la page jusqu'à la section Exemples d'énoncés
  • Passez la fenêtre de l'éditeur en mode Texte brut
  • Ajoutez quelques exemples d'énoncés, un par ligne, par exemple :
    • Je souhaite réserver un taxi
    • Réservez-moi un taxi
    • J'ai besoin de réserver un taxi

Exemples d'énoncés dans Amazon Lex.

Exemples d'énoncés.

  • Ajoutez une réponse initiale, telle que "Ok, je vais vous aider à réserver un taxi", pour accuser réception de la demande de l'utilisateur. 

Créer un flux de conversation

Les robots Lex suivent une structure de conversation prédéfinie. Le flux de conversation décrit et donne les spécifications des éléments de la conversation. Dans cette section, j'explique comment concevoir la conversation pour communiquer avec l'utilisateur et obtenir les informations nécessaires pour répondre à sa demande.

Étape 1 : Ajouter des fentes pour saisir les données de l'utilisateur

Le robot doit demander à l'utilisateur des informations pertinentes. Les emplacements contiennent des informations dont le robot a besoin pour répondre à la demande de l'utilisateur. Par exemple, le robot de réservation de taxi reçoit les villes de départ et d'arrivée ainsi que la date du voyage comme valeurs d'emplacement. 

Ajoutez des slots aux intents dans Amazon Lex.

Ajoutez des emplacements aux intentions.

Pour chaque emplacement, vous devez spécifier ces paramètres :

  • Nom de l'emplacement: Le robot utilise ce nom comme un espace réservé pour la valeur de l'emplacement. Par exemple, vous pouvez configurer la réponse du robot comme suit : "Vous voulez voyager à partir de {Ville source}" et il substitue automatiquement la valeur du créneau SourceCity saisi par l'utilisateur.
  • Type de fente: Comme les variables de programmation, les slots Lex peuvent être de différents types. Il existe de nombreux types d'emplacements prédéfinis, tels que AMAZON.City, AMAZON.Date, etc. Vous pouvez également ajouter des types de créneaux personnalisés (voir plus loin).
  • Prompt: Fournissez un modèle de texte que le robot peut utiliser pour demander à l'utilisateur la valeur de chaque emplacement.
  • Sélectionnez Ajouter un créneau et ajoutez les créneaux suivants, en les marquant si nécessaire :

Nom de l'emplacement

Type de fente

Prompt

SourceCity

AMAZON.City

De quelle ville partez-vous ?

DestinationVille

AMAZON.City

Dans quelle ville allez-vous voyager ?

TravelDate

AMAZON.Date

Quelle est la date de votre voyage ?

  • Ajoutez quelques énoncés supplémentaires qui capturent directement les valeurs de la fente. Par exemple :
    • Réservez un taxi le {Date de voyage} de {Ville source} à {Ville destination}.
    • Réservez un taxi de {SourceCity} à {DestinationCity} pour {TravelDate}

Fentes personnalisées

Les types de fentes intégrés ne sont pas toujours suffisants pour tous les cas d'utilisation. Par exemple, un service de réservation de taxis peut avoir un type d'emplacement pour le type de voiture (compacte, à hayon, berline, SUV, etc.) que l'utilisateur souhaite. 

Pour ajouter un emplacement personnalisé :

  • Aller à Types de créneaux dans le menu de la colonne de gauche :
    • CabBookBot > Versions du bot > Version préliminaire > Toutes les langues > Anglais (US) > Types de machines à sous). 
  • Ajoutez un nom (tel que CabType) et une description pour le nouveau type d'emplacement. 
  • Choisissez l'un des deux types de valeurs de créneaux : 
    • Développez: Vous fournissez quelques exemples de valeurs pour la fente, et Lex les utilise comme exemples pour apprendre de nouvelles valeurs possibles. Par exemple, à partir d'une liste de noms de famille, Lex adapte le type de fente pour accepter les noms de famille similaires que vous n'avez pas explicitement énumérés. 
    • Restreindre: La fente n'accepte que les valeurs de la liste que vous lui fournissez. Il n'apprendra pas de nouvelles valeurs. 

Dans ce cas, nous disposons de quelques types de cabines prédéterminés. Nous limitons donc les valeurs de nos créneaux à ces types.

  • Vous pouvez également fournir des valeurs alternatives pour chaque valeur. Par exemple, pour le type de cabine, Limo est une valeur acceptable pour Limousine

Emplacements personnalisés dans Amazon Lex.

Fentes personnalisées.

  • Sélectionnez le type d'enregistrement. Le nouveau type de créneau devient disponible lors de l'ajout d'un créneau à l'intention.

Étape 2 : Configurer la gestion des messages et des erreurs

Lorsque l'utilisateur fournit une réponse non valide à une invite demandant une valeur de créneau, Lex répète l'invite. La session se termine lorsque l'utilisateur ne parvient pas, de manière répétée, à donner une réponse correcte (comme un nom de ville valide). 

Configurez Lex pour qu'il envoie un message d'erreur (avant de mettre fin à la session) si l'utilisateur ne parvient pas, à plusieurs reprises, à fournir une valeur d'emplacement valide :

  • Sélectionnez un créneau individuel et choisissez les options avancées pour ce créneau. 
  • Faites défiler la fenêtre des options avancées jusqu'à la section Slot capture : failure response.  
  • Fournissez une réponse appropriée en cas d'entrée non valide. Par exemple, si l'utilisateur saisit à plusieurs reprises une ville qui n'est pas reconnue, le robot peut répondre : "Désolé, nous ne desservons pas cette ville".

Gestion des erreurs et réponse aux défaillances dans Amazon Lex.

Traitement des erreurs et réaction aux défaillances.

Tous les robots ont un FallbackIntent, qui est invoqué lorsque l'entrée de l'utilisateur ne correspond pas aux intentions existantes. Cette intention étant invoquée par défaut, ses énoncés ne peuvent pas être personnalisés. 

  • Spécifiez une réponse de clôture significative avec le site FallbackIntent et mettez fin à la conversation. 

Amazon Lex closing response.

Réponse finale. 

Étape 3 : Confirmation, exécution et clôture

Confirmez l'intention de l'utilisateur après avoir obtenu les valeurs appropriées pour les emplacements et avant de répondre à la demande. 

  • Utilisez la section Confirmation pour fournir une demande de confirmation. 
  • Vous remarquerez qu'il y a un petit interrupteur pour la boîte de dialogue de confirmation. Activez-le. 

Il est courant d'inclure les valeurs des créneaux dans la demande de confirmation. Par exemple : "Veuillez confirmer (oui ou non) que vous souhaitez effectuer une réservation de {SourceCity} à {DestinationCity} le {TravelDate}". 

  • Fournissez une réponse de refus au cas où l'utilisateur répondrait négativement à la demande de confirmation. Par exemple, "D'accord, nous ne ferons pas cette réservation". 

Demande de confirmation Amazon Lex.

Demande de confirmation.

La réponse d'exécution indique à l'utilisateur que le robot commence à répondre à sa demande (réservation de taxi). 

  • Dans la section Fulfillment, fournissez un autre message après avoir répondu avec succès à la demande. Par exemple, "Ok, nous avons fait cette réservation". 

La réponse finale est le dernier message envoyé à l'utilisateur. Par exemple, "Merci d'avoir voyagé avec nous. Faites un bon voyage ! 

  • Mettez à jour les réponses et sélectionnez Enregistrer l'intention.

Amazon Lex fulfillment et réponses à la fermeture.

Réponses d'exécution et de clôture. 

Tester votre Amazon Lex Bot

Maintenant que nous avons créé le robot et sa structure de conversation, nous pouvons le tester ! 

Étape 1 : Test dans la console Lex

  • Les boutons Construire et Tester se trouvent en haut de la page Intents
  • Construisez le robot. Vous devez reconstruire le bot après chaque modification. 
  • Sélectionnez Test pour tester le robot dans la console Lex. 
  • Saisissez des messages pertinents dans la fenêtre de chat contextuelle et répondez aux invites du robot. 

Test du robot Amazon Lex.

Test du robot Amazon Lex.

Erreurs de configuration courantes

Certaines sections, comme la confirmation, l'accomplissement et la réponse de clôture, sont en principe facultatives. Pour activer une section, activez le commutateur à bascule. 

Dans certains cas, l'activation d'une section ou d'une réponse active automatiquement une fonction Lambda pour cette section. Si la fonction Lambda est activée dans une section spécifique mais qu'il n'y a pas de fonction Lambda associée, vous obtiendrez une erreur comme celle ci-dessous :

Cannot call FulfillmentCodeHook for Intent CabBookIntent. BotAlias/LocaleId TestBotAlias/en_US doesn't have an associated Lambda Function.

L'erreur ci-dessus provient de la section Fulfillment. Pour résoudre ce problème, allez dans les paramètres avancés dans la section concernée et décochez l'option d'utilisation d'une fonction Lambda. 

Une autre erreur similaire se produit lorsque le flux est mal configuré. Prenons l'exemple de ce message d'erreur à l'étape de la construction :

'ElicitSlot' next step at 'InitialResponse:CodeHook:Success' in intent 'CabBookIntent' contains invalid slotToElicit setting. slotToElicit must be a required Slot within the intent. Change the slot name in slotToElicit and try your request again.

Pour résoudre cette erreur, allez dans les options avancées pour la réponse initiale. Remarquez que lecrochet Dialog Code toggle est actif. Cependant, à ce stade, nous n'avons pas encore activé les fonctions Lamba ni ne les avons configurées pour initialiser la conversation. Désactivez le crochet de code et mettez à jour le bot ; il devrait se construire normalement. 

Amazon Lex propose des options avancées pour la réponse initiale.

Options avancées pour la réponse initiale.

Étape 2 : Test avec voix (optionnel)

Les robots Lex fonctionnent par défaut avec le texte et la voix. 

  • Appuyez sur l'icône du microphone dans la fenêtre de chat pour communiquer par la voix.
  • Le texte de remplacement dans le champ de saisie devient "Listening...". 
  • Exprimez votre intention, par exemple : "Je veux réserver un taxi". 
  • Appuyez sur la coche à droite du champ de saisie de texte. 
  • Lex transcrira brièvement l'entrée vocale et répondra par un message audio. 

Amazon Polly convertit le texte en parole naturelle. Il est utilisé dans les applications basées sur la parole, telles que les lecteurs de journaux, les jeux, les bots, etc. Depuis 2021, Amazon Lex prend en charge la synthèse vocale neuronale Amazon Polly (NTTS). Ainsi, le robot Lex peut directement générer des réponses vocales à consonance naturelle. 

Pour configurer la voix du robot :

  • Sur la page d'accueil du bot, sélectionnez Voir les langues.
    • Choisissez la langue appropriée. 
    • Vous pouvez également sélectionner la langue concernée dans le menu Toutes les langues dans le menu de gauche.
  • Dans le Détails de la langue sélectionnez Modifier.
    • Vous accédez ainsi à la page Langue de la page.
  • Sous la Voix vous pouvez écouter différents échantillons de voix et sélectionner la voix de synthèse préférée.

Définir une exécution avec AWS Lambda

Dans la pratique, un robot doit communiquer avec d'autres services dorsaux. Par exemple, un robot de réservation de taxi doit envoyer les informations relatives au trajet à un point de terminaison de l'API et recevoir une réponse positive. Les fonctions lambda permettent d'atteindre cet objectif. 

Les fonctions AWS Lambda sont un moyen d'écrire une logique côté serveur et de l'exécuter sans avoir à louer explicitement un VPS ou des instances de calcul. 

Commençons par les fonctions Lambda :

  • Rendez-vous sur la page d'accueil d'AWS Lambda.
  • Sélectionnez Créer une fonction.
  • Pour cet exemple, choisissez l'option de création d'une fonction à partir de zéro. 
  • Choisissez Python 3.x (3.13 au moment de la rédaction) comme langage et x86_64 comme processeur pour exécuter la fonction. 
  • S'il s'agit de votre première fonction Lambda, créez un nouveau rôle. Vous pouvez également utiliser l'un des rôles existants si vous savez qu'il dispose des autorisations nécessaires. 
  • Sélectionnez Créer une fonction.
  • Saisissez le code de la fonction dans le champ Code sur la page web de la fonction Lambda spécifique.

Ci-dessous, nous montrons une courte fonction Lambda qui envoie un message de succès dans le fichier Remplissage dans la section Fulfillment :

import json
import urllib.request

def lambda_handler(event, context):
    slots = event['sessionState']['intent']['slots']
    intent = event['sessionState']['intent']['name']

    if event['invocationSource'] == 'FulfillmentCodeHook':
        message = "Lambda has placed your reservation"
        response = {
            "sessionState": {
                "dialogAction": {
                    "type": "Close"
                },
                "intent": {
                    'name':intent,
                    'slots': slots,
                    'state':'Fulfilled'
                    }
            },
            "messages": [
                {
                    "contentType": "PlainText",
                    "content": message
                }
            ]
        }
        return response

Configurez le Bot pour qu'il appelle cette fonction Lambda :

  • Accédez à la page d'accueil du robot. Dans le menu de gauche, sélectionnez l' option Aliases (Deployment > Aliases) .
  • Par défaut, il devrait déjà avoir un alias avec le nom TestBotAlias.
    • Sélectionnez l'alias.
  • Sur la page de l'alias, sous la rubrique "langues", recherchez la langue du robot. Cet exemple est en English(US).
    • Sélectionnez la langue. 
  • Sur la page des langues, vous trouverez la section relative à la fonction Lambda. 
    • Sous source, sélectionnez le nom de votre fonction Lambda. 
    • Le choix par défaut pour la version est $LATEST. Laissez-le inchangé. 
  • Enregistrez les modifications.

Dans cet exemple, nous voulons utiliser la fonction Lambda à l'étape de l'exécution :

  • Sur la page Intent, allez à Options avancées sous la rubrique Exécution dans la section Fulfillment.
  • Sous la section Crochet de code Lambda d'exécutioncochez la case avec l'étiquette Utiliser une fonction Lambda pour l'exécution.
  • Enregistrez les modifications (sélectionnez Mettre à jour les options) dans les options d'exécution.
  • Sauvegarder l'intention. 
  • Allez sur la page Intent du robot, construisez-le et testez-le. 

Maintenant, la réponse provient de la fonction Lambda :

Test de la fonction Lambda intégrée au robot Lex.

Test de la fonction Lambda intégrée au robot Lex.

Déployer votre Amazon Lex Bot

Après avoir créé et testé le robot Lex, nous sommes prêts à le déployer. Le déploiement est un sujet complexe dont les spécificités dépendent du cas d'utilisation individuel. Dans cette section, je présente une vue d'ensemble des différentes méthodes de déploiement courantes. 

Étape 1 : Déploiement sur une application web ou mobile

Lex peut être intégré dans des applications web et mobiles à l'aide de l'API, du SDK ou de bibliothèques prédéfinies :

  • CloudFormation: AWS CloudFormation est une solution d'infrastructure en tant que code. Il permet d'utiliser des fichiers YAML pour regrouper, approvisionner, déployer et gérer diverses ressources AWS en tant que produit complet. CloudFormation dispose de modèles pour intégrer divers produits AWS comme les buckets S3, les fonctions Lambda, les bots Lex, etc. Utilisez le fichier modèle YAML Lex pour configurer le robot Lex dans le cadre d'un projet CloudFormation. 
  • Intégration du site web: AWS a mis à disposition un ensemble de fichiers de chargement Javascript et le SDK AWS pour charger un robot dans un site web. Il s'agit des fichiers pré-construits de l'interface utilisateur de Lex et d'une bibliothèque de chargement pour charger le bot Lex. Le robot peut être intégré à un site web sous la forme d'une page web autonome ou d'un iframe. 
  • Applications mobiles natives: AWS Amplify comprend les outils nécessaires pour s'intégrer à divers frontaux mobiles et web, tels que ReactJS / React Native, NextJS, Angular, Android, iOS, et plus encore. La documentation Amplify explique comment configurer un robot Lex pour qu'il fonctionne avec ces SDK.
  • Lex API: Pour avoir un contrôle complet sur les interactions et l'interface, vous pouvez utiliser l'API Lex. Grâce à l'API, vous pouvez transmettre les messages de l'utilisateur et du robot (l'un à l'autre) tout en gardant le contrôle de l'expérience de l'utilisateur via votre application. Lex propose deux API :
    • L'API Runtime est utilisée pour l'interaction avec l'utilisateur, comme expliqué ci-dessus. 
    • L'API de construction est utilisée pour construire et configurer le bot Lex de manière programmatique au lieu d'utiliser l'interface graphique. 

Les étapes ci-dessous donnent un aperçu de la manière de déployer le chatbot en tant que page web :

  • Utilisez la bibliothèque Lex Web UI Loader. Cette bibliothèque crée un objet ChatBotUiLoader, qui comprend les constructeurs FullPageLoader() et IframeLoader. La fonction load() de ces constructeurs charge le bot dans la page ou l'iFrame, respectivement.
  • Pour charger le robot sur la page web, spécifiez la configuration du chatbot :
    • L'ID du pool Cognito. Notez que vousavez besoin d'un pool d'identités AWS Cognito pour vous connecter au robot. Vous pouvez créer un pool d'identités à partir de la console AWS Cognito. Vous devez relier le pool d'identités Cognito au bot Lex. 
    • Le nom et les détails du robot Lex. 
  • Chargez le bot à l'aide de la fonction .load()

L'extrait ci-dessous montre les grandes lignes d'une fonction JavaScript qui déploie un robot Lex sur une page web : 

 <!-- LexWebUi loader -->
  <script src="./lex-web-ui-loader.js"></script>
  <script>
    // instantiate the loader
    var lexWebUiLoader = new ChatBotUiLoader.FullPageLoader();

    var chatbotUiconfig = {
     cognito: {
       poolId: 
     },
     lex: {
        initialText: 'How can I help you?',
        botName: 'CabBookBot'
      },
      ui: {
        toolbarTitle: 'Cab Booking Lex Bot',
        toolbarLogo: ''
      },
    };

    lexWebUiLoader.load(chatbotUiConfig)
      .then(function () {
        console.log('chatbot UI loaded');
      })
      .catch(function (error) {
        console.error('chatbot UI failed to load', error);
      });
   </script>

Étape 2 : Intégration aux plates-formes de messagerie 

Vous pouvez intégrer le bot Lex à des services de messagerie tierstels que Facebook Messenger, Slack et Twilio SMS

Dans cette section, nous verrons comment intégrer Lex à Facebook Messenger. Avant de commencer, vous devez 

  • Un compte de développeur Facebook
  • Une page d'entreprise sur Facebook. Notez que l'application Facebook a besoin d'une autorisation pour utiliser l'API de messagerie avec Lex. Seules les applications examinées et approuvées par Facebook en tant qu'applications professionnelles vérifiées bénéficient de ces autorisations. 

Vous trouverez ci-dessous les étapes à suivre pour intégrer le robot Lex à Facebook Messenger afin que les utilisateurs qui envoient des messages à votre page Facebook puissent recevoir des réponses de la part du robot. 

  • Créez une nouvelle application Business si vous n'en avez pas déjà une. 
    • Sous les cas d'utilisation de l'application, sélectionnez Autre.
    • Sélectionner Entreprise comme type d'application.
  • Vous pouvez ajouter divers produits Facebook à chaque application, comme Messenger, Instagram, etc. Ajoutez Messenger à l'application et choisissez Set up.
  • Dans la section Configuration de l'API Messenger section :
    • Connectez votre page professionnelle Facebook à cette application. 
    • Générez un nouveau jeton (avec le boutonGenerate ) pour cette application. Copiez ce jeton dans un éditeur de texte. 
    • Remarquez le message suivant : "Pour envoyer et recevoir des messages, demandez l'autorisation pages_messaging". Sélectionnez Request Permission pour demander les autorisations requises.
    • Si votre application n'a pas encore été examinée et approuvée par Facebook, soumettez-la pour examen. 
  • A partir de Paramètres de l'application dans le menu de gauche, choisissez De base.
    • Sélectionnez Afficher sous Secret de l'application et copiez le code secret dans un fichier texte.

Allez maintenant dans la console Lex et choisissez le bot que vous voulez intégrer à Messenger. 

  • Dans l'arborescence du menu de gauche, trouvez Intégrations de canaux sous Déploiement.
  • Sélectionner Ajouter un canal sous Créer un canal:
  • Choisissez Facebook sous Plate-forme.
  • Choisissez Clé KMS sous Politiques d'identité.
  • Sous Configuration de l'intégration:
    • Donnez un nom à l'intégration
    • Choisissez un alias (du bot Lex) que vous souhaitez intégrer à Messenger.
    • Choisissez la langue. 
  • Sous Configuration supplémentaire:
    • Sous Alias, saisissez une chaîne pour identifier l'application qui appelle Lex. Vous aurez besoin de cette corde plus tard. 
    • Sous Code d'accès à la pageentrez le code d'accès que vous avez copié dans Facebook.
    • Sous Clé secrète de l'applicationentrez la clé secrète que vous avez copiée dans Facebook.
  • Utilisez la fonction Ajouter pour créer le nouveau canal.
  • Retournez à la page Intégrations de canaux et sélectionnez le canal que vous avez créé. 
  • Copiez l'URL sous Point final dans la section URL de rappel de la section Callback URL.

Retournez à la console de développement de Facebook et ouvrez l'application que vous avez créée précédemment. 

  • Dans le menu de gauche, sous Messageriechoisissez Paramètres de l'API Messenger.
    • Sous URL de rappelentrez l'URL de rappel que vous avez copiée dans la console Lex.
    • Sous Vérifier le jetonentrez la chaîne d'alias que vous avez saisie dans la console Lex.
    • Vérifiez et enregistrez les modifications.
    • Sous Webhooks, choisissez Ajouter des abonnements. Sélectionnez messages dans la fenêtre contextuelle, puis Enregistrer.

Vous pouvez désormais envoyer un message à la page Facebook en utilisant les exemples d'énoncés du robot Lex et obtenir des réponses pertinentes. 

Étape 3 : Connecter Lex à AWS Lambda pour une meilleure interactivité

Nous avons écrit une fonction Lambda simple pour la section d'exécution dans la section précédente. Il n'a renvoyé qu'un message texte : "Lambda a fait votre réservation. Dans la pratique, nous enverrons le message de réussite après avoir répondu à la demande. 

Par exemple, la fonction Lambda envoie une demande avec les détails de la réservation de l'utilisateur à l'API dorsale, qui effectue la réservation et répond ensuite à l'utilisateur en fonction de la réponse de l'API.

Voici comment procéder :

  • L'objet JSON slots dans la fonction Lambda contient les valeurs des créneaux. Étudiez sa structure à l'aide d'un embellisseur de code pour en extraire les valeurs appropriées. 
  • L'extrait de code ci-dessous montre comment obtenir la valeur du créneau pour SourceCity et transmettre cette valeur à une API de backend qui gère les réservations. Ajoutez ce code dans la fonction lambda_handler():
slots = event['sessionState']['intent']['slots']
print("slots - ", slots)
source_city = slots['SourceCity']['value']['interpretedValue']
print("source city - ", source_city)

Je montre maintenant comment effectuer des demandes d'API à partir de la fonction Lambda. Pour cet exemple, nous utilisons le point de terminaison fictif de l'API à ASDFast. Ce service vous permet d'envoyer des requêtes HTTP(S) à un point de terminaison de l'API et de recevoir une réponse réaliste. 

  • Avec le code ci-dessous, nous envoyons une requête GET à ce point de terminaison. Nous personnalisons ensuite le message que le robot envoie à l'utilisateur en fonction du code d'état de la réponse à la demande GET:
       res = urllib.request.urlopen(urllib.request.Request(
           url='http://asdfast.beobit.net/api/',
           headers={'Accept': 'application/json'},
           method='GET'),
           timeout=5)

       message_success = "Lambda has placed your reservation"
       message_failure = "Lambda could not place your reservation. Please retry."
       message = message_success if res.status == 200 else message_failure

La fonction Lambda complète est présentée ci-dessous :

import json
import urllib.request

def lambda_handler(event, context):
    print("event - ", event)
    slots = event['sessionState']['intent']['slots']
    intent = event['sessionState']['intent']['name']

    print("slots - ", slots)
    source_city = slots['SourceCity']['value']['interpretedValue']
    print("source city - ", source_city)
    print("intent - ", intent)
    
    if event['invocationSource'] == 'FulfillmentCodeHook':
        print("FulfillmentCodeHook")    
        res = urllib.request.urlopen(urllib.request.Request(
            url='http://asdfast.beobit.net/api/',
            headers={'Accept': 'application/json'},
            method='GET'),
            timeout=5)
        
        message_success = "Lambda has placed your reservation"
        message_failure = "Lambda could not place your reservation. Please retry."
        message = message_success if res.status == 200 else message_failure
        #message = "Lambda has placed your reservation"

        response = {
            "sessionState": {
                "dialogAction": {
                    "type": "Close"
                },
                "intent": {
                    'name':intent,
                    'slots': slots,
                    'state':'Fulfilled'
                    }
            },
            "messages": [
                {
                    "contentType": "PlainText",
                    "content": message
                }
            ]
        }
        return response

Meilleures pratiques pour la création de robots Amazon Lex

Après avoir abordé les principes de base des robots Lex et leurs utilisations pratiques, je présente dans cette section quelques bonnes pratiques pour la conception des robots. 

Concevoir des conversations claires et concises

Veillez à ce que vos chemins de conversation et vos créneaux soient précis :

  • Chaque intention doit se concentrer sur une seule tâche, et chaque créneau doit capturer la valeur correspondant à une seule variable. 
  • Ne rendez pas les textes d'incitation trop verbeux. Les dialogues doivent être brefs et aboutir rapidement au résultat souhaité.

Cette approche permet d'éviter la confusion de l'utilisateur et les malentendus potentiels de la part de Lex. 

Utiliser les types de créneaux et la validation

Le robot et les services d'arrière-plan qui lui sont associés ont besoin d'informations précises sur les besoins des utilisateurs. L'utilisation des bons types de fentes permet d'atteindre cet objectif. 

  • En général, je conseille d'utiliser les emplacements intégrés pour les types de données courants, tels que AMAZON.Date pour les dates, AMAZON.City pour les villes, etc. Ces types de fentes ont été largement testés et sont reconnus comme étant compatibles avec diverses applications.
  • Vous pouvez concevoir des types de créneaux personnalisés dans des cas exceptionnels. Veillez à ce qu'ils soient correctement configurés et testés. 
  • En plus d'utiliser les bons types de créneaux, vérifiez que l'utilisateur a fourni les informations correspondant à tous les créneaux obligatoires. Cela permet à l'API de répondre à la demande de l'utilisateur et garantit une expérience fluide pour l'utilisateur. 

Permettre des conversations à plusieurs tours

Les utilisateurs peuvent se sentir dépassés par la saisie de toutes les informations nécessaires dans un seul message, tel que "Réservez un voyage pour N personnes à la date/heure Z, de X à Y, dans un taxi de type T". 

  • Utilisez les conversations à plusieurs tours pour améliorer l'expérience des utilisateurs. Comme de nombreux outils modernes basés sur un modèle de langage, Lex peut maintenir le contexte à travers une conversation à plusieurs tours. Cela lui permet de faire le lien entre les invites et les réponses précédentes et les interactions récentes. 
  • La décomposition d'une demande complexe en une série de questions courtes améliore le flux de la conversation.

Contrôler et optimiser les performances

Pour un robot en production, il est essentiel de surveiller ses performances en fonction de différents paramètres tels que : 

  • Nombre total de conversations.
  • Durée moyenne d'une conversation.
  • Nombre moyen de tours par conversation.
  • Nombre (et ratio) d'énoncés détectés et manqués.
  • Erreurs lambda, et plus encore.

Utilisez ces mesures pour évaluer les interactions avec les utilisateurs et les performances du robot : 

  • Dans le menu de gauche sur la page Bot sélectionnez l'option Analytique (Analyses).
  • Accédez au Tableau de bord des conversationsAccédez au tableau de bord Tableau de bord des performanceset aux mesures CloudWatch pour étudier les performances du robot.

AWS CloudWatch est un outil de surveillance des services AWS. Il consolide diverses mesures de performance en temps réel sur une seule page. Utilisez ces mesures pour améliorer et affiner les performances du robot.

Conclusion

Dans cet article, nous avons exploré Amazon Lex V2, le service de chatbot contextuel d'AWS. Nous avons parcouru le processus de construction d'un bot de base, en le configurant pour interagir avec les utilisateurs, et en l'intégrant à une API backend à l'aide d'AWS Lambda. En outre, nous avonsdiscuté des meilleures pratiques et des options de déploiement, y compris l'intégration du robot sur un site web ou une page Facebook.

Au fur et à mesure que vous vous familiarisez avec les services AWS, envisagez d'approfondir vos connaissances grâce à ces cours :

En tirant parti de ces ressources, vous serez bien équipé pour créer, sécuriser et optimiser les applications basées sur AWS, y compris les chatbots alimentés par Amazon Lex !

FAQ

Lex s'intègre-t-il à d'autres services AWS ?

Oui, Lex s'intègre à des services tels que Lambda, S3, CloudWatch, et plus encore. Cela vous permet d'améliorer les fonctionnalités du robot, de l'intégrer à d'autres produits et de contrôler ses performances.

Lex gère-t-il à la fois la voix et le texte ?

Oui, Lex peut, par défaut, gérer les entrées vocales et textuelles. Lex prend en charge différentes voix pour les interactions vocales. Vous pouvez également utiliser AWS Polly pour synthétiser la parole et envoyer le fichier audio à Lex.

Puis-je utiliser une interface utilisateur personnalisée pour un robot Lex ?

Oui, Lex est livré avec une API d'exécution qui peut transmettre les données de l'utilisateur au robot et recevoir ses réponses (celles du robot). Ainsi, le Lex bot sert de backend à l'interface utilisateur personnalisée.

Puis-je utiliser Lex sans les fonctions Lambda ?

En principe, oui. Vous pouvez concevoir la conversation entièrement dans Lex. Dans la pratique, un robot doit s'interfacer avec d'autres services API backend qui répondent à la demande de l'utilisateur (comme la réservation d'un billet). Vous avez besoin d'AWS Lambda pour interfacer avec des services externes.

Est-il possible de former AWS Lex ?

Dans une certaine mesure, oui. Le moteur NLU de Lex peut reconnaître des entrées utilisateur similaires aux exemples d'énoncés. Il peut également étendre les valeurs valides d'un type de créneau sur la base de quelques échantillons. Toutefois, ne vous attendez pas au même niveau de formation qu'avec un LLM. Lex est conçu pour des interactions limitées à des tâches spécifiques et non pour des conversations prolongées.


Arun Nanda's photo
Author
Arun Nanda
LinkedIn

Arun est un ancien fondateur de startup qui aime construire de nouvelles choses. Il étudie actuellement les fondements techniques et mathématiques de l'intelligence artificielle. Il aime partager ce qu'il a appris, alors il écrit à ce sujet.

En plus de DataCamp, vous pouvez lire ses publications sur Medium, Airbyte et Vultr.

Sujets

Apprenez-en plus sur AWS grâce à ces cours !

Certification disponible

cours

Concepts AWS

2 hr
21.5K
Découvrez l'univers d'Amazon Web Services (AWS) et comprenez pourquoi il est à la pointe du cloud computing.
Afficher les détailsRight Arrow
Commencer le cours
Voir plusRight Arrow