Комплексная Open-Source платформа для автоматизации технических интервью с использованием AI.
Этот проект представляет собой сложную микросервисную систему, предназначенную для проведения, анализа и оценки собеседований. Она включает в себя транскрипцию речи, семантический анализ, антифрод-механизмы и генерацию ИИ-объяснений для рекрутеров.
Этот проект в первую очередь является демонстрацией масштабируемой, событийно-ориентированной архитектуры и конвейера обработки данных (data pipeline) для сложных AI/ML задач. Фронтенд-часть (UI) является функциональной, но не была в фокусе разработки. Основное внимание уделено бэкенду, микросервисам, инфраструктуре и обработке данных.
- Проведение интервью: Запись аудио и видео кандидатов.
- Авто-транскрипция: Высокоточная расшифровка речи с помощью WhisperX.
- Семантический анализ: Сравнение ответов кандидата с требованиями вакансии через SBERT.
- Классификация: Оценка соответствия кандидата с помощью RuBERT.
- AI-объяснения: Генерация развернутых отчетов для HR с помощью LLM (Mistral-7B).
- Антифрод-система:
- Текст: Детекция текста, сгенерированного ИИ (DetectGPT).
- Видео: Верификация личности и детекция "живости" (DeepFace/MediaPipe).
- Синтез речи: Озвучивание текста на русском языке (Coqui TTS).
- Генерация аватара: Создание анимированного аватара по фото (SadTalker).
Диаграмма ниже иллюстрирует взаимодействие между компонентами системы.
graph TD
A["User"]
subgraph "User Interface"
Frontend["Frontend<br/>(React, Vite)"]
end
subgraph "Core Backend"
Backend["Backend API<br/>(Spring Boot, Java 17)"]
end
subgraph "Data & Messaging"
Postgres[("PostgreSQL")]
Redis[("Redis")]
MinIO[("MinIO S3")]
RabbitMQ[("RabbitMQ")]
end
subgraph "AI/ML Microservices (Python)"
WhisperX["WhisperX<br/>ASR"]
SBERT["SBERT<br/>Embeddings"]
LLM["LLM<br/>Mistral-7B"]
RuBERT["RuBERT<br/>Classifier"]
DetectGPT["DetectGPT<br/>AI Text"]
VideoAntifraud["Video Antifraud<br/>Face/Liveness"]
TTS["Coqui TTS<br/>Speech Synthesis"]
Avatar["SadTalker<br/>Avatar Gen"]
end
subgraph "Monitoring & Observability"
Prometheus["Prometheus"]
Grafana["Grafana"]
ELK["ELK Stack<br/>(Elastic, Logstash, Kibana)"]
end
A --> Frontend
Frontend <--> Backend
Backend --> Postgres
Backend --> Redis
Backend --> MinIO
Backend --> RabbitMQ
Backend --> WhisperX
Backend --> SBERT
Backend --> LLM
Backend --> RuBERT
Backend --> DetectGPT
Backend --> VideoAntifraud
Backend --> TTS
Backend --> Avatar
Backend --> Prometheus
Backend --> ELK
WhisperX --> Prometheus
SBERT --> Prometheus
LLM --> Prometheus
RuBERT --> Prometheus
DetectGPT --> Prometheus
VideoAntifraud --> Prometheus
TTS --> Prometheus
Avatar --> Prometheus
Prometheus --> Grafana
hr-assist/
backend/ # Spring Boot API (Java 17)
frontend/ # React UI (TypeScript, Vite)
avatar-service/ # SadTalker аватар
detectgpt-service/ # DetectGPT антифрод
embed-service/ # SBERT эмбеддинги
llm-service/ # LLM (Mistral-7B)
rubert-service/ # RuBERT анализ текста
tts-service/ # Coqui TTS
video-antifraud-service/ # DeepFace + MediaPipe
whisperx-service/ # ASR (WhisperX)
models/ # ML модели (ONNX, GGUF, etc.)
monitoring/ # Prometheus, Grafana, ELK
helm/ # Helm-чарты для Kubernetes
docker-compose.yml # Оркестрация для локального запуска
Для запуска этого проекта требуется значительный объем ресурсов, особенно при одновременной работе всех ML-сервисов.
- CPU: 4+ ядер (Intel i5 / AMD Ryzen 5)
- RAM: 8+ GB
- Диск: 20 GB свободного места (SSD рекомендуется)
- CPU: 8+ ядер (Intel i7 / AMD Ryzen 7)
- RAM: 16+ GB
- Диск: 50+ GB свободного места (SSD обязательно)
- GPU: NVIDIA RTX 3060+ (опционально, для ускорения ML-моделей)
- CPU: 16+ ядер (Intel i9 / AMD Ryzen 9 / Xeon)
- RAM: 32+ GB
- Диск: 100+ GB NVMe SSD
- GPU: NVIDIA RTX 4080+ / A100 (для ML-ускорения)
- Java 17+
- Node.js 18+
- Docker & Docker Compose
- Git
Убедитесь, что следующие порты свободны на вашей машине:
- Frontend:
3000 - Backend:
8081 - PostgreSQL:
5432 - Redis:
6379 - RabbitMQ:
5672(AMQP),15672(Management UI) - MinIO:
9002(API),9003(Console) - WhisperX:
9100 - SBERT:
8088 - LLM:
8090 - Video Antifraud:
8091 - DetectGPT:
8092 - Avatar:
8093 - TTS:
8094 - RuBERT:
8095 - Prometheus:
9090 - Grafana:
3001 - Elasticsearch:
9200 - Kibana:
5601
| Сервис | CPU (ядра) | RAM (GB) | Время обработки (на CPU) | GPU Ускорение |
|---|---|---|---|---|
| WhisperX | 2-4 | 2-4 | ~2-5 сек / 1 мин аудио | Да |
| SBERT | 1-2 | 1-2 | ~100-500 мс / запрос | Да |
| LLM (Mistral-7B) | 6-8 | 8-12 | ~2-10 сек / запрос | x3-5 |
| RuBERT | 2-4 | 2-4 | ~0.5-2 сек / запрос | Да |
| DetectGPT | 1-2 | 1-2 | ~200-800 мс / запрос | Да |
| Video Antifraud | 4-6 | 4-6 | ~3-8 сек / видео | Рекомендуется |
| TTS (Coqui) | 2-4 | 2-4 | ~1-3 сек / предложение | Нет |
| Avatar (SadTalker) | 4-6 | 4-8 | ~10-30 сек / аватар | Рекомендуется |
# Проверка версий
java -version
node --version
docker --version
docker-compose --version
# Проверка свободного места на диске C:
Get-WmiObject -Class Win32_LogicalDisk -Filter "DeviceID='C:'" | Select-Object @{Name="FreeSpace(GB)";Expression={[math]::Round($_.FreeSpace/1GB,2)}}
# Проверка общего объема RAM
(Get-WmiObject -Class Win32_ComputerSystem).TotalPhysicalMemory / 1GB# Проверка версий
java -version
node --version
docker --version
docker-compose --version
# Проверка свободного места
df -h /
# Проверка RAM
free -h # Linux
sysctl -n hw.memsize | awk '{print $0/1073741824 " GB"}' # macOS
# Проверка количества ядер CPU
nproc # Linux
sysctl -n hw.ncpu # macOSПримечание:
docker-composeпредназначен для быстрой настройки локального dev-окружения. Все сервисы запускаются с профилемdev.
# 1. Клонировать репозиторий
git clone <repository-url>
cd hr-assist
# 2. Создать .env файл из примера
cp env.example .env
# 3. Запустить все сервисы
docker-compose up --build -d
# 4. Проверить статус контейнеров
docker-compose ps- Frontend:
http://localhost:3000 - Backend API:
http://localhost:8081/api/v1 - Swagger UI:
http://localhost:8081/api/v1/swagger-ui/index.html - Grafana:
http://localhost:3001(admin/admin) - Prometheus:
http://localhost:9090 - MinIO Console:
http://localhost:9003(minioadmin/minioadmin) - RabbitMQ:
http://localhost:15672(guest/guest) - Kibana:
http://localhost:5601
- ADMIN:
admin@hr-assistant.com/admin123 - HR:
hr@hr-assistant.com/admin123
# 1. Получить JWT токен
TOKEN=$(curl -s -X POST http://localhost:8081/api/v1/auth/login \
-H "Content-Type: application/json" \
-d '{"email":"admin@hr-assistant.com","password":"admin123"}' | jq -r .token)
# 2. Тест транскрипции
curl -X POST http://localhost:8081/api/v1/asr/transcribe \
-H "Authorization: Bearer $TOKEN" \
-F "file=@path/to/your/test.wav"Примечание: Kubernetes (через Helm) является рекомендуемым способом развертывания системы в production-окружении.
Платформа готова к развертыванию в Kubernetes с помощью предоставленных Helm-чартов.
# Установка
helm install hr-assist ./helm/hr-assist -n hr --create-namespace
# Обновление
helm upgrade hr-assist ./helm/hr-assist -n hrЭтот проект распространяется под лицензией MIT. См. файл LICENSE для получения дополнительной информации.