Полноценный AI-пайплайн для поиска работы
Приложение HH AI Bot автоматически ищет вакансии на HH.ru, анализирует их с помощью ИИ, генерирует сопроводительное письмо, показывает результат в Telegram и отправляет отклик с AI-сгенерированным сопроводительным письмом только после подтверждения пользователем.
Проект построен как полноценное NestJS-приложение с разделением ответственности между парсером, LLM-провайдерами, Telegram-интерфейсом, бизнес-логикой вакансий и браузерной автоматизацией.
┌──────────────┐
│ HH.ru │
└──────┬───────┘
│
▼
┌──────────────┐
│ Playwright │
│ Crawler │
│(CloakBrowser)│
└──────┬───────┘
│
▼
┌──────────────┐
│ Вакансия │
└──────┬───────┘
│
уже обработана?
/ \
да нет
│ │
пропустить ▼
┌──────────────┐
│ ИИ │
│ анализ │
└──────┬───────┘
│
подходит?
/ \
нет │
(сохранить в бд) ▼
┌─────────────────────┐
│ Telegram │
│ │
│ Сопроводительное │
│ письмо │
│ │
│ [Откликнуться] │
│ [Отклонить] │
│ [Редактировать] │
└──────┬──────────────┘
│
┌──────┴──────┐
│ │
Отклонить Редактировать
(сохранить в бд) │
▼
ИИ
│
Дополнительные инструкции
│
▼
Обновленное письмо
│
▼
Telegram
[Откликнуться]
│
▼
ОТКЛИК
(сохранить в бд)
- Парсер сканирует HH.ru по заданным поисковым запросам, регионам и параметрам.
- Каждая вакансия проверяется в базе. Уже обработанные вакансии повторно не рассматриваются.
- Вакансия проходит первичный фильтр стоп-слов.
- Новая вакансия передаётся в ИИ для анализа.
- Если вакансия подходит кандидату, она отправляется в Telegram.
- Пользователь получает информацию о вакансии и самостоятельно принимает решение (отправить, отклонить или редактировать).
- Если пользователь выбирает "редактировать", он отправляет сообщение с дополнительными инструкциями и ИИ переписывает сопровоидительное письмо.
- При нажатии на "откликнуться", скрипт отправляет отклик (можно тестировать без откликов в режиме
TEST_MODE). - Результат сохраняется в базу данных.
Пример сообщения:
Найдена вакансия: 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, готов применять их при необходимости.
Открыт к удалённой работе с гибким графиком
и с удовольствием присоединюсь к вашей команде.
[✅ Отправить] [❌ Отклонить]
[✏️ Редактировать]
После подтверждения бот переходит к отправке отклика.
Если бот сообщает:
⚠️ Есть анкета — проверьте перед отправкой!
это означает, что на странице вакансии присутствует анкета работодателя, которую необходимо заполнить вручную.
В этот момент:
- Откройте браузер, запущенный приложением.
- Перейдите к анкете.
- Заполните её вручную.
- Не заполняйте поле сопроводительного письма — его бот обработает самостоятельно.
- Нажмите кнопку "Откликнуться" в TELEGRAM боте.
- Дальше приложение продолжит автоматическую обработку.
Браузер запускается не в 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-провайдеров, как локальных, так и облачных:
Ollama
OpenRouter
Groq
Polza
OpenAI-compatible
Для локального запуска не обязательно устанавливать локальную LLM и не обязательно платить за API.
Для этого проекта можно использовать Groq.
❗️ Важно: Не путайте Groq и Grok. Groq — это отдельный сервис, не связанный с xAI Grok (x.com, twitter).
Для использования этого проекта можно начать с бесплатного тарифа Groq.
Зайдите на сайт Groq и зарегистрируйтесь.
Для регистрации рекомендуется использовать Gmail: в некоторых случаях другие почтовые домены может фродить.
Так как у самого Groq заблокирован доступ с территории РФ, потребуется VPN.
В Groq Console создайте новый API key и скопируйте его.
В проекте по умолчанию используется:
openai/gpt-oss-120bПоэтому отдельно указывать модель не обязательно.
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 в текущей версии не используется, поскольку приложение требует пользовательского взаимодействия с браузером при обработке вакансий с анкетами.
git clone https://github.com/ezh3ee/hh_ai_bot.git
cd hh_ai_botnpm installnpx playwright installcp .env.example .envЗаполните необходимые переменные окружения.
cp settings-example.yml settings.ymlНастройте settings.yml.
Здесь задаются:
- данные кандидата;
- поисковые параметры;
- регионы;
- ИИ промпты.
npx prisma generate
npx prisma migrate devnpm run start:devПеред реальной отправкой откликов рекомендуется использовать:
TEST_MODE="true"В этом режиме приложение выполняет весь pipeline, но не отправляет реальные отклики на HH.ru.
После проверки можно переключить:
TEST_MODE="false"SQLite используется для хранения истории обработки вакансий.
Система сохраняет обработанные вакансии, чтобы одна и та же вакансия не обрабатывалась повторно. Также присутствует первичный фильтр из стоп-слов, чтобы сократить количество запросов к модели.
В зависимости от результата обработки сохраняется причина:
REJECTED
SENT
Это позволяет отслеживать историю вакансий и предотвращать дублирование откликов.
Особое внимание уделено:
- модульности;
- Dependency Injection;
- разделению ответственности;
- расширяемости LLM-интеграции;
- runtime валидация;
- безопасной обработке внешних данных;
- предотвращению повторной обработки вакансий.
- Парсинг HH.ru
- Первичный анализ по стоп-словам
- Глобукий анализ вакансий через ИИ
- Генерация сопроводительных писем
- Управление пользователем через Telegram бота
- Сохранение обработанных вакансий в базу данных
- Защита от дублей
- Автоматическая отправка откликов
-
TEST_MODE - Поддержка нескольких LLM-провайдеров
- Полностью автоматическая обработка анкет
- Статистика и отчёты по откликам
- Контейнеризация
- Возможность деплоя на VPS и облачные сервисы
Основная цель - создать сервис, который облегчает процес поиска работы в IT (и не только) в текущих реалиях рынка при минимальных затратах 😄
Неофициальная автоматизация поиска работы и откликов на hh.ru запрещена условиями Пользовательского соглашения
Проект предназначен для образовательных и исследовательских целей. Используйте его на свой страх и риск.
