AI-powered document search with cited answers — RAG-система для корпоративных документов
DocsGenie превращает любой набор PDF, DOCX и Markdown в умную базу знаний с поиском по смыслу. Задаёте вопрос на русском или английском — получаете точный ответ с указанием конкретного документа и страницы.
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]
Система использует двухфазный RAG-пайплайн: при загрузке документы разбиваются на чанки, для каждого создаётся векторное представление через Gemini embeddings и сохраняется в ChromaDB. При запросе — вопрос превращается в вектор, ищутся самые похожие чанки по косинусной близости, и Gemini формирует ответ строго на их основе.
Интерактивное демо: задайте вопрос — получите ответ со ссылками на источники
- Семантический поиск — находит ответы по смыслу, а не по ключевым словам
- Поддержка форматов — PDF, DOCX, Markdown
- Цитирование источников — каждый ответ содержит ссылку на документ и страницу
- Полностью локально — данные не уходят в облако, ChromaDB работает on-prem
- Двуязычный — корректно работает с русским и английским одновременно
- REST API — готовая интеграция через FastAPI с автодокументацией
- CLI-инструмент — управление через командную строку
- Docker-ready — развёртывание одной командой
# 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 показывает полный пайплайн: parsing → chunking → embeddings → ChromaDB → ответ
# 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После запуска API доступен на http://localhost:8000. Автоматическая документация Swagger UI — на http://localhost:8000/docs.
| 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
}'Каждый ответ включает confidence score и массив источников с указанием документа, страницы и релевантного фрагмента
| Переменная | Описание | По умолчанию |
|---|---|---|
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 |
docsgenie serve # запустить FastAPI сервер
docsgenie upload <file> # загрузить документ
docsgenie query "<вопрос>" # задать вопрос
docsgenie list # список загруженных документов
docsgenie delete <id> # удалить документ
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





