AI-ассистент по документам
Описание проекта
Разработан веб-портал для интеллектуального поиска по PDF-библиотеке. Система превращает набор книг, регламентов, инструкций, отчётов и методических материалов в удобный каталог с обложками, фильтрами, смысловым поиском и AI-ответами со ссылками на конкретные страницы источников.
Решение работает локально внутри инфраструктуры: PDF-файлы, текст, embeddings, векторная база и ответы не передаются во внешние AI-сервисы. Пользователь задаёт вопрос обычным языком и получает структурированный ответ с указанием документа, автора, страницы и найденного фрагмента.
Моя роль — архитектор и разработчик решения. Я спроектировал архитектуру backend, frontend, векторного поиска и локального AI-контура, настроил обработку PDF, гибридный поиск, интеграцию с Ollama и Qdrant, а также реализовал пользовательский сценарий от загрузки документа до ответа с источниками.
Бизнес-задача
Было:
- Документы хранились в виде разрозненных PDF-файлов
- Поиск нужной информации занимал много времени
- Пользователю приходилось открывать десятки документов вручную
- Поиск работал только по словам, без понимания смысла вопроса
- Не было удобной связи между ответом и конкретной страницей источника
- Передача документов во внешние AI-сервисы была нежелательна из-за конфиденциальности
Задача: Создать локальную AI-библиотеку, которая позволяет быстро искать информацию по большому архиву PDF, получать ответы на естественном языке и сразу переходить к нужной странице документа без передачи данных наружу.
Архитектура решения
Система построена как локальный веб-портал с backend, frontend, очередями обработки, полнотекстовым и векторным поиском. Документы загружаются в систему, проходят обработку, индексируются и становятся доступны для поиска и AI-вопросов.
- Backend: Python 3.12, Django, Django REST Framework
- Frontend: Next.js, React, TypeScript, Tailwind CSS
- Очереди и фоновые задачи: Celery, Redis
- Работа с PDF: PyMuPDF, PDF.js
- База данных: PostgreSQL
- Векторное хранилище: Qdrant
- Embeddings: BAAI/bge-m3
- Локальная LLM: qwen3:14b через Ollama
- Хранение файлов: Docker volumes для PDF и обложек
- Авторизация: JWT
- Администрирование: Django Admin
Логика обработки документа:
- Загрузка PDF вручную, по ссылке или через Яндекс.Диск
- Извлечение текста, метаданных, языка и количества страниц
- Генерация обложки из первой страницы PDF
- Разбиение текста на смысловые фрагменты
- Создание embeddings через BGE-M3
- Сохранение векторов в Qdrant
- Создание полнотекстового индекса в PostgreSQL
- Гибридный поиск по смыслу и ключевым словам
- Формирование AI-ответа через локальную LLM
- Вывод источников, страниц и найденных фрагментов