[JAVA] C'est parti avec Watson Assistant (anciennement Conversation) ② Faire un chatbot de réservation d'hôtel

Cible

Nous vous amènerons au point où vous pourrez créer Slack Bot et Line Bot en utilisant Watson même sans aucune connaissance.

[Mis à jour le 6 juin 2019] Ce message a été écrit à l'époque de Watson Conversation, le prédécesseur de Watson Assistant, et bien que les captures d'écran soient encore anciennes, les idées et les opérations de base de Watson Assitant Ne change pas, veuillez donc le lire comme le dernier environnement. </ font>

■ Je voudrais aborder les points suivants.

(1) Introduction à la réflexion, création d'un compte ** ② Comment concevoir un flux de dialogue en utilisant "Réservation d'hôtel" comme exemple ** ← Cet article ** ③ Utilisation du contexte, utilisation pratique de diverses fonctions non mentionnées dans le tutoriel ** ④ Comment créer un lien avec la logique Java ⑤ Créez un chatbot avec Watson + Java + Slack

Cette fois, dans la deuxième partie, j'expliquerai ** ② comment concevoir un flux de dialogue en utilisant la "réservation d'hôtel" comme exemple **.

Cliquez ici pour la dernière fois → (1) Introduction à la réflexion, création d'un compte.

Créer un espace de travail

La dernière fois, nous avons même créé l'espace de travail et étions prêts à commencer la conception interactive.

Si vous n'avez pas encore créé d'espace de travail, accédez à https://www.ibmwatsonconversation.com et créez-en un.

step13.png

Faire un chatbot de réservation d'hôtel

Le flux de dialogue Watson Conversation peut être créé à l'aide d'un outil de conception sur le Web appelé ** Éditeur de nœud de dialogue ** (ci-après appelé éditeur de nœud).

Cette fois, nous allons faire un simple ** chatbot de réservation d'hôtel ** basé sur les réservations d'hôtel.

Faire une intention

J'expliquerai étape par étape un par un. Aucune ** intention ** n'a encore été enregistrée. Cliquez sur [Créer un nouveau] pour créer la ** intention ** requise pour les réservations d'hôtel.

Sélectionnez ** Intentions ** dans l'onglet supérieur et cliquez sur Créer nouveau.


Tout d'abord, créez une intention qui signifie ** réserver une salle **. Le nom de l'intention est ** # reserve_room **.


Ensuite, enregistrez la phrase d'exemple de ** Réserver une chambre **. ** Réservez une chambre ** Vous devez enregistrer au moins 5 exemples de phrases que vous pourriez prononcer lors de la réservation.

Quand je réserve une chambre, je pense qu'il y a différentes phrases, donc je vais mettre ce que je peux penser.

--Je voudrais réserver une chambre --Je veux faire une réservation --Je veux faire une réservation ――Je veux sécuriser une chambre

  • Je voudrais prendre rendez-vous

image2-2.png


Lorsque vous avez terminé, cliquez sur Terminé

image2-3.png


Ensuite, créez une intention qui ** annule la réservation **. Cliquez sur Créer nouveau.

image2-4.png


Nommez l'intention ** #cancel_room ** et, comme précédemment, entrez un exemple de phrase que vous pourriez dire lors de l'annulation d'une salle.

--Je veux annuler la chambre --Cassel la chambre --Je souhaite annuler ma réservation --Je souhaite annuler ma réservation

  • veux annuler

image2-5.png


