Why Rasa Gets Complicated

And how to keep your chatbot projects sane

🔍 Why Rasa Gets Complicated

1. Natural language is messy.

That means you need stories, rules, and fallbacks to cover all those variations.

2. Conflicts between stories and rules.

If Rasa sees a conflict between a story and a rule, like:

It complains — even if both make sense in different contexts.

3. Substories / modular logic not truly supported.

There’s no native “substory” mechanism like in some dialogue frameworks. You have to manually repeat similar sequences across multiple stories, unless you use Forms or Actions very smartly.

4. Managing slot logic + actions is verbose.

If you want to change bot behavior based on a slot like complaint_type, you need:

That’s a lot of config for just a simple if/else.

🛠️ How to Simplify Things

✅ 1. Use Forms where possible

If your bot needs structured data (e.g., complaint type), use a Form to guide the conversation and auto-handle missing slots.

✅ 2. Use custom actions as brains

Instead of complex story trees, centralize logic in a custom action:

if complaint_type == "major":
        dispatcher.utter_message("Let me escalate this.")
    else:
        dispatcher.utter_message("Thanks for letting us know.")

This makes your stories shorter and logic cleaner.

✅ 3. Limit overlapping stories and rules

If you already have a story doing X, don’t also write a rule doing X unless:

✅ 4. Fallbacks are your friend

Use fallback policies wisely — they cover unexpected user inputs without breaking the flow.

🧭 Real Talk

Yes, Rasa can be too much for small bots or when you’re doing everything manually. But it shines when: