No description
  • Python 95.4%
  • Shell 3.2%
  • Dockerfile 1.4%
Find a file
2026-05-19 15:55:25 +03:00
app Обновление версии 2026-05-19 15:55:25 +03:00
docs Небольшие изменения в документации 2026-05-19 12:31:36 +03:00
scripts Подготовка в production и сборка контейнера 2026-05-19 12:22:32 +03:00
tests Документация 2026-05-19 13:12:54 +03:00
.dockerignore Подготовка в production и сборка контейнера 2026-05-19 12:22:32 +03:00
.gitignore first commit 2026-05-19 11:13:06 +03:00
.woodpecker.yml Небольшие изменения в документации 2026-05-19 12:31:36 +03:00
docker-compose.yml Подготовка в production и сборка контейнера 2026-05-19 12:22:32 +03:00
Dockerfile Подготовка в production и сборка контейнера 2026-05-19 12:22:32 +03:00
export_model.py first commit 2026-05-19 11:13:06 +03:00
LICENSE first commit 2026-05-19 11:13:06 +03:00
pytest.ini Проверка качества 2026-05-19 11:29:57 +03:00
README.md Документация 2026-05-19 13:12:54 +03:00
requirements.txt Подготовка в production и сборка контейнера 2026-05-19 12:22:32 +03:00

service-ner

Преобразует Markdown-документы в граф знаний (сущности + связи).

Стек: Python 3.13 → FastAPI → onnxruntime → transformers → spaCy

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

# 1. Зависимости
python3 -m venv .venv && source .venv/bin/activate
pip install -r requirements.txt
python -m spacy download ru_core_news_sm en_core_web_sm xx_sent_ud_sm

# 2. NER-модели (ONNX INT8, ~700 МБ)
bash scripts/download_models.sh

# 3. Запуск
python -m app.main

Docker

bash scripts/download_models.sh
docker compose build
docker compose up -d

NER-модели монтируются через volume из ./model/. spaCy-модели встроены в образ.

API

curl -X POST localhost:8000/kg \
  -H 'Content-Type: application/json' \
  -d '{"documents": ["Стив Джобс основал Apple."]}'

Ответ — {documents: [{language, entities: [...], relations: [...]}]}.

Endpoint Описание
POST /kg Извлечение графа знаний
GET /health Healthcheck
GET /metrics Prometheus-метрики
GET /docs Swagger UI (OpenAPI)
GET /openapi.json OpenAPI-спецификация

После запуска интерактивная документация доступна по адресу http://localhost:8000/docs.

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

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

Переменная По умолчанию Описание
MODEL_DIR ./model Директория с ONNX-моделями NER
HOST 0.0.0.0 Адрес привязки сервера
PORT 8000 Порт сервера
LOG_LEVEL info Уровень логирования
MAX_WORKERS 2 Потоков в пуле для CPU-задач
MODEL_CACHE_SIZE 3 Максимум NER-моделей в LRU-кэше
SPACY_MODELS {"ru": "ru_core_news_sm", "en": "en_core_web_sm"} JSON: язык → пакет spaCy
SPACY_FALLBACK xx_sent_ud_sm Универсальный пайплайн spaCy
MAX_CHUNK_CHARS 1200 Максимум символов в чанке
OVERLAP_PCT 0.15 Доля перекрытия при жёстком сплите
OMP_NUM_THREADS 2 Потоков OpenMP для ONNX Runtime
ORT_INTRA_OP_NUM_THREADS 2 Внутренний параллелизм ONNX
# Пример: сменить порт и уровень логирования
HOST=127.0.0.1 PORT=9000 LOG_LEVEL=debug python -m app.main

Тесты

python -m pytest tests/ -v

Документация

Лицензия

MIT. Подробности в LICENSE.