Меня зовут Сережа, я продакт в команде Подбора. Сегодня расскажу, как мы сделали генератор писем для рекрутеров на базе ChatGPT.  Может, но: Рекрутеры тратят много времени на поиск кандидатов и на первый контакт. На создание персонального письма рекрутеру в среднем требуется 15 минут. Представим, что таких писем надо написать хотя бы 20 в день. Это 5 рабочих часов на 20 хороших писем. Конечно, в итоге в жертву идет качество письма. Чаще всего рекрутеры просто используют шаблоны — и это ок, но кандидаты, конечно, ждут персонального подхода. Разработчики недовольны тем, какие сообщения и письма они получают. Не хочется чувствовать, что ты 10-ый в очереди на получение «классной возможности». Мы взялись за генератор писем, который позволит создавать персональные сообщения на основе вакансии и профиля кандидата. По нашим оценкам, это позволит рекрутеру сэкономить порядка 18 часов в неделю. А значит, фокусироваться на других важных задачах — собеседованиях, поиске только подходящих кандидатов, скрининге и сбору аналитики по всему этому процессу 🙂 Важно, чтобы письма получались разными, читаемыми, связными и персонализированными. Когда взялись за эту задачу, уже вышла ChatGPT 4.0, но мы решили работать с ChatGPT 3.5-turbo, а не с самой свежей версией потому что: Во-первых, ChatGPT 4.0 работает в 10-15 раз медленнее, чем ChatGPT 3.5 из-за увеличения размера модели. Если для генерации писем ChatGPT 3.5 требуется в среднем от 5 до 10 секунд на ответ, то у ChatGPT 4.0 лучший результат был 45 секунд. Это очень медленно. Во-вторых, новые технологии зачастую нестабильны, и ChatGPT 4.0 не исключение. При тестировании были замечены частые разрывы соединения с чатом, которые могут продолжаться до 5 минут. Хотя это может улучшиться со временем, в данный момент стабильность ChatGPT 3.5 наших тестов была выше, что уменьшает риски для нас. Наконец, чтобы ChatGPT 3.5 был таким, каким он есть сейчас, команда OpenAI провела дополнительное обучение и настройку модели. Благодаря их кропотливой работе ответы чата кажутся очень человекоподобными. ChatGPT 4.0 не имеет проблем с человечностью и, в некоторых случаях, даже превосходит своего меньшего брата. Однако проведенные тесты на нашей целевой выборке показали, что человек не может заметить большую разницу в качестве между ними. Таким образом, ChatGPT 3.5 — лучший вариант для нас сейчас. Хотя на рынке есть множество других больших языковых моделей, никто пока не добился такого качества ответов, как модель OpenAI. Для генератора мы использовали ChatGPT 3.5-turbo. Чтобы письма получились личными и интересным, мы учли множество параметров, например, какие технологии кандидат использует, какой у него опыт, над какими проектами он работал и многое другое. Рекрутеры будут тратить ~1 минуту на создание письма. Оно будет персональным, конкретным, вовлекающим. Рекрутер сможет охватить больше кандидатов за короткое время, а значит, быстрее закрывать вакансии и тратить время эффективнее (на другие крутые задачи). Кандидаты будут получать понятные и простые письма с предложениями. Если использовать генератор вместе с Подбором, то предложения будут существенно более релевантными. Вот реальное сообщение, которое я получил неделю назад: Сергей, добрый день! Меня зовут , карьерный сервис . Вашим контактом со мной поделились коллеги. У нас в работе сейчас есть вакансия, которую я бы хотела с вами обсудить. Подскажите, пожалуйста, было бы вам интересно со мной пообщаться?” У меня возникают вопросы “Какая вакансия?”,  “Какая компания?”, “Почему я им интересен?”. Надо понимать, что это холодное письмо, я не нахожусь сейчас в поиске, соотвественно, чтобы узнать имеет ли смысл общаться, мне нужно ответить и начать  диалог. В этом письме нет информации, которая бы могла меня заинтересовать, к тому же мне лень начинать длинный разговор и расспрашивать рекрутера, как и большей части тех, кто не находится в активном поиске. А вот если бы мне написали: Сергей, добрый день!Меня зовут Варя. Вашим контактом со мной поделились коллеги. У нас в работе сейчас есть вакансия Product Manager в крупную телекоммуникационную компанию. В этой компании стартует HR-Tech проект, а у вас в опыте я увидела, что как раз работаете в этой сфере. Подскажите, пожалуйста, было бы вам интересно со мной пообщаться? Согласитесь, меня бы зацепило, что человек изучил мой опыт, озвучил мою ценность для их проекта. Думаю, я бы ответил. Этот пример я привел, чтобы показать, как много информации о вакансии и кандидате нужно знать рекрутеру, чтобы написать качественное письмо. Важно чем-то зацепить кандидата, показать, почему он подходит на эту вакансию. Итак, чем кандидата зацепить? Персональным письмом. Да, все так просто.  Основная задача генератора — соединить кандидата с вакансией. Найти аргументы, которые позволят убедить человека, что вакансия любопытная и ему подходит. Чтобы получилось качественное письмо, нам нужно знать достаточное количество информации и о вакансии, и о кандидате. С информацией о кандидате проблем нет, мы на этом специализируемся (агрегируем данные о кандидатах из 15+ открытых источников аля Linkedin и Github), а вот про вакансию мы пока ничего не знаем. Поэтому мы спрашиваем у пользователя: Про компанию: имя рекрутера, название компании, сферу (например, это финтех или ed-tech) Про вакансию: стек (подтягиваем свои словари), локацию (удаленку тож можно), обязанности (свободное поле), зарплатную вилку Про кандидата: имя и ссылку на его Linkedin (или профиль в Подборе) Что мы просим у ChatGPT: Написать письмо, которое позволит привлечь внимание кандидата. Мы задаем ограничения по формату, тону, даем указания, как можно использовать источники, которые у нас есть (например, где мы нашли кандидата и что интересного про него узнали). Мы тестируем сейчас два сценария: Генератор писем — фактически, это просто страница, где можно заполнить все вышеперечисленные поля и сразу получить письмо. Генератор писем на основе вакансии — ещё у нас предусмотрен вот такой сценарий, при котором рекрутеру нужно ещё меньше действий, чтобы быстро создать сообщение для кандидата. Сделали мы значит бек часть генератора и принялись тестировать. Конечно, промт мы еще докручивали, но вот с чем мы столкнулись еще. Платный аккаунт Мы тестировали на бесплатном API ключе Open AI, среднее время ответа около 15 секунд. Иногда приходилось ждать ответ от Open AI по 30 секунд. Мы пытаемся сэкономить время пользователи, а вместо этого заставляли бы ждать его по 30 секунд на страницу, смотря на крутящийся спиннер загрузки. Далее мы оформили платный API ключ, время ответа сократилось до 4-5 секунд. В редких случаях это 10 секунд. И лимиты на платном ключе гораздо выше. Бесплатный ключ Платный ключ 20 запросов в минуту 3500 запросов в минуту Понаблюдаем, будет ли нам хватать столько запросов в минуту, если нет, то попробуем через поддержку Open AI увеличить нам лимиты, они ребята лояльные. Ошибки OpenAI Когда мы тестировали на бесплатном ключе на каждые 50 запросов, мы ловили ошибку 429. В их документации эта ошибка отвечает и за превышение лимитов, и за перегруз сервера. Мы точно не превышали лимит 20 запросов в минуту, так как делали их вручную. За день до теста Open AI снизили стоимость на chatgpt в 10 раз и мы предполагаем, что поэтому случился перегруз. Далее с платным ключом мы ни разу не ловили такую ошибку. Связано ли это с тем, что хайп стих или у нас платный ключ мы не знаем, но обработку ошибок у себя добавили. Подбирали коэффициент креативности Также во время тестов мы подбирали значения двух параметров: temperature - параметр, отвечающий за креативность модели frequency_penalty - отвечает за частоту повторения уже существующих слов, чем выше параметр, тем модель пытается использовать новые, ранее не встречавшиеся в тексте слова Если не менять значения temperature, но менять frequency_penalty, то креативность тоже заметно увеличивается. Оно и логично, ведь модели надо подбирать новые формулировки, чтобы они не повторялись с прошлыми. Например, когда мы поднимали frequency_penalty, генератор стал назначать сроки ответа на письмо, придумывать новые адреса, на которые кандидат должен ответить или говорить, что Самокат - это интернет-магазин электрического транспорта)) Чтобы подобрать идеальную комбинацию, мы меняли значения параметров с шагом 0.05 и генерировали несколько десятков писем, чтобы оценить эффект изменений. Мы взяли вакансию СберМаркета и сгенерили для них письмо. Вот, что получилось: Мы сделали открытый генератор, его можно использовать 1 раз в день. Созданное письмо упадет к вам на почту. Пока мы сделали бета-версию, чтобы отладить промпт и посмотреть, как его будут использовать рекрутеры. Что мы сделаем ещё: Сообщение в Телеграме vs Письмо Рекрутер сможет выбрать: написать короткое неформальное сообщение для мессенджера или письмо, в котором будет больше деталей. Тональность Можно выбрать: формальное / неформальное / креативное сообщение. Добавление бенефитов, рассказа о компании, важных деталей в свободном виде. Это позволит нам сделать письма ещё более персональными и ещё больше совпадающими с tone of voice конкретной компании. В общем, если теперь увидите письмо от рекрутера, возможно, его написал ChatGPT.   Product Manager в Подборе