Skip to content

Alexman2505/smit_rag

Repository files navigation

RAG-система для анализа технической документации ЛКС

Python Ollama LangChain

Retrieval-Augmented Generation (RAG) система для анализа руководства по эксплуатации линейно-кабельных сооружений (ЛКС) местных сетей связи. Система работает полностью локально, без внешних API, и отвечает на вопросы строго по содержанию документа.

🎯 Возможности

  • Загрузка и парсинг PDF-документов (до 380+ страниц)
  • Разбивка на смысловые фрагменты (chunking) с перекрытием
  • Векторное представление текста через локальные эмбеддинги (Ollama + nomic-embed-text)
  • Гибридный поиск: семантический (FAISS) + по ключевым словам (через обогащение метаданными)
  • Генерация ответов через локальную LLM (Qwen 2.5)
  • Полная локальность — никаких внешних API и ключей

🏗️ Архитектура

  • PDF документ → Чанкинг → Обогащение метаданными → Эмбеддинги → FAISS
  • Вопрос пользователя → Улучшение запроса → Поиск в FAISS → Контекст
  • LLM (Qwen 2.5) → Ответ

📁 Структура проекта и назначение файлов

В проекте несколько Python-скриптов, каждый из которых решает свою задачу. Вот что делает каждый файл:

Файл Назначение Статус
rag_lks.py Основная рабочая версия RAG-системы. Содержит полный пайплайн с обогащением метаданными и поиском пункта 2.1.4. Рекомендуется для демонстрации. ФИНАЛЬНАЯ ВЕРСИЯ
rag_ollama.py Базовая версия RAG на Ollama (без обогащения метаданными). Хорошо работает, но может не находить специфические пункты с номерами. 📦 Базовая версия
rag_hybrid.py Экспериментальная версия с гибридным поиском (BM25 + FAISS). Пытается комбинировать семантический и ключевой поиск, но показала худшие результаты в задаче поиска п. 2.1.4. 🔬 Экспериментальная
rag_grok.py Версия для облачного API Groq (через интернет). Сохранена для справки, но требует API-ключа и не используется в локальной версии. ☁️ Облачная (устарела)
check_models.py Утилита для проверки доступных моделей в Ollama. Полезна при настройке окружения. 🛠️ Вспомогательная

📋 Требования

  • Python 3.10+
  • Ollama (для локального запуска моделей)
  • 8+ GB RAM (для модели qwen2.5:7b) или 4+ GB (для qwen2.5:1.5b)

🚀 Установка

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

git clone https://github.com/yourusername/rag-lks.git
cd rag-lks

2. Установка Python-зависимостей

python -m venv venv
source venv/bin/activate  # Linux/Mac
# или
venv\Scripts\activate     # Windows

pip install -r requirements.txt

3. Установка и запуск Ollama

Скачайте Ollama с официального сайта и установите.

Скачайте необходимые модели:

ollama pull nomic-embed-text   # для эмбеддингов (274 MB)
ollama pull qwen2.5:1.5b       # лёгкая LLM (1 GB)
# или для лучшего качества:
ollama pull qwen2.5:7b         # (4.5 GB)

4. Размещение документа

Положите файл rukovod.pdf в папку docs/ (или измените путь в коде).

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

python rag_lks.py

После запуска задавайте вопросы по документу. Например:

❓ Вопрос: какие марки муфт применяются для восстановления оболочек кабелей с медными жилами?
Система найдёт пункт 2.1.4

🔧 Настройка

Параметр Рекомендации
chunk_size 300-800 для технических текстов
chunk_overlap 10-20% от chunk_size
temperature 0.0-0.3 для фактологических задач
k (количество чанков) 5-10 для больших документов
Модель LLM qwen2.5:7b, llama3.2:3b

🐛 Устранение проблем

ollama: command not found

  • Решение: Добавьте C:\Program Files\Ollama в PATH или перезапустите терминал после установки.

Error: listen tcp 127.0.0.1:11434: bind

  • Решение: Ollama уже запущен. Используйте его или перезапустите.

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

  • Решение: Используйте более лёгкую модель:
  • llm = ChatOllama(model="qwen2.5:1.5b") # вместо 7b

📊 Тестирование качества

Система проходит следующие тесты:

✅ Поиск конкретного пункта 2.1.4 с марками муфт

✅ Ответы строго по контексту (без галлюцинаций)

✅ Понимание технических терминов (рефлектометрия, изоляция, заземление)

About

smit_rag

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages