DEV Community

Cover image for RASA - Checkpoints
Petr Janik
Petr Janik

Posted on

RASA - Checkpoints

You can use checkpoints to modularize and simplify your stories. Checkpoints can be useful, but do not overuse them. Using lots of checkpoints can quickly make your example stories hard to understand, and will slow down training.

Here is an example that contains checkpoints:

# stories.yml
# ... previous content ...
  - story: beginning of flow
    steps:
      - intent: ask_how_i_feel
      - action: utter_ask_user_question
      - checkpoint: check_asked_question

  - story: handle user affirm
    steps:
      - checkpoint: check_asked_question
      - intent: mood_great
      - action: utter_great
      - checkpoint: check_flow_finished

  - story: handle user deny
    steps:
      - checkpoint: check_asked_question
      - intent: mood_bad
      - action: utter_bad
      - checkpoint: check_flow_finished

  - story: finish flow
    steps:
      - checkpoint: check_flow_finished
      - intent: goodbye
      - action: utter_goodbye
Enter fullscreen mode Exit fullscreen mode

Checkpoints can have any name.

For this example to work, apart from the code we have from the previous chapters, I have created the following intents:

# data/nlu.yml
# ... previous content ...
  - intent: mood_bad
    examples: |
      - my day was horrible
      - I am sad
      - I don't feel very well
      - I am disappointed
      - super sad
      - I'm so sad
      - sad
      - very sad
      - unhappy
      - not good
      - not very good
      - extremly sad
      - so saad
      - so sad

  - intent: goodbye
    examples: |
      - cu
      - good by
      - cee you later
      - good night
      - bye
      - goodbye
      - have a nice day
      - see you around
      - bye bye
      - see you later

  - intent: ask_how_i_feel
    examples: |
      - Ask me how I feel
      - Do you want to know how I feel?
      - Ask me about my feelings
Enter fullscreen mode Exit fullscreen mode

and added them to domain.yml:

# domain.yml
# ... previous content ...
intents:
  # ... previous intents ...
  - mood_bad
  - goodbye
  - ask_how_i_feel
Enter fullscreen mode Exit fullscreen mode

We need the chatbot's responses as well:

# domain.yml
# ... previous content ...
  utter_ask_user_question:
    - text: How do you feel?
  utter_great:
    - text: Glad to hear that!
  utter_bad:
    - text: I'm sorry to hear that.
  utter_goodbye:
    - text: Bye
Enter fullscreen mode Exit fullscreen mode

Let's see this in action:
Conversation with checkpoint good

Conversation with checkpoint bad

You can learn more about checkpoints in the documentation.

In the next chapter, we will look at OR statements.

Repository for this tutorial:

You can checkout the state of the repository at the end of this tutorial by running:

git clone --branch 13-checkpoints git@github.com:petr7555/rasa-dev-tutorial.git
Enter fullscreen mode Exit fullscreen mode

Top comments (0)