Предыстория

В свете последних новостей о сокращениях в IT-индустрии вопрос поиска работы встает все более остро даже для людей, которые в данный момент трудоустроены. Встал он и для меня, так как хоть на данный момент с работой у меня все в порядке, но начали появляться звоночки, намекающие на возможную необходимость ее смены в ближайшее время.

И тут вспоминается мой прошлый опыт поиска работы с многочасовым блужданием по соответствующим сайтам, вычитыванием очередной вакансии, попытками понять, как те или иные требования работодателя соотносятся с вакансией, добавлены ли они туда потому что действительно нужны или это такой фильтр от лишних соискателей. В общем монотонная однообразная работа вида: "Открыл вакансию -> прочитал -> если заинтересовало, нажал кнопку отклика -> прикрепил сопроводительное письмо и т.д."

Можно конечно ускорить процесс, выкинув из этого алгоритма пункт с вычитыванием резюме, но:
а) есть немалый шанс, кликая на все подряд, как обезьяна, откликнуться на неподходящую для тебя вакансию; кому-то это норм, но мне бы не хотелось дергать HR'ов лишний раз по поводу вакансии, которая на самом деле мне не интересна;
б) некоторые особо хитрые работодатели добавляют в описание своих вакансий всякие ключевые слова/вопросы, которые нужно упомянуть/ответить в резюме; по мне так не самая лучшая практика, но я их за это не виню.

Эх, вот бы нашелся кто-нибудь, кто вычитал бы вакансию за меня, определил, будет ли мне она интересна, написал бы сопроводительное письмо с учетом моего резюме, текста вакансии и всяких там ключевых слов, ответил бы на сопутствующие вопросы и послал бы все это дело работодателю...

Минуточку, кажется я знаю, кто мне в этом поможет: LLM же!

Этическая сторона вопроса

Изображение создано с помощью DALL-E
Изображение создано с помощью DALL-E

Можно конечно поговорить про то, насколько все это этично, но лично для меня такого вопроса не стоит и вот почему:

  • компании сами используют автоматизацию, в том числе и нейронки, в подборе и найме кандидатов, почему соискатели не должны делать то же?

  • найм сломан, рекрутеры сломаны, доходит до того, что людям отказывают в приеме на их же работу на их же должность

  • банально лень тратить свое драгоценное время на вычитывание и прокликивание десятков в вакансий и ответы на десятки однотипных вопросов, зная при этом, что как минимум в половине случаев на твой отклик даже не обратят внимание

Реализация

Итак, с этической составляющей разобрались, что дальше? А дальше выяснилось, что совсем недавно вышла софтина под названием AiHawk, которая чем-то подобным и занимается, а именно помогает рассылать вакансии работодателям в LinkedIn с помощью нейронки. Правда, в нее не заложен функционал с подбором потенциально интересной тебе вакансии, откликается она на все подряд, но это правится на уровне промпта.

Появление подобного софта было лишь вопросом времени
Появление подобного софта было лишь вопросом времени

На данный момент меня интересует работа в РФ, поэтому было принято решение доработать софтину под какой-нибудь местный сайт поиска работы. Выбор очевидно пал на hh.ru. В основе оригинального приложения лежит связка python + selenium + LLM API. Можно конечно попытаться интегрировать API от hh.ru, но, насколько я знаю, есть сложности с доступом к нему + жалобы на общую кривизну. В общем, решено было пойти путем "работает - не трогай" и просто доработать текущий проект под работу с ххру. С селениумом я до этого никогда не работал, но там все оказалось просто, поэтому освоил его я достаточно быстро, в течение нескольких дней.

Разумеется есть определенные особенности, отличающие ххру от линкедина, например в оригинальном проекте резюме каждый раз создавалось с учётом новой вакансии или подтягивались в готовом виде из файла. На ххру все резюме изначально лежат готовые в твоем личном кабинете, нужно только выбрать подходящее и начать искать вакансии, да и поиск самих вакансий на хх организован проще, так что процесс переделки много времени не занял.

В качестве LLM оригинальный проект предлагает на выбор множество разных вариантов, включая OpenAI, Claude, Gemini, LLama, локальные модельки с Hugging Face и т.д. Я выбрал GPT-4o mini от OpenAI - моделька шустрая, работает адекватно, при этом один запрос стоит примерно $0.0005, т.е. очень умеренно. Впрочем, всегда есть возможность выбрать любую, другую модель - все настройки оригинального проекта в части выбора LLM я сохранил. Единственный нюанс: если модель не лежит локально на компе, скорее всего нужно будет заморочиться с VPN, но для любого пользователя интернета в России это давно уже навык категории must have.

