Skip to main content
Glama
PlVld

Universal Document Vector Search Service

by PlVld

📄 Universal Document Vector Search Service

Микросервис для семантического поиска по документам с поддержкой категорий, версионирования и MCP-интеграцией

Python FastAPI Qdrant License Docker

GitHub Stars GitHub Issues GitHub Discussions

✨ Ключевые возможности

  • 🔍 Семантический поиск — поиск по смыслу текста, а не по ключевым словам

  • 📊 Гибридный поиск — RRF (Reciprocal Rank Fusion) для лучшего качества

  • 📁 Много форматов — PDF, DOCX, TXT, HTML, Markdown, XLSX

  • 🗂️ Категоризация — автоматическая иерархическая система категорий

  • 🔄 Версионирование — отслеживание изменений документов

  • 🤖 MCP Integration — готовая интеграция с AI-ассистентами

  • 🐳 Docker Ready — быстрое развёртывание за 2 минуты

  • 🎨 GPU Acceleration — ускорение через NVIDIA CUDA

📝 О проекте

Этот сервис позволяет загружать документы различных форматов, автоматически извлекать из них текст, разбивать на чанки, создавать векторные представления и выполнять семантический поиск. Результаты можно группировать по категориям и фильтраровать по метаданным.

Проект идеален для:

  • B2B интеграций — поиск по технической документации, инструкциям, базам знаний

  • AI-ассистентов — MCP-протокол для подключения к LLM-ботам

  • Аналитики — категоризация и поиск по большим массивам документов

📸 Скриншоты

Swagger UI документация (добавьте скриншот после запуска: http://localhost:8000/docs)


Related MCP server: context-repo-mcp

📋 Содержание

✨ Возможности

  • Семантический поиск по документам с использованием векторных эмбеддингов

  • Гибридный поиск сweighted RRF (Reciprocal Rank Fusion)

  • Группировка результатов по категориям и коллекциям

  • Поддержка множества форматов: PDF, DOCX, DOC, TXT, HTML, Markdown, XLSX

  • OCR для сканированных документов (Tesseract)

  • Конвертация документов в Markdown через Docling

  • Иерархическая система категорий с несколькими уровнями вложенности

  • Версионирование документов с возможностью доступа к старым версиям

  • MCP (Model Context Protocol) интеграция для AI-ассистентов

  • Docker-развёртывание с поддержкой GPU

  • Аутентификация для API и MCP endpoints

🏗️ Архитектура

┌─────────────────┐      ┌──────────────────┐      ┌──────────────┐
│   AI Client     │◄────►│  RAG Service     │◄────►│   Qdrant     │
│  (MCP/API)      │      │  (FastAPI)       │      │ (Vector DB)  │
└─────────────────┘      └──────────────────┘      └──────────────┘
                                  │
                                  ▼
                          ┌──────────────────┐
                          │  Document Store  │
                          │   (uploads/)     │
                          └──────────────────┘

Основные компоненты:

  • FastAPI — веб-фреймворк для REST API и MCP прокси

  • Qdrant — векторная база данных для хранения и поиска эмбеддингов

  • Sentence Transformers — генерация векторных представлений текста

  • Docling — конвертация документов в структурированный Markdown

  • Tesseract OCR — распознавание текста на изображениях

📦 Требования

Для локальной разработки:

  • Python 3.11+

  • Qdrant (локально или Docker)

  • ~2GB свободного места для моделей эмбеддингов

Для production (Docker):

  • Docker Engine 20.10+

  • Docker Compose v2

  • GPU (опционально, для ускорения работы с эмбеддингами)

⚡ Быстрый старт (2 минуты)

Запуск одним командой

# 1. Клонируйте репозиторий
git clone https://github.com/PlVld/rag-service.git
cd rag-service

# 2. Настройте переменные окружения
cp .env.example .env
# Отредактируйте .env: укажите свой RAG_SERVICE_API_KEY

# 3. Запустите
docker-compose up -d

# 4. Готово! Откройте:
curl http://localhost:8000/health
# http://localhost:8000/docs (Swagger UI)

Подробная инструкция →


🚀 Быстрый старт

1. Клонирование репозитория

git clone <repository-url>
cd rag

2. Настройка переменных окружения

cp .env.example .env

Отредактируйте .env файл, указав необходимые значения:

RAG_SERVICE_API_KEY=your-secret-api-key-here
QDRANT_URL=http://localhost:6333
EMBEDDING_MODEL=BAAI/bge-m3
USE_GPU=false

3. Запуск с Docker Compose

docker-compose up -d

Это запустит:

  • Qdrant на порту 6333

  • RAG Service на порту 8000

4. Проверка работоспособности

# Проверка health check
curl http://localhost:8000/health

# Открытие Swagger UI
# http://localhost:8000/docs

📖 Установка и настройка

Локальная установка (без Docker)

1. Установка зависимостей

# Создание виртуального окружения
python -m venv venv
venv\Scripts\activate  # Windows
source venv/bin/activate  # Linux/Mac

# Установка зависимостей
pip install -r requirements.txt

2. Запуск Qdrant

docker run -d --name qdrant \
  -p 6333:6333 \
  -p 6334:6334 \
  -v ./qdrant_data:/qdrant/storage \
  qdrant/qdrant:latest

3. Запуск приложения

uvicorn app.main:app --host 0.0.0.0 --port 8000 --reload

Использование CPU-only образа

docker-compose -f docker-compose.yml -f Dockerfile.cpu up -d

🌐 REST API

Основные эндпоинты

Документы

Метод

Путь

Описание

POST

/api/documents/upload

Загрузка документа

POST

/api/documents/search

Поиск документов

POST

/api/documents/search/grouped

Группированный поиск

Категории

Метод

Путь

Описание

GET

/api/categories/

Список категорий

POST

/api/categories/search

Поиск категорий

GET

/api/categories/hierarchy

Иерархия категорий

Файлы

Метод

Путь

Описание

POST

/api/files/upload

Загрузка одного файла

POST

/api/files/upload/batch

Пакетная загрузка файлов

Администрирование

Метод

Путь

Описание

POST

/api/admin/collections

Управление коллекциями

POST

/api/admin/index

Создание индексов

POST

/api/admin/hnsw

Настройка HNSW индекса

Интерактивная документация

После запуска откройте:

🔌 MCP Интеграция

Сервис поддерживает Model Context Protocol (MCP) для интеграции с AI-ассистентами.

Доступные инструменты

  1. search_documents_tool — семантический поиск по документам

  2. search_categories_tool — поиск категорий по запросу

  3. get_category_hierarchy_tool — получение иерархии категорий

Подключение

URL: http://localhost:8000/mcp
Method: POST
Content-Type: application/json
Authorization: Bearer <RAG_SERVICE_API_KEY>

Пример вызова (tools/call)

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "search_documents_tool",
    "arguments": {
      "query_text": "настройка векторного поиска",
      "collection_name": "documents",
      "limit": 5
    }
  }
}

Подробная документация по MCP: docs/mcp_tools.md

⚙️ Конфигурация

Все настройки управляются через переменные окружения (файл .env).

Ключевые параметры

Параметр

По умолчанию

Описание

QDRANT_URL

http://localhost:6333

URL Qdrant

QDRANT_API_KEY

API-ключ Qdrant

RAG_SERVICE_API_KEY

API-ключ сервиса (обязательный)

EMBEDDING_MODEL

BAAI/bge-m3

Модель эмбеддингов

USE_GPU

false

Использовать GPU

SERVICE_PORT

8000

Порт сервиса

CHUNK_SIZE

1024

Размер чанка (символы)

CHUNK_OVERLAP

50

Перекрытие чанков

SEMANTIC_WEIGHT

0.3

Вес семантического поиска

CATEGORY_WEIGHT

0.7

Вес категориального поиска

ALLOWED_MCP_TOOLS

Список разрешённых MCP инструментов

Полный список переменных: .env.example

🐳 Развёртывание

Production deployment

  1. Настройте .env для production:

    USE_GPU=true
    LOG_LEVEL=WARNING
    MCP_AUTH_ENABLED=true
  2. Соберите образ:

    docker build -t rag-service:latest -f Dockerfile .
  3. Запустите:

    docker-compose up -d

Horizontal Scaling

Для масштабирования можно запустить несколько инстансов сервиса за load balancer'ом, так как состояние хранится в Qdrant.

Backup

Регулярно бэкапьте:

  • Директорию qdrant_data/ — данные векторной БД

  • Директорию uploads/ — исходные документы

📁 Структура проекта

