Skip to content

ikonushok/RAG_LLM

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

14 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Описание

Документационный чат-бот на локальной LLM. Этот проект представляет Telegram-бота, который отвечает на вопросы по PDF-документации брендов (например, Daichi, Dantex), используя локальную LLM модель и FAISS-индексацию.

🧱 Project Structure

project_folder/
│
├── data/                     # Папка для хранения документов и промежуточных данных
│   └── documents/            # Документы для парсинга (например, PDF)
│   └── indexes/              # Подготовка индексов для различных брендовс помощью функции build_index, 
│                             # используя документы в папке data/documents
│
├── src/                      # Исходный код
│   ├── __init__.py           # Инициализация пакета
│   ├── main.py               # Основной исполнимый скрипт
│   ├── parser.py             # Скрипт для парсинга документов (например, PDF)
│   ├── vectorizer.py         # Скрипт для векторизации текста с помощью модели Sentence-BERT
│   ├── faiss_index.py        # Скрипт для работы с FAISS для хранения и поиска векторных представлений
│   ├── telegram_bot.py       # Скрипт для реализации Telegram-бота
│   ├── llm_integration.py    # Скрипт для интеграции с локальным API (LLM)
│   └── utils.py              # Утилиты, например, для конфигурации или логирования
│
├── requirements.txt          # Файл зависимостей
├── README.md                 # Документация проекта
└── config.yaml               # Конфигурационные файлы (например, для API ключей)


## Установка

1. Клонируйте репозиторий:
   ```bash
   git clone <repository-url>
   cd project_folder
  1. Установите зависимости:

    pip install -r requirements.txt
  2. Локальный запуск

   1.Убедитесь, что у вас есть .pdf файлы в папке data/docs.

   2.Постройте индексы, раскомментировав блок в main.py:
   brands = { "Daichi": "daichi.pdf", "Dantex": "dantex.pdf"}
   for brand, filename in tqdm(brands.items()):
       parser.build_index(brand, f"data/docs/{filename}", output_dir="data/index")

    
   3. Установите зависимости из requirements.txt.

   4.Запустите:
   python main.py

🧰 main.py

Представляет собой основной исполнимый скрипт, который выполняет следующие действия:

  • Подготовка окружения: Подавление предупреждений от библиотек, таких как PyTorch и OpenMP. Настройка переменной окружения для устранения ошибок с MKL.
  • Построение индексов (закомментировано): Необходимо выплнить пр первом запуске Подготовка индексов для различных брендов (например, Daichi, Dantex) с помощью функции build_index, используя документы в папке data/documents.
  • Запуск Telegram-бота: Запускает Telegram-бота, который взаимодействует с пользователем и отвечает на вопросы.
  • Загрузка индекса и текстов: Загружается текст и индекс для выбранного бренда, например Dantex, из файлов, сохраненных в папке data/indexes.
  • Пример запроса: Выполняется пример запроса, например, на тему «Как включить продув испарителя на сплите Dantex RK-24SVGI?» и выводится ответ, полученный через функцию get_llm_answer.
  • Запуск Telegram-бота (закомментировано): Есть возможность запустить Telegram-бота, который взаимодействует с пользователем и отвечает на вопросы.

💾 Технологии

  • Python 3.x: Основной язык программирования для разработки проекта.
  • Sentence-BERT: Модель для векторизации текста, использующая трансформеры для создания эмбеддингов предложений.
  • FAISS: Библиотека для эффективного поиска по векторным данным.
  • Telegram Bot API: Для создания и взаимодействия с Telegram-ботом.
  • PyTorch: Для работы с нейронными сетями и моделями, основанными на трансформерах.
  • Hugging Face Transformers: Для работы с предобученными моделями на основе архитектуры трансформеров в llm_integration.py (если предполагается, что используется эта библиотека для нейронной сети).
  • PDFMiner или PyPDF2 (в зависимости от реализации): Для извлечения текста из PDF-документов.
  • Scikit-learn: Для обработки и манипуляции данными, включая векторизацию.
  • pandas, numpy: Для работы с данными и вычислений.

🤖 Интеграция с нейронной сетью

Скрипт llm_integration.py использует локально развернутую модель OpenHermes для обработки запросов. Модель обучена для работы с текстами и может генерировать ответы на вопросы, используя векторные представления документов. Вот как работает интеграция:

  • Загрузка модели: Модель и токенизатор загружаются с локального пути, что позволяет работать без необходимости обращения к удалённым серверам. Модель использует архитектуру трансформеров и поддерживает выполнение на GPU, если он доступен.
  • Обработка запросов: Когда поступает запрос, система сначала извлекает релевантные фрагменты из индекса FAISS, который был создан на основе векторных представлений текста. Затем на основе этих фрагментов формируется контекст, который передается в модель для генерации ответа.
  • Генерация ответов: Модель генерирует ответ, основываясь на переданном контексте и запросе, используя форматированную строку запроса, которая включает контекст и сам вопрос.

Технологии, используемые в llm_integration.py:

  • PyTorch: Для работы с нейронными сетями.
  • Transformers от Hugging Faceh: Для загрузки и использования модели OpenHermes.
  • FAISS: Для поиска релевантных фрагментов текста, которые используются в качестве контекста для модели.

🤖 Логика работы Telegram-бота

  • Запуск бота: Когда пользователь запускает бота через команду /start, бот выводит клавиатуру с двумя вариантами брендов: Daichi и Dantex. Пользователь выбирает один из брендов для дальнейшего общения.

  • Выбор бренда: После выбора бренда, бот сохраняет состояние пользователя, чтобы запомнить выбранный бренд. Затем бот предлагает пользователю задать вопрос о выбранном бренде.

  • Задание вопроса: После того как пользователь задает вопрос, бот проверяет, был ли выбран бренд. Если бренд не выбран, бот напоминает пользователю выбрать бренд сначала.

  • Ответ на вопрос: Если бренд выбран, бот загружает текст и индекс, связанные с выбранным брендом (например, файлы text_{brand}.pkl и index_{brand}.faiss), использует FAISS для поиска релевантных текстов и передает их в нейронную сеть для генерации ответа. Ответ от модели отправляется пользователю в чате.

Важные моменты:

  • Состояние пользователя: Для каждого чата сохраняется состояние, что позволяет отслеживать выбор бренда и корректно обрабатывать запросы пользователя.

  • FAISS: Для быстрого поиска релевантных фрагментов текста используется индекс FAISS, который работает с векторными представлениями текста.

  • Модель для генерации ответов: Для формирования ответов на вопросы используется функция get_llm_answer, которая извлекает текст из индекса и передает его в модель.

Кодовые блоки:

  • start_bot: Стартовая функция, которая предлагает выбрать бренд.

  • choose_brand: Обработка выбора бренда и переход к следующему этапу.

  • ask_question: Обработка введенного вопроса, извлечение релевантных текстов с помощью FAISS, передача их в модель для генерации ответа и отправка этого ответа пользователю.

💬 Пример диалога

   👤 Пользователь: /start
   🤖 Бот: Про какой бренд вы хотите задать вопрос?
           [ Daichi ]
           [ Dantex ]
   
   👤 Пользователь нажимает: Dantex
   🤖 Бот: Теперь задайте ваш вопрос.
   
   👤 Пользователь: Как включить продув испарителя?
   🤖 Бот: Для включения продува испарителя на Dantex сделайте следующее...

Этот процесс делает взаимодействие с ботом простым и эффективным для получения ответов на вопросы о продукции.

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages