Table of Contents | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|
|
Dialogflow
The previous capability made the agent select a random recipe name from the recipe database and recommend this to a user. We now want to allow the user to request a specific recipe by mentioning the name of a recipe. In this case, the conversational agent should be able to understand that a user is mentioning a specific recipe’s name. In other words, our Dialogflow agent needs to be able to recognize all the names of all the recipes in the recipe database.
Recipe entity
The way to do that is by creating an entity for recipes in the Dialogflow agent. For your convenience, we have already provided you with a JSON file that you can use to upload a recipe entity that contains all recipe names (as there are a lot of these names).
...
It is important to also note the checkbox “Define synonyms” that is checked at the top of the page, and hoover over the question mark next to it. By checking this box, all synonyms that are defined for a reference value will be mapped to that reference value by Dialogflow. The list of phrases on the right-hand side consists of the synonyms that are defined for each entry. Adding these synonyms allows for some flexibility on the part of the user who now can also say these (often shorter) synonym phrases instead of the full titles of a recipe. Of course, this is a nice feature, as we can hardly require a user to know the exact titles of recipes in our database. Adding synonyms, however, does require some care, as introducing the same phrase as a synonym for two different reference values will lead to problems. We have, for example, a recipe called artichoke and pine nut pasta (recipe 36), a recipe called pasta frittata (recipe 38), and a recipe called creamy quorn sausage and broccoli pasta (recipe 93) in the recipe database. And, as you can imagine, there are more recipes with pasta in their title in the database. Of course, we cannot add pasta as a synonym for all of these recipes. First, pasta can also be an ingredient and as such appears in many other recipes. It also does not make sense to abbreviate pasta frittata to pasta as an essential part of the meaning is lost by doing so (check the synonyms for this recipe). Using pine nut pasta as a synonym for artichoke and pine nut pasta, however, might make sense (as you can check by searching the recipe_database.pl
file, there are no other recipes with pine nut pasta in their title). But what kind of synonyms can we introduce for creamy quorn sausage and broccoli pasta? It seems that we can perhaps also use broccoli pasta as a synonym for this recipe. But check the synonyms that are provided for this recipe. You will find the most obvious shorthand synonym phrase for the recipe is missing. In other words, there may still be a lot that can be improved here, but putting in the manual work needed for that, however, does not seem to be worth it... Right now, the lesson to be learned here is that making things work perfectly in natural language understanding is very difficult if not impossible (at least in some cases).
Add the names of the recipes your group added
Remember that you added six new recipes to the database for capability 2. To be able to request those recipes, you will need to add those recipes to the @recipe entity as well. For this make sure that the spelling is exactly the same and think about which synonyms make sense for your recipes.
Recipe request intent
The next thing to do is make the Dialogflow agent respond to user utterances that can be understood as requests for a specific recipe. An obvious example utterance would be “I'd like to make a pasta frittata”. We thus should create a new intent for classifying such utterances as a request for a specific recipe and to make sure the mentioned recipe is extracted from the utterance as an entity. The main difference with before thus is to now also add entity recognition to our intent definition. Otherwise, the steps are the same again:
...
Warning |
---|
Test that your intent is correctly recognizing user requests by using the microphone button in the Dialogflow test console (you can also enter phrases in the test console by typing). Try various phrases and check whether what you say is classified as your recipe request intent. Note that just copy-pasting the training phrases you entered for the intent into the test console is not that useful (you will find that Dialogflow will correctly classify these with a confidence score of 1 by inspecting the Diagnostic Info). But you can use these phrases to check that ASR is working by using the microphone button in the test console and talking to the agent. |
Prolog and Patterns
Now that we have introduced a new intent for asking for a specific recipe by its name, we can add a new variant of the a50recipeSelect
pattern that we introduced earlier for Capability 2: Request a Recommendation. To illustrate it, we repeat the example of the type of pattern that we have in mind:
...
The new agent intent label recipeChoiceReceipt
that we introduced also needs to be added to the responses.pl
file. To specify a phrase or response the agent can use when performing the intent, you should take into account that the name of the recipe should be part of the response (see the example again: Artichoke and pine nut pasta is a great choice!). As before, defining the response, therefore, requires a rule to define the text(recipeChoiceReceipt, Txt)
clause. The idea is that the agent first finds the current recipe stored in its conversational memory, retrieves the recipe's name, and finally constructs a response using the template string_concat(PhrasePart1, PhrasePart2, Txt)
where you need to replace the PhrasePart1
and PhrasePart2
arguments.
Visuals
You can update the visuals based on what you think will help the user the most. Think about how you can support the implemented capability visually.
Test it Out
When you finished implementing this capability and you Run your Conversational Agent, you should be able to conduct the following conversational interaction and go through the following dialog moves:
...