These docs are for version 1.x of Rasa Open Source.

---

# User Guide

## Installation

## Tutorial: Rasa Basics

## Tutorial: Building Assistants

## Command Line Interface

## Architecture

## Messaging and Voice Channels

## Testing Your Assistant

## Setting up CI/CD

## Validate Data

## Configuring the HTTP API

## Deploying Your Rasa Assistant

## Cloud Storage

---

# NLU

## About

## Using NLU Only

## Training Data Format

## Language Support

## Choosing a Pipeline

## Components

## Entity Extraction

---

# Core

## About

## Stories

## Domains

## Responses

## Actions

## Reminders and External Events

## Policies

## Slots

## Forms

## Retrieval Actions

## Interactive Learning

## Fallback Actions

## Knowledge Base Actions

---

# Conversation Design

## Dialogue Elements

## Small Talk

## Completing Tasks

## Guiding Users

---

# API Reference

## Action Server

## HTTP API

## Jupyter Notebooks

## Agent

## Custom NLU Components

## Rasa SDK

## Events

## Tracker

## Tracker Stores

## Event Brokers

## Lock Stores

## Training Data Importers

## Featurization of Conversations

## TensorFlow Configuration

## Migration Guide

## Rasa Open Source Change Log

---

# Migrate from (beta)

## Dialogflow

## Wit.ai

## LUIS

## IBM Watson

---

# Reference

## Glossary

Versions

viewing: 1.10.20

# Tutorial: Building Assistants

After following the basics of setting up an assistant in the [Rasa Tutorial](/content/docs/rasa/user-guide/rasa-tutorial/index.html), we’ll now walk through building a basic FAQ chatbot and then build a bot that can handle contextual conversations.

### Building a simple FAQ assistant

FAQ assistants are the simplest assistants to build and a good place to get started. These assistants allow the user to ask a simple question and get a response. We’re going to build a basic FAQ assistant using features of Rasa designed specifically for this type of assistant.

In this section we’re going to cover the following topics:

- Responding to simple intents with the MemoizationPolicy
- Handling FAQs using the ResponseSelector

We’re going to use content from [Sara](https://github.com/RasaHQ/rasa-demo), the Rasa assistant that, amongst other things, helps the user get started with the Rasa products. You should first install Rasa using the [Step-by-step Installation Guide](/content/docs/rasa/user-guide/installation/#step-by-step-installation-guide/index.html) and then follow the [Rasa Tutorial](/content/docs/rasa/user-guide/rasa-tutorial/index.html) to make sure you know the basics.

To prepare for this tutorial, we’re going to create a new directory and start a new Rasa project.

```bash
mkdir rasa-assistant
rasa init
```

Let’s remove the default content from this bot, so that the `nlu.md`, `stories.md` and `domain.yml` files are empty.

### Memoization Policy

The MemoizationPolicy remembers examples from training stories for up to a `max_history` of turns. The number of “turns” includes messages the user sent, and actions the assistant performed. For the purpose of a simple, context-less FAQ bot, we only need to pay attention to the last message the user sent, and therefore we’ll set that to `1`.

You can do this by editing your `config.yml` file as follows:

```yaml
policies:
- name: MemoizationPolicy
  max_history: 1
- name: MappingPolicy
```

Now that we’ve defined our policies, we can add some stories for the `goodbye`, `thank` and `greet` intents to the `stories.md` file:

```markdown
## greet
* greet
  - utter_greet

## thank
* thank
  - utter_noworries

## goodbye
* bye
  - utter_bye
```

We’ll also need to add the intents, actions and responses to our `domain.yml` file in the following sections:

```yaml
intents:
  - greet
  - bye
  - thank

responses:
  utter_noworries:
    - text: No worries!
  utter_greet:
    - text: Hi
  utter_bye:
    - text: Bye!
```

Finally, we’ll copy over some NLU data from Sara into our `nlu.md` file (more can be found [here](https://github.com/RasaHQ/rasa-demo/blob/master/data/nlu/nlu.md)):

```markdown
## intent:greet
- Hi
- Hey
- Hi bot
- Hey bot
- Hello
- Good morning
- hi again
- hi folks

## intent:bye
- goodbye
- goodnight
- good bye
- good night
- see ya
- toodle-oo
- bye bye
- gotta go
- farewell

## intent:thank
- Thanks
- Thank you
- Thank you so much
- Thanks bot
- Thanks for that
- cheers
```

You can now train a first model and test the bot, by running the following commands:

```bash
rasa train
rasa shell
```

This bot should now be able to reply to the intents we defined consistently, and in any order.

For example:

While it’s good to test the bot interactively, we should also add end to end test cases that can later be included as part of a [CI/CD system](https://legacy-docs-v1.rasa.com/1.10.20/user-guide/setting-up-ci-cd/#setting-up-ci-cd). End-to-end [test conversations](https://legacy-docs-v1.rasa.com/1.10.20/user-guide/testing-your-assistant/#end-to-end-testing) include NLU data, so that both components of Rasa can be tested. The file `tests/conversation_tests.md` contains example test conversations. Delete all the test conversations and replace them with some test conversations for your assistant so far:

```markdown
## greet + goodbye
* greet: Hi!
  - utter_greet
* bye: Bye
  - utter_bye

## greet + thanks
* greet: Hello there
  - utter_greet
* thank: thanks a bunch
  - utter_noworries

## greet + thanks + goodbye
* greet: Hey
  - utter_greet
* thank: thank you
  - utter_noworries
* bye: bye bye
  - utter_bye
```

To test our model against the test file, run the command:

```bash
rasa test --stories tests/conversation_tests.md
```

The test command will produce a directory named `results`. It should contain a file called `failed_stories.md`, where any test cases that failed will be printed. It will also specify whether it was an NLU or Core prediction that went wrong. As part of a CI/CD pipeline, the test option `--fail-on-prediction-errors` can be used to throw an exception that stops the pipeline.

---

Using the features we described in this tutorial, you can easily build a context-less assistant. When you’re ready to enhance your assistant with context, check out [Building a contextual assistant](https://legacy-docs-v1.rasa.com/1.10.20/user-guide/building-assistants/#tutorial-contextual-assistants).

---
