# Policies

## Configuring Policies

The `rasa.core.policies.Policy` class decides which action to take at every step in the conversation.

There are different policies to choose from, and you can include multiple policies in a single [`rasa.core.agent.Agent`](https://legacy-docs-v1.rasa.com/1.9.0/api/agent/#rasa.core.agent.Agent).

### Max History

One important hyperparameter for Rasa Core policies is the `max_history`. This controls how much dialogue history the model looks at to decide which action to take next.

```yaml
policies:
  - name: "KerasPolicy"
    featurizer:
    - name: MaxHistoryTrackerFeaturizer
      max_history: 5
      state_featurizer:
        - name: BinarySingleStateFeaturizer
  - name: "MemoizationPolicy"
    max_history: 5
  - name: "FallbackPolicy"
    nlu_threshold: 0.4
    core_threshold: 0.3
    fallback_action_name: "my_fallback_action"
  - name: "path.to.your.policy.class"
    arg1: "..."
```

### Data Augmentation

When you train a model, by default Rasa Core will create longer stories by randomly gluing together the ones in your stories files.

You can alter this behaviour with the `--augmentation` flag. The `augmentation_factor` determines how many augmented stories are subsampled during training.
#### Example:
```bash
--augmentation 0
```

## Action Selection

At every turn, each policy defined in your configuration will predict a next action with a certain confidence level. The bot’s next action is then decided by the policy that predicts with the highest confidence.

## Keras Policy

The `KerasPolicy` uses a neural network implemented in [Keras](http://keras.io/) to select the next action.

```python
def model_architecture(self, input_shape: Tuple[int, int], output_shape: Tuple[int, Optional[int]]) -> tf.keras.models.Sequential:
    from tensorflow.keras.models import Sequential
    from tensorflow.keras.layers import (
        Masking,
        LSTM,
        Dense,
        TimeDistributed,
        Activation,
    )
    model = Sequential()
    ...
    model.compile(
        loss="categorical_crossentropy", optimizer="rmsprop", metrics=["accuracy"]
    )
    return model
```

## Mapping Policy

The `MappingPolicy` can be used to directly map intents to actions.

```yaml
intents:
 - ask_is_bot:
     triggers: action_is_bot
```

### Memoization Policy

The `MemoizationPolicy` just memorizes the conversations in your training data. It predicts the next action with confidence `1.0` if this exact conversation exists in the training data.

## Fallback Policy

The `FallbackPolicy` invokes a [fallback action](https://legacy-docs-v1.rasa.com/1.9.0/core/fallback-actions/#fallback-actions) if certain confidence thresholds are not met.

### Configuration:
```yaml
policies:
  - name: "FallbackPolicy"
    nlu_threshold: 0.3
    ambiguity_threshold: 0.1
    core_threshold: 0.3
    fallback_action_name: 'action_default_fallback'
```

## Two-Stage Fallback Policy

The `TwoStageFallbackPolicy` handles low NLU confidence in multiple stages.

### Configuration:
```yaml
policies:
  - name: TwoStageFallbackPolicy
    nlu_threshold: 0.3
    ambiguity_threshold: 0.1
    core_threshold: 0.3
    fallback_core_action_name: "action_default_fallback"
    fallback_nlu_action_name: "action_default_fallback"
    deny_suggestion_intent_name: "out_of_scope"
```

## Form Policy

The `FormPolicy` is an extension of the `MemoizationPolicy` which handles the filling of forms.
