Skip to content

This project is a Retrieval-Augmented Generation (RAG) chatbot specifically designed to answer Python-related technical questions. The system leverages the Flan-T5 model for language generation, combined with a FAISS-based retrieval mechanism to enhance the quality and relevance of the generated answers by using relevant document context.

Notifications You must be signed in to change notification settings

abuzarkhaaan/RAG-System

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 

Repository files navigation

Python Q&A Chatbot with Retrieval-Augmented Generation (RAG) using Flan-T5

This project is a Retrieval-Augmented Generation (RAG) chatbot specifically designed to answer Python-related technical questions. The system leverages the Flan-T5 model for language generation, combined with a FAISS-based retrieval mechanism to enhance the quality and relevance of the generated answers by using relevant document context. This makes it an ideal assistant for developers and learners looking for precise and contextual answers to their Python-related queries.

Table of Contents


Overview

This project builds an intelligent Q&A system capable of:

  1. Retrieving relevant documents based on a given query.
  2. Generating concise and contextually accurate answers using a fine-tuned T5 model variant, Flan-T5.

The RAG framework enhances answer quality by combining information retrieval with language generation capabilities, allowing for document-based, contextually relevant responses to complex questions. By leveraging a retrieval mechanism, the system ensures that the generated responses are grounded in actual, relevant content, making them more informative and reliable.

This chatbot is optimized for Python-related queries, making it an invaluable tool for developers, students, and educators looking for instant and accurate responses to questions about Python programming. The combination of retrieval and generation models allows for comprehensive responses that are not only factually correct but also highly relevant to the user's context.


Features

  • Retrieval-Augmented Generation: Combines retrieval and generative models to provide accurate, contextually-relevant answers.
  • Simple Query Pipeline: Accepts natural language queries and returns concise, informative answers.
  • Python-Specific Knowledge Base: Optimized to handle Python-related questions and answers, including common programming problems and advanced concepts.
  • GPU-Optimized: Takes advantage of GPU acceleration where available, ensuring faster response times and improved efficiency when generating answers.
  • Interactive and Scalable: The modular design makes it easy to add more data and improve the quality of answers, making it scalable for broader applications.

Architecture

  1. Document Embedding: Documents are embedded into a high-dimensional vector space using pre-trained models, allowing for effective similarity comparison.
  2. Retrieval System (FAISS): The FAISS index retrieves relevant documents based on similarity to the user's query, ensuring that the generation model has contextually rich content to work with.
  3. Generative Model (Flan-T5): The Flan-T5 model generates an answer by conditioning on both the query and the retrieved context, allowing for a more informative and contextually appropriate response.

The architecture is designed to integrate the strengths of retrieval and generation, thereby ensuring that the generated answers are grounded in actual, relevant documents. This hybrid approach significantly improves the quality of responses, especially for complex technical questions that require in-depth explanations.


Setup Instructions

Prerequisites

  • Python 3.8 or higher
  • Hugging Face Transformers, FAISS, and LangChain
  • GPU (optional but recommended for faster generation and enhanced performance)

Installation

  1. Clone the repository

    git clone https://github.com/Musawer1214/python-qa-rag.git
    cd python-qa-rag
  2. Create a virtual environment (optional but recommended)

    python3 -m venv env
    source env/bin/activate  # For Linux/MacOS
    env\Scripts\activate     # For Windows
  3. Install dependencies

    pip install -r requirements.txt
  4. Download the Flan-T5 model (small or base variant for optimal performance):

    from transformers import T5Tokenizer, T5ForConditionalGeneration
    
    model_name = "google/flan-t5-base"  # or "google/flan-t5-small" for smaller usage
    tokenizer = T5Tokenizer.from_pretrained(model_name)
    model = T5ForConditionalGeneration.from_pretrained(model_name)
  5. Set up the FAISS index Follow the code provided in the project to build your FAISS index on your dataset of Python Q&A content. This step involves creating embeddings for your documents and storing them in a FAISS index for efficient retrieval.


Usage

Running a Query

  1. Load the model and tokenizer:

    from transformers import T5Tokenizer, T5ForConditionalGeneration
    
    tokenizer = T5Tokenizer.from_pretrained("google/flan-t5-base")
    model = T5ForConditionalGeneration.from_pretrained("google/flan-t5-base").to("cuda")  # Ensure GPU is enabled if available
  2. Prepare your input question and context documents:

    • Format the input question and document context.
    • Ensure the context is within token limits for accurate results.
  3. Generate the answer: Use the provided pipeline in main.py:

    from transformers import pipeline
    
    generation_pipeline = pipeline(
        "text2text-generation", model=model, tokenizer=tokenizer, device=0, max_new_tokens=100
    )
    
    # Define query and context
    query = "What is a lambda function in Python?"
    context = "A lambda function in Python is an anonymous function that can have any number of arguments but only one expression."
    
    input_text = f"Question: {query} Context: {context}"
    answer = generation_pipeline(input_text)[0]["generated_text"]
    
    print(f"Answer: {answer}")

Example Queries

Try the following queries to test the system:

  • "How do I reverse a list in Python?"
  • "What is a lambda function in Python?"
  • "How can I handle exceptions in Python?"

These example queries demonstrate the chatbot's capability to retrieve and generate informative answers based on real Python programming scenarios, making it a valuable tool for both beginners and advanced users.


Project Structure

python-qa-rag/
├── data/                     # Folder for storing Q&A documents
├── model/                    # Model setup files
├── requirements.txt          # Project dependencies
├── main.py                   # Main script to run the chatbot
├── README.md                 # Project documentation

The project is organized in a way that facilitates easy navigation and modification. The data folder holds the Q&A documents used for retrieval, while the model directory contains the necessary model setup files. The main.py script ties everything together to create the chatbot experience.


Future Enhancements

  1. Fine-tuning Flan-T5: Customize the model further for Python-specific technical jargon to improve the accuracy and depth of the answers.
  2. Expanded Knowledge Base: Incorporate additional Python libraries and frameworks, such as Django, Flask, Pandas, and NumPy, to broaden the scope of the chatbot's knowledge.
  3. Interactive Web Interface: Use tools like Gradio or Streamlit to create a user-friendly web interface for interacting with the chatbot. This would make the system more accessible to users without technical expertise.
  4. Enhanced Retrieval Mechanism: Improve the FAISS retrieval mechanism by incorporating better ranking algorithms to prioritize more relevant documents, ensuring that the generated answers are always based on the most pertinent information.
  5. Multi-Language Support: Extend support to other programming languages, making it a more versatile technical assistant.
  6. Conversational Memory: Implement a memory feature that allows the chatbot to maintain context across multiple queries, making the interaction more conversational and user-friendly.

Acknowledgments

  • Hugging Face for providing pre-trained models and the Transformers library, which serves as the backbone of this project's generative capabilities.
  • Google Research for developing the Flan-T5 model, an advanced language generation model that provides high-quality answers.
  • FAISS for efficient similarity-based document retrieval, enabling the chatbot to quickly find relevant content from the knowledge base.
  • LangChain for providing modular tools that facilitate the integration of retrieval and generation models, helping to streamline the development of RAG systems.

This completes the setup of a Python Q&A chatbot using a Retrieval-Augmented Generation approach. With this system, you have a powerful AI assistant that can help answer your Python-related questions effectively and efficiently. Feel free to experiment, enhance, and expand the capabilities of your chatbot to suit your needs. Enjoy building with AI!

About

This project is a Retrieval-Augmented Generation (RAG) chatbot specifically designed to answer Python-related technical questions. The system leverages the Flan-T5 model for language generation, combined with a FAISS-based retrieval mechanism to enhance the quality and relevance of the generated answers by using relevant document context.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published