Продвинутый ML/NLP сервис для классификации токсичности текста с enterprise архитектурой.
Проект построен на принципах Clean Architecture и Domain-Driven Design (DDD) с четким разделением на слои:
┌─────────────────────────────────────────┐
│ Presentation Layer (API) │ ← FastAPI endpoints
├─────────────────────────────────────────┤
│ Application Layer │ ← Use Cases, Services
├─────────────────────────────────────────┤
│ Domain Layer │ ← Entities, Value Objects, Interfaces
├─────────────────────────────────────────┤
│ Infrastructure Layer │ ← DB, HTTP Clients, Celery
└─────────────────────────────────────────┘
-
Domain Layer (
domain/)- Доменные сущности (Entities)
- Value Objects
- Интерфейсы репозиториев
- Бизнес-логика и правила валидации
-
Application Layer (
application/)- Use Cases (сценарии использования)
- Application Services
- Оркестрация domain и infrastructure слоев
-
Infrastructure Layer (
infrastructure/)- Реализация репозиториев (PostgreSQL)
- HTTP клиенты (httpx)
- Celery tasks
- Dependency Injection контейнер
-
Presentation Layer (
app/api/)- FastAPI endpoints
- Pydantic схемы (DTOs)
- HTTP обработка запросов
- ✅ Clean Architecture - разделение на слои
- ✅ Domain-Driven Design (DDD) - доменные сущности и value objects
- ✅ Repository Pattern - абстракция доступа к данным
- ✅ Use Case Pattern - инкапсуляция бизнес-логики
- ✅ Dependency Injection - управление зависимостями
- ✅ Service Layer Pattern - сервисы приложения
- ✅ CQRS (частично) - разделение команд и запросов
- ✅ PostgreSQL + SQLAlchemy 2.0 (async) + Alembic - БД и миграции
- ✅ Celery + Redis - фоновые задачи
- ✅ Pydantic + dataclass - валидация и схемы данных
- ✅ httpx - HTTP клиенты для внешних API
- ✅ dependency-injector - dependency injection контейнер
- ✅ Poetry - управление зависимостями
- ✅ Docker + Docker Compose - контейнеризация
- Python 3.10+
- Poetry
- Docker и Docker Compose (для запуска через Docker)
- PostgreSQL (для локальной разработки)
- Redis (для Celery)
# Клонирование репозитория
git clone <repository-url>
cd TextGuardAI
# Установка зависимостей
poetry install
# Активация виртуального окружения
poetry shell
# Копирование и настройка переменных окружения
cp env.example .env
# Отредактируйте .env файл с вашими настройками
# Применение миграций БД
alembic upgrade head
# Запуск приложения
uvicorn app.main:app --reload# Запуск всех сервисов
docker-compose up -d
# Просмотр логов
docker-compose logs -f api
# Остановка
docker-compose down
# Остановка с удалением volumes
docker-compose down -vDocker Compose запускает:
- api - FastAPI приложение (порт 8000)
- db - PostgreSQL (порт 5432)
- redis - Redis для Celery (порт 6379)
- celery_worker - Celery worker для фоновых задач
- celery_beat - Celery beat для периодических задач
Конфигурация хранится в:
configs/configs.yml- основная конфигурация (YAML).env- переменные окружения
Переменные окружения (см. env.example):
POSTGRES_*- настройки БДREDIS_*- настройки RedisMODEL_PATH,VECTORIZER_PATH- пути к моделиAPP_ENV,APP_HOST,APP_PORT- настройки приложения
После запуска приложения доступна интерактивная документация:
- Swagger UI: http://localhost:8000/docs
- ReDoc: http://localhost:8000/redoc
POST /api/v1/predict- Предсказание токсичности текстаGET /api/v1/predictions- История предсказаний (с пагинацией)GET /api/v1/predictions/{id}- Получить предсказание по IDGET /health- Health check
# Создание новой миграции
alembic revision --autogenerate -m "Description"
# Применение миграций
alembic upgrade head
# Откат миграции
alembic downgrade -1
# Просмотр текущей версии
alembic currentТаблица predictions:
id(UUID) - уникальный идентификаторtext(TEXT) - исходный текстtoxicity_score(FLOAT) - оценка токсичности (0.0 - 1.0)toxicity_level(VARCHAR) - уровень токсичностиmodel_version(VARCHAR) - версия моделиconfidence(FLOAT) - уверенность моделиprocessing_time_ms(FLOAT) - время обработкиmetadata(JSONB) - дополнительные метаданныеcreated_at(TIMESTAMP) - время создания
# Локально
celery -A infrastructure.celery_app worker --loglevel=info
# Или через скрипт
./scripts/run_celery_worker.shcelery -A infrastructure.celery_app beat --loglevel=infopredict_text_async- асинхронное предсказание токсичностиbatch_predict- батч обработка текстовcleanup_old_predictions- очистка старых предсказаний
# Запуск тестов
pytest
# С coverage
pytest --cov=app --cov=domain --cov=application --cov=infrastructure
# Только unit тесты
pytest tests/unit
# Только integration тесты
pytest tests/integrationTextGuardAI/
├── app/ # Presentation Layer
│ ├── api/
│ │ ├── routes.py # API endpoints
│ │ └── schemas.py # Pydantic схемы (DTOs)
│ └── main.py # FastAPI приложение
├── domain/ # Domain Layer
│ ├── entities.py # Доменные сущности
│ ├── value_objects.py # Value Objects
│ └── repositories.py # Интерфейсы репозиториев
├── application/ # Application Layer
│ ├── use_cases.py # Use Cases
│ ├── services.py # Application Services
│ └── interfaces.py # Интерфейсы сервисов
├── infrastructure/ # Infrastructure Layer
│ ├── database.py # SQLAlchemy настройка
│ ├── models.py # ORM модели
│ ├── repositories.py # Реализация репозиториев
│ ├── dependency_injection.py # DI контейнер
│ ├── http_clients.py # HTTP клиенты
│ ├── celery_app.py # Celery конфигурация
│ └── tasks.py # Celery задачи
├── configs/ # Конфигурация
│ ├── config.py # Загрузка конфигурации
│ └── configs.yml # YAML конфигурация
├── migrations/ # Alembic миграции
├── model/ # ML модель
│ ├── train.py # Обучение модели
│ └── inference.py # Инференс (legacy)
├── scripts/ # Утилиты
├── docker-compose.yml # Docker Compose конфигурация
├── Dockerfile # Docker образ
├── pyproject.toml # Poetry зависимости
├── alembic.ini # Alembic конфигурация
└── README.md # Документация
Этот проект демонстрирует продвинутые концепции для ML/LLM инженеров:
-
Архитектура
- Clean Architecture
- Domain-Driven Design
- Слоистая архитектура
-
Паттерны проектирования
- Repository Pattern
- Use Case Pattern
- Dependency Injection
- Factory Pattern
- Strategy Pattern
-
Технологии
- Async/await в Python
- SQLAlchemy 2.0 (async)
- Alembic миграции
- Celery для фоновых задач
- Pydantic для валидации
- Poetry для управления зависимостями
-
Best Practices
- Type hints
- Docstrings
- Error handling
- Logging (structlog)
- Environment variables
- Docker multi-stage builds
[Указать лицензию]
[Инструкции по вкладу]