# πŸ€– Agentic RAG β€” Π›ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ AI-ассистСнт с Π±Π°Π·ΠΎΠΉ Π·Π½Π°Π½ΠΈΠΉ ΠŸΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ Π°Π²Ρ‚ΠΎΠ½ΠΎΠΌΠ½Ρ‹ΠΉ AI-Π°Π³Π΅Π½Ρ‚ с RAG (Retrieval-Augmented Generation) для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с вашими Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°ΠΌΠΈ ΠΈ ΠΊΠΎΠ΄ΠΎΠΌ. Π Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π±Π΅Π· ΠΈΠ½Ρ‚Π΅Ρ€Π½Π΅Ρ‚Π°! ## πŸ“‹ ВрСбования - **Python 3.10+** - **Ollama** β€” для запуска LLM локально - **Qdrant** β€” вСкторная Π±Π°Π·Π° Π΄Π°Π½Π½Ρ‹Ρ… (запускаСтся автоматичСски) - ΠžΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Π°Ρ систСма: Linux, macOS, Windows (WSL2 рСкомСндуСтся) ## πŸš€ Установка ### 1. ΠšΠ»ΠΎΠ½ΠΈΡ€ΡƒΠΉΡ‚Π΅ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ ```bash git clone <ваш-Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ> cd <ΠΏΠ°ΠΏΠΊΠ°-ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°> ``` ### 2. УстановитС Ollama ```bash # macOS / Linux curl -fsSL https://ollama.com/install.sh | sh # Windows (Ρ‡Π΅Ρ€Π΅Π· WSL2) # УстановитС WSL2, Π·Π°Ρ‚Π΅ΠΌ слСдуйтС инструкции для Linux ``` ### 3. Π—Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚Π΅ ΠΌΠΎΠ΄Π΅Π»ΠΈ ```bash # LLM модСль (рСкомСндуСтся 3B ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ²) ollama pull llama3.2:3b # МодСль эмбСддингов ollama pull nomic-embed-text ``` ### 4. УстановитС Qdrant ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Qdrant Π² embedded-Ρ€Π΅ΠΆΠΈΠΌΠ΅ (Π±Π°Π·Π° хранится локально Π² ΠΏΠ°ΠΏΠΊΠ΅ `qdrant_data/`). Для Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π½ΡƒΠΆΠ΅Π½ Π±ΠΈΠ½Π°Ρ€Π½ΠΈΠΊ Qdrant. #### Π’Π°Ρ€ΠΈΠ°Π½Ρ‚ А: Π§Π΅Ρ€Π΅Π· Docker (рСкомСндуСтся) ```bash # Π‘ΠΊΠ°Ρ‡Π°ΠΉΡ‚Π΅ Π±ΠΈΠ½Π°Ρ€Π½ΠΈΠΊ Qdrant curl -L https://github.com/qdrant/qdrant/releases/latest/download/qdrant-x86_64-unknown-linux-musl.tar.gz \ | tar -xz # Или для macOS: curl -L https://github.com/qdrant/qdrant/releases/latest/download/qdrant-x86_64-apple-darwin.tar.gz \ | tar -xz # ΠŸΠ΅Ρ€Π΅ΠΌΠ΅ΡΡ‚ΠΈΡ‚Π΅ Π² PATH sudo mv qdrant /usr/local/bin/ ``` #### Π’Π°Ρ€ΠΈΠ°Π½Ρ‚ Π‘: Волько Python (Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π°) Если Π½Π΅ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΡƒΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°Ρ‚ΡŒ Π±ΠΈΠ½Π°Ρ€Π½ΠΈΠΊ, ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Qdrant ΠΊΠ°ΠΊ Python-Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ (трСбуСтся большС рСсурсов): ```bash pip install qdrant[fast] ``` ΠŸΡ€ΠΈ этом Π² ΠΊΠΎΠ΄Π΅ `local_knowledge_base.py` Π½ΡƒΠΆΠ½ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°: ```python # ВмСсто: self.client = QdrantClient(path=persist_dir, prefer_grpc=True) # Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ: self.client = QdrantClient.from_mutable_local(path=persist_dir) ``` #### Π’Π°Ρ€ΠΈΠ°Π½Ρ‚ Π’: Π§Π΅Ρ€Π΅Π· Docker ```bash # Запуск Qdrant Π² ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π΅ docker run -d --name qdrant \ -p 6333:6333 \ -p 6334:6334 \ -v $(pwd)/qdrant_storage:/qdrant/storage \ qdrant/qdrant ``` ПослС запуска ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚Π΅ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Π² `local_knowledge_base.py`: ```python # ВмСсто локального ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ: self.client = QdrantClient(path=persist_dir, prefer_grpc=True) # Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ HTTP ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅: self.client = QdrantClient(host="localhost", port=6333) ``` ### 5. НастройтС Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠ΅ ΠΎΠΊΡ€ΡƒΠΆΠ΅Π½ΠΈΠ΅ (рСкомСндуСтся) ```bash # Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ окруТСния python -m venv venv # Активация (Linux/macOS) source venv/bin/activate # Активация (Windows) venv\Scripts\activate ``` ### 6. УстановитС Python-зависимости ```bash pip install -r requirements.txt ``` ### 7. ЗапуститС Ollama (Ссли Π½Π΅ Π·Π°ΠΏΡƒΡ‰Π΅Π½) ```bash ollama serve ``` ΠžΡΡ‚Π°Π²ΡŒΡ‚Π΅ этот Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π» ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΌ (ΠΈΠ»ΠΈ запуститС Π² Ρ„ΠΎΠ½Π΅). ## ▢️ Запуск ```bash python main.py ``` ПослС запуска ΠΎΡ‚ΠΊΡ€ΠΎΠΉΡ‚Π΅ Π±Ρ€Π°ΡƒΠ·Π΅Ρ€ ΠΏΠΎ адрСсу: **http://localhost:7860** ## πŸ“– ИспользованиС ### Базовая Ρ€Π°Π±ΠΎΡ‚Π° 1. Π’Π²Π΅Π΄ΠΈΡ‚Π΅ ваш запрос Π² тСкстовоС ΠΏΠΎΠ»Π΅ 2. Π’ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅/Π²Ρ‹ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π°Ρ‚Π΅Π»ΡŒ **"Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π±Π°Π·Ρƒ Π·Π½Π°Π½ΠΈΠΉ (RAG)"** 3. НаТмитС **"ΠžΡ‚ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ"** ΠΈΠ»ΠΈ Enter ### Π˜Π½Π΄Π΅ΠΊΡΠ°Ρ†ΠΈΡ Ρ„Π°ΠΉΠ»ΠΎΠ² 1. Π’Π²Π΅Π΄ΠΈΡ‚Π΅ ΠΏΡƒΡ‚ΡŒ ΠΊ ΠΏΠ°ΠΏΠΊΠ΅ с Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°ΠΌΠΈ Π² ΠΏΠΎΠ»Π΅ **"ΠŸΡƒΡ‚ΡŒ ΠΊ ΠΏΠ°ΠΏΠΊΠ΅ с Ρ„Π°ΠΉΠ»Π°ΠΌΠΈ"** 2. НаТмитС ΠΊΠ½ΠΎΠΏΠΊΡƒ **"πŸ“₯ Π˜Π½Π΄Π΅ΠΊΡΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ"** 3. Π”ΠΎΠΆΠ΄ΠΈΡ‚Π΅ΡΡŒ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ индСксации (ΠΈΠ½Π΄ΠΈΠΊΠ°Ρ‚ΠΎΡ€ прогрСсса) #### ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅ΠΌΡ‹Π΅ Ρ‚ΠΈΠΏΡ‹ Ρ„Π°ΠΉΠ»ΠΎΠ² | Π’ΠΈΠΏ | Π Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ | |-----|------------| | PDF | `.pdf` | | ВСкст | `.txt` | | Word | `.docx` | | C++ | `.cpp`, `.hpp`, `.h`, `.cc` | #### Π Π΅ΠΊΠΎΠΌΠ΅Π½Π΄Π°Ρ†ΠΈΠΈ ΠΏΠΎ индСксации - Для C++ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ² ΡƒΠΊΠ°ΠΆΠΈΡ‚Π΅ ΠΊΠΎΡ€Π½Π΅Π²ΡƒΡŽ ΠΏΠ°ΠΏΠΊΡƒ с исходным ΠΊΠΎΠ΄ΠΎΠΌ - Папки `build`, `.git`, `vendor`, `node_modules` автоматичСски ΠΏΡ€ΠΎΠΏΡƒΡΠΊΠ°ΡŽΡ‚ΡΡ - ПослС индСксации ΠΌΠΎΠΆΠ½ΠΎ Π·Π°Π΄Π°Π²Π°Ρ‚ΡŒ вопросы ΠΎ ΠΊΠΎΠ΄Π΅ ### ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ запросов ``` "Объясни ΠΊΠ°ΠΊ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ класс Parser Π² Π·Π°Π³Ρ€ΡƒΠΆΠ΅Π½Π½ΠΎΠΌ ΠΊΠΎΠ΄Π΅" "Найди Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ JSON" "Π‘ΠΏΠ»Π°Π½ΠΈΡ€ΡƒΠΉ ΠΈΠ·ΡƒΡ‡Π΅Π½ΠΈΠ΅ Python Π½Π° мСсяц" "ΠŸΠΎΡΡ‡ΠΈΡ‚Π°ΠΉ: (15 * 4) + (120 / 3)" ``` ## βš™οΈ ΠšΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ ### ИзмСнСниС ΠΌΠΎΠ΄Π΅Π»ΠΈ LLM Π’ Ρ„Π°ΠΉΠ»Π΅ `agent_core.py`: ```python llm = Ollama( model="llama3.2:3b", # Π˜Π·ΠΌΠ΅Π½ΠΈΡ‚Π΅ здСсь temperature=0.1, num_predict=1024, ) ``` ### ИзмСнСниС ΠΌΠΎΠ΄Π΅Π»ΠΈ эмбСддингов Π’ Ρ„Π°ΠΉΠ»Π΅ `agent_core.py`: ```python embeddings = OllamaEmbeddings( model="nomic-embed-text", # Π˜Π·ΠΌΠ΅Π½ΠΈΡ‚Π΅ здСсь ) ``` ### ДоступныС ΠΌΠΎΠ΄Π΅Π»ΠΈ Ollama Бписок доступных ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ: https://ollama.com/library Π Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΠ΅ΠΌΡ‹Π΅ ΠΌΠΎΠ΄Π΅Π»ΠΈ для эмбСддингов: - `nomic-embed-text` (768 dim) β€” ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½Ρ‹Π΅ - `mxbai-embed-large` (1024 dim) β€” Π±ΠΎΠ»Π΅Π΅ ΠΌΠΎΡ‰Π½Ρ‹Π΅ - `bge-m3` (1024 dim) β€” ΠΌΡƒΠ»ΡŒΡ‚ΠΈΡΠ·Ρ‹Ρ‡Π½Ρ‹Π΅ ## πŸ›  УстранСниС ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ ### Ошибка: "connection refused" Ollama Π½Π΅ Π·Π°ΠΏΡƒΡ‰Π΅Π½. ЗапуститС: ```bash ollama serve ``` ### Ошибка: "model not found" МодСль Π½Π΅ Π·Π°Π³Ρ€ΡƒΠΆΠ΅Π½Π°. Π‘ΠΊΠ°Ρ‡Π°ΠΉΡ‚Π΅: ```bash ollama pull llama3.2:3b ollama pull nomic-embed-text ``` ### МСдлСнная Ρ€Π°Π±ΠΎΡ‚Π° - Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ модСль мСньшСго Ρ€Π°Π·ΠΌΠ΅Ρ€Π° (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, `llama3.2:1b`) - Π£ΠΌΠ΅Π½ΡŒΡˆΠΈΡ‚Π΅ `num_predict` Π² настройках LLM - Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ SSD для хранСния Qdrant ### НС Π·Π°Π³Ρ€ΡƒΠΆΠ°ΡŽΡ‚ΡΡ Ρ„Π°ΠΉΠ»Ρ‹ - ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡŒΡ‚Π΅ ΠΏΡƒΡ‚ΡŒ ΠΊ ΠΏΠ°ΠΏΠΊΠ΅ - Π£Π±Π΅Π΄ΠΈΡ‚Π΅ΡΡŒ, Ρ‡Ρ‚ΠΎ Ρƒ прилоТСния Π΅ΡΡ‚ΡŒ ΠΏΡ€Π°Π²Π° Π½Π° Ρ‡Ρ‚Π΅Π½ΠΈΠ΅ - ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡŒΡ‚Π΅, Ρ‡Ρ‚ΠΎ Ρ„Π°ΠΉΠ»Ρ‹ ΠΈΠΌΠ΅ΡŽΡ‚ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅ΠΌΡ‹Π΅ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ ### Ошибка: "Qdrant binary not found" Qdrant Π½Π΅ установлСн. Π‘Π»Π΅Π΄ΡƒΠΉΡ‚Π΅ инструкции Π²Ρ‹ΡˆΠ΅ (Ρ€Π°Π·Π΄Π΅Π» "УстановитС Qdrant"). ### Ошибка: "Failed to connect to Qdrant" ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠ° с ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ ΠΊ Qdrant. ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡŒΡ‚Π΅: - Qdrant Π±ΠΈΠ½Π°Ρ€Π½ΠΈΠΊ установлСн ΠΈ доступСн Π² PATH - ΠŸΡ€Π°Π²Π° Π½Π° запись Π² ΠΏΠ°ΠΏΠΊΡƒ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° (Π½ΡƒΠΆΠ½ΠΎ для создания `qdrant_data/`) ## πŸ“‚ Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° ``` . β”œβ”€β”€ main.py # Π’ΠΎΡ‡ΠΊΠ° Π²Ρ…ΠΎΠ΄Π° β”œβ”€β”€ agent_core.py # Π›ΠΎΠ³ΠΈΠΊΠ° Π°Π³Π΅Π½Ρ‚Π° ΠΈ инструмСнты β”œβ”€β”€ local_knowledge_base.py # Π Π°Π±ΠΎΡ‚Π° с Qdrant β”œβ”€β”€ agentic_rag_interface.py # Gradio-интСрфСйс β”œβ”€β”€ README.md # Π­Ρ‚ΠΎΡ‚ Ρ„Π°ΠΉΠ» └── qdrant_data/ # Π”Π°Π½Π½Ρ‹Π΅ Qdrant (создаётся автоматичСски) ``` ## πŸ“„ ЛицСнзия MIT License