Go to file
2025-09-11 00:01:51 +05:00
.idea init 2025-08-31 00:23:15 +05:00
app upd pdf service 2025-09-10 23:55:56 +05:00
celery_worker upd pdf service 2025-09-10 23:55:56 +05:00
migrations upd gpt; add pdf generating 2025-09-09 20:26:14 +05:00
rag upd pdf service 2025-09-10 23:55:56 +05:00
scripts updates 2025-09-10 21:41:42 +03:00
static/fonts upd gpt; add pdf generating 2025-09-09 20:26:14 +05:00
templates add vacancy parsing; add generating template pdf from html [wip] 2025-09-08 17:26:12 +05:00
.env.example upd env example 2025-09-11 00:01:51 +05:00
.env.local updates 2025-09-10 21:41:42 +03:00
.gitignore add interview 2025-09-03 14:36:27 +05:00
ai_interviewer_agent.py updates 2025-09-10 21:41:42 +03:00
alembic.ini init 2025-08-31 00:23:15 +05:00
Caddyfile updates 2025-09-10 21:41:42 +03:00
CLAUDE.md Agent lifecycle 2025-09-05 00:31:31 +03:00
docker-compose.yml updates 2025-09-10 21:41:42 +03:00
Dockerfile updates 2025-09-10 21:41:42 +03:00
INTERVIEW_INTEGRATION.md updates 2025-09-10 21:41:42 +03:00
main.py upd gpt; add pdf generating 2025-09-09 20:26:14 +05:00
pyproject.toml upd pdf service 2025-09-10 23:55:56 +05:00
quick_api_test.py Agent lifecycle 2025-09-05 00:31:31 +03:00
README.md upd readme 2025-09-09 21:13:32 +05:00
simple_test.py Agent lifecycle 2025-09-05 00:31:31 +03:00
test_system.py Agent lifecycle 2025-09-05 00:31:31 +03:00
TESTING_GUIDE.md add interview 2025-09-03 14:36:27 +05:00
uv.lock upd pdf service 2025-09-10 23:55:56 +05:00

HR AI Backend

Система автоматического проведения собеседований с помощью ИИ агента. Включает парсинг резюме, проведение голосовых интервью через LiveKit, анализ результатов и генерацию PDF отчетов.

🚀 Основной функционал

📄 Управление резюме

  • Загрузка и парсинг резюме в форматах PDF, DOCX
  • Автоматическое извлечение данных: ФИО, навыки, опыт работы, образование
  • Генерация плана интервью на основе содержания резюме
  • Поиск и фильтрация резюме по различным критериям
  • Векторный поиск с использованием Milvus для семантического поиска

🎯 Управление вакансиями

  • Создание и редактирование вакансий
  • Парсинг вакансий из файлов (txt, docx)
  • Автоматическое сопоставление резюме с вакансиями
  • Ранжирование кандидатов по соответствию вакансии

🎤 AI-собеседования

  • Голосовые интервью с использованием LiveKit и OpenAI
  • Адаптивный AI-интервьюер "Стефани" с русскоязычным интерфейсом
  • Автоматическая генерация вопросов под конкретного кандидата
  • Реальное время распознавание речи и синтез голоса
  • Трекинг времени и прогресса интервью

📊 Анализ и отчетность

  • Автоматический анализ интервью с помощью GPT-4
  • Комплексная оценка по 5 критериям:
    • Технические навыки
    • Релевантность опыта
    • Коммуникативные навыки
    • Решение проблем
    • Культурное соответствие
  • Генерация PDF отчетов с детальной оценкой
  • Рекомендации по найму (strongly_recommend/recommend/consider/reject)
  • Аналитика по вакансиям и статистика кандидатов

🔧 Администрирование

  • Мониторинг системы и активных процессов
  • Управление AI агентами (запуск/остановка)
  • Аналитические панели с метриками
  • Логирование и отладка всех процессов

🏗️ Архитектура

Основные компоненты

FastAPI приложение (app/):

  • main.py - точка входа с middleware и настройкой роутеров
  • routers/ - API эндпоинты по доменам (resume, interview, vacancy, admin)
  • models/ - SQLModel схемы базы данных с отношениями
  • services/ - бизнес-логика для обработки сложных операций
  • repositories/ - слой доступа к данным с использованием SQLModel/SQLAlchemy

Фоновая обработка (celery_worker/):

  • celery_app.py - настройка Celery с Redis backend
  • tasks.py - асинхронные задачи для парсинга резюме и анализа
  • interview_analysis_task.py - специализированная задача для анализа интервью

AI система интервью:

  • ai_interviewer_agent.py - голосовой AI агент на базе LiveKit
  • app/services/agent_manager.py - singleton менеджер для управления агентами
  • Агент работает как единый процесс, обрабатывая одно интервью за раз
  • Межпроцессное взаимодействие через JSON файлы команд
  • Автоматический запуск/остановка с жизненным циклом FastAPI

RAG система (rag/):

  • vector_store.py - интеграция с векторной БД Milvus для поиска резюме
  • llm/model.py - интеграция с OpenAI GPT для парсинга и планирования интервью
  • service/model.py - оркестрация RAG сервисов

База данных

Ключевые модели:

  • Resume - резюме кандидатов с статусами парсинга и планами интервью
  • InterviewSession - сессии LiveKit с трекингом AI агента
  • InterviewReport - детальные отчеты по интервью с оценками
  • Vacancy - вакансии с требованиями и описанием
  • Session - управление пользовательскими сессиями через cookies

Статусы:

  • ResumeStatus: pending → parsing → parsed → interview_scheduled → interviewed
  • InterviewStatus: created → active → completed/failed
  • RecommendationType: strongly_recommend/recommend/consider/reject

🛠️ Технологический стек

  • Backend: FastAPI, Python 3.11+
  • База данных: PostgreSQL с asyncpg
  • Кэш и брокер: Redis
  • Векторная БД: Milvus (опционально, есть fallback)
  • Файловое хранилище: S3-совместимое хранилище
  • AI/ML: OpenAI GPT-4, Whisper STT
  • Голосовые технологии: LiveKit, Deepgram, Cartesia, ElevenLabs
  • Очереди: Celery для асинхронных задач
  • PDF генерация: Playwright (заменил WeasyPrint)
  • Контейнеризация: Docker для некоторых сервисов

📦 Установка и запуск

Предварительные требования

  1. Python 3.11+ с uv пакетным менеджером
  2. PostgreSQL (локально или в Docker)
  3. Redis (для Celery и кэширования)
  4. Milvus (опционально, для векторного поиска)
  5. S3-совместимое хранилище (MinIO или AWS S3)

1. Клонирование и зависимости

git clone <repository-url>
cd hr-ai-backend

# Установка зависимостей через uv
uv sync

# Установка Playwright браузеров для PDF генерации
uv run playwright install chromium

2. Настройка окружения

Создайте файл .env на основе .env.example:

cp .env.example .env

Заполните основные переменные:

# База данных
DATABASE_URL=postgresql+asyncpg://user:password@localhost:5432/hr_ai_backend

# Redis
REDIS_URL=redis://localhost:6379/0

# OpenAI API
OPENAI_API_KEY=your-openai-api-key

# LiveKit (для голосовых интервью)
LIVEKIT_URL=ws://localhost:7880
LIVEKIT_API_KEY=your-livekit-key
LIVEKIT_API_SECRET=your-livekit-secret

# S3 хранилище
S3_ENDPOINT_URL=http://localhost:9000
S3_ACCESS_KEY_ID=minioadmin
S3_SECRET_ACCESS_KEY=minioadmin
S3_BUCKET_NAME=hr-ai-files

# Milvus (опционально)
MILVUS_URI=http://localhost:19530

3. Запуск сервисов

# 1. Запуск Redis
docker run -d --name redis -p 6379:6379 redis

# 2. Запуск LiveKit сервера (для интервью)
docker run -d --name livekit \
  -p 7880:7880 -p 7881:7881 \
  livekit/livekit-server --dev

4. Миграции базы данных

# Применить миграции
uv run alembic upgrade head

# Создать новую миграцию (при изменении моделей)
uv run alembic revision --autogenerate -m "описание изменений"

5. Запуск приложения

# FastAPI сервер
uv run fastapi dev main.py

# Celery worker (в отдельном терминале)
uv run celery -A celery_worker.celery_app worker --loglevel=info

База данных

# Новая миграция
uv run alembic revision --autogenerate -m "описание"

# Применить миграции
uv run alembic upgrade head

🎯 Основные API эндпоинты

Резюме

  • POST /api/v1/resume/upload - загрузка резюме
  • GET /api/v1/resume/ - список резюме с фильтрацией
  • GET /api/v1/resume/{id} - получение резюме
  • DELETE /api/v1/resume/{id} - удаление резюме

Вакансии

  • POST /api/v1/vacancy/ - создание вакансии
  • GET /api/v1/vacancy/ - список вакансий
  • POST /api/v1/vacancy/parse - парсинг вакансии из файла

Интервью

  • POST /api/v1/interview/{resume_id}/validate - валидация готовности к интервью
  • POST /api/v1/interview/{resume_id}/token - получение токена LiveKit
  • GET /api/v1/interview/{resume_id}/status - статус интервью

Анализ и отчеты

  • POST /api/v1/analysis/interview-report/{resume_id} - запуск анализа интервью
  • GET /api/v1/analysis/report/{resume_id} - получение отчета
  • POST /api/v1/analysis/generate-pdf/{resume_id} - генерация PDF отчета
  • GET /api/v1/analysis/pdf-report/{resume_id} - скачивание PDF

🔄 Рабочий процесс

1. Обработка резюме

  1. Загрузка файла через /api/v1/resume/upload
  2. Celery задача извлекает текст и парсит данные через OpenAI
  3. Генерируется план интервью под кандидата
  4. Создаются векторные эмбеддинги для поиска
  5. Статус обновляется через enum: parsingparsed

2. Проведение интервью

  1. Валидация готовности через /api/v1/interview/{id}/validate
  2. Получение токена LiveKit для подключения
  3. AI агент автоматически назначается на сессию
  4. Проведение голосового интервью в реальном времени
  5. Сохранение диалога и автоматическое завершение
  6. Статус резюме: interview_scheduledinterviewed

3. Анализ результатов

  1. После завершения интервью запускается анализ через HTTP fallback
  2. GPT-5-mini анализирует диалог по 5 критериям с оценками 0-100
  3. Создается InterviewReport с детальной оценкой
  4. Генерируется рекомендация: strongly_recommend/recommend/consider/reject
  5. При необходимости создается PDF отчет через Playwright

🐛 Отладка и мониторинг

Логирование

  • Все процессы логируются с детальным трейсингом
  • AI агент: отдельный лог файл ai_agent.log
  • Celery worker: стандартный вывод с уровнем INFO
  • FastAPI: встроенное логирование с middleware

Частые проблемы

  1. Агент не запускается: проверьте LiveKit сервер и API ключи
  2. Celery задачи висят: проверьте подключение к Redis
  3. PDF не генерируется: убедитесь что Playwright браузеры установлены
  4. Парсинг не работает: проверьте OpenAI API ключ и квоты

💡 Примечание: Система в активной разработке. AI агент работает как singleton (одно интервью за раз) - это ограничение хакатона, в продакшене можно масштабировать на несколько агентов.