В целом алгоритм работы выглядит так:

  1. Заходим на сайт, если до этого не заходили - просим пользователя авторизоваться, иначе просто заходим с помощью предварительно сохраненных данных о предыдущей сессии.

  2. Загружаем все необходимые промпты и настройки из конфигурационных файлов

  3. Выбираем нужное нам резюме (задается в конфигурационном файле)

  4. Если в конфиге есть какие-то дополнительные настройки поиска - задаем их на сайте.

  5. Движемся по списку найденных вакансий, заходим в очередную, берем ее описание, формируем промпт, добавляем туда информацию обо мне и моих интересах.

  6. Спрашиваем LLM, подходит ли по ее мнению мне эта вакансия. Если ответ да, переходим к п.7, иначе возвращаемся к п.5.

  7. Жмем на кнопку отклика.

  8. Формируем с помощью LLM текст сопроводительного письма с учётом вакансии и моего резюме, указываем в промпте про возможный прикол со скрытыми в описании вакансии вопросами и ключевыми словами. Прикладываем его к своему отклику.

  9. Если у работодателя есть какие-то дополнительные вопросы (типа какую зп хочешь, готов ли приезжать в офис, дай свой телеграм и т.д.), отдаем текст этого вопроса LLM, просим сначала определить его категорию (личная информация, контакты, предпочтения по работе и т.д.), а затем просим ее ответить на данный вопрос, приложив при этом всю доступную информацию из соответствующей категории (разбитая по категориям информация о пользователе лежит в отдельном файле).

  10. В случае, если ответить на вопрос не получается (нет соответствующей информации или вместо вопроса хитрый работодатель приложил ссылку на какой-нибудь опросник в Google Docs) - пропускаем вакансию и заносим информацию о ней в отдельный файл, пусть пользователь сам потом разбирается.

Результат

На видео ниже пример работы. На нем программа запускается, находит через поиск вакансию (поиск специально настроен так, чтобы вакансия нашлась только одна), откликается на нее, пишет сопроводительное письмо и также отвечает на сопутствующие вопросы. Модель работает адекватно, хорошо определяет вакансии, которые меня действительно заинтересовали бы (тут пришлось повозиться с промптом), пишет грамотные сопроводительные письма (пришлось повозиться с промптом еще больше, изначально писала какую-то лютую дичь), и корректно отвечает на вопросы.

Видео

Проект есть на гитхабе, найти можно по этой ссылке. Он пока что в бета-версии и возможны баги (много багов) + еще не вся желаемая функциональность добавлена. Например, пока не умеет отвечать на некоторые типы вопросов или сливается при виде ссылок на опросники на сторонние сайты (хотя я бы тоже слился на его месте), но с обработкой 95% вакансий он уже справляется, а те, с которыми не справляется, заносит в специальный файл, который потом можно посмотреть и прокликать уже вручную. Так что если кто заинтересовался - welcome. Разумеется, предложения по доработке и исправлению багов только приветствуются.

Комментарии (5)


  1. Alex_Averyanov
    05.11.2024 17:15

    Рад, что получилось реализовать! Следующий шаг - не напугать hr, когда на вопрос "почему выбрали нашу компанию?", услышит ответ - "это не я, а ИИ" ) Еще остались hr из категории, которая считает, "что если кто-то сделал что-то непонятное, то лучше отказать, чем таких сметливых брать на работу".


    1. beatwad Автор
      05.11.2024 17:15

      Вакансия должна соответствовать интересам пользователя, или у пользователя должен быть релевантный опыт, только тогда будет отклик. А более подробно причину интереса к вакансии приложение распишет в сопроводительном письме, можно просто оттуда взять формулировку)
      По поводу hr, боящихся всего нестандартного, можно в промпт доработать, чтобы писало максимально стандартно или вообще использовать один стандартный шаблон сопроводительного письма для всех вакансий.


  1. 4RRu
    05.11.2024 17:15

    Интересно почему народу не нравится, заминусовали без каментов


    1. a_zikrackiy
      05.11.2024 17:15

      Однозначно лайк статье, уже поставил, то что человек вообще чем то увлекается, уже заслуживает уважения! Я не понимаю, почему люди так негативят :)


      1. beatwad Автор
        05.11.2024 17:15

        Спасибо!