# 🧠 Векторная память с RAG Гибридная система памяти для ИИ-чата на **SQLite + ChromaDB**. --- ## 📋 Обзор Система использует **двухуровневую архитектуру**: 1. **SQLite** — хранение фактов и истории диалогов 2. **ChromaDB** — векторные эмбеддинги для семантического поиска **Модель эмбеддингов:** `all-MiniLM-L6-v2` - Размер: 90MB - Измерения: 384 - Скорость: ~1000 эмбеддингов/сек на CPU - Потребление памяти: <200MB --- ## 🏗️ Архитектура ``` ┌─────────────────────────────────────────────────────────┐ │ Telegram Bot (bot.py) │ │ │ │ ┌─────────────┐ ┌──────────────┐ ┌───────────┐ │ │ │ handle_ai_ │───▶│ hybrid_ │───▶│ qwen_ │ │ │ │ task() │ │ memory_ │ │ integration│ │ │ └─────────────┘ │ manager │ └───────────┘ │ │ └───────┬──────┘ │ │ ┌────────────────┼────────────────┐ │ │ │ │ │ │ │ ▼ ▼ │ │ │ ┌──────────────────┐ ┌──────────────────┐ │ │ │ │ SQLiteStorage │ │ VectorStorage │ │ │ │ │ (facts, │ │ (ChromaDB, │ │ │ │ │ messages, │ │ sentence- │ │ │ │ │ sessions) │ │ transformers) │ │ │ │ └──────────────────┘ └──────────────────┘ │ │ │ │ │ └────────────────────────────────────────────┼───────────┘ ``` --- ## 🔧 Компоненты ### vector_memory.py **VectorMemoryStorage** — векторное хранилище: - `add_message()` — добавить сообщение с эмбеддингом - `search_similar()` — семантический поиск по запросу - `search_by_session()` — поиск внутри сессии - `get_stats()` — статистика **HybridMemoryManager** — гибридный менеджер: - `add_message()` — сохранение в SQLite + ChromaDB - `search_relevant()` — приоритет векторному поиску, фоллбэк на LIKE - `format_context_for_ai()` — контекст для ИИ с профилем и релевантными сообщениями - `extract_and_save_facts()` — извлечение фактов из сообщений ### memory_system.py **SQLiteMemoryStorage** — реляционное хранилище: - Таблицы: `facts`, `messages`, `sessions` - Поиск через `LIKE` - Извлечение фактов по эвристикам --- ## 📊 Команды ### /memory — Статистика памяти ``` 🧠 Статистика памяти: 📊 Сообщений: 42 📌 Фактов: 5 📁 Сессий: 3 🔮 Векторная память: Документы: 42 Модель: all-MiniLM-L6-v2 Память использует SQLite + ChromaDB с семантическим поиском. ``` --- ## 🚀 Использование ### Сохранение сообщения: ```python from vector_memory import save_message save_message(user_id=123456, role="user", content="Меня зовут Владимир") save_message(user_id=123456, role="assistant", content="Приятно познакомиться!") ``` ### Семантический поиск: ```python from vector_memory import search_memory # Найти сообщения по смыслу (не точное совпадение!) results = search_memory(user_id=123456, query="как настроить сервер", limit=5) for msg, score in results: print(f"{score:.2f}: {msg.content}") ``` ### Контекст для ИИ: ```python from vector_memory import get_context context = get_context(user_id=123456, query="Где мои файлы?") # Включает: # - Профиль пользователя # - Последние 5 сообщений # - Релевантные сообщения по запросу ``` --- ## 📁 Файлы - `vector_memory.py` — векторная память (ChromaDB + sentence-transformers) - `memory_system.py` — SQLite память - `memory.db` — SQLite база данных - `vector_db/` — ChromaDB хранилище --- ## ⚙️ Настройка ### Требования: ```bash pip install chromadb sentence-transformers ``` ### Модель эмбеддингов: По умолчанию используется `all-MiniLM-L6-v2` (лёгкая, быстрая). Для изменения модели: ```python vector_storage = VectorMemoryStorage( persist_directory="./vector_db", model_name="all-mpnet-base-v2" # Более точная, но тяжелее ) ``` **Доступные модели:** - `all-MiniLM-L6-v2` — 90MB, 384 dim (быстрая) - `all-mpnet-base-v2` — 420MB, 768 dim (точная) - `paraphrase-multilingual-MiniLM-L12-v2` — мультиязычная --- ## 🎯 Как работает RAG 1. **Пользователь отправляет сообщение** → сохраняется в SQLite + ChromaDB 2. **ИИ запрашивает контекст** → гибридный менеджер формирует промпт: - Профиль пользователя (факты) - Последние N сообщений - Релевантные сообщения из векторного поиска 3. **ИИ получает контекст** → отвечает с учётом истории **Пример:** ``` User: Помнишь, я спрашивал про настройку nginx? RAG находит: - Сообщение 3-дневной давности про nginx config - Факт: "Использует nginx" ИИ отвечает: "Да, вы спрашивали про настройку nginx. Вот что мы обсуждали..." ``` --- ## 📈 Производительность | Операция | Время | |----------|-------| | Добавление сообщения | ~50ms | | Векторный поиск (5 результатов) | ~100ms | | Извлечение фактов | ~5ms | | Формирование контекста | ~20ms | **Потребление памяти:** - Модель: ~200MB - ChromaDB: ~100-500MB (зависит от количества сообщений) - SQLite: ~10MB - **Итого: <1GB** ✅ --- ## 🔒 Безопасность - Данные хранятся локально - Нет отправки третьим сторонам - Можно удалить: `rm memory.db vector_db/`