Après avoir créé deux intentions, l'icône de bulle ** Ask Watson **![Askwatson.jpg](https://qiita-image-store.s3.amazonaws.com/0/170905/28c90fe7-d850-8326] dans le coin supérieur droit -3bca-59f4fd2cc1f9.jpeg) Cliquez sur.
Cela ouvrira un volet sur la droite qui dit ** Essayez-le **. Il s'agit d'un outil pratique qui vous permet d'exécuter et de vérifier immédiatement l'intention et la boîte de dialogue créées, mais lorsque vous le regardez, il indique ** Watson s'entraîne **. Cela signifie que Watson apprend l'intention (exemple de phrase) créée précédemment.
Attendez un instant ici. L'apprentissage sera terminé dans quelques minutes au plus tôt. Lorsque le ** Watson s'entraîne ** disparaît, essayez de saisir le texte immédiatement.
** Entrez "Je veux prendre une chambre" **
Ensuite, c'est devenu un tel affichage. En regardant vers le bas, il indique ** reserve_room **. Cela signifie que la phrase «Je veux prendre une chambre» que je viens de saisir a été déterminée comme étant une intention de ** # reserve_room **.
Tapez maintenant ** "Je souhaite annuler ma réservation" **
Il a été déterminé qu'il s'agissait de ** # cancel_room **.
Ensuite, saisissez ** "Je souhaite annuler la chambre" **,

** J'ai essayé de taper "Je veux annuler la salle, n'est-ce pas?" **, Il a été correctement déterminé comme ** # cancel_room **. Comme je l'ai mentionné la dernière fois, il est bon que Watson absorbe et interprète les fluctuations d'expression des phrases même si ce ne sont pas les phrases d'exemple enregistrées.

Créer une boîte de dialogue

Ensuite, nous allons créer la partie dialogue. Cliquez sur l'onglet ** Dialogue ** sur l'écran et vous verrez un écran comme celui-ci. Cliquez sur [Créer].

3-10.jpg

