Skip to content

Repository files navigation

HeadHunter AI Bot

HeadHunter AI Bot

Полноценный AI-пайплайн для поиска работы

Приложение HH AI Bot автоматически ищет вакансии на HH.ru, анализирует их с помощью ИИ, генерирует сопроводительное письмо, показывает результат в Telegram и отправляет отклик с AI-сгенерированным сопроводительным письмом только после подтверждения пользователем.

Проект построен как полноценное NestJS-приложение с разделением ответственности между парсером, LLM-провайдерами, Telegram-интерфейсом, бизнес-логикой вакансий и браузерной автоматизацией.


Как это работает

┌──────────────┐
│    HH.ru     │
└──────┬───────┘
       │
       ▼
┌──────────────┐
│  Playwright  │
│    Crawler   │
│(CloakBrowser)│
└──────┬───────┘
       │
       ▼
┌──────────────┐
│   Вакансия   │
└──────┬───────┘
       │
  уже обработана?
    /         \
  да           нет
  │             │
пропустить      ▼
        ┌──────────────┐
        │      ИИ      │
        │    анализ    │
        └──────┬───────┘
               │
          подходит?
        /        \
    нет           │
(сохранить в бд)  ▼
      ┌─────────────────────┐
      │      Telegram       │
      │                     │
      │  Сопроводительное   │
      │      письмо         │
      │                     │
      │ [Откликнуться]      │
      │ [Отклонить]         │
      │ [Редактировать]     │
      └──────┬──────────────┘
             │
        ┌──────┴──────┐
        │             │
    Отклонить    Редактировать
(сохранить в бд)      │
                      ▼
                      ИИ
                      │
          Дополнительные инструкции
                      │
                      ▼
            Обновленное письмо
                      │
                      ▼
                  Telegram
                [Откликнуться]
                      │
                      ▼
                    ОТКЛИК
                (сохранить в бд)

Основной pipeline

  1. Парсер сканирует HH.ru по заданным поисковым запросам, регионам и параметрам.
  2. Каждая вакансия проверяется в базе. Уже обработанные вакансии повторно не рассматриваются.
  3. Вакансия проходит первичный фильтр стоп-слов.
  4. Новая вакансия передаётся в ИИ для анализа.
  5. Если вакансия подходит кандидату, она отправляется в Telegram.
  6. Пользователь получает информацию о вакансии и самостоятельно принимает решение (отправить, отклонить или редактировать).
  7. Если пользователь выбирает "редактировать", он отправляет сообщение с дополнительными инструкциями и ИИ переписывает сопровоидительное письмо.
  8. При нажатии на "откликнуться", скрипт отправляет отклик (можно тестировать без откликов в режиме TEST_MODE).
  9. Результат сохраняется в базу данных.

Что получает пользователь в Telegram

Пример сообщения:

Найдена вакансия: TypeScript-разработчик (backend)

📍 Формат работы: удалённо
💰 от 210 000 ₽ за месяц,  на руки

Приветствую. Заинтересовала вакансия Backend Node.js Developer.
Имею практический опыт разработки серверных приложений на Node.js с использованием NestJS и TypeScript,
создавал и поддерживал REST‑API, работал с PostgreSQL и MongoDB,
а также контейнеризировал сервисы с помощью Docker.

В проектах использовал Redis в связке с BullMQ для организации очередей задач,
понимаю, как его можно применять и для кэширования или управления сессиями.
Fastify пока не использовал, но готов быстро освоить его в рамках ваших задач.
Знаком с принципами ООП, SOLID, DRY, KISS,
а также слышал о CQRS и Event Sourcing, готов применять их при необходимости.

Открыт к удалённой работе с гибким графиком
и с удовольствием присоединюсь к вашей команде.

[✅ Отправить] [❌ Отклонить]
[✏️ Редактировать]

После подтверждения бот переходит к отправке отклика.


Важный момент

⚠️ Анкеты работодателя обрабатываются вручную. Браузер намеренно запускается не в headless-режиме..

Если бот сообщает:

⚠️ Есть анкета — проверьте перед отправкой!

это означает, что на странице вакансии присутствует анкета работодателя, которую необходимо заполнить вручную.

В этот момент:

  1. Откройте браузер, запущенный приложением.
  2. Перейдите к анкете.
  3. Заполните её вручную.
  4. Не заполняйте поле сопроводительного письма — его бот обработает самостоятельно.
  5. Нажмите кнопку "Откликнуться" в TELEGRAM боте.
  6. Дальше приложение продолжит автоматическую обработку.

Браузер запускается не в headless-режиме именно для того, чтобы пользователь мог взаимодействовать с такими анкетами.


Основные возможности

  • Автоматический поиск вакансий на HH.ru
  • Поддержка множества поисковых запросов и регионов
  • Возможность добавления стоп-слов
  • ИИ-Анализ вакансий
  • Сопроводительные письма сгенерированные ИИ
  • Управление через Telegram
  • TEST_MODE для безопасного тестирования без реальных откликов
  • OpenAI-совместимый LLM Api

Стек

Backend NestJS / TypeScript
Browser automation Playwright / CloakBrowser
Telegram Grammy / @grammyjs/nestjs
Database SQLite
ORM Prisma
Validation Zod
LLM Ollama / Groq / OpenRouter / Polza / OpenAI-compatible
Configuration .env / settings.yml

LLM Module

Присутствует поддержка нескольких вариантов LLM-провайдеров, как локальных, так и облачных:

Ollama
OpenRouter
Groq
Polza
OpenAI-compatible

Бесплатная настройка LLM через Groq

Для локального запуска не обязательно устанавливать локальную LLM и не обязательно платить за API.

Для этого проекта можно использовать Groq.

❗️ Важно: Не путайте Groq и Grok. Groq — это отдельный сервис, не связанный с xAI Grok (x.com, twitter).

Для использования этого проекта можно начать с бесплатного тарифа Groq.

Настройка

1. Создайте аккаунт Groq

Зайдите на сайт Groq и зарегистрируйтесь.

Для регистрации рекомендуется использовать Gmail: в некоторых случаях другие почтовые домены может фродить.

Так как у самого Groq заблокирован доступ с территории РФ, потребуется VPN.

2. Создайте API key

В Groq Console создайте новый API key и скопируйте его.

3. Выберите модель

В проекте по умолчанию используется:

openai/gpt-oss-120b

Поэтому отдельно указывать модель не обязательно.

4. Добавьте настройки в .env

LLM_PROVIDER="groq"
GROQ_API_KEY="ваш_api_ключ"

Готово.

Не обязательно:

  • разворачивать локальную модель на ollama или LMStudio;
  • скачивать модели;
  • оплачивать API для использования проекта.

Настройка

Перед запуском создайте .env на основе .env.example.

Также необходимо настроить settings.yml на примере settings-example.yml.

В нём находятся:

  • данные кандидата;
  • параметры поиска HH.ru;
  • ИИ инструкции;
  • промпты для анализа вакансий;
  • промпт для генерации сопроводительного письма.

Установка

Требования

  • Node.js
  • npm
  • Chromium / браузер, устанавливаемый Playwright
  • Установленный CloakBrowser
  • аккаунт HH.ru
  • Telegram Bot Token
  • LLM provider API key

Docker в текущей версии не используется, поскольку приложение требует пользовательского взаимодействия с браузером при обработке вакансий с анкетами.


1. Клонирование репозитория

git clone https://github.com/ezh3ee/hh_ai_bot.git
cd hh_ai_bot

2. Установка зависимостей

npm install

3. Установка Playwright

npx playwright install

4. Настройка переменных окружения

cp .env.example .env

Заполните необходимые переменные окружения.

5. Настройка профиля

cp settings-example.yml settings.yml

Настройте settings.yml.

Здесь задаются:

  • данные кандидата;
  • поисковые параметры;
  • регионы;
  • ИИ промпты.

6. Инициализация Prisma

npx prisma generate
npx prisma migrate dev

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

npm run start:dev

Безопасное тестирование

Перед реальной отправкой откликов рекомендуется использовать:

TEST_MODE="true"

В этом режиме приложение выполняет весь pipeline, но не отправляет реальные отклики на HH.ru.

После проверки можно переключить:

TEST_MODE="false"

База данных

SQLite используется для хранения истории обработки вакансий.

Система сохраняет обработанные вакансии, чтобы одна и та же вакансия не обрабатывалась повторно. Также присутствует первичный фильтр из стоп-слов, чтобы сократить количество запросов к модели.

В зависимости от результата обработки сохраняется причина:

REJECTED
SENT

Это позволяет отслеживать историю вакансий и предотвращать дублирование откликов.


Особенности архитектуры

Особое внимание уделено:

  • модульности;
  • Dependency Injection;
  • разделению ответственности;
  • расширяемости LLM-интеграции;
  • runtime валидация;
  • безопасной обработке внешних данных;
  • предотвращению повторной обработки вакансий.

Roadmap

  • Парсинг HH.ru
  • Первичный анализ по стоп-словам
  • Глобукий анализ вакансий через ИИ
  • Генерация сопроводительных писем
  • Управление пользователем через Telegram бота
  • Сохранение обработанных вакансий в базу данных
  • Защита от дублей
  • Автоматическая отправка откликов
  • TEST_MODE
  • Поддержка нескольких LLM-провайдеров
  • Полностью автоматическая обработка анкет
  • Статистика и отчёты по откликам
  • Контейнеризация
  • Возможность деплоя на VPS и облачные сервисы

Disclaimer и основная цель проекта.

Основная цель - создать сервис, который облегчает процес поиска работы в IT (и не только) в текущих реалиях рынка при минимальных затратах 😄

⚠️⚠️⚠️⚠️ВНИМАНИЕ⚠️⚠️⚠️⚠️

Неофициальная автоматизация поиска работы и откликов на hh.ru запрещена условиями Пользовательского соглашения

Проект предназначен для образовательных и исследовательских целей. Используйте его на свой страх и риск.


About

ИИ-скрипт для автоматизации откликов на HeadHunter.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages