A chatbot or conversational agent is a software that can communicate with a person using natural language. Designing dialogue is one of the key challenges in artificial intelligence and natural language processing. Creating effective chatbots has been the most difficult problem for artificial intelligence since its beginning. While chatbots can perform a variety of tasks, their primary objective is to comprehend human language and provide appropriate responses. In the past, chatbot architectures were created using simple statistical methods or manually crafted templates and rules. However, since around 2015, end-to-end neural networks have replaced these models due to their greater learning capabilities. The encoder-decoder recurrent model, which was originally developed for the neural machine translation field and proved highly successful, now dominates conversation modeling. Several enhancements and modifications have been made to chatbots to significantly enhance their conversational abilities up to this point.