rag-python-rag / README.uk.md
viktor-hirenko
Initial commit: RAG system with local LLM
40e5eae
|
Raw
History Blame Contribute Delete
9.69 kB
# RAG Система - Локальний Q&A для Документів
Локальна система Retrieval-Augmented Generation (RAG) для запитів до документів з використанням open-source LLM. Створена для швидкого прототипування та proof-of-concept розгортань.
## Огляд
Цей проєкт реалізує повний RAG pipeline, який:
- Конвертує документи (PDF, DOCX, TXT) у текст для пошуку
- Розбиває контент на семантичні chunks
- Генерує embeddings за допомогою локальних моделей
- Зберігає вектори в ChromaDB
- Відповідає на запитання використовуючи LLM через Ollama
Система працює повністю локально без зовнішніх API залежностей.
## Можливості
- **Обробка Документів**: Автоматична конвертація PDF, DOCX та TXT файлів
- **Семантичний Пошук**: Vector-based пошук з використанням sentence transformers
- **Локальний LLM**: Генерація відповідей через Ollama (llama3.2 за замовчуванням)
- **Streaming Відповіді**: Генерація відповідей в реальному часі
- **Мультимовність**: Підтримка запитів англійською, українською та російською
- **Веб-Інтерфейс**: UI на базі Gradio для швидкого тестування
## Архітектура
```
┌─────────────┐
│ Документи │
│ (PDF/DOCX) │
└──────┬──────┘
┌─────────────────┐
│ Конвертація │
│ (PyMuPDF) │
└──────┬──────────┘
┌─────────────────┐
│ Розбиття │
│ (LangChain) │
└──────┬──────────┘
┌─────────────────┐ ┌──────────────┐
│ Embeddings │◄─────┤ Запит │
│ (all-MiniLM-L6) │ └──────────────┘
└──────┬──────────┘
┌─────────────────┐
│ ChromaDB │
│ (Vector Store) │
└──────┬──────────┘
┌─────────────────┐
│ Пошук │
│ Контексту │
└──────┬──────────┘
┌─────────────────┐
│ LLM (Ollama) │
│ llama3.2 │
└──────┬──────────┘
┌─────────────────┐
│ Відповідь + │
│ Джерела │
└─────────────────┘
```
## Технологічний Стек
| Компонент | Технологія | Призначення |
|-----------|-----------|-------------|
| Парсинг Документів | PyMuPDF, python-docx | Витягування тексту з файлів |
| Обробка Тексту | LangChain | Розбиття документів з overlap |
| Embeddings | sentence-transformers | Генерація векторних представлень |
| Vector Database | ChromaDB | Зберігання та пошук embeddings |
| LLM Runtime | Ollama | Локальний inference моделей |
| Веб-Інтерфейс | Gradio | UI для швидкого прототипування |
## Вимоги
- Python 3.9+
- Ollama встановлений та запущений
- 4GB+ RAM (рекомендовано 8GB+)
- ~2GB дискового простору для моделей
## Швидкий Старт
### 1. Встановіть Ollama
```bash
# macOS / Linux
curl -fsSL https://ollama.com/install.sh | sh
# Завантажте модель
ollama pull llama3.2
```
### 2. Налаштуйте Python Середовище
```bash
# Клонуйте репозиторій
git clone <repository-url>
cd rag-python-rag
# Створіть віртуальне середовище
python3 -m venv venv
source venv/bin/activate # Windows: venv\Scripts\activate
# Встановіть залежності
pip install -r requirements.txt
```
### 3. Запустіть Застосунок
```bash
python main.py
```
Застосунок:
1. Завантажить тестовий документ (Think Python PDF)
2. Обробить та проіндексує його (~30 секунд)
3. Запустить веб-інтерфейс на `http://localhost:7860`
### 4. Додайте Свої Документи
Помістіть PDF, DOCX або TXT файли в директорію `documents/` та перезапустіть застосунок.
## Конфігурація
Відредагуйте `config.py` для налаштування:
```python
# Модель embeddings
EMBEDDING_MODEL_NAME = "all-MiniLM-L6-v2"
# LLM модель
OLLAMA_MODEL_NAME = "llama3.2"
# Розбиття тексту
CHUNK_SIZE = 1000
CHUNK_OVERLAP = 200
# Результати пошуку
DEFAULT_N_RESULTS = 5
```
### Змінні Середовища
Скопіюйте `.env.example` в `.env` та налаштуйте:
```bash
OLLAMA_HOST=http://localhost:11434
OLLAMA_MODEL=llama3.2
EMBEDDING_MODEL=all-MiniLM-L6-v2
```
## Структура Проєкту
```
rag-python-rag/
├── config.py # Конфігурація
├── document_converter.py # PDF/DOCX в markdown
├── text_splitter.py # Логіка розбиття
├── vector_store.py # Інтерфейс ChromaDB
├── llm_handler.py # Інтеграція Ollama
├── main.py # Точка входу
├── requirements.txt # Python залежності
├── documents/ # Вихідні документи (gitignored)
├── processed_docs/ # Конвертований markdown (gitignored)
└── chroma_db/ # Vector database (gitignored)
```
## Приклади Використання
### Python API
```python
from vector_store import retrieve_context
from llm_handler import stream_llm_answer
# Запит до документів
question = "Як працюють цикли в Python?"
context, sources = retrieve_context(question, n_results=5)
# Stream відповідь
for token in stream_llm_answer(question, context):
print(token, end='', flush=True)
```
### Веб-Інтерфейс
1. Перейдіть на `http://localhost:7860`
2. Введіть запитання будь-якою підтримуваною мовою
3. Перегляньте відповідь з посиланнями на джерела
## Обмеження
Дивіться [LIMITATIONS.md](LIMITATIONS.md) для детальних обмежень включно з:
- Підтримкою мов embedding моделлю
- Обмеженнями форматів документів
- Вимогами до обладнання
- Прогалинами готовності до production
## Розгортання
Це **локальний застосунок**, який потребує Python backend та Ollama runtime.
Дивіться [DEPLOYMENT.md](DEPLOYMENT.md) для опцій розгортання:
- Hugging Face Spaces (рекомендовано для демо)
- Хмарні платформи (Render, Fly.io, Railway)
- Локальне використання
**Примітка**: GitHub Pages та статичний хостинг не підтримуються.
## Roadmap
- [ ] Підтримка Excel та PowerPoint файлів
- [ ] Кешування embeddings для швидшого запуску
- [ ] REST API endpoints
- [ ] Контекст розмови з кількома документами
- [ ] Витягування зображень та таблиць з PDF
- [ ] Docker контейнеризація
## Внесок
Внески вітаються. Будь ласка:
1. Зробіть fork репозиторію
2. Створіть feature branch
3. Надішліть pull request з чітким описом
## Ліцензія
MIT License - дивіться файл LICENSE для деталей.
Цей проєкт призначений для освітніх цілей та прототипування.
## Подяки
Створено з:
- [Ollama](https://ollama.ai/) - Локальний LLM runtime
- [ChromaDB](https://www.trychroma.com/) - Vector database
- [LangChain](https://www.langchain.com/) - Обробка тексту
- [Sentence Transformers](https://www.sbert.net/) - Embeddings
- [Gradio](https://www.gradio.app/) - Веб-інтерфейс
Натхнення: [Побудова RAG Системи за Один Вечір](https://habr.com/ru/articles/955798/)
---
**Статус**: Proof of concept / Освітній проєкт
**Підтримка**: Активна розробка
**Python**: 3.9+