Skip to content

2puckpich/docsgenie

Repository files navigation

DocsGenie

Python 3.11+ License: MIT FastAPI Docker

AI-powered document search with cited answers — RAG-система для корпоративных документов

DocsGenie превращает любой набор PDF, DOCX и Markdown в умную базу знаний с поиском по смыслу. Задаёте вопрос на русском или английском — получаете точный ответ с указанием конкретного документа и страницы.

DocsGenie — главная страница

Как это работает

graph LR
    A[📄 PDF / DOCX / MD] --> B[Parser]
    B --> C[Chunker<br/>500 tokens]
    C --> D[Gemini<br/>Embeddings]
    D --> E[(ChromaDB<br/>Vector Store)]

    F[❓ Question] --> G[Query Embedding]
    G --> H[Similarity Search]
    E --> H
    H --> I[Top-K Chunks]
    I --> J[Gemini<br/>RAG Answer]
    J --> K[💬 Answer + Sources]
Loading

Система использует двухфазный RAG-пайплайн: при загрузке документы разбиваются на чанки, для каждого создаётся векторное представление через Gemini embeddings и сохраняется в ChromaDB. При запросе — вопрос превращается в вектор, ищутся самые похожие чанки по косинусной близости, и Gemini формирует ответ строго на их основе.

Демо чат-интерфейса

Интерактивное демо: задайте вопрос — получите ответ со ссылками на источники

Возможности

  • Семантический поиск — находит ответы по смыслу, а не по ключевым словам
  • Поддержка форматов — PDF, DOCX, Markdown
  • Цитирование источников — каждый ответ содержит ссылку на документ и страницу
  • Полностью локально — данные не уходят в облако, ChromaDB работает on-prem
  • Двуязычный — корректно работает с русским и английским одновременно
  • REST API — готовая интеграция через FastAPI с автодокументацией
  • CLI-инструмент — управление через командную строку
  • Docker-ready — развёртывание одной командой

Быстрый старт (Docker, 5 минут)

# 1. Клонировать репозиторий
git clone https://github.com/2puckpich/docsgenie.git
cd docsgenie

# 2. Скопировать конфиг и добавить Gemini API ключ
cp .env.example .env
# Получить ключ: https://aistudio.google.com/apikey

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

# 4. Загрузить документ через CLI
docker-compose exec docsgenie docsgenie upload /path/to/Регламент.pdf

# 5. Задать вопрос
docker-compose exec docsgenie docsgenie query "Какой срок рассмотрения заявки?"

CLI: загрузка документа и запрос

CLI показывает полный пайплайн: parsing → chunking → embeddings → ChromaDB → ответ

Установка без Docker

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

# 2. Установить
pip install -e .

# 3. Настроить .env
cp .env.example .env

# 4. Запустить API
docsgenie serve

REST API

После запуска API доступен на http://localhost:8000. Автоматическая документация Swagger UI — на http://localhost:8000/docs.

Swagger UI с эндпоинтами DocsGenie

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

Method Path Описание
POST /api/v1/documents/upload Загрузить документ (multipart/form-data)
GET /api/v1/documents Список всех документов
DELETE /api/v1/documents/{id} Удалить документ
POST /api/v1/query Задать вопрос по документам
GET /api/v1/health Health check

Пример запроса

curl -X POST http://localhost:8000/api/v1/query \
  -H "Content-Type: application/json" \
  -d '{
    "question": "Какой срок рассмотрения заявки?",
    "top_k": 5
  }'

Ответ с источниками

JSON-ответ с цитированием источников

Каждый ответ включает confidence score и массив источников с указанием документа, страницы и релевантного фрагмента

Переменные окружения (.env)

Переменная Описание По умолчанию
GEMINI_API_KEY API-ключ Google Gemini обязательно
GEMINI_CHAT_MODEL Модель для генерации ответов gemini-2.5-flash-lite
GEMINI_EMBEDDING_MODEL Модель для эмбеддингов text-embedding-004
DATABASE_URL URL SQLite БД sqlite:///data/docsgenie.db
CHROMA_PATH Путь к ChromaDB data/chroma
UPLOAD_DIR Папка для загруженных файлов data/uploads
MAX_FILE_SIZE_MB Лимит размера файла 50
TOP_K_RESULTS Количество чанков для контекста 5
CHUNK_SIZE_TOKENS Размер чанка 500
CHUNK_OVERLAP_TOKENS Перекрытие чанков 50
LOG_LEVEL Уровень логирования INFO

CLI-команды

docsgenie serve              # запустить FastAPI сервер
docsgenie upload <file>      # загрузить документ
docsgenie query "<вопрос>"   # задать вопрос
docsgenie list               # список загруженных документов
docsgenie delete <id>        # удалить документ
docsgenie stats              # статистика системы

Команда docsgenie stats

Команда docsgenie stats показывает инвентарь документов, состояние векторного индекса и последние запросы

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

docsgenie/
├── docsgenie/
│   ├── config.py              # pydantic-settings
│   ├── db.py                  # SQLAlchemy модели
│   ├── parser/                # Парсеры документов
│   │   ├── base.py            # Базовый класс
│   │   ├── pdf_parser.py      # pypdf
│   │   ├── docx_parser.py     # python-docx
│   │   └── md_parser.py       # markdown
│   ├── chunker.py             # Разбивка на чанки с overlap
│   ├── embedder.py            # Gemini embeddings
│   ├── vector_store.py        # ChromaDB операции
│   ├── retriever.py           # Similarity search
│   ├── generator.py           # Gemini RAG-генерация
│   ├── pipeline.py            # Оркестратор upload/query
│   ├── api/
│   │   ├── router.py          # FastAPI роутер
│   │   ├── schemas.py         # Pydantic схемы
│   │   └── dependencies.py    # DI
│   ├── cli.py                 # typer CLI
│   └── main.py                # FastAPI entry point
├── tests/
│   ├── test_chunker.py
│   ├── test_retriever.py
│   └── test_api.py
├── data/                      # ChromaDB, uploads, logs (gitignored)
├── docs/screenshots/          # Скриншоты для README
├── Dockerfile
├── docker-compose.yml
├── pyproject.toml
├── requirements.txt
└── .env.example

Технологический стек

  • Python 3.11+ — основной язык
  • FastAPI — REST API с автодокументацией
  • ChromaDB — локальная векторная БД с персистентностью
  • Google Gemini — embeddings (text-embedding-004) + chat (gemini-2.5-flash-lite)
  • SQLAlchemy + Alembic — ORM и миграции
  • pypdf + python-docx — парсинг документов
  • pydantic-settings — типизированный конфиг
  • typer + rich — CLI с красивым выводом
  • structlog — структурированное логирование
  • Docker + docker-compose — контейнеризация
  • pytest + httpx — тестирование

Лицензия

MIT License — см. LICENSE

About

AI-powered document search with RAG, Gemini, and ChromaDB. Ask questions, get cited answers.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors