Node-RED - Vervolg

In deze vervolg les gaan we jouw AI-Bot een gesprek met jou laten voeren en objecten laten herkennen.

Een gesprek voer je met minstens twee personen, waarvan één persoon spreekt en de ander luistert. Na het luisteren kan de andere persoon reageren. Dus om een gesprek met jouw AI-Bot na te bootsen moet de AI-Bot eerst naar jouw luisteren.

Jouw AI-Bot laten luisteren

Maak een nieuwe werkblad met als naam "Vervolg". Hernoem meteen werkblad "Flow 1" naar "Basis" door twee keer op "Flow 1" te klikken, de naam te wijzigen en op te slaan door op "Done" te klikken.

Sleep op deze nieuwe werkblad een "listen" node (kopje "TJBot").
Als je nu de informatie leest van de "listen" node dan zie je dat je de node kan starten of stoppen met een berichtje "msg.mode".
Dit gaan we bouwen door een "change" node, twee "inject" nodes en een zogenaamde "debug" node naar het werkblad te slepen zoals in het voorbeeld hieronder. Met deze "debug" node kunnen we zometeen makkelijk uitlezen wat de AI-Bot heeft gehoord.
Debugging tools worden vaak gebruikt om de eventuele fouten (bugs) uit een programma te halen.
Je verbindt de twee "inject" nodes met de "change" node. De "change" node gaat naar de "listen" node, en de uitgang van de "listen" node gaat naar de "debug" node.

 

Pas nu de eerste "inject" node aan.
Payload: <String> "start"
Name: "Start Listening"

Pas nu de tweede "inject" node aan.
Payload: <String> "stop"
Name: "Stop Listening"

Pas nu de "change" node aan:

Name: "Change Listen Mode"
Set: "msg.mode"
To: "msg.payload"

Je moet nu alleen nog de listen node openen zodat de standard configuratie wordt gekozen en op "Done" klikken.
Klik nu op "Deploy" en test jouw "luister" flow. Klik hiervoor eerst op het insect icoon (bug icon, pijl 1). Zo zie je alle "debug" berichtjes in rechts in het scherm verschijnen. Klik nu op de "Start Listening" Node (pijl 2) om de "listen" node te laten luisteren. Zeg nu iets in het Engels in de microfoon van jouw AI-Bot. Zodra jouw AI-Bot jouw correct heeft verstaan, dan zie je een debug berichtje rechts op het scherm verschijnen (pijl 3). Wanneer dit gelukt is kan je de "listen" node stoppen door op de "Stop Listening" Node (pijl 4) te klikken.

Een Gesprek Voeren

We gaan nu een eenvoudig gesprek met jouw AI-Bot voeren.

[Vraag hier even om uitleg over IBM Watson Assistant, dit heb je nodig om de opdracht aan het eind van dit onderdeel uit te kunnen voeren]

Sleep hiervoor een "inject" Node, een "converse" node en een "debug" node naar het werkblad "Vervolg".
Plaats al deze nodes onder de vorige "luister" flow die je hierboven hebt gebouwd.

Pas nu de "inject" node aan:

Payload: <string> "Hello, please introduce yourself"
Name: "Start Conversation"

Pas de "debug" node aan. Selecteer bij "Output" de optie "complete msg object" in plaats van alleen "msg.payload".
Nu kan je straks in de debug window aan de rechterkant zien wat er allemaal in een bericht staat en niet alleen het payload deel.
Dubbelklik op de converse node zodat de standard configuratie wordt gekozen en klik op "Done"

Klik nu op "Deploy" en test jouw "gesprek" flow. Vergeet niet op de "insect" icoon (pijl 1) te klikken voordat je de flow start (pijl 2).

Je krijgt nu de reactie van jouw AI-Bot te zien in de debug window aan de rechterkant.
Open het bericht zodat je bij msg.response.object.output.text[0] ziet wat voor antwoord jouw AI-Bot heeft gegeven.
Beweeg nu met jouw muis over het antwoord en klik op de eerste icoon links die verschijnt ("Copy Path").
Je kopieert hiermee de variable waar het antwoord in wordt teruggestuurd. 

We willen nu jouw AI-Bot het antwoord laten uitspreken. Hiervoor heb je een "function" en een "speak" node nodig.
Sleep deze twee naar het werkblad "Vervolg" zoals in het voorbeeld hieronder.

Pas nu de "function" node als volgt aan:

Name: "Prepare Response"
Function: Plak hier de "variabele" die je via de "Copy Path" icoon hebt gekopieerd bovenaan in het tekst veld.
En maak nu de code af zodat in de eerste regel het volgende staat:
"msg.payload = msg.response.object.output.text[0];". Je zorgt er nu met deze "function" node voor dat het antwoord van jouw AI-Bot in een msg.payload wordt geplaatst. En door kan worden gestuurd naar de "speak" node. Klik nu op "Done".
Open ook even de "speak" node en selecteer de optie "Speak" bij "Mode" en klik op "Done".

Klik op "Deploy" en kijk of jouw AI-Bot nu het antwoord uitspreekt.

Opdracht

In de bovenstaande flow vraag je de AI-Bot om zich zelf voor te stellen. De standaard naam is "TJ Bot".
Kan je nu de reactie zo wijzigen zodat jouw AI-Bot zijn of haar eigen naam zal gebruiken in alle antwoorden?
Tip: Login bij IBM Cloud en ga naar Watson Assistant -> My First Assistant -> TJ Bot Skill.

Intentie Herkennen

In de reactie van de AI-Bot wordt vaak een "intention" terug gestuurd als deze wordt herkend door jouw AI-Bot.
Intentie is een ander woord voor "bedoeling". Jouw AI-Bot probeert te begrijpen wat je vraagt, wat de bedoeling is van jouw vraag.
We gaan zo proberen om de intentie uit het antwoord van jouw AI-Bot te halen.

Maar eerst gaan we jouw AI-Bot laten reageren op vragen die je met jouw stem kan stellen.
Dit doe je door de uitgang van de "listen" node te verbinden met de ingang van de "converse" node zoals in het voorbeeld hieronder.

Klik nu op "Deploy" en daarna op de "insect" icoon om de debug scherm te tonen.
Klik nu op de node "Start Listening" en zeg het volgende in de microfoon: "Change the color to blue".
Als het goed is kan je nu de "intent" terugvinden in het antwoord bericht, namelijk "shine".
En bij "shine", moet je natuurlijk ook weten in welke kleur je het lampje moet laten branden.
Deze waarden zie je terug in het bericht bij msg.response.object.entities[0].entity ("color") en msg.reponse.object.entities[0].value ("blue").

Laten we nu proberen om met behulp van de intents jouw AI-Bot dingen te laten doen.
Sleep hiervoor een "switch" Node naar het werkblad "vervolg" en verbind de uitgang de de "converse" node met de ingang van de "switch" node. Dubbelklik nu op de "switch" node en pas hem als volgt aan:

Name: "Process Intent" (Betekent "Verwerk Bedoeling")
Property: "msg.response.object.intents[0].intent"
Maak nu drie <string> opties aan: "shine", "wave" en "see"

Je leest nu met deze "switch" node de intent uit die in het antwoord is teruggestuurd.
Klik nu op "Done".

Voor elke optie die je in de "switch" node hebt aangemaakt zie je een uitgang. De "switch" node heeft nu dus 3 uitgangen, voor "shine", "wave" en "see". De volgorde van de uitgangen is gelijk aan wat je in de "switch" node kon zien (zie afbeelding hierboven).
Omdat de tweede uitgang voor "wave" staat, sleep je een "wave" node naar het werkblad "Vervolg" en verbind je de ingang van deze "wave" node met de tweede uitgang van de "switch" node. Dubbelklik een keer op de "wave" node zodat de standaard configuratie wordt gebruikt en klik daarna op "Done". Klik nu op "Deploy" en daarna op "Start Listening". Vraag nu in de microfoon het volgende aan jouw AI-Bot: "Please wave your arm" en kijk of deze intent wordt herkend.

Objecten Laten Herkennen

Ten slotte gaan we in deze vervolg les jouw AI-Bot objecten laten herkennen.
Sleep hiervoor een "inject" node, een "see" node en een "debug" node naar het werkblad "Vervolg".

Pas de "inject" node aan:

Name: "Start Object Recognition"

Pas de "see" node aan:

Selecteer de optie "See [identify object] bij "Mode".

Pas de "debug" node aan:

Selecteer "complete msg object" bij "Output.

Klik nu op "Deploy" en druk op de "Start Object Recognition" node.
Kijk in de debug scherm hoeveel objecten er worden herkend en of dit correct is.

Opdracht

Maak het werkblad "Vervolg" af zodat jouw AI-Bot de eerste 3 objecten gaat opnoemen die het ziet wanneer jij de vraag stelt: "What do you see?"

Tip: Verbind de eerste uitgang van de "switch" node met de ingang van de "see" node.
Verwerk het antwoord in een "function" node met behulp van dit stukje code:

var objects = msg.payload;
var speech_text = "I'm not sure I see anything.";
if (objects.length == 1) {
    var item = objects[0].class;
    speech_text = "I see " + item;
} else if (objects.length == 2) {
    var items_2 = objects[0].class + " and " + objects[1].class;
    speech_text = "I'm looking at " + items_2;
} else if (objects.length > 2 ) {
    var items_more = objects[0].class + ", " + objects[1].class + ", and " + objects[2].class + ", and a few other things too";
    speech_text = "I'm looking at " + items_more;
}
var newMsg = { payload: speech_text };
return newMsg;

Stuur het resultaat van de "function" code naar een "speak" node.