Let's start with a very simple example.
We will have a chatbot that will respond to our greeting.
To start fresh, delete the contents of
Our greeting is called an intent. Think of an intent as of a meaning of our message.
This intent can be expressed in many ways, for example by saying "Hi!". We will create this intent in the
data/nlu.yml file. In the examples below the intent, we will list a couple of phrases the user might say to express the greet intent. The suggested number of examples is at least 5.
# data/nlu.yml version: "2.0" nlu: - intent: greet examples: | - hey - hello - hi - hello there - good morning - good evening - moin - hey there - let's go - hey dude - goodmorning - goodevening - good afternoon
Intents and their examples are used as training data for the assistant's Natural Language Understanding (NLU) model. They do not have to match exactly what the user might say, as the model learns to generalize.
Since we need at least 2 different intents to train DIETClassifier (which is an architecture that handles both intent classification and entity recognition), we will add another intent mood_great.
# data/nlu.yml # ... previous content ... - intent: mood_great examples: | - perfect - great - amazing - feeling like a king - wonderful - I am feeling very good - I am great - I am amazing - I am going to save the world - super stoked - extremely good - so so perfect - so good - so perfect
You can learn more about intents in the documentation.
Now let's look at the
The domain defines the universe in which your assistant operates.
We need to list all our intents from
data/nlu.yml. We had two, called greet an mood_great.
# domain.yml version: "2.0" intents: - greet - mood_great
Next, we define responses our chatbot might say.
Name of a response must start with
We will create two. First one, called utter_greet, which will be a response to our greet intent, and a second one utter_happy, which will be a response to a user saying they feel happy. We specify the text of the responses under each response's name.
If a response has multiple text options, one of these options will be chosen at random whenever that response is predicted.
# domain.yml # ... previous content ... responses: utter_greet: - text: Hey! How are you? - text: Hi, how's it going? utter_happy: - text: Great, carry on!
You can learn more about responses in the documentation.
Stories are example conversations that train an assistant to respond correctly depending on what the user has said previously in the conversation. The story format shows the intent of the user message followed by the assistant's action or response.
Let's add our first story:
# data/stories.yml version: "2.0" stories: - story: happy path steps: - intent: greet - action: utter_greet - intent: mood_great - action: utter_happy
The name of the story, in this case happy path is just for readability and debugging purposes.
In this story the user and the assistant exchange greetings, the user says they feel happy and the assistant responds that it's great.
You can learn more about stories in the documentation.
To make sure the assistant behaves as expected, we will write a test for it.
# tests/test_stories.yml version: "2.0" stories: - story: happy path 1 steps: - user: | hi intent: greet - action: utter_greet - user: | good intent: mood_great - action: utter_happy
In this test we are saying that when a user types hi, it should be classified as intent greet and followed by an action utter_greet.
Then, when the user answers good, it should be classified as intent mood_great and followed by an action utter_happy.
Run this test by executing
You should see the following results:
You can learn more about testing the assistant in the documentation.
In the next chapter, we will look at forms.
Repository for this tutorial:
You can checkout the state of the repository at the end of this tutorial by running:
git clone --branch 02-creating-chatbot firstname.lastname@example.org:petr7555/rasa-dev-tutorial.git