Ассистент с технологией 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-
Подготовьте векторную базу знаний:
- Запустите скрипт создания векторной базы из проекта https://github.com/sysneld1/oblomov-vector-search
-
Скачайте языковую модель:
- Загрузите модель в формате GGUF с Hugging Face
- Рекомендуемая модель: Grok-3-reasoning-gemma3-12B-distilled-HF
- Поместите файл модели в папку
models/
Создайте файл .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.1python main.py============================================================
🤖 Литературный ассистент с 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-функционала
- Векторная база: FAISS с эмбеддингами FRIDA
- Языковая модель: Llama-совместимые модели в формате GGUF
- Поиск: Косинусное сходство с порогом релевантности
- Генерация: 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 # Порог релевантности
}- Скачайте модель в формате GGUF
- Укажите путь в
.envфайле - При необходимости измените параметры загрузки в
main.py
-
Недостаточно памяти:
# Уменьшите количество GPU слоев n_gpu_layers=32 # вместо 47. Нужно принимать во внимание, что это увеличит время генерации ответов
-
Медленная генерация:
# Увеличьте количество CPU потоков n_threads=8 -
Низкая точность ответов:
- Увеличьте
k_documents(5-7) - Уменьшите
temperature(0.05-0.1)
- Увеличьте
- Точность ответов: 85-95% (зависит от качества данных)
- Скорость ответа: 3-15 секунд
- Использование памяти: 8-24 ГБ
- Кэширование: Включите кэширование эмбеддингов
- Квантование: Используйте 4-битные или 8-битные модели
- Балансировка: Оптимальное распределение CPU/GPU нагрузки
Я приветствую вклад в развитие проекта!
- Форкните репозиторий
- Создайте ветку для своей функции
- Внесите изменения
- Создайте Pull Request
- Соответствие PEP 8
- Документация функций
- Тесты для новой функциональности
Этот проект распространяется под лицензией MIT.
- llama.cpp за эффективные LLM
- LangChain за фреймворк RAG
- FAISS за векторный поиск
- Hugging Face за модели и эмбеддинги
- Автор: [Vadim]
- Telegram: t.me/Vad_neld
- GitHub: (https://github.com/sysneld1)
⭐ Если вам понравился проект, поставьте звезду на GitHub! ⭐