HR-агентство собирает резюме и вакансии в Telegram вперемешку форматов (текст, PDF, DOCX, фото, скан). Ручной разбор и сопоставление каждого резюме с вакансиями не масштабируется: фото/сканы не ищутся, дубли из пересекающихся каналов, сопоставление вручную. Нужен конвейер «от сообщения до готовой пары».
Собрал под ключ всю систему — сбор, ИИ-парсинг, матчинг, фронтенд, инфраструктуру.
— Сбор: userbot на Telethon из каналов резюме и вакансий, кэш и дедуп (статус RAW).
— Парсинг любых форматов: LLM для текста, pdfplumber для PDF, парсер DOCX, OCR через LLM Vision для фото/сканов; авто-определение сканов. LLM приводит к единой структуре (роль, грейд, стек, опыт) и анонимизирует резюме.
— Матчинг векторный: эмбеддинг 1536d в pgvector, поиск по косинусному расстоянию (порог 0.75, настраивается), фильтр неактивных и без контактов — совпадение по смыслу, а не по ключевым словам.
— Фон/реалтайм: Celery + Redis, лента матчей по WebSocket; статусы RAW→PROCESSED, ERROR с сохранением файла.
— Дашборд React 19: лента со score, модерация горячими клавишами (tinder-mode), отправка нанимателю.
— Девопс: Docker + nginx, CI/CD GitLab, 304 pytest-теста. Дизайн UI — тоже мой, без отдельного дизайнера.
Резюме любого формата (включая фото и скан, которые раньше не искались) попадает в поиск; матчинг по смыслу с настраиваемым порогом; реалтайм-лента с модерацией в один клик; дубли отсекаются. 304 теста, контейнеризация, CI/CD — production-уровень. Оценочно (отраслевые нормы 2026): ручной разбор ~5 мин/резюме и 12–18 ч на 100 резюме конвейер сводит к секундам на резюме + модерация готовой ленты. Точных бизнес-метрик внедрения нет — цифры отраслевые.