Skip to content

LLM Chatbot with Gradio web interface and RAG functionalities

License

Notifications You must be signed in to change notification settings

sergey21000/chatbot-rag

Repository files navigation


RAG Chatbot with Gradio, llama-cpp-python, and Langchain

Hugging Face Spaces Docker Hub

Чат-бот на llama-cpp-python и langchain с веб-интерфейсом на Gradio, использующий механизм RAG для эффективного поиска и генерации ответов

В Google Colab Open in Colab ноутбуке находится код приложения с комментариями

Скриншот главной страницы приложения

Главная страница

Скриншоты интерфейса приложения


📋 Содержание


🚀 Функционал

🧠 Функционал LLM

  • Обычная генерация ответа с использованием моделей в формате GGUF
  • Настройка параметров генерации (temperature, top_k, top_p, repetition_penalty)
  • Возможность редактировать системный промт (если модель его не поддерживает это будет отображено)
  • Выбор количества учитываемых сообщений в истории при подаче запроса пользователя в модель (по умолчанию 0 - не учитывать предыдущую историю переписки)
  • Выбор и загрузка LLM моделей в формате GGUF из репозиториев HuggingFace с индикацией прогресса загрузки и отображением размера файлов
  • Отображение используемой ОЗУ и/или видео памяти и используемого места на диске с возможностью очистки от неиспользуемых Embedding и LLM моделей

📚 Функционал RAG

  • Генерация ответа с использованием механизма RAG, переключение между режимом обычной генерации и RAG (для активации режима RAG необходимо загрузить документы на вкладке Load documents, тогда на странице Chatbot появится переключатель режимов)
  • Выбор и загрузка Embedding моделей из репозиториев HuggingFace
  • Просмотр загруженных текстов из документов
  • Отображение полного запроса пользователя, обогащенного контекстом в режиме RAG
  • Возможность редактировать шаблон промта при условии контекста
  • Поддержка следующих форматов файлов для RAG - csv doc docx html md pdf ppt pptx txt, поддержка передачи ссылок на YouTube для загрузки субтитров к видео, выбор языка субтитров
  • Настройки длины фрагментов текста и длины перекрытия между ними (в символах) (параметры chunk_size и chunk_overlap)
  • Настройка количества релевантных фрагментов, которые будут обогощать запрос пользователя (параметр k)
  • При установке k = all в контекст будут подаваться абсолютно все фрагменты, это может быть актуально при передачи небольших документов
  • Настройка порога для поиска похожих фрагментов текста на запрос пользователя (параметр relevance_scores_threshold, от 0 до 1, возвращать тексты которые похожи на запрос более чем на это число, чем больше тем меньше текстов будет находить)

Загрузка моделей
При первом запуске приложения произойдет загрузка модели LLM gemma-2-2b-it-Q8_0.gguf (2.7GB) в папку ./models, а так же загрузка Embedding модели sergeyzh/rubert-tiny-turbo (117MB) в папку ./embed_models
Изменить модели можно на страницах приложения Load LLM model и Load embed model

Настройка
Установить свой шаблон промта при условии контекста можно в переменной CONTEXT_TEMPLATE в модуле config.py

Проблемы
При деплое на удаленных серверах их IP часто оказываются в черных списках YouTube, поэтому загрузка субтитров для всех видео с YouTube будет показывать статус Invalid video url or current server IP is blocked for YouTube
Подробнее в обсуждении youtube-transcript-api (там же способы обхода, например через прокси)


🛠 Стек

  • python >= 3.10
  • llama-cpp-python для инференса моделей в формате GGUF
  • gradio для написания веб-интерфейса
  • langchain для загрузки текстовых файлов, разделения текстов на фрагменты и векторного хранилища (FAISS)
  • LLM Модель gemma-2-2b-it-Q8_0.gguf в качестве языковой модели по умолчанию
  • Embedding Модель sergeyzh/rubert-tiny-turbo в качестве Embedding модели по умолчанию

Работоспособность приложения проверялась на Ubuntu 22.04 (python 3.10) и Windows 10 (python 3.12)


🐍 Установка и запуск через Python

1) Клонирование репозитория

git clone https://github.com/sergey21000/chatbot-rag.git
cd chatbot-rag

2) Создание и активация виртуального окружения (опционально)

  • Linux

    python3 -m venv env
    source env/bin/activate
    
  • Windows CMD

    python -m venv env
    env\Scripts\activate
    
  • Windows PowerShell

    python -m venv env
    env\Scripts\activate.ps1
    

3) Установка зависимостей

  • С поддержкой CPU
pip install -r requirements-cpu.txt
  • С поддержкой CUDA 12.4
pip install -r requirements-cuda.txt

Для установки llama-cpp-python на Windows с поддержкой CUDA нужно предварительно установить Visual Studio 2022 Community и CUDA Toolkit, как например указано в этой инструкции
Для полной переустановки использовать команду

pip install --force-reinstall --no-cache-dir -r requirements.txt --extra-index-url https://abetlen.github.io/llama-cpp-python/whl/cu124

Инструкции по установке llama-cpp-python и torch для других версий и систем

4) Запуск сервера Gradio

python3 app.py

После запуска сервера перейти в браузере по адресу http://localhost:7860/
Приложение будет доступно через некоторое время (после первоначальной загрузки моделей)


🐳 Установка и запуск через Docker

Для запуска приложения с поддержкой GPU CUDA необходима установка NVIDIA Container Toolkit.

🏃‍ Запуск контейнера из образа Docker HUB

  • С поддержкой CPU

    docker run -it -p 7860:7860 \
      -v ./embed_models:/app/embed_models \
      -v ./models:/app/models \
      --name chatbot-rag \
      sergey21000/chatbot-rag:cpu
    
  • С поддержкой CUDA 12.4

    docker run -it --gpus all -p 7860:7860 \
      -v ./embed_models:/app/embed_models \
      -v ./models:/app/models \
      --name chatbot-rag \
      sergey21000/chatbot-rag:cuda
    

🏗 Сборка своего образа и запуск контейнера

1) Клонирование репозитория

git clone https://github.com/sergey21000/chatbot-rag.git
cd chatbot-rag

2) Сборка образа и запуск контейнера

  • С поддержкой CPU

    Сборка образа

    docker build -t chatbot-rag:cpu -f Dockerfile-cpu .
    

    Запуск контейнера

    docker run -it -p 7860:7860 \
      -v ./embed_models:/app/embed_models \
      -v ./models:/app/models \
      --name chatbot-rag \
      chatbot-rag:cpu
    
  • С поддержкой CUDA

    Сборка образа

    docker build -t chatbot-rag:cuda -f Dockerfile-cuda .
    

    Запуск контейнера

    docker run -it --gpus all -p 7860:7860 \
      -v ./embed_models:/app/embed_models \
      -v ./models:/app/models \
      --name chatbot-rag \
      chatbot-rag:cuda
    

После запуска сервера перейти в браузере по адресу http://localhost:7860/
Приложение будет доступно через некоторое время (после первоначальной загрузки моделей)


Приложение создавалось для тестирования LLM моделей с использованием RAG как любительский проект
Оно написано для демонстрационных и образовательных целей и не предназначалось / не тестировалось для промышленного использования

Лицензия

Этот проект лицензирован на условиях лицензии MIT.

About

LLM Chatbot with Gradio web interface and RAG functionalities

Resources

License

Stars

Watchers

Forks