Cela créera automatiquement deux rectangles intitulés ** Bienvenue ** et ** Autre **. La partie affichée par ce rectangle est appelée un nœud. (Auparavant, rien n'était généré automatiquement, mais il est maintenant généré avec une mise à jour vers mai 2017)

Vous pouvez ouvrir et fermer le nœud en cliquant sur la partie "**> **". 3-11.jpg


Cliquez sur la partie qui dit ** Bienvenue **. ![3-12.jpg](https://qiita-image-store.s3.amazonaws.com/0/170905/0a7e78b8-e22b-8b20-6c98-5ee9338a4f22.jpeg)
Cela ouvrira l'éditeur du nœud sur la droite. ![3-13.jpg](https://qiita-image-store.s3.amazonaws.com/0/170905/c9d5dee9-9c75-5d35-c132-6339258388cd.jpeg)
Modifiez ici et renommez ** Bienvenue ** en ** Démarrer **. Bienvenue également ** dans les réponses ci-dessous. Bonjour ** a ** Veuillez entrer votre entreprise, c'est le River Sun Hotel. Quelles sont vos exigences? Remplacez par **. Maintenant, ça ressemble à un hôtel.

3-14.jpg


Ensuite, ouvrez le nœud ** Autre **, changez le nom du nœud en ** Autre ** et effacez le texte saisi par défaut dans Réponses. Pour l'effacer, cliquez sur la marque (-) sur le côté droit du texte.

3-15.jpg


Et il y a un nouveau ** désolé. Je n'ai pas compris . Vous pouvez réserver ou annuler votre chambre. **Entrer. Au fait, ** input.text ** entouré de ** ** Signifie le texte saisi par l'utilisateur. ** input ** est une variable réservée appelée variable intégrée globale, mais vous pouvez comprendre cela ici. Cela sera expliqué séparément.

3-16.jpg


Essayons maintenant le dialogue une fois. Cliquez sur ** Ask Watson **![Askwatson.jpg](https://qiita-image-store.s3.amazonaws.com/0/170905/28c90fe7-d850-8326-3bca-59f4fd2cc1f9.jpeg) en haut à droite. Je vais.

3-17.jpg


Le volet ** Essayer ** s'ouvrira, entrez "Je veux réserver une salle" dans l'espace de saisie de texte en bas. Ensuite, l'intention "Je souhaite réserver une salle" est interprétée comme ** # reserve_room **. Cependant, comme il n'y a pas de nœud dans ce nœud qui se déclenche à la condition de ** # reserve_room **, il passe au nœud ** any_else **.

4-01.jpg


Ajoutons maintenant un nœud qui gère l'intention de réservation de salle ** # reserve_room **. Cliquez sur le nœud ** Bienvenue ** et vous verrez des marques (+) en bas et à droite. Cliquez sur la marque (+) en bas.

4-02.jpg


Un nouveau nœud sera ajouté sous le nœud ** Welcome **. En même temps, le volet d'édition du nœud sur la droite s'ouvre, alors modifiez ce nœud.

4-03.jpg


Le nom du nœud est ** Start_making_a_reservation **.

Ensuite, si vous entrez ** # ** dans la partie Déclencheur, les candidats d'intention apparaîtront, alors sélectionnez ** # reserve_room **.

Dans Trigger, écrivez une expression conditionnelle ** après l'instruction ** if.
Les nœuds sont évalués dans l'ordre à partir du haut, déclenchés par l'entrée de l'utilisateur, etc., mais si cette expression conditionnelle est satisfaite lors de l'évaluation, le traitement de ce nœud (retour d'une réponse, branchement, etc.) est exécuté. .. À propos, ** # reserve_room ** est une abréviation de ** intent == 'reserve_room' **. Il est normal d'écrire ** intent == 'reserve_room' ** comme vous écririez une instruction if en programmation.

4-04.jpg


Puis modifiez les réponses. Ceci décrit comment ce nœud répond lorsqu'il est traité. Ce nœud est le nœud qui gère ** # reserve_room **. En d'autres termes, c'est le processus lorsque l'utilisateur dit "Je veux réserver une chambre", alors laissez Watson répondre avec ** "Réservation. Je suis intelligent" **. Plusieurs réponses peuvent être renvoyées en fonction de la condition. Par exemple, lorsque vous réservez une deuxième chambre, vous pouvez modifier la réponse selon que vous avez déjà réservé une chambre ou non. De plus, bien que l'éditeur soit conçu pour renvoyer du texte, il peut également renvoyer des réponses plus complexes (objets au format JSON). Ceci sera expliqué séparément.

4-05.jpg


Maintenant que vous avez un nœud ** Start_making_a_reservation **, ** Ask Watson **![Askwatson.jpg](https://qiita-image-store.s3.amazonaws.com/0/170905/28c90fe7-d850- Essayons-le avec 8326-3bca-59f4fd2cc1f9.jpeg). Lorsque j'ai entré ** "Je veux réserver une chambre" **, l'intention a été déterminée comme étant ** # reserve_room **, et Watson a répondu correctement ** "C'est une réservation. Je suis intelligent" **.

4-06.jpg


En plus de réserver une chambre, soyez prêt à annuler. Cliquez sur la marque (+) pour ajouter un nœud.

4-07.jpg


Le nom du nœud est ** Start_canceling_reservation **, les conditions pour entrer dans le déclencheur sont ** #cancel_room ** et les réponses sont "** L'annulation de la chambre a été acceptée. Nous vous attendons à nouveau * *"C'était fabriqué.

4-08.jpg


Cliquez sur ** Ask Watson **![Askwatson.jpg](https://qiita-image-store.s3.amazonaws.com/0/170905/28c90fe7-d850-8326-3bca-59f4fd2cc1f9.jpeg) dans le coin supérieur droit. Essayons le dialogue. Si vous saisissez ** Je souhaite annuler la salle **, elle sera reconnue comme ** #cancel_room ** et, comme défini dans le nœud, elle répondra "Nous avons annulé la salle. Nous attendons que vous la réutilisiez." eu.

4-09.jpg


Jusqu'à présent, nous avons créé un dialogue qui accepte les réservations et les annulations de chambres d'hôtel, mais en réponse à l'entrée de l'utilisateur, dites simplement ** Réservé ** ou ** Annulé **. , Le dialogue n'est pas encore ** interactif **.

Lors de la réservation d'une chambre d'hôtel, l'utilisateur doit au moins préciser ** quand il souhaite séjourner **, permettons donc de préciser ** date (date) d'hébergement **.

Tout d'abord, sélectionnez le nœud ** Start_making_a_reservation ** et appuyez sur la marque (-) à droite du texte ** "Réservé. Je suis intelligent" ** dans Réponses pour le supprimer.

4-10.jpg

Créer une entité

Cliquez ensuite sur ** Entités ** dans l'onglet supérieur.

4-11.jpg


Cet écran apparaîtra si vous n'avez pas encore défini d'entité. Sélectionnez maintenant ** Entités système ** Les entités système sont des entités spéciales fournies par Watson.

4-12.jpg


Définissez ** @ sys-date ** sur ** le **. ** @ sys-date ** est une entité qui peut détecter des dates, des jours, etc. Par exemple, si aujourd'hui est le 5 juin 2017, «demain» sera interprété comme le 6 juin 2017 et «vendredi prochain» comme le 16 juin 2017. C'est une entité intelligente.

4-13.jpg


Nous ajouterons plus de nœuds afin de pouvoir gérer la date de séjour. ** Start_making_a_reservation ** Cliquez sur la marque (+) à droite du nœud.

4-14.jpg


Définissez le nom du nœud ajouté sur ** Reservation_date_specified ** et spécifiez l'entité système ** @ sys-date ** dans l'instruction conditionnelle. Cette condition signifie ** ”si le texte saisi par l'utilisateur contient une Entité équivalente à @ sys-date **.

4-15.jpg


Réponses

** J'ai fait la réservation. Merci beaucoup! ** **

Entrer le. ** ** est désordonné, mais ** ** est la notation qui indique à Watson de calculer la notation prise en sandwich ici.

La notation réelle est ** entités ['sys-date']?. Value.reformatDateTime ('aaaa année MM mois jj jour') **, mais ** entités ['sys-date'] ** Cela signifie retirer l'entité (c'est-à-dire la date) appelée sys-date ** et la mettre en forme au format ** 'aaaa année MM mois jj jour ** et l'afficher.

Le backend de Watson semble fonctionner sur Spring (Java Framework), et les variables peuvent être accédées et manipulées à l'aide de SPEL (Spring Expression Language). Les types de ces variables et les types de données qui peuvent être traités (certains types de données Java peuvent être traités tels quels) seront expliqués séparément.

4-16.jpg


Cliquez sur ** Ask Watson **![Askwatson.jpg](https://qiita-image-store.s3.amazonaws.com/0/170905/28c90fe7-d850-8326-3bca-59f4fd2cc1f9.jpeg) en haut à droite Je vais essayer l'opération jusqu'à présent

4-17.jpg


Entrez ** Je souhaite réserver une chambre vendredi prochain **. Et je n'ai reçu aucune réponse. Il est reconnu comme ** # reserve_room ** comme une intention et ** @ sys-date: 2017-06-16 ** comme une entité. Cela signifie que ** je veux réserver une chambre vendredi prochain ** est arrêté au nœud ** Start_making_a_reservation **. ** Arrêté ** est en fait ** en attente d'une entrée utilisateur **. Ici, lorsque l'intention de ** # reserve_room ** arrive, comment puis-je passer au nœud suivant, c'est-à-dire ** Reservation_date_specified ** sur le côté droit, sans rien renvoyer dans le nœud ** Start_making_a_reservation **? C'est ça?

4-18.jpg


Dans ce cas, utilisez jump. Comme le montre la figure, ** Aller à **![Aller à.jpg](https://qiita-image-store.s3.amazonaws.com/0/170905/2e038441-2922-41ea-8525-3c8342da87d2.jpeg )Cliquez sur.

4-19.jpg


** Aller à **![Aller à.jpg](https://qiita-image-store.s3.amazonaws.com/0/170905/2e038441-2922-41ea-8525-3c8342da87d2.jpeg) vers un autre nœud C'est une fonction pour sauter. Même si vous dites sauter à un nœud, vous pouvez choisir parmi les trois suivants où sauter dans le nœud.
  • Condition  
    Passe à l'instruction conditionnelle (Trigger) du nœud. La condition (par exemple, l'entrée utilisateur) est héritée de la source de saut et évaluée à nouveau par le nœud. Pour sélectionner ** Aller à la condition ** <img src = "https://qiita-image-store.s3.amazonaws.com/0/170905/b121a268-4ab6-f73d-6b60-714821770a3f.jpeg " width = Cliquez sur "100px">.

  • Response  
    Saute à la réponse du nœud. Étant donné que l'entrée utilisateur de la source de saut n'est pas évaluée, le nœud est traité à partir de Response même si la condition n'est pas remplie pour ce nœud. Pour sélectionner, ** Allez à la réponse ** .

  • ** Entrée utilisateur **Uinput.jpg
    Passe à ** en attente de l'entrée de l'utilisateur ** une fois le nœud exécuté, pas le nœud. Pour sélectionner, une icône de bulle est dessinée dans 〇 ** Entrée utilisateur **![Uinput.jpg](https://qiita-image-store.s3.amazonaws.com/0/170905/b0a1667e- 1421-0eef-95bc-584a6de224b6.jpeg) Cliquez sur.

4-21.jpg


Ici, sélectionnez ** Go to condition **. En effet, nous voulons déterminer ** si nous avons spécifié une date de séjour ** dans le texte saisi par l'utilisateur.

4-22.jpg


Pour l'instant, procédons étape par étape lorsque l'utilisateur dit ** "Je souhaite réserver une chambre vendredi prochain" **
(1) Tout d'abord, il correspond à la condition de nœud ** Start_making_a_reservation ** ** # reserve_room **.

(2) La destination du saut étant spécifiée dans le nœud ** Start_making_a_reservation **, passez ensuite au déclencheur (condition) du nœud ** Reservation_date_specified **.

(3) Le déclencheur du nœud ** Reservation_date_specified ** de la destination du saut évaluera à nouveau ** "Je veux réserver une chambre vendredi prochain" **.

(4) Étant donné que l'entité ** Vendredi prochain ** est incluse, elle sera traitée par le nœud ** Reservation_date_specified **, et la réponse du nœud ** Reservation_date_specified ** sera affichée.

4-23.jpg


En fait, en utilisant ** Ask Watson **![Askwatson.jpg](https://qiita-image-store.s3.amazonaws.com/0/170905/28c90fe7-d850-8326-3bca-59f4fd2cc1f9.jpeg) Je vais essayer. Entrez ** Je souhaite réserver une chambre vendredi prochain **

4-24.jpg


Ensuite, j'ai reçu une réponse disant ** "Nous sommes le 16 juin 2017. J'ai fait une réservation. Merci." **, donc ça semble bien fonctionner. L'entrée ** vendredi prochain ** a également été interprétée comme ** 16 juin 2017 **. C'est intelligent.

4-25.jpg


Cliquez ensuite sur la marque (+) sous ** Reservation_date_specified **.

4-26.jpg


Ce que je veux faire avec ce nœud, c'est ce qu'il faut faire si l'utilisateur fait une demande de réservation ** sans spécifier de date et d'heure. Par exemple, vous pourriez être invité à «réserver une chambre». Entrez ** any_else ** dans Trigger avec le nom du nœud ** Else **.

4-27.jpg

Si l'utilisateur n'a pas spécifié de date et d'heure, les réponses seront ** quand allez-vous rester? (Exemple: 29 avril, demain, samedi prochain) ** et une phrase indiquant la date d'hébergement.

4-28.jpg


Cliquez ensuite sur ** Aller à **![Aller à.jpg](https://qiita-image-store.s3.amazonaws.com/0/170905/2e038441-2922-41ea-8525-3c8342da87d2.jpeg) Je vais.

4-29.jpg


Sélectionnez ** Entrée utilisateur ** comme destination du saut. C'est ** quand allez-vous rester? (Exemple: 29 avril, demain, samedi prochain) ** Il s'agit d'accepter à nouveau l'entrée de l'utilisateur après l'affichage **. En sautant ici, l'évaluation commencera à partir du nœud ** Reservation_date_specified ** au fur et à mesure que l'utilisateur tape. Ici, si l'utilisateur dit une date comme ** vendredi prochain **, le nœud ** Reservation_date_specified ** sera traité, et s'il est complètement différent, le nœud ** Else ** le traitera à nouveau. Sera fait.

4-30.jpg


Réessayez ** Demandez à Watson **![Askwatson.jpg](https://qiita-image-store.s3.amazonaws.com/0/170905/28c90fe7-d850-8326-3bca-59f4fd2cc1f9.jpeg) regarder

4-31.jpg


Entrez ** Je souhaite réserver une chambre **

4-32.jpg

Ensuite, j'ai pu le reconnaître comme ** # reserve_room , mais comme la ** date d'hébergement ** n'a pas été saisie, je suis passé au nœud ** Else ** comme prévu et ** "Quand allez-vous rester? ? ... " est retourné.

4-33.jpg

Voici un aperçu détaillé de la transition des nœuds avec cette entrée (voir la figure ci-dessous).

-① L'utilisateur dit ** "Je veux réserver une chambre" ** (entrée)

-② Watson a déterminé que le texte était ** # reserve_room **, donc il correspond aux conditions du nœud ** Start_making_a_reservation ** et ce nœud est exécuté.
-③ Passer du nœud ** Start_making_a_reservation ** au ** Trigger ** du nœud ** Reservation_data_specified . Puisqu'il ne correspond pas aux conditions de Trigger ( @ sys-date ** n'existe pas), le processus se déplace vers le nœud ** Else ** ci-dessous.
-④ ** Else ** node est exécuté et ** "Quand allez-vous rester?" ** est affiché.
-⑤ Après avoir traité le nœud ** Else **, passez à l'entrée utilisateur. Ici, il attend l'entrée de l'utilisateur.

4-34.jpg


Entrez maintenant ** vendredi prochain **

4-35.jpg


Ensuite, le nœud sera transféré et exécuté comme suit

-⑥ L'utilisateur dit ** "Vendredi prochain" ** (entrée)

-⑦ ** "Vendredi prochain" ** est considéré comme Entité ** @ sys-date , le nœud ** Reservation_data_specified ** est exécuté, ** "Nous sommes le 16 juin 2017. Réservation. Merci. » s'affiche.

4-36.jpg


D'ailleurs, nous avons réalisé les échanges suivants.

** Utilisateur "Je souhaite réserver une chambre" ** ** Watson "Quand vas-tu rester?" ** ** Utilisateur "Vendredi prochain" ** ** Watson "Nous sommes le 16 juin 2017. J'ai fait une réservation." **

4-37.jpg

Fondamentalement, un dialogue plus compliqué peut être réalisé en préparant l'intention et l'entité et en combinant les nœuds.

Résumé

Cette fois, nous avons examiné de plus près les transitions de nœuds en utilisant un simple ** service de réservation d'hôtel ** comme exemple. La prochaine fois, nous examinerons de plus près Conetxt et les variables intégrées indispensables à la conception interactive.

La suite est ici. ** Allons-y avec Watson Conversation ③ Bot de chat de réservation d'hôtel utilisant Context **

Télécharger

Les données de dialogue (JSON) créées dans cet article peuvent être téléchargées à partir de ce qui suit. Vous pouvez le faire en l'important à partir de l'éditeur Watson Conversation. https://github.com/riversun/watson_q02/blob/master/wcs_hotelreservation.json

Recommended Posts

C'est parti avec Watson Assistant (anciennement Conversation) ② Faire un chatbot de réservation d'hôtel
Allons-y avec Watson Assistant (anciennement Conversation) ⑤ Créez un chatbot avec Watson + Java + Slack
Allons-y avec Watson Assistant (anciennement Conversation) ④ Comment créer un lien avec la logique Java
Allons-y avec Watson Assistant (anciennement Conversation) ① Introduction Quelle est l'idée et l'intention de comprendre l'application interactive?
Watson Assistant (anciennement Conversation) sur Android
Faisons une carte de Noël avec Processing!
Faisons une fonction de recherche avec Rails (ransack)
Faisons un Bot LINE avec Ruby + Sinatra - Partie 2
Faisons un Bot LINE avec Ruby + Sinatra - Partie 1
Faisons une API simple avec EC2 + RDS + Spring boot ①
Créons une application Web de gestion de livres avec Spring Boot part1
Créons une application Web de gestion de livres avec Spring Boot part3
Créons une application Web de gestion de livres avec Spring Boot part2