Building LLM Models with Rasa: A Comprehensive Guide

Abdullah Farag
4 min readSep 24, 2024

--

Introduction

In the rapidly evolving field of natural language processing (NLP), Large Language Models (LLMs) have become a cornerstone of advanced conversational AI systems. Rasa, an open-source machine learning framework, provides powerful tools for building contextual AI assistants. This article will guide you through the process of leveraging Rasa to build and implement LLM-based conversational models.

Understanding Rasa and LLMs

What is Rasa?

Rasa is an open-source machine learning framework for automated text and voice-based conversations. It allows developers to build contextual AI assistants and chatbots in text and voice with machine learning.

What are LLMs?

Large Language Models (LLMs) are advanced AI models trained on vast amounts of text data. They can understand and generate human-like text, making them ideal for various NLP tasks, including conversational AI.

Setting Up Your Environment

Before we dive into building LLMs with Rasa, let’s set up our development environment:

  1. Install Python (3.7+ recommended)
  2. Install Rasa:
pip install rasa

3. Create a new Rasa project:

rasa init

Building LLM Models with Rasa

1. Data Preparation

The first step in building an LLM with Rasa is preparing your training data. Rasa uses YAML files for training data:

nlu:
- intent: greet
examples: |
- Hey
- Hello
- Hi
- Good morning
- Good evening

- intent: goodbye
examples: |
- Bye
- Goodbye
- See you later
- Have a nice day

2. Configuring the Pipeline

Rasa allows you to configure your NLU pipeline. For LLM-based models, you’ll want to use components that can leverage pre-trained language models:

language: en

pipeline:
- name: WhitespaceTokenizer
- name: LanguageModelFeaturizer
model_name: "bert"
model_weights: "bert-base-uncased"
- name: DIETClassifier
epochs: 100
constrain_similarities: true

This pipeline uses BERT, a powerful pre-trained language model, as a featurizer.

3. Training the Model

To train your LLM-based model, use the following command:

rasa train

This will use your training data and the configured pipeline to create a model that leverages the power of LLMs.

4. Implementing Custom Actions

To fully utilize the power of LLMs, you can implement custom actions in Rasa. These allow your bot to perform complex tasks or generate more nuanced responses:

from typing import Any, Text, Dict, List
from rasa_sdk import Action, Tracker
from rasa_sdk.executor import CollectingDispatcher
from transformers import pipeline

class ActionGenerateResponse(Action):
def name(self) -> Text:
return "action_generate_response"

def run(self, dispatcher: CollectingDispatcher,
tracker: Tracker,
domain: Dict[Text, Any]) -> List[Dict[Text, Any]]:

generator = pipeline('text-generation', model='gpt2')
user_message = tracker.latest_message['text']
generated_text = generator(user_message, max_length=50, num_return_sequences=1)[0]['generated_text']

dispatcher.utter_message(text=generated_text)

return []

This custom action uses the Hugging Face Transformers library to generate responses based on the user’s input.

5. Fine-tuning for Your Domain

While pre-trained LLMs are powerful, fine-tuning them for your specific domain can significantly improve performance:

  1. Collect domain-specific data
  2. Use Rasa’s interactive learning feature to improve your model:
rasa interactive

3. Regularly retrain your model with new data

6. Handling Context and Memory

LLMs excel at understanding context. Implement a custom policy in Rasa to maintain conversation history:

from rasa.core.policies.policy import Policy
from rasa.shared.core.trackers import DialogueStateTracker

class LLMMemoryPolicy(Policy):
def predict_action_probabilities(
self, tracker: DialogueStateTracker, domain: Domain
) -> List[float]:
# Implement logic to consider conversation history
# and predict next action probabilities
pass

7. Evaluating Your LLM Model

Regularly evaluate your model to ensure it’s performing as expected:

rasa test

This command will run your model against test data and provide metrics on its performance.

8. Deploying Your LLM-based Rasa Bot

Once you’re satisfied with your model’s performance, it’s time to deploy:

  1. Set up a server (e.g., AWS, Google Cloud, or your own infrastructure)
  2. Use Rasa X for deployment and monitoring:
pip install rasa-x --extra-index-url https://pypi.rasa.com/simple
rasa x

Best Practices and Considerations

  1. Data Privacy: Be mindful of the data you’re using to train your LLM. Ensure you have the right to use it and that it doesn’t contain sensitive information.
  2. Computational Resources: LLMs can be resource-intensive. Ensure you have adequate computational power, especially for training and deployment.
  3. Continuous Learning: Implement a system for continuous learning and improvement of your model based on user interactions.
  4. Ethical Considerations: Be aware of potential biases in your training data and model outputs. Regularly audit your model for fairness and inclusivity.
  5. Fallback Mechanisms: Implement robust fallback mechanisms for when your LLM-based model fails to generate an appropriate response.

Conclusion

Building LLM models with Rasa opens up exciting possibilities for creating sophisticated, context-aware conversational AI systems. By leveraging Rasa’s flexible architecture and the power of LLMs, you can create chatbots and virtual assistants that provide truly engaging and helpful user experiences.

Remember, the field of LLMs is rapidly evolving. Stay updated with the latest developments in both Rasa and LLM technologies to continually improve your conversational AI systems.

--

--

Abdullah Farag

Team Lead Software Engineer | Linux Enthusiast | DevOPS Passionate | Machine Learning Student | Human 💁‍♂️