Skip to content

Ассистент с технологией RAG (Retrieval-Augmented Generation) для работы с литературными текстами. Система использует локальную языковую модель и векторную базу знаний для точных ответов на вопросы по литературным произведениям.

Notifications You must be signed in to change notification settings

sysneld1/literary-rag-assistant

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 

Repository files navigation

🤖 Литературный RAG-Ассистент

Ассистент с технологией RAG (Retrieval-Augmented Generation) для работы с литературными текстами. Система использует локальную языковую модель и векторную базу знаний для точных ответов на вопросы по литературным произведениям.

✨ Особенности

  • Полностью локальная работа - не требует интернет-соединения после загрузки моделей
  • Высокая точность - ответы основаны только на предоставленных документах
  • Быстрый поиск - использует FAISS для эффективного векторного поиска
  • Гибкая настройка - возможность изменения параметров в реальном времени
  • Детальная статистика - измерение времени выполнения каждого этапа

🚀 Быстрый старт

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

# Клонирование репозитория
git clone https://github.com/yourusername/literary-rag-assistant.git
cd literary-rag-assistant

# Создание виртуального окружения (опционально)
python -m venv .venv
source .venv/bin/activate  # Linux/Mac
# или
.venv\Scripts\activate     # Windows

# Установка зависимостей
pip install -r requirements.txt

Подготовка данных

  1. Подготовьте векторную базу знаний:

  2. Скачайте языковую модель:

Настройка конфигурации

Создайте файл .env в корневой директории:

# Пути к моделям и данным
MODEL_PATH=models/Grok-3-reasoning-gemma3-12B-distilled-HF.Q8_0.gguf
VECTOR_DB_PATH=data/vector_db/frida_index

# Параметры модели
MODEL_CONTEXT_SIZE=4096
GPU_LAYERS=47
CPU_THREADS=4

# Параметры поиска
DEFAULT_K_DOCUMENTS=3
SIMILARITY_THRESHOLD=0.7

# Параметры генерации
DEFAULT_MAX_TOKENS=2000
DEFAULT_TEMPERATURE=0.1

🎯 Использование

Запуск ассистента

python main.py

Пример работы на локальном компьютере с видеокартой RTX 3090ti 24 Gb

============================================================
🤖 Литературный ассистент с RAG
============================================================
Команды:
  - Введите вопрос для получения ответа
  - Введите 'выход' или 'exit' для завершения
  - Введите 'параметры' для изменения настроек
  - Введите 'статистика' для просмотра статистики
============================================================

[Параметры: документов=3, токенов=2000]

📝 Ваш вопрос: Кто такой Обломов?

============================================================

🔍 Обработка вопроса: 'Кто такой Обломов?'
⏱️  Начало: Поиск релевантных документов
⏱️  Начало: Поиск документов (k=3)
✅ Завершено: Поиск документов (k=3) - 293.68 миллисекунд
📄 Найдено документов: 3/3
✅ Завершено: Поиск релевантных документов - 293.74 миллисекунд
⏱️  Начало: Формирование контекста
✅ Завершено: Формирование контекста - 20.98 микросекунд
⏱️  Начало: Формирование промпта
✅ Завершено: Формирование промпта - 53.17 микросекунд
⏱️  Начало: Генерация ответа моделью
✅ Завершено: Генерация ответа моделью - 21.07 секунд

⏱️  Сводка по времени выполнения:
   • Поиск документов: 293.74 миллисекунд
   • Формирование контекста: 20.98 микросекунд
   • Формирование промпта: 53.17 микросекунд
   • Генерация ответа: 21.07 секунд
   • Скорость генерации: 3.9 слов/сек
   ─────────────────────────────
   • Общее время: 21.37 секунд

❓ Вопрос: Кто такой Обломов?
============================================================

💡 Ответ (3 источников):
----------------------------------------
Обломов — это персонаж, которого упоминают в контексте как друга и товарища литератора. 
По словам Штольца, Обломов был человеком с чистой душой и благородными чертами, но он «пропал»
из-за «обломовщины». В тексте также описывается, что Обломов лежал в постели в Гороховой улице,
был среднего роста, приятной наружности, с отсутствующим взглядом и склонностью к бездействию. 
Его жизнь была обеспечена заботой слуг, которые предугадывали его желания и ухаживали за ним, 
не требуя объяснений. Таким образом, Обломов предстает как символ бездеятельности и зависимости 
от окружающих.
----------------------------------------

📚 Использованные источники (3):
1. F:\vadim\my_projects\Oblomov.txt
   📄 —Ну, ты слышал историю этого нищего? 
     — сказал Штольц своему приятелю.
     —А что это за Илья Ильич, которого он поминал?— спросил литератор.
