The Nova Poshta RAG project was developed as part of an innovation hackathon organized by Nova Poshta. The goal of this project was to create a robust solution enhancing the Nova Poshta customer experience through advanced tech solutions.
To get started with the project, ensure you have Docker installed on your system. Then, run the following command in the project directory to build and start the container:
docker compose up
After the containers have been successfully started, you can access the project's features through the designated ports communicated in the terminal.
This project encapsulates a set of advanced features aimed at streamlining customer experiences and operational efficiencies, including:
- Streamlit Chat View: An interactive chat interface built with Streamlit, allowing users to engage in real-time conversations.
- Vector DB with Nova Poshta Data: Utilizes a vector database to efficiently manage and query large sets of Nova Poshta data, enhancing search capabilities and response times.
- Speech to Text: Innovative speech recognition features that convert spoken language into written text, facilitating easier communication and documentation.
- Text to Speech: Converts written text into spoken language, making the app more accessible and enhancing user interactions, particularly for users with visual impairments or those who prefer audio feedback.
- Ukrainian Language Support: Fully supports the Ukrainian language for all features, ensuring that local users can interact with the system in their native language, enhancing usability and user satisfaction.
ChromaDB is the vector storage system that we utilize in this project. It brings efficiency and performance in managing and processing our vector data.
LangChain is the backbone of our framework, empowering us to build the project structure in an organized and flexible manner. It also equips us with functionalities to incorporate various features easily.
Our language model backend supports the use of GPT-3.5-turbo. Its advanced machine learning capabilities create a powerful AI system capable of understanding and interacting with the user at an elevated level.
For the conversion of speech into text, we've integrated technologies suitable for different languages for optimal results.
-
Ukrainian (uk): SqueezeFormer SqueezeFormer is used for Ukrainian speech, which provides accurate transcription even in noisy environments and across various speakers.
-
English (en): FastConformer FastConformer, employed for English speech processing, assures a fast and precise automatic conversion of spoken words to written format.
For translating text to speech, we use the following technology depending on the language context:
- Ukrainian & English (uk, en): Balacoon Balacoon allows seamless transformation of text into natural-sounding speech in both Ukrainian and English languages. It serves to make our system increasingly interactable and user-friendly.
Our workflow is designed to deliver a seamless user experience and is structured as follows:
-
Document Indexing: We begin by indexing documents from the Nova Poshta website to ChromaDB. This step allows us to efficiently store, manage, and retrieve the required information.
-
User Input: The user has the option to either write text or use voice input. This flexibility enables a more convenient and personalized interaction.
-
Semantic Search: The system conducts a semantic search based on the user's input. By understanding the context beyond just keywords, it aims to fetch the most accurate results.
-
Preparing and Waiting for LLM Prompt Output: Then, the system prepares the LLM prompt and waits for the output. Using the power of GPT-3.5-turbo, the LLM backend generates a context-aware response.
-
Returning Result to Chat: The response generated by the system is then returned to the chat. This ensures direct communication and rapid feedback for the user.
-
Text-to-Speech Option: For users who prefer an audible response, we also provide a text-to-speech feature, with high-quality voice synthesis powered by Balacoon.
This streamlined workflow ensures rapid processing of user input, delivering accurate and context-aware results, thus enhancing the user's overall experience with the system.