AWS QnABot is a multi-channel, multi-language conversational interface (chatbot) that responds to your customer's questions, answers, and feedback. The solution allows you to deploy a fully functional chatbot across multiple channels including chat, voice, SMS and Amazon Alexa.
Amazon Lex bots & Alexa skills use intents to encapsulate the purpose of an interaction and slots to capture elements of information from the interaction.
QnABot has a single purpose, to answer a user’s question, so we (currently) define just one intent.
This intent has a single slot which is trained to capture the text of the question.
But this simple model has limitations. It doesn’t support concept of ‘clarifying questions’ when the initial question is missing key information needed to provide an answer... like this:
User: “When is your next training class?”
QnABot: “For which course?”
User: “Building Bots on AWS”
QnABot: “Which city?”
User: “Las Vegas”
QnABot: “The next AWS Bot Building class in Las Vegas is on July 20, 2018”
It also can’t parse specific fields in the question to use as parameters:
User: “What is 3 times 4?”
QnABot: “I don’t know, you didn’t give me the answer to that question.”
For these scenarios, we should probably use Lex (with custom intents/slots) to parse out slot values, and prompt for required slots. We should consider using automatically created nested bots for these types of interactions, not just adding intents to the QnABot bot - nested bots will provide better isolation and less risk of mismatched intents. QnABot Lambda hooks can 'route' requests to the correct nested bot, and relay responses back to the client.
Amazon Lex bots & Alexa skills use intents to encapsulate the purpose of an interaction and slots to capture elements of information from the interaction. QnABot has a single purpose, to answer a user’s question, so we (currently) define just one intent. This intent has a single slot which is trained to capture the text of the question.
But this simple model has limitations. It doesn’t support concept of ‘clarifying questions’ when the initial question is missing key information needed to provide an answer... like this: User: “When is your next training class?” QnABot: “For which course?” User: “Building Bots on AWS” QnABot: “Which city?” User: “Las Vegas” QnABot: “The next AWS Bot Building class in Las Vegas is on July 20, 2018”
It also can’t parse specific fields in the question to use as parameters: User: “What is 3 times 4?” QnABot: “I don’t know, you didn’t give me the answer to that question.”
For these scenarios, we should probably use Lex (with custom intents/slots) to parse out slot values, and prompt for required slots. We should consider using automatically created nested bots for these types of interactions, not just adding intents to the QnABot bot - nested bots will provide better isolation and less risk of mismatched intents. QnABot Lambda hooks can 'route' requests to the correct nested bot, and relay responses back to the client.
Design to be discussed and determined