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)
git clone https://github.com/yourusername/rag-lks.git
cd rag-lkspython -m venv venv
source venv/bin/activate # Linux/Mac
# или
venv\Scripts\activate # Windows
pip install -r requirements.txtСкачайте 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)Положите файл 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 |
- Решение: Добавьте C:\Program Files\Ollama в PATH или перезапустите терминал после установки.
- Решение: Ollama уже запущен. Используйте его или перезапустите.
- Решение: Используйте более лёгкую модель:
- llm = ChatOllama(model="qwen2.5:1.5b") # вместо 7b
Система проходит следующие тесты:
✅ Поиск конкретного пункта 2.1.4 с марками муфт
✅ Ответы строго по контексту (без галлюцинаций)
✅ Понимание технических терминов (рефлектометрия, изоляция, заземление)