rag/
├── app/                          # Основной код приложения
│   ├── api/                      # REST API endpoints
│   │   ├── documents.py          # Эндпоинты для документов
│   │   ├── categories.py         # Эндпоинты для категорий
│   │   ├── files.py              # Эндпоинты для файлов
│   │   ├── admin.py              # Админ-эндпоинты
│   │   ├── health.py             # Health check
│   │   └── ...
│   ├── core/                     # Ядро приложения
│   │   ├── config.py             # Конфигурация
│   │   └── embeddings.py         # Работа с эмбеддингами
│   ├── models/                   # Pydantic модели
│   ├── repository/               # Работа с Qdrant
│   ├── text_cleaning/            # Очистка и预处理 текста
│   │   ├── doc_cleaner.py        # Общий cleaner
│   │   ├── pdf_cleaner.py        # PDF специфичный
│   │   ├── markdown_cleaner.py   # Markdown специфичный
│   │   └── ...
│   ├── main.py                   # Точка входа (FastAPI app)
│   └── mcp_server.py             # MCP сервер
├── tests/                        # Тесты
├── docs/                         # Документация
│   ├── api/                      # Документация по API
│   ├── architecture.md           # Архитектура
│   ├── DEPLOYMENT.md             # Развёртывание
│   └── mcp_tools.md              # MCP инструменты
├── uploads/                      # Загруженные документы
├── qdrant_data/                  # Данные Qdrant
├── model_cache/                  # Кэш моделей
├── docker-compose.yml            # Docker Compose конфиг
├── Dockerfile                    # Docker образ (GPU)
├── Dockerfile.cpu                # Docker образ (CPU)
├── requirements.txt              # Зависимости Python
└── .env.example                  # Пример конфигурации

🧪 Тестирование

Запуск всех тестов

pytest

Запуск с покрытием

pytest --cov=app --cov-report=html

Запуск конкретных тестов

# Тесты API документов
pytest tests/test_rest_api_documents.py -v

# Тесты категорий
pytest tests/test_rest_api_categories.py -v

# Тесты MCP сервера
pytest tests/test_mcp_server.py -v

❓ FAQ

Как загрузить документы?

Используйте POST /api/documents/upload или через Swagger UI на http://localhost:8000/docs.

Как искать документы?

POST /api/documents/search с телом запроса:

{
  "query_text": "ваш запрос",
  "limit": 10
}

Как использовать GPU?

  1. Установите NVIDIA Docker runtime

  2. В docker-compose.yml раскомментируйте секцию deploy с GPU

  3. Установите USE_GPU=true в .env

Как сменить модель эмбеддингов?

Укажите другую модель в .env:

EMBEDDING_MODEL=sentence-transformers/paraphrase-multilingual-MiniLM-L12-v2

Как настроить авторизацию?

Установите RAG_SERVICE_API_KEY в .env и передавайте заголовок:

Authorization: Bearer <your-api-key>

🛠️ Tech Stack

Компонент

Технология

Backend

Python 3.11, FastAPI

Vector DB

Qdrant

Embeddings

Sentence Transformers (BAAI/bge-m3)

Document Processing

Docling, LangChain

OCR

Tesseract

Deployment

Docker, Docker Compose, Kubernetes

API

REST + MCP (Model Context Protocol)


🎬 Quick Demo

# Загрузить документ
curl -X POST http://localhost:8000/v1/documents/upload \
  -H "Authorization: Bearer your-api-key" \
  -H "Content-Type: application/json" \
  -d '{"documents": [{"text": "Текст для поиска", "category_path": "Документация"}]}'

# Искать
curl -X POST http://localhost:8000/v1/documents/search \
  -H "Authorization: Bearer your-api-key" \
  -H "Content-Type: application/json" \
  -d '{"query_text": "как искать документы", "limit": 5}'


📄 Лицензия

MIT License


🤝 Вклад в проект

Мы приветствуем contributions! Пожалуйста:

  1. Fork репозитория

  2. Создайте ветку (git checkout -b feature/amazing-feature)

  3. Commit изменения (git commit -m 'Add amazing feature')

  4. Push в ветку (git push origin feature/amazing-feature)

  5. Откройте Pull Request

Подробности в CONTRIBUTING.md


👥 Авторы

Разработано


📬 Контакты

A
license - permissive license
-
quality - not tested
B
maintenance

Maintenance

Maintainers
Response time
Release cycle
Releases (12mo)
Commit activity

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Servers

  • A
    license
    -
    quality
    C
    maintenance
    An MCP server that enables AI assistants to perform semantic searches over local document collections using multi-context organization and automatic OCR. It supports various file formats including PDF, DOCX, and images, ensuring all data processing remains local and private.
    Last updated
    6
    MIT
  • A
    license
    -
    quality
    D
    maintenance
    An MCP server that indexes documents and serves relevant context to LLMs via Retrieval Augmented Generation (RAG).
    Last updated
    34
    36
    MIT
  • A
    license
    -
    quality
    C
    maintenance
    An MCP server that provides tools for retrieving and processing documentation through vector search, enabling AI assistants to augment their responses with relevant documentation context.
    Last updated
    20
    MIT

View all related MCP servers

Related MCP Connectors

  • MCP server for AgentDocs (agentdocs.eu): read, search, write, comment on & share Markdown docs.

  • A comprehensive Model Context Protocol (MCP) server that enables AI assistants to interact with yo…

  • A Model Context Protocol server for Wix AI tools

View all MCP Connectors

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/PlVld/rag-service'

If you have feedback or need assistance with the MCP directory API, please join our Discord server