Описание архитектуры программного обеспечения Ассистент ПРО

Компоненты системы RAG для реестра программного обеспечения
1. Общая информация о программном обеспечении
1.1. Наименование программного обеспечения
RAG-система (Retrieval-Augmented Generation) — система интеллектуального поиска и генерации ответов на основе векторных эмбеддингов и больших языковых моделей.
1.2. Объем компьютерной программы
1.2.1. Статистика исходного кода
- Общее количество файлов исходного кода: 161 файл
- Общее количество строк кода: ~89,409 строк (суммарно)
- Распределение по типам файлов:
  - Python файлы (*.py): ~59,522 строк (основной объем, ~66.6%)
  - JavaScript/TypeScript файлы (*.js, *.ts): ~20,372 строк (админ-панель и виджет, ~22.8%)
  - HTML файлы (*.html): ~4,885 строк (~5.5%)
  - CSS файлы (*.css): ~4,630 строк (~5.2%)
  - Конфигурационные файлы (YAML, TOML, JSON): ~500+ строк
1.2.2. Структура кодовой базы
- Основные модули Python: 12 модулей
- Веб-интерфейсы: 2 (админ-панель, виджет)
- Интеграции: 2 (Bitrix24, почта)
- Боты: 2 (Telegram, VK)
- Сервисы: 8 основных сервисов


2. Языки программирования
2.1. Основные языки
2.1.1. Python
- Версия: Python 3.10 - 3.12 (требование: >=3.10,<3.13)
- Использование: 
  - Backend API (FastAPI)
  - Обработка документов и векторизация
  - Интеграция с LLM
  - Фоновые задачи (Celery workers)
  - Боты для мессенджеров
- Процент кодовой базы: ~66.6% (~59,522 строк, основной язык)
2.1.2. JavaScript / TypeScript
- Версия: ES6+ (современный JavaScript)
- Использование:
  - Админ-панель (SPA)
  - Виджет чата для встраивания
  - Клиентская логика веб-интерфейсов
- Процент кодовой базы: ~22.8% (~20,372 строк)
2.1.3. HTML/CSS
- Использование:
  - Разметка веб-интерфейсов
  - Стилизация компонентов
- Процент кодовой базы: ~10.7% (~9,515 строк: HTML ~4,885, CSS ~4,630)
2.2. Языки разметки и конфигурации
- YAML: Docker Compose конфигурации
- TOML: Конфигурация проекта (pyproject.toml)
- JSON: Конфигурации пакетов, метаданные
3. Системы управления базами данных (СУБД)
3.1. MongoDB
- Версия: MongoDB 8.0
- Назначение: 
  - Хранение документов и метаданных
  - История диалогов и сессий
  - Конфигурация проектов (мультитенантность)
  - Пользовательские данные
  - Хранение бинарных файлов через GridFS
- Драйверы:
  - pymongo>=4.13.2 (синхронный)
  - motor>=3.7.1 (асинхронный)
- Коллекции:
  - projects — конфигурация проектов
  - documents — метаданные документов
  - conversations — история диалогов
  - reading_pages — страницы для режима чтения
  - GridFS buckets для бинарных файлов
3.2. Redis
- Версия: Redis 5.0+ (образ: bitnami/redis:latest)
- Назначение:
  - Кэширование результатов поиска
  - Брокер сообщений для Celery
  - Хранение временных данных (сессии, отчеты краулера)
  - Rate limiting
- Библиотека: redis>=5.0.4
- Использование:
  - Кэш векторных поисков (TTL: 86400 секунд)
  - Очередь задач Celery
  - Хранение состояния краулера
3.3. Qdrant
- Версия: Qdrant latest (векторная база данных)
- Назначение: 
  - Хранение векторных эмбеддингов документов
  - Семантический поиск (dense vector search)
  - BM25 полнотекстовый поиск
  - Гибридный поиск (RRF - Reciprocal Rank Fusion)
- Библиотека: qdrant-client>=1.9.0
- Порты:
  - HTTP: 6333 (по умолчанию)
  - gRPC: 6334 (по умолчанию)
- Параметры векторов:
  - Размерность: определяется моделью эмбеддингов
  - Метрика расстояния: COSINE (косинусное расстояние)
  - Индексы: payload индексы для текста и проектов
4. Фреймворки и библиотеки
4.1. Backend фреймворки
4.1.1. FastAPI
- Версия: fastapi>=0.115.14
- Назначение: Асинхронный веб-фреймворк для REST API
- Дополнительные компоненты:
  - fastapi-cli>=0.0.7
  - uvicorn[standard]>=0.35.0 (ASGI сервер)
4.1.2. Celery
- Версия: celery>=5.5.3
- Назначение: 
  - Асинхронная обработка задач
  - Планировщик периодических задач (Celery Beat)
  - Обновление векторного хранилища
  - Резервное копирование
- Брокер: Redis
4.2. Библиотеки для работы с LLM и эмбеддингами
4.2.1. LangChain
- Версии:
  - langchain>=0.3.26
  - langchain-community>=0.3.27
  - langchain-huggingface>=0.1.0
  - langchain-redis>=0.2.3
- Назначение: Оркестрация работы с LLM, цепочки обработки
4.2.2. Sentence Transformers
- Версия: sentence-transformers>=2.7.0
- Назначение: Генерация текстовых эмбеддингов
- Модель: deepvk/USER-bge-m3
4.2.3. PyTorch
- Версия: torch>=2.9.0
- Назначение: 
  - Базовый фреймворк для моделей машинного обучения
  - Поддержка GPU/CPU вычислений
  - Работа с эмбеддингами
4.2.4. Hugging Face Hub
- Версия: huggingface-hub>=0.33.1
- Назначение: Загрузка и управление моделями из Hugging Face
4.3. Библиотеки для обработки документов
- pypdf>=5.7.0 — обработка PDF файлов
- docx2txt>=0.9 — обработка DOCX файлов
- openpyxl>=3.1.5 — обработка Excel файлов (XLSX)
- beautifulsoup4>=4.12,<5 — парсинг HTML
- lxml>=5.2.0 — XML/HTML парсинг
- Pillow>=10.0 — обработка изображений
4.4. Библиотеки для работы с сетью
- aiohttp>=3.9.5 — асинхронные HTTP запросы
- requests>=2.32,<3 — синхронные HTTP запросы
- httpx>=0.28.1 (dev) — тестирование HTTP
4.5. Утилиты и вспомогательные библиотеки
- pydantic-settings>=2.2.1 — управление настройками
- structlog>=24.1.0 — структурированное логирование
- orjson>=3.10.18 — быстрая сериализация JSON
- python-dotenv>=1.0.1 — загрузка переменных окружения
- python-multipart>=0.0.9 — обработка multipart данных
- nltk>=3.8.1 — обработка естественного языка
- prometheus-client>=0.20.0 — метрики для мониторинга
- pynvml>=11.5.0 — мониторинг GPU (NVIDIA)
4.6. Библиотеки для ботов
- aiogram>=3.5.0 — Telegram Bot API
4.7. JavaScript/TypeScript библиотеки
4.7.1. Тестирование
- vitest>=1.6.0 — тестовый фреймворк
- @testing-library/dom>=9.3.1 — тестирование DOM
- @testing-library/user-event>=14.5.2 — симуляция пользовательских событий
- jsdom>=24.0.0 — DOM окружение для тестов
5. Модели машинного обучения и AI
5.1. Модели эмбеддингов (Embeddings)
5.1.1. Основная модель
- Название: deepvk/USER-bge-m3
- Тип: Sentence Transformer
- Назначение: Генерация векторных представлений текста
- Размерность векторов: 1024
- Устройство: CUDA (если доступно) или CPU
- Кэширование: LRU кэш на 128 запросов
5.2. Большие языковые модели (LLM)
5.2.1. Ollama Runtime
- Образ: ollama/ollama:latest
- Назначение: Локальный runtime для запуска GGUF моделей
- Поддержка кластера: Да (через backend.ollama_cluster)
5.2.2. Поддерживаемые модели
- Модель по умолчанию: yandex/YandexGPT-5-Lite-8B-instruct-GGUF:latest (4.5 GB)
- Альтернативные модели:
  - mistral:7b (4.1 GB)
  - llama3.1:8b (4.9 GB)
  - qwen2.5:14b (8.6 GB)
  - phi3:mini (2.7 GB)
5.2.3. Интеграция с внешними LLM
- Поддержка внешних API через backend.llm_client
- Интеграция с YaLLM (Yandex LLM API)
6. Инфраструктура и контейнеризация
6.1. Docker
- Базовый образ: python:3.10-slim
- Multi-stage сборка: Да (build + runtime stages)
- Кэширование: 
  - APT кэш
  - UV кэш для зависимостей
  - Hugging Face кэш для моделей
6.2. Docker Compose
- Файлы конфигурации:
  - compose.yaml — основная конфигурация
  - compose.override.yaml — локальные переопределения
  - compose.gpu.yaml — конфигурация для GPU
- Сервисы:
  - app — FastAPI приложение
  - celery_worker — воркер для фоновых задач
  - celery_beat — планировщик задач
  - mongo — MongoDB
  - redis — Redis
  - qdrant — Qdrant векторная БД
  - ollama — Ollama runtime (опционально)
  - telegram-bot — Telegram бот
6.3. Системные зависимости
- Build stage:
  - build-essential — компилятор и инструменты сборки
  - git — система контроля версий
  - cmake — система сборки
  - ninja-build — система сборки
  - pkg-config — конфигурация пакетов
  - curl — HTTP клиент
  - libopenblas-dev — библиотеки для линейной алгебры
  - python3-dev — заголовки Python
- Runtime stage:
  - libopenblas0-pthread — рантайм библиотеки OpenBLAS
  - curl — для healthcheck
  - ca-certificates — SSL сертификаты
  - MongoDB Database Tools — для резервного копирования


7. Архитектурные компоненты
7.1. RAG Pipeline (Retrieval-Augmented Generation)
7.1.1. Компоненты поиска
1. Векторный поиск (Dense Search)
   - Генерация эмбеддинга запроса
   - Поиск похожих векторов в Qdrant
   - Кэширование результатов в Redis
2. BM25 поиск (Sparse Search)
   - Полнотекстовый поиск по ключевым словам
   - Реализован в Qdrant
3. Reciprocal Rank Fusion (RRF)
   - Объединение результатов векторного и BM25 поиска
   - Константа RRF: 60
   - Сортировка по итоговому score
4. Reranking (опционально)
   - Переранжирование результатов с помощью cross-encoder
7.1.2. Компоненты генерации
1. Инъекция контекста
   - Добавление найденных документов в промпт LLM
   - Форматирование контекста
2. Генерация ответа
   - Запрос к LLM через Ollama или внешний API
   - Стриминг ответа через Server-Sent Events (SSE)
7.2. Обработка документов
7.2.1. Поддерживаемые форматы
- PDF — через PyPDFLoader
- DOCX — через Docx2txtLoader
- TXT — через TextLoader
- XLS/XLSX — через openpyxl и кастомные парсеры
- HTML — через BeautifulSoup и lxml
- Изображения — через Pillow (OCR опционально)
7.2.2. Процесс обработки
1. Загрузка документа
2. Извлечение текста
3. Сегментация текста (при необходимости)
4. Генерация эмбеддингов для сегментов
5. Сохранение в Qdrant с метаданными
6. Сохранение исходного файла в GridFS (MongoDB)
7.3. Краулер веб-сайтов
7.3.1. Компоненты
- Парсинг HTML страниц
- Рендеринг JavaScript (опционально через Playwright)
- Дедупликация URL
- Очистка текста (удаление навигации, футера)
- Сохранение в MongoDB + GridFS
- Отчет о прогрессе в Redis
- Сегментация для режима чтения книг
8. Интеграции
8.1. Bitrix24
- Модуль: integrations/bitrix.py
- Назначение: Интеграция с CRM Bitrix24 через webhooks
- Функции: Получение контекста из Bitrix для ответов
8.2. Почта (Email)
- Модуль: integrations/mail.py
- Назначение: 
  - Получение писем из почтовых ящиков
  - Суммаризация сообщений
  - Отправка ответов
- Протоколы: IMAP/SMTP
8.3. Telegram Bot
- Модуль: tg_bot/
- Библиотека: aiogram 3.5+
- Назначение: Чат-бот для Telegram
8.4. VK Bot
- Модуль: vk_bot/
- Назначение: Чат-бот для ВКонтакте
9. Веб-интерфейсы
9.1. Админ-панель
- Расположение: admin/
- Технологии: Vanilla JavaScript (ES6+)
- Функции:
  - Управление проектами
  - Управление знаниями (документами)
  - Мониторинг системы
  - Управление пользователями
  - Настройки интеграций
  - Статистика и аналитика
9.2. Виджет чата
- Расположение: widget/
- Технологии: Vanilla JavaScript
- Назначение: Встраиваемый виджет для сайтов
- Функции:
  - Чат-интерфейс
  - Голосовой ввод (опционально)
  - Аватар (опционально)
10. Безопасность
10.1. Компоненты безопасности
- Валидация входных данных: Pydantic модели
- Фильтрация вредоносных запросов: Эвристическая проверка промпт-инъекций
- Аутентификация: Поддержка токенов и сессий
- SSL/TLS: Опциональная поддержка HTTPS
- Rate Limiting: Ограничение частоты запросов
10.2. Резервное копирование
- Модуль: backup/service.py
- Инструменты: MongoDB Database Tools (mongodump/mongorestore)
- Хранение: Локальное или удаленное хранилище
11. Мониторинг и логирование
11.1. Логирование
- Библиотека: structlog>=24.1.0
- Формат: Структурированные JSON логи
- Уровни: DEBUG, INFO, WARNING, ERROR
11.2. Метрики
- Библиотека: prometheus-client>=0.20.0
- Метрики: 
  - Производительность API
  - Использование ресурсов
  - Статистика запросов
11.3. Healthchecks
- Эндпоинты: /healthz, /health
- Проверки: 
  - Состояние MongoDB
  - Состояние Redis
  - Состояние Qdrant
  - Состояние Ollama
12. Тестирование
12.1. Backend тестирование
- Фреймворк: pytest>=8.4.1
- Конфигурация: conftest.py
- Покрытие: Unit и интеграционные тесты
12.2. Frontend тестирование
- Фреймворк: vitest>=1.6.0
- Библиотеки: Testing Library
- Окружение: jsdom
12.3. Линтинг и форматирование
- Ruff: ruff>=0.12.1 — линтер и форматтер для Python
13. Системные требования
13.1. Минимальные требования
- CPU: 2+ ядра
- RAM: 8 GB (рекомендуется 16 GB)
- Диск: 50+ GB (для моделей и данных)
- ОС: Linux (рекомендуется), macOS, Windows (с Docker)
13.2. Рекомендуемые требования
- CPU: 4+ ядра
- RAM: 16+ GB
- Диск: 100+ GB SSD
- GPU: Опционально (NVIDIA GPU для ускорения эмбеддингов и LLM)
13.3. Распределение памяти по сервисам
- app (FastAPI): 8 GB лимит, 2 GB резерв
- celery_worker: 4 GB лимит, 1 GB резерв
- celery_beat: 512 MB лимит, 256 MB резерв
- telegram-bot: 1 GB лимит, 256 MB резерв
14. Версионирование и зависимости
14.1. Система управления зависимостями
- UV: Современный менеджер пакетов Python (>=0.8)
- Lock файл: uv.lock — детерминированные версии зависимостей
- Конфигурация: pyproject.toml
14.2. Версия проекта
- Текущая версия: 0.1.1 (из pyproject.toml)
- Версионирование: Семантическое версионирование


15. Лицензии и открытый исходный код
15.1. Основные библиотеки (открытый исходный код)
- FastAPI — MIT
- LangChain — MIT
- Sentence Transformers — Apache 2.0
- PyTorch — BSD-style
- MongoDB — Server Side Public License (SSPL)
- Redis — BSD 3-Clause
- Qdrant — Apache 2.0
- Ollama — MIT
15.2. Модели
- Модели эмбеддингов и LLM могут иметь различные лицензии (требуется проверка для каждой модели)
16. Дополнительные технические детали
16.1. Асинхронность
- Backend: Полностью асинхронный (async/await)
- Event loop: uvloop (опционально, uvloop>=0.17.0)
- ASGI сервер: Uvicorn с поддержкой WebSockets и SSE
16.2. Кэширование
- Redis кэш: 
  - Векторные поиски (TTL: 24 часа)
  - Сессии пользователей
  - Временные данные
- In-memory кэш: LRU кэш для эмбеддингов (128 запросов)
16.3. Масштабируемость
- Горизонтальное масштабирование: 
  - Несколько экземпляров FastAPI приложения
  - Несколько Celery workers
  - Кластер Ollama (поддержка нескольких нод)
- Вертикальное масштабирование: 
  - Увеличение ресурсов контейнеров
  - Использование GPU для ускорения
17. Итоговая сводка компонентов
17.1. Языки программирования
1. Python 3.10-3.12 — основной язык (75% кода)
2. JavaScript (ES6+) — клиентская часть (20% кода)
3. HTML/CSS — разметка и стили (5% кода)
17.2. СУБД
1. MongoDB 8.0 — документная БД
2. Redis 5.0+ — кэш и брокер
3. Qdrant — векторная БД
17.3. Объем программы
- Файлов: 161
- Строк кода: ~89,409 (суммарно)
  - Python: ~59,522 строк (~66.6%)
  - JavaScript/TypeScript: ~20,372 строк (~22.8%)
  - HTML: ~4,885 строк (~5.5%)
  - CSS: ~4,630 строк (~5.2%)
- Модулей Python: 12+
- Веб-интерфейсов: 2
17.4. Ключевые технологии
- FastAPI, Celery, LangChain, Sentence Transformers, PyTorch
- Ollama, Qdrant, MongoDB, Redis
- Docker, Docker Compose
- Hugging Face Hub

Made on
Tilda