Привет, Хабр. Я из тех людей, у кого аллергия на словосочетание "искусственный интеллект" в маркетинге. Обычно за этим скрывается пара if-else и API OpenAI, прикрученное синей изолентой.

Недавно наткнулся на пост ребят, которые пилят карьерного бота Аврора. Обещали, что он сам ищет вакансии, сам пишет письма и вообще молодец.

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

Спойлер: базу я им действительно чуть не положил (и помог починить), но в процессе тестирования бот унизил мое резюме, переписал его и устроил меня на собес туда, куда я сам боялся подаваться.

Ниже - история про технические костыли, asyncio и то, как бездушный скрипт продает инженера лучше, чем сам инженер.

Фаза 1. "У вас тут архитектура протекает"

Я постучался к фаундерам как волонтер-тестер. Доступ дали.

Первое, что я сделал - запустил скрипт, эмулирующий 50 одновременных нажати�� кнопки "Генерировать письмо".

Бот умер.

Точнее, он завис. Интерфейс перестал отвечать, потому что (сюрприз!) вызов LLM был в основном потоке.

Я не удержался и влез в код (благо, дали доступ к репо для дебага).

Там была классика:

Python

# Синхронный ад
response = requests.post(HH_API_URL, ...)

Пока один юзер ждал ответа от хедхантера, остальные ждали чуда.

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

Взяли PostgreSQL. Почему не Redis? Потому что не хотелось тащить лишнюю зависимость в прод.

Использовали SELECT ... FOR UPDATE SKIP LOCKED.

Это позволило запускать воркеры параллельно. Один генерит текст, другой пушит в API, третий анализирует резюме. Бот ожил.

Фаза 2. "Ты пишешь код, а не продаешь"

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

Я загрузил свое реальное резюме. Я считал его идеальным. 6 лет опыта, Python, Go, куча проектов.

Бот (функция AI-анализа) выдал вердикт: 4 из 10.

Я оскорбился. В смысле 4? Я сеньор!

Чат-бот выдал фидбек (цитирую по памяти):

"У тебя все написано в процессе. 'Писал код', 'Поддерживал API'. Это уровень джуна. Бизнесу плевать, что ты делал. Им важно, что ты СДЕЛАЛ. Где цифры? Где метрики? Где деньги?"

И предложил свой вариант описания опыта.

Было (мое):

  • Оптимизация запросов к базе данных.

  • Разработка микросервисов на FastAPI.

Стало (от Авроры):

  • Ускорил выполнение агрегирующих запросов в 10 раз (с 5с до 500мс) за счет денормализации БД.

  • Спроектировал архитектуру микросервисов, выдерживающую 10k RPS.

Я скривился. Звучало как пафосный булшит из LinkedIn. Но ради чистоты эксперимента я нажал "Обновить резюме на hh.ru".

Фаза 3. "Я бы туда не кликнул"

Дальше я включил "Автопилот". Это режим, когда бот сам ищет вакансии по фильтрам и сам рассылает отклики.

Я выставил фильтр по зарплате (выше рынка) и забыл на сутки. Пусть воркеры трудятся, проверяют стабильность коннекта с базой.

Вечером смотрю логи.

Бот отправил 20 откликов.

Смотрю список компаний. И вижу ЕЁ.

Известный финтех (топ-3 в РФ). Красный логотип.

Я туда никогда не откликался. У меня был синдром самозванца: "Там алгоритмические секции, там лютый отбор, я не потяну". Я их тупо свайпал.

А боту плевать на мои комплексы. У него есть задача: if salary >= X and stack == 'python': apply().

Он отправил им то самое "пафосное" сопроводительное письмо, которое сгенерировал на основе переписанного резюме.

Итог: Цифры не врут

Через 2 дня мне пришел инвайт на техническое интервью в этот финтех.

HR написала: "Нас зацепило, как четко вы описали результаты оптимизации в прошлом проекте".

Я сидел и думал: это не я описал. Это скрипт на Python, который дергает API Gemini, который я вчера дебажил.

Мои выводы как инженера:

  1. Технические:

    • Асинхронность в ботах - это не фича, это база. Если ваш бот делает HTTP-запросы синхронно - выкиньте его.

    • Postgres как очередь задач (SKIP LOCKED) - это топ решение для проектов средней нагрузки. Просто, надежно, ACID.

  2. Карьерные:

    • Мы, инженеры, не умеем себя продавать. Мы думаем, что код говорит сам за себя. Нет. HR-ы не читают код, они читают ключевые слова и цифры.

    • Автоматизация рулит. Пока я тратил часы на прокрастинацию и выбор "достойной" вакансии, скрипт просто долбил API и получил конверсию выше, чем я за месяц ручного поиска.

Короче, баги мы пофиксили. Проект работает стабильно.

А я теперь готовлюсь к алгоритмической секции.

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

Ссылка

P.S. Если кто-то знает, как быстро подтянуть Dynamic Programming за 3 дня - напишите в комменты, очень надо.

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