РАЗРАБОТКА

Автомеханик собрал Go-тренажёр собеседований с голосовой проверкой

860 вопросов по 85 темам Go легли в основу Telegram-бота, который распознаёт голосовые ответы и возвращает ошибки кандидата.

✍️ Редакция iTech News | 13.11.2026 | ⏱ 4 мин | Источник: Habr / Карьера
📦

Разработчик-новичок собрал тренажёр собеседований Go в формате Telegram-бота: сервис содержит 860 вопросов по 85 темам, принимает текстовые и голосовые ответы, а затем возвращает оценку и список пропущенных пунктов. Для русскоязычных инженеров это знакомый сценарий: теорию о рантайме и памяти можно читать в дороге сколько угодно, но объяснить её вслух под таймер на собеседовании заметно сложнее.

О проекте сообщает Habr / Карьера. Автор, который днём работает в автосервисе, а по вечерам осваивает бэкенд на Go, решил не делать очередной учебный CRUD-проект. Вместо этого он автоматизировал собственную подготовку к техническим интервью: бот выдаёт вопрос, принимает ответ, фиксирует результат и возвращает слабые темы в следующую сессию.

Сервис написан на Go 1.23 и разделён по принципам Clean Architecture. В доменном слое живут сущности вопросов, пользователей и попыток; сценарии интервью, тестов и просмотра прогресса вынесены отдельно от Telegram-хендлеров и хранилищ. За взаимодействие с мессенджером отвечает telebot.v3, PostgreSQL 16 подключён через pgx/v5 и пул соединений, миграции выполняются golang-migrate. Redis 7 хранит состояние сессий и очереди повторения.

Вся инфраструктура развёрнута через Docker Compose на недорогом VPS с Ubuntu. По оценке автора, бот потребляет 25–35 МБ оперативной памяти и быстро стартует. Контейнеры запускаются не от root: используется отдельный пользователь, файловая система задана в режиме read-only, возможности Linux сброшены через cap_drop: ALL, а временные системные каталоги вынесены в tmpfs. Для pet-проекта это не обязательный ритуал, но полезная привычка: именно на таких мелочах учебный сервис начинает походить на приложение, которое не стыдно показать на техсобесе.

Ключевая особенность — голосовой режим. Автор сначала пробовал локально запускать Whisper, однако дешёвый сервер без GPU упирался в загрузку процессора при обработке каждого сообщения. В результате распознавание перевели в Deepgram с моделью Nova-2: Telegram присылает аудио OGG/Opus, сервис получает расшифровку и передаёт уже текст следующему модулю. По словам автора, обработка занимает менее секунды и корректно распознаёт распространённые русские термины из Go-разработки — от горутин до дженериков.

Оценку формирует DeepSeek через Groq Cloud API. Здесь автор не ограничился общим запросом в духе «проверь ответ»: к каждому вопросу добавлены эталон и обязательные ключевые пункты. Модель должна проверить наличие каждого критерия, поставить балл от 1 до 10, назвать пропуски и дать короткий разбор. Такой подход не делает оценку нейросети безошибочной, но заметно сужает ей пространство для привычной вежливой расплывчатости. Например, ответ о росте слайса не получит высокий балл, если кандидат опустил важные детали, заложенные в критерии.

Второй механизм — интервальное повторение. Уверенный ответ с оценкой 8–10 отправляет вопрос в конец очереди, а результат ниже 6 возвращает его через несколько шагов. История попыток и баллы остаются в PostgreSQL, поэтому пользователь может увидеть собственную статистику. Есть и режим имитации интервью: он собирает десять вопросов под выбранный уровень — от стажёра до сеньора, допускает уточнения и завершает сессию вердиктом о найме либо отказе с перечнем ошибок. Формально такой вердикт не заменит интервьюера, зато заставляет отвечать связно, а не узнавать знакомые слова в конспекте.

В процессе автор столкнулся с вполне продовыми проблемами. Ответы модели с некорректной HTML-разметкой могли не отправляться через Telegram, поэтому пришлось добавить санитайзер: он экранирует код и оборачивает его в безопасную разметку. Повторное быстрое нажатие на инлайн-кнопку создавало две параллельные сессии в Redis; проблему решили немедленным отключением кнопки через EditReplyMarkup до тяжёлых операций с базой и внешними API.

Подобный тренажёр собеседований Go полезен не тем, что обещает автоматическую оценку уровня, а тем, что превращает подготовку в воспроизводимый цикл: ответил, получил конкретный пробел, повторил. Главный вопрос для таких сервисов остаётся прежним: насколько тщательно поддерживаются база вопросов и критерии, особенно когда меняются детали языка и его рантайма. Но как учебный проект он уже демонстрирует более востребованный набор навыков, чем очередной список задач: интеграции, очереди, базы данных, контейнеризация и работа с ограничениями внешних AI API.

Поделиться: Telegram X LinkedIn