When we first read the project description we thought of many different ideas for how to implement wit.ai. ChatBots, Search Engines, text-to-speech, just to name a few. What really helped us narrow down what to do is when we took a second to think about everything going on in the world. We wanted to create something that can actually positively impact the world and that's was the beginning of our chatbot: "healBot".
What it does
healBot is a chatbot designed to help users with mainly medical issues while providing recent statistics on COVID-19 and "what-to-do's". It helps users by giving tips and resources(in the form of links to respectable websites) to lead them on a path to better understanding.
For example, if you were to tell healBot : "I have pain in my back" healBot would say: "Here's some information on back pain https://www.mayoclinic.org/diseases-conditions/back-pain/symptoms-causes/syc-20369906 Here's info on how to treat back pain https://www.webmd.com/back-pain/features/manage-low-back-pain-home Hope this helps! " (There's way more features, depending on the intent of the utterance such as emotion/find/information)
How we built it
We built the front end with Node.js, centering it around the React.js library. The back end was originally also built with Node.js, but we ultimately decided to switch to Python 3 since part of our back end logic had already been built with Python 3. The front end is hosted on Netlify, and the back end is hosted on Heroku. The front and back ends communicate via Socket.IO, which simplifies the information request process. Although Socket.IO is not natively built for Python 3, fortunately, we found a library called Flask-SocketIO which allows us to connect to our front end Socket.IO client.
As for the programming for the chatbot we built it off of the intents we detected from utterances using our trained wit.ai bot. The main intents we trained it to learn were: information, remind, salutation, find, express, and criticism. And with each intent came the specific entities to go with it. We won't go over what every entity was but give a brief rundown of what each intent does:
information: Gives users resources in the forms of links for various topics they might be looking for be it diseases or staying healthy. Also, it provides up to date statistics on COVID-19 and what to do's for COVID-19.
remind: Allows users to tell healBot to set reminders for whatever they need. Whether the user provides a timespan or a set time to be reminded. (Note although we have the chatbot set to respond properly to the remind intent, the actual reminding function has not been implemented yet)
salutation: Simply handles Greetings and Goodbyes, while detecting a name if there is one. find: Provides users with info on nearest open medical facilities, while also providing links if the user is looking for something online that is medical related.
express: Handles when users talk about their emotions or symptoms they might have, giving either advice or links to treat/learn more about the symptoms. criticism: Handles when users talk about the app in either a positive or negative light. We hope that in the future it can save the criticisms given.
Challenges we ran into
One challenge we constantly ran into throughout the development process was having a properly trained wit app. Too many times while training the app about one type of intent/entity it would negatively affect a previously trained entity so we would have to go back and do proper retraining. Specifically, the bot began to mark everything as a reminder entity.
Figuring out how to build the server and client proved to be difficult, as this was both of our first times learning web development. When we had achieved local communication, we thought we were on the brink of success—but little did we know about how difficult deployment would be. We ran into plenty of issues with synchronous processes, timeouts, and unsent requests that would require a full day of debugging. Fortunately, we managed to get past all of those hurdles, and we now have a functional website.
Accomplishments that we're proud of
We are proud of everything we have accomplished as a whole. When first starting out this project we quickly realized how daunting the task was to develop a chatbot with all the features we wanted, being capable of holding up a conversation all presented on a website in the message format. But now with a completed project to present working almost better than expected, we can't help but be proud of everything we accomplished.
What we learned
We learned that when it comes to AI for text it can be very iffy depending on how it is trained, via keywords/synonyms, or just how the way things are spelled. For example since reminders normally have a verb or the word "my" in them a lot of things that weren't reminders began to be marked as reminders. We also learned that creating a website and putting it into production is much more work than it seems.
What's next for healBot
The future of healBot can be refining its features and the wit app behind it. For one, we can implement an actual function for the bot to remind the person. Right now we are able to extract the DateTime from when the user wants to be reminded but turning that data into an actual reminder has not been implemented yet. In addition, in the future, we can also add some sort of database in order for the bot to keep track of who is who, remember names, and other important details. Additionally, we're looking to make improvements to the UI and add some additional functionality to the website.