Как я собираю AI-интервьюера, чтобы имитировать собеседования
Несколько месяцев назад я поймал себя на мысли: я знаю свою профессию, читаю статьи, работаю в команде — но сто́ит заговорить о собеседованиях, появляется напряжение. Да, я не один такой: стресс, туманные ожидания от интервьюеров, неочевидные слабые места в знаниях. Решил попробовать подойти к подготовке иначе — с помощью AI. Ну все сейчас хотят ко всяким GPT по разным нуждам.
Проблема: классическая подготовка не работает
Когда мы читаем «100 вопросов для Python-разработчика» или готовимся по leetcode, это даёт теорию и «набивание» руки. Но реальное интервью — это другое. Там не угадаешь, что спросят, и не получишь сразу фидбек на свой ответ. Хотя все же самое сложное — реально фиг знает, че там могут спросить. Готовишься к алгоритмам, попросят бизнес-логику. Хотя иногда бывает и не трудные собесы. У меня однажды спросили, знаю ли я SQL, я сказал, что нет, но быстро выучу, в итоге я уже 4 года работаю на этом месте. И да, SQL таки я изучил, потому что он присутствует в 70% моих задач.
Вобщем, я понял, чего мне не хватает по теме собеседований:
-
Условного «симулятора интервью»
-
Обратной связи, где я ошибся
-
Индивидуального плана, какие темы подтянуть
А ещё мне хотелось видеть, как выгляжу со стороны, пусть и со стороны какого-то цифрового интеллекта. И тут в голову пришла идея — пусть AI задаёт мне вопросы и анализирует мои ответы.
Первая попытка: prompt + OpenAI
Я начал с простого: набросал промпт в стиле:
Представь, что ты технический интервьюер. Задай мне вопрос по Python уровня middle. Подожди моего ответа, оцени его и задай следующий.
Результат превзошёл ожидания. Модель не просто генерировала вопросы, но и давала развёрнутую обратную связь. Я начал добавлять:
-
Задание уровня: Junior / Middle / Senior
-
Подбор вопросов по описанию вакансии (из LinkedIn, HeadHunter и т.п.)
-
Автоанализ ответов и генерация списка тем, которые «просели»
Минимум Django, максимум практики
Дальше я решил обернуть это в простой Django-проект — без лишнего интерфейса, просто для себя.
Минимальный стек: Django + HTMX для реактивного UI без сложных JS
Чтобы не захламлять проект, я использовал простой набор Django-моделей. В основе — интервью-сессия и связанные с ней вопросы и ответы.
class JobInterview(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE)
position = models.CharField(max_length=255)
description = models.TextField() # вакансия или описание требований
created_at = models.DateTimeField(auto_now_add=True)
Каждая сессия содержит вопросы и ответы пользователя:
class InterviewQuestion(models.Model):
interview = models.ForeignKey(JobInterview, on_delete=models.CASCADE, related_name=’questions’)
question = models.TextField()
user_answer = models.TextField(blank=True)
ai_feedback = models.TextField(blank=True) # сюда AI пишет разбор
created_at = models.DateTimeField(auto_now_add=True)
Немного о витринах
1. Старт интервью
Простая форма: пользователь указывает вакансию и желаемое количество вопросов.
class InterviewCreateView(FormView):
template_name = ‘interview/start.html’
form_class = InterviewStartForm
def form_valid(self, form):
# создаём JobInterview, генерируем вопросы и редиректим на сессию
Форма выглядит так:
-
Должность: Senior Python Developer
-
Описание вакансии: текст из HH / LinkedIn
-
Уровень: Middle/Senior
-
Кол-во вопросов: 5–10
AI на основе этого генерирует адаптированный набор вопросов.
2. Интервью в действии
Пользователь отвечает на вопрос, AI присылает обратную связь и следующий вопрос. Ответы сохраняются, можно вернуться к любой сессии.
class InterviewSessionView(DetailView):
model = JobInterview
template_name = ‘interview/session.html’
def post(self, request, *args, **kwargs):
# сохраняем ответ пользователя
# вызываем LLM для фидбека
# записываем следующий вопрос
На фронте — простой HTMX + hx-post, чтобы обновлялось только нужное.
Стриминг и UX
AI отвечает не сразу — а стримится по частям, имитируя реального интервьюера. Использую стандартный StreamingHttpResponse и SSE:
def stream_ai_response(request):
def event_stream():
for chunk in generate_response_chunks(…):
yield f»data: {chunk}nn»
return StreamingHttpResponse(event_stream(), content_type=’text/event-stream’)
Это заметно улучшает UX: кажется, будто AI реально «думает» и «слушает» твой ответ.
Что получилось: почти как настоящее собеседование
Сейчас процесс выглядит так:
-
Я вставляю описание вакансии (например, из Dodo или Yandex)
-
AI формирует пул вопросов по стеку
-
Интервью идёт в диалоговом режиме
-
После каждого ответа — фидбек: что было хорошо, где можно улучшить
-
В конце — список тем, которые стоит повторить
Вот типичный фидбек от AI после моего ответа:
«Вы объяснили, что такое GIL в Python, но не упомянули, как он влияет на многопоточность и CPU-bound задачи. Рекомендуем изучить модуль multiprocessing как альтернативу.»
Или вот про другой собес ответ
Это не замена реальному интервью, но отличный способ «набить руку».
Что я понял
-
AI не устаёт, не осуждает и не душнит — отличный спарринг-партнёр
-
Отвечать письменно — уже практика: структурируешь мысли
-
Даже просто читать вопросы, которые задаёт AI, — хорошая проверка знаний
-
Появился реальный план, какие темы повторять
-
Опять же история с рандомностью вопросов. Не знаешь, что спросит
-
Вопросы и задачи касаются именно требований к вакансии, не надо решать абстракное все подряд
-
Это НЕ ЧУДО ТАБЛЕТКА. Это просто дополнительный инструмент, который помогает. По крайней мере так честнее перед самим собой, чем во время реального интервью читерить с GPT на соседней вкладке.
А дальше?
Проект я пока веду как pet project. Если тема интересна — могу поделиться, как собираю промпты и как вытаскиваю темы из фидбека AI. Пишите в комментарии. В идеале потом сделать аудио версию ответов, чтоб они транскрибировались в текст. Чисто голосовушкой ответить. Ну и можно еще придумать какой-нибудь хард режим, в духе — лимит времени на все ответы 20 минут.
А вы когда-нибудь пробовали проводить собеседование с самим собой с помощью LLM?