Как я нашел работу при помощи ИИ
Предыстория
В свете последних новостей о сокращениях в IT-индустрии вопрос поиска работы встает все более остро даже для людей, которые в данный момент трудоустроены. Встал он с итоге и для меня, так как хоть на тот момент с работой у меня все было в порядке, но начали появляться звоночки, намекающие на возможную необходимость ее смены в ближайшее время.
И тут мне вспомнился мой прошлый опыт поиска работы с многочасовым блужданием по соответствующим сайтам, вычитыванием очередной вакансии, попытками понять, как те или иные требования работодателя соотносятся с вакансией, добавлены ли они туда потому что действительно нужны или это такой фильтр от лишних соискателей. В общем монотонная однообразная работа вида: "Открыл вакансию -> прочитал -> если заинтересовало, нажал кнопку отклика -> прикрепил сопроводительное письмо и т.д."
Можно конечно ускорить процесс, выкинув из этого алгоритма пункт с вычитыванием резюме, но: а) есть немалый шанс, кликая на все подряд, как обезьяна, откликнуться на неподходящую для тебя вакансию; кому-то это норм, но мне бы не хотелось дергать HR'ов лишний раз по поводу вакансии, которая на самом деле мне не интересна; б) некоторые особо хитрые работодатели добавляют в описание своих вакансий всякие ключевые слова/вопросы, которые нужно упомянуть/ответить в резюме; по мне так не самая лучшая практика, но я их за это не виню.
Эх, вот бы нашелся кто-нибудь, кто вычитал бы вакансию за меня, определил, будет ли мне она интересна, написал бы сопроводительное письмо с учетом моего резюме, текста вакансии и всяких там ключевых слов, ответил бы на сопутствующие вопросы и послал бы все это дело работодателю...
Минуточку, кажется я знаю, кто мне в этом поможет: LLM же!
Этическая сторона вопроса
Можно конечно поговорить про то, насколько все это этично, но лично для меня такого вопроса не стоит и вот почему:
- компании сами используют автоматизацию, в том числе и нейронки, в подборе и найме кандидатов, почему соискатели не должны делать то же?
- найм сломан, рекрутеры сломаны, доходит до того, что людям отказывают в приеме на их же работу на их же должность
- банально лень тратить свое драгоценное время на вычитывание и прокликивание десятков в вакансий и ответы на десятки однотипных вопросов, зная при этом, что как минимум в половине случаев на твой отклик даже не обратят внимание
Реализация
Итак, с этической составляющей разобрались, что дальше? А дальше выяснилось, что совсем недавно вышла софтина под названием 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.
В целом алгоритм работы выглядит так:
- Заходим на сайт, если до этого не заходили - просим пользователя авторизоваться, иначе просто заходим с помощью предварительно сохраненных данных о предыдущей сессии.
- Загружаем все необходимые промпты и настройки из конфигурационных файлов
- Выбираем нужное нам резюме (задается в конфигурационном файле)
- Если в конфиге есть какие-то дополнительные настройки поиска - задаем их на сайте.
- Движемся по списку найденных вакансий, заходим в очередную, берем ее описание, формируем промпт, добавляем туда информацию обо мне и моих интересах.
- Спрашиваем LLM, подходит ли по ее мнению мне эта вакансия. Если ответ да, переходим к п.7, иначе возвращаемся к п.5.
- Жмем на кнопку отклика.
- Формируем с помощью LLM текст сопроводительного письма с учётом вакансии и моего резюме, указываем в промпте про возможный прикол со скрытыми в описании вакансии вопросами и ключевыми словами. Прикладываем его к своему отклику.
- Если у работодателя есть какие-то дополнительные вопросы (типа какую зп хочешь, готов ли приезжать в офис, дай свой телеграм и т.д.), отдаем текст этого вопроса LLM, просим сначала определить его категорию (личная информация, контакты, предпочтения по работе и т.д.), а затем просим ее ответить на данный вопрос, приложив при этом всю доступную информацию из соответствующей категории (разбитая по категориям информация о пользователе лежит в отдельном файле).
- В случае, если ответить на вопрос не получается (нет соответствующей информации или вместо вопроса хитрый работодатель приложил ссылку на какой-нибудь опросник в Google Docs) - пропускаем вакансию и заносим информацию о ней в отдельный файл, пусть пользователь сам потом разбирается.
Результат
Разработка проекта заняла около 3 недель. Последующий поиск новой работы, включающий рассылку откликов, несколько собеседований и заветный оффер - примерно столько же. К сожалению, собеседования пришлось проходить самому, ИИ тут уже не поможет, хотя наработки в этом направлении тоже есть :)
На видео ниже пример работы. На нем программа запускается, находит через поиск вакансию (поиск специально настроен так, чтобы вакансия нашлась только одна), откликается на нее, пишет сопроводительное письмо и также отвечает на сопутствующие вопросы. Модель работает адекватно, хорошо определяет вакансии, которые меня действительно заинтересовали бы (тут пришлось повозиться с промптом), пишет грамотные сопроводительные письма (пришлось повозиться с промптом еще больше, изначально писала какую-то лютую дичь), и корректно отвечает на вопросы.
Проект есть на гитхабе, найти можно по этой ссылке. Он пока что в бета-версии и возможны баги (много багов) + еще не вся желаемая функциональность добавлена. Например, сливается при виде ссылок на опросники на сторонние сайты (хотя я бы тоже слился на его месте), но с обработкой 97-98% вакансий он уже справляется, а те, с которыми не справляется, заносит в специальный файл, который потом можно посмотреть и прокликать уже вручную. Так что если кто заинтересовался - welcome. Разумеется, предложения по доработке и исправлению багов только приветствуются.