Building a multi-channel chatbot with Rasa

Hello, I have added a new write up and some code on the latest rasa core 0.11 version. I tried to comb through the changes and see the difference from previous versions

4 Likes

Hi @souvikg10, I have read your article and first of all thanks for your input.

Just want to ask several questions:

  • Is setting up 2 servers (one for EN and one for FR) the only way to handle multiple languages? Have you tried using only a server but two different projects, which loads different model accordingly?
  • According to Rasa doc, the memory usage is high if setting up more than 1 server. In your case how is the memory usage going?

Thank you very much for your help.

I hope you can take advantage of the code in someway.

For the first point; at my current company, our deployment is completely orchestrated using Kubernetes. Now it is true that you can manage to load/unload models on the fly but keep in mind some models can be really heavy. You can gain a lot of performance by deploying the chatbots separately in two servers. Imagine vectors of size from FastText, if you have to load/unload everytime it would be expensive. Servers are cheaper trust me

for the second point, we notice with our custom vectors of 1gb , server requirements would be Rasa NLU - minimum 4gb(to be safe) - Memory Rasa Core - min 500mb - Memory

We spin this up twice. But it is all due to Kubernetes that deployment is really simple.

Kubernetes… I see.

At present, what I am trying to do is: to have 2 models: One for English and another for Chinese.

Since I am quite new to Rasa and Kubernetes, and additionally since I need to create a website that website visitors who are interested in our business chatbot service can register and create their own business chatbot on the fly (hope that doesn’t conflict with your company business, I am on the other side of the planet :smiley: ).

My ideas is this:

Website visitor <—> Channel (FB, Website) <—> Botpress <—> Rasa (Core + NLU (Spacy or Stanford NLP))

So, if you don’t mind:

  • What do you think about this architecture? Is it how I should use Rasa?
  • When you say using Kubernetes, are you using KB to host BOTH Botpress and RASA? Or others?
  • If the above architecture is reasonable, what do you think that is the biggest bottleneck/challenge regarding this architectures?
  • Do you have any online resources (books, video etc) that I can refer to so that I can build something like above, using Kubernetes, Rasa and Botpress?

Thank you very much in advance for your explanation.

Let’s see if i can break it down well enough.

First of all, you would be surprised to know where i actually work :smiley: . i am not in the bot business, i just love the conversational AI as a concept and how it enables better services for us in the future. I will suggest you (not advertising) to take a look at the articles i wrote on medium and my github(souvikg10) repos for code references. the one above has kubernetes deployment files in them. Go through them and i hope it will be useful. You can always create issues as for now

I will now actively support two of the Rasa stack repositories i created - one more technical (GitHub - souvikg10/rasa-latest: Simple demo to demonstrate the rasa core's latest version)

and one more rasa core driven( GitHub - souvikg10/rasa-core-experiment: An Overview of the different policies for training a dialogue manager ) .

I hope it helps developers/data scientists to get started with Rasa quick enough but also enable them a sandbox to really deep dive into some of the policies. I already saw plenty of tutorials on Rasa NLU so i don’t think it will be useful to make another one again.

I am not completely sure about Botpress, it looks a lot like Chatfuel, maybe this might help you https://blog.usejournal.com/building-a-multi-lingual-chatbot-using-rasa-and-chatfuel-cca20cbc645a

Given Botpress is open-source, you can definitely host it on Kubernetes and if your idea is to use botpress for multi-bot orchestration, a simple API gateway might suffice

coming to the approach of enabling businesses to build their chatbots on the fly, take a look at

articulate or rasa-ui on github - they also have the same idea.

Personally, if you are hosting chatbots for your clients, Kubernetes is the right direction to go( you are cloud agnostic and you can enable your clients to even self-host your product - a big competitive advantage).

For using Kubernetes, i would tell you to get started with Docker and Docker-compose as well.

Also with multilingual bots - hint, keep an eye on the tracker object as well

Hi @souvikg10

Thank you for your kind response. It is indeed helpful.

Actually I read the chatfuel and Rasa article, and he uses 2 servers (2 localhost with two different ports) . So I guess if I need to go for multilingual, it would be my primary option.

i will also look into your repo and see how it works.

Thank you again for your help. It is very useful.

Once I got something ready I will write my result here.

Thank you again.

Indeed, it is easier to start with two servers or two containers(let’s speak kubernetes). You can replace chatfuel with any other functional app that drives the logic of selecting language( user profile/cookies). I am not a big fan of language detection since it doesn’t work between many languages (though for you it could work between english and mandarin),

I know many chatfuel users, there was already a huge demand for dialogflow chatfuel connection. I just tried the same with Rasa.

Hello @souvikg10 , I have 2 bot one is like faq bot and another one is for event booking so is there any way where i can have only one bot instead of 2 like initial have 2 folder strucutre but i want to reduce it to one (means will be having only one bot which will take care of both faq and event booking bot ) , is there any way to segregate dataset of both the bot (like will be having diffrent data for diffrent bot but rest other thing will be same) any suggestion regarding this will be helpful for me …

Thanks Saptami

@Beherasaptami though experimental, you can try retrival actions/knowledge bases for your faq instead and other actions for event booking. instead of splitting the bot into two, you can enrich your domain and add retrieval into your pipeline

1 Like

@souvikg10 Firstly Your knowledge disbursal is quite efficient I should say. Secondly, I had the similar situation like @Beherasaptami , but in my case I have different bots for different domains per se HR domain, Insurance domain, Contract Management domain etc., We wanted to have a universal bot from where we could access particular bot and their models . Is it possible to do so with Rasa? All bots in One.

Third I also have a situation in which, We have created a insurance bot for a client B2B,suppose ABC, which is now using it for its different clients XYZ,PQR,QWE, all these 3 companies will use bots for their companies with their unique customer base.

So is it possible that the Bot that we have created for ABC , be used for all 3 of the companies. Or we need to have separate bots and instances for each company the bot is sold to???

Thanks

Sorry i haven’t been very active lately, but making my way back with Rasa 2.0,

If you ask me, i would prefer making copies of the bot by training multiple models from the same training data and deploying them individually. Conversations evolve and each client’s need will never be the same, be aware conversational bots rely on actual human conversation, as my experience so far have shown that MAJORITY of these large companies have never actually asked their users what they need. they dump an app on their customers and pretend this is what the customers want. With conversational Bots, this reality has changed and many come to various kind of realization on how to provide/append/modify their product/service so no two bots remains the same anymore. It gives them the flexibility to ask the right questions to their users too.

So to sum up, deploy several instances of chatbots per company and evolve as per the conversations. You can definitely copy a working one as a base(like a preloaded bot with features )

Thank you @souvikg10 for the answer. It gives me quite the insight needed for the “third” question pointed out.

I would also like to know about the other question… having universal bot which gives constitues different domain bots in One. Is that possible with rasa?

Exactly the issue is we have a client which is having multiple applications namely for insurance, contract management, document extraction and there are bots for each application. Now this client also has a Main Application which relates all the other apps and they want a universal bot on this main website to be answerable about all the other bots in different applications named above. Am I making sense? If Yes, what could be the possible way going forward in this??

i think you can have a multi level bot using Rasa. I would not do it because it typically tends to trickle down the probabilities to different bots unless the Main bot is extremely simple and you can use the Rule Policy to predict the next action. Simple routing towards the different bots works.

Thanks for the response. If my main bot is simple, how could we route towards different bots from one bot? How does the Main bot decides that the question asked is for which subordinate bot because different subordinate bots might have few similar natural language queries ?? Is there any documentation or article on this which you can help me with? @souvikg10 Need your help here.!

Only thing i know is that you could use the Rule Policy in the main to potentially route questions to the different bots. You will rely on a high level NLU classifier to differentiate topics and then potentially route the topic to a particular bot.

1 Like