# 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.

### 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:

```yaml
## greet
* greet
  - utter_greet

## thank
* thank
  - utter_noworries

## goodbye
* bye
  - utter_bye
```

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

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

templates:
  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` (more can be found [here](https://github.com/RasaHQ/rasa-demo/blob/master/data/nlu/nlu.md)):

```yaml
## 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
```

### Response Selectors

The [ResponseSelector](https://legacy-docs-v1.rasa.com/1.8.0/nlu/components/#response-selector) NLU component is designed to make it easier to handle dialogue elements like [Small Talk](https://legacy-docs-v1.rasa.com/1.8.0/dialogue-elements/small-talk/#small-talk) and FAQ messages in a simple manner. By using the ResponseSelector, you only need one story to handle all FAQs, instead of adding new stories every time you want to increase your bot’s scope.
