No description
- Python 95.4%
- Shell 3.2%
- Dockerfile 1.4%
| app | ||
| docs | ||
| scripts | ||
| tests | ||
| .dockerignore | ||
| .gitignore | ||
| .woodpecker.yml | ||
| docker-compose.yml | ||
| Dockerfile | ||
| export_model.py | ||
| LICENSE | ||
| pytest.ini | ||
| README.md | ||
| requirements.txt | ||
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.