2. F:\vadim\my_projects\Oblomov.txt
   📄 Спасибо, что ......
3. F:\vadim\my_projects\Oblomov.txt
   📄 Как там отец его, дед, дети, внучата и гости сидели или лежали в ленивом покое, 
   зная, что есть в доме вечно ходящее около них и промышляющее око и неп...
============================================================
⏱️  Время обработки запроса: 21.37 секунд

[Параметры: документов=3, токенов=2000]


📁 Структура проекта

literary-rag-assistant/
├── main.py                    # Основной файл приложения
├── requirements.txt          # Зависимости проекта
├── .env.example              # Пример файла конфигурации
├── README.md                 # Документация
├── models/                   # Папка для языковых моделей
│   └── README.md            # Инструкция по загрузке моделей
├── data/                     # Папка для данных
│   ├── documents/           # Исходные текстовые файлы
│   └── vector_db/           # Векторная база данных
├── scripts/                  # Вспомогательные скрипты
│   ├── create_vector_db.py  # Создание векторной базы
│   └── download_models.py   # Загрузка моделей
└── tests/                   # Тесты
    └── test_rag.py         # Тесты RAG-функционала

⚙️ Технические детали

Архитектура

  1. Векторная база: FAISS с эмбеддингами FRIDA
  2. Языковая модель: Llama-совместимые модели в формате GGUF
  3. Поиск: Косинусное сходство с порогом релевантности
  4. Генерация: Constrained generation с точными инструкциями

Требования к системе

  • ОЗУ: Минимум 16 ГБ (рекомендуется 32 ГБ)
  • VRAM: 8+ ГБ для загрузки модели на GPU. Тестирование проводилось на RTX3090ti 24Gb
  • Хранилище: 10+ ГБ для моделей и данных
  • ПО: Python 3.9+, CUDA 11+ (для GPU)

Производительность

Операция Время (среднее) Ресурсы
Загрузка модели 10-30 сек CPU/GPU
Поиск документов 0.1-0.3 сек CPU
Генерация ответа 2-10 сек GPU
Полный запрос 3-15 сек CPU+GPU

🛠️ Расширенные возможности

Поддерживаемые форматы документов

  • Текстовые файлы (.txt)
  • PDF документы (через дополнительные скрипты)
  • HTML страницы (через дополнительные скрипты)

Настройка параметров

# В файле main.py можно изменить:
DEFAULT_PARAMETERS = {
    'k_documents': 3,      # Количество документов для поиска
    'max_tokens': 2000,    # Максимальная длина ответа
    'temperature': 0.1,    # Температура генерации
    'score_threshold': 0.7 # Порог релевантности
}

Добавление новых моделей

  1. Скачайте модель в формате GGUF
  2. Укажите путь в .env файле
  3. При необходимости измените параметры загрузки в main.py

🔧 Устранение неисправностей

Распространенные проблемы

  1. Недостаточно памяти:

    # Уменьшите количество GPU слоев
    n_gpu_layers=32  # вместо 47. Нужно принимать во внимание, что это увеличит время генерации ответов
  2. Медленная генерация:

    # Увеличьте количество CPU потоков
    n_threads=8
    
  3. Низкая точность ответов:

    • Увеличьте k_documents (5-7)
    • Уменьшите temperature (0.05-0.1)

📈 Производительность и оптимизация

Метрики качества

  • Точность ответов: 85-95% (зависит от качества данных)
  • Скорость ответа: 3-15 секунд
  • Использование памяти: 8-24 ГБ

Оптимизация

  1. Кэширование: Включите кэширование эмбеддингов
  2. Квантование: Используйте 4-битные или 8-битные модели
  3. Балансировка: Оптимальное распределение CPU/GPU нагрузки

🤝 Вклад в проект

Я приветствую вклад в развитие проекта!

  1. Форкните репозиторий
  2. Создайте ветку для своей функции
  3. Внесите изменения
  4. Создайте Pull Request

Требования к коду

  • Соответствие PEP 8
  • Документация функций
  • Тесты для новой функциональности

📄 Лицензия

Этот проект распространяется под лицензией MIT.

🙏 Благодарности

  • llama.cpp за эффективные LLM
  • LangChain за фреймворк RAG
  • FAISS за векторный поиск
  • Hugging Face за модели и эмбеддинги

📞 Контакты


Если вам понравился проект, поставьте звезду на GitHub!

About

Ассистент с технологией RAG (Retrieval-Augmented Generation) для работы с литературными текстами. Система использует локальную языковую модель и векторную базу знаний для точных ответов на вопросы по литературным произведениям.

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages