Платформа для автоматизированного проведения технических собеседований. Система объединяет в себе изолированную среду исполнения кода, нейросетевой анализ сложности алгоритмов и диалогового AI-агента для обеспечения полного цикла оценки кандидата без участия человека.
Проект построен на базе микросервисной логики, разделенной на три ключевых уровня:
- Client Layer: Интерактивная IDE (CodeMirror) и чат-интерфейс на нативном JS/CSS.
- API Layer: Высокопроизводительный бэкенд на FastAPI, управляющий бизнес-логикой и БД.
- Intelligence & Execution Layer:
- Docker Sandbox: Изолированная среда для безопасного запуска кода.
- Neural Scorer: Собственная модель на PyTorch для оценки уровня кода.
- LLM Orchestrator: Агент на базе Llama 3.3 (via Groq) для ведения диалога и фидбека.
Центральным узлом системы является гибридный аналитический движок, сочетающий классический статический анализ, нейронные сети и большие языковые модели.
Для объективной оценки профессионального уровня кода (Junior/Middle/Senior) используется кастомная многослойная перцептронная сеть (MLP).
-
Модель:
ComplexityNet(PyTorch). -
Входные признаки (Feature Engineering):
Loops Count: Количество цикловfor/while.Nesting Depth: Максимальная глубина вложенности блоков (анализ индентации).Recursion Detection: Бинарный признак вызова функции внутри себя.Code Length: Общий объем символов (нормализованный).Complex Builtins: Использование функциональных примитивов (map,zip,lambda,yield).
-
Архитектура:
Linear(5 -> 16) -> ReLU -> Linear(16 -> 8) -> ReLU -> Linear(8 -> 3)
-
Классификация:
Junior: Избыточная сложность при низкой эффективности.Middle: Сбалансированный код, соответствующий стандартам.Senior: Высокая степень оптимизации, использование продвинутых паттернов.
Диалоговая подсистема использует модель Llama-3.3-70b через API Groq для обеспечения минимальной задержки (ultra-low latency).
- Функции агента:
- Context-Aware Chat: Ответы на вопросы кандидата с учетом текущей задачи и написанного кода.
- Hint System: Предоставление наводящих подсказок без раскрытия прямого решения (Zero-Shot Chain of Thought).
- Qualitative Feedback: Сопоставление результатов тестов Docker и вердикта нейросети PyTorch для формирования текстового отчета.
При завершении тестов запускается пайплайн:
- Docker Execution: Проверка корректности (Boolean: Pass/Fail).
- PyTorch Prediction: Оценка структурного уровня (Categorical: Level).
- LLM Synthesis: Генерация вердикта (Textual: Recommendation).
- Framework: FastAPI.
- Database: SQLite + SQLAlchemy (ORM).
- Containerization: Docker (индивидуальные образы
sandbox-python,sandbox-cpp). - Security: Ограничение ресурсов (CPUs=0.5, Memory=256m) и запрет сетевого доступа для контейнеров.
- Core: PyTorch 2.0+.
- Inference: CPU-optimized tensors.
- LLM Provider: Groq Cloud SDK (OpenAI Compatible).
- Editor: CodeMirror 5 (с поддержкой Python, C++, Java).
- Reporting: HTML2PDF для генерации официальных сертификатов/отчетов.
Для защиты системы от вредоносного кода (RCE) используется многоуровневая изоляция:
- Слой 1 (Docker): Код кандидата выполняется в контейнере без доступа к интернету (
--network none). - Слой 2 (Resource Limits): Жесткие лимиты на PIDs (64) для защиты от Fork-бомб.
- Слой 3 (Anti-Cheat): Встроенный JS-обработчик событий
mouseoutиvisibilitychange, блокирующий интерфейс при попытке переключения окон или выхода курсора за пределы IDE.
# Обучение классификатора
python backend/train_ai.pyПерейдите в папку docker-images и соберите оттуда:
cd backend\app\problems_manager\code_run_and_check\docker-images
docker build -t sandbox-cpp:latest -f cpp/Dockerfile .
docker build -t sandbox-python:latest -f python/Dockerfile .
Перейдите в папку backend и создайте там .env с вашим ключом:
GROQ_API_KEY=<key>
python3 -m venv venv
source venv/bin/activate
pip install -r backend/requirements.txt
cd backend
uvicorn app.main:app --reload --port 5000
cd frontend
python3 -m http.server 5500
site: http://127.0.0.1:5500POST /api/run_code: Принимает код, запускает Docker, вызывает PyTorch Ranker и возвращает вердикт LLM.POST /api/chat: Точка входа для диалогового агента. Передает текущийcurrent_state(задачу и код) для контекстуального ответа.