Новичок написал Go-бота для собеседований: голос, 860 вопросов и 25–35 МБ памяти
Автор учил Go и упёрся в то, что знает темы, но не может внятно рассказать их вслух. Он собрал Telegram-бота: тот принимает голосовые ответы, распознаёт их через Deepgram и сверяет с эталонными критериями, а не просто хвалит. Слабые вопросы возвращаются в очередь на Redis. Стек лёгкий: бот занимает 25–35 МБ памяти и живёт на VPS за 200 рублей.
AI-обработка оригинала Habr AI; редакция Hamidun News
Знакомая ситуация: прочитал десяток статей про рантайм Go, в голове каша из слайсов, планировщика GMP и escape analysis, а на собеседовании язык заплетается. Автор этого проекта днём работает в автосервисе, а ночами учит бэкенд. Проблему он решил кодом: написал Telegram-бота, который задаёт технические вопросы, слушает голосовые ответы и оценивает их без скидок.
Почему голос и почему не Whisper
Идея проекта в том, что на собеседовании эссе никто не просит, там нужно говорить. Поэтому бот принимает именно войсы. Первая попытка с локальным Whisper провалилась: на дешёвом VPS без видеокарты каждое аудиосообщение укладывало процессор на 100%.
Автор перешёл на облачный Deepgram с моделью Nova-2. Голосовое из Telegram в формате OGG/Opus обрабатывается меньше чем за секунду. Русский айтишный сленг вроде «горутины», «мьютекс» или «дженерики» не превращается в кашу, а это для такого бота критично. Практический вывод простой: если у вас нет GPU, а проект небольшой, самохостинг распознавания речи часто обходится дороже готового API, если считать время и нервы.
Как заставить модель не поддакивать
Главная беда LLM-оценщиков в лести. Спросите «как тебе мой ответ?», и почти наверняка получите «молодец, отлично!», даже если ответ был слабым. Автор собрал базу из 860 вопросов по 85 темам и к каждому добавил эталонные критерии, key_points. Промпт заставляет DeepSeek (он работает через Groq Cloud API) пройти по списку: проверить каждый критерий, поставить оценку от 1 до 10, перечислить упущенное и дать короткий жёсткий разбор без комплиментов.
Пример из проекта. Кандидат говорит: «слайс при переполнении удваивается». Но он не упомянул порог в 256 элементов и новую формулу из Go 1.18+. Без чек-листа модель легко засчитала бы такой ответ. С чек-листом она указывает, чего именно не хватило.
Приём универсальный. Не просите модель «оценить», дайте ей рубрику с обязательными пунктами. То же работает для автопроверки код-ревью, ответов поддержки или тестовых заданий.
Повторение, мок-собес и грабли
Зубрить вопросы подряд бесполезно, поэтому автор добавил интервальное повторение. Для каждого пользователя в Redis собирается очередь на сессию. Ответ на 8–10 баллов отправляет вопрос в конец очереди. Если баллов меньше 6, вопрос вернётся уже через пару шагов. Все попытки пишутся в PostgreSQL, из них строится статистика. Есть и режим симуляции собеседования: выбираешь грейд от стажёра до сеньора, получаешь 10 вопросов с уточнениями по ходу и итоговый вердикт Hire или No Hire с разбором ошибок.
Грабли оказались типичными для любого Telegram-бота:
- HTML-разметка. Если модель вернула код без бэктиков или потеряла закрывающий тег, Telegram отклоняет сообщение. Автор написал санитайзер: он находит Go-код по ключевым словам (package, func, :=) и сам оборачивает его в pre/code с экранированием.
- Двойные клики. Быстрое нажатие на инлайн-кнопку даёт два колбэка подряд, и в Redis возникала гонка с двумя параллельными сессиями. Лечится тем, что кнопки гасятся через EditReplyMarkup ещё до тяжёлых запросов в базу.
- Безопасность деплоя. Контейнеры запускаются не от root, а от отдельного пользователя appuser. В docker-compose.prod.yml включены read_only: true и cap_drop: ALL, а системные папки вынесены в tmpfs.
Что здесь стоит забрать себе
Стек такой: Go 1.23, telebot.v3, PostgreSQL 16 через pgx/v5, Redis 7, Docker Compose, структура по Clean Architecture. По словам автора, в проде бот ест 25–35 МБ памяти, стартует за доли секунды и живёт на сервере за 200 рублей в месяц. Для лёгкого сервиса, который в основном ходит во внешние API, это хороший аргумент в пользу Go.
Есть и ограничения. Это личный проект новичка, и сам автор просит опытных разработчиков посмотреть код и архитектуру. Нет данных о том, насколько оценки модели совпадают с оценками живого интервьюера. Метрик качества распознавания и разбора тоже не приведено, так что о «строгости» можно судить только по описанию промпта.
Но как набор готовых решений текст полезен. Для голоса берите облачное распознавание, если нет GPU. Для честной оценки от LLM давайте ей чек-лист, а не просите мнение. Для Telegram-бота заранее защищайтесь от двойных нажатий и битой HTML-разметки. Исходники открыты: github.com/powood/Tg_GO_Mentor, а бот доступен как @go_SikkiMentor_bot.
- 12 нояб. 2026 г.Сотрудник Railway запустил ИИ-агента на DeepSeek, и тот полез в инфраструктуру конкурента
- 12 нояб. 2026 г.Artificial Analysis выявила потери качества у 24 из 103 API-эндпоинтов
- 12 нояб. 2026 г.NaiveAI сократила медианное время ответа до 3,1 секунды в тесте Latent Space
- 12 нояб. 2026 г.Как найти трафик из ChatGPT в Метрике и GA4: в прямых заходах прячется до 6,3%
Вопросы и ответы по материалу
Что известно по теме: почему голос и почему не Whisper?
Идея проекта в том, что на собеседовании эссе никто не просит, там нужно говорить. Поэтому бот принимает именно войсы. Первая попытка с локальным Whisper провалилась: на дешёвом VPS без видеокарты каждое аудиосообщение укладывало процессор на 100%. Автор перешёл на облачный Deepgram с моделью Nova-2. Голосовое из Telegram в формате OGG/Opus обрабатывается меньше чем за секунду. Русский айтишный сленг вроде «горутины», «мьютекс» или «дженерики» не превращается в кашу, а это для такого бота критично.
Что известно по теме: как заставить модель не поддакивать?
Главная беда LLM-оценщиков в лести. Спросите «как тебе мой ответ?», и почти наверняка получите «молодец, отлично!», даже если ответ был слабым. Автор собрал базу из 860 вопросов по 85 темам и к каждому добавил эталонные критерии, key_points. Промпт заставляет DeepSeek (он работает через Groq Cloud API) пройти по списку: проверить каждый критерий, поставить оценку от 1 до 10, перечислить упущенное и дать короткий жёсткий разбор без комплиментов. Пример из проекта.
Что известно по теме: повторение, мок-собес и грабли?
Зубрить вопросы подряд бесполезно, поэтому автор добавил интервальное повторение. Для каждого пользователя в Redis собирается очередь на сессию. Ответ на 8–10 баллов отправляет вопрос в конец очереди. Если баллов меньше 6, вопрос вернётся уже через пару шагов. Все попытки пишутся в PostgreSQL, из них строится статистика. Есть и режим симуляции собеседования: выбираешь грейд от стажёра до сеньора, получаешь 10 вопросов с уточнениями по ходу и итоговый вердикт Hire или No Hire с разбором ошибок.
Протестируйте новые LLM и мультимодальные модели в одном окне
Платформа Nomad AI (nomadnet.ai) даёт прямой доступ к Claude Opus 5.5, GPT-6, Gemini 3.1, DeepSeek и автономным агентам без VPN, зарубежных карт и зоопарка подписок.
Главное из мира ИИ — раз в неделю
7 ключевых событий недели, отобранных вручную. Без шума, репостов и пресс-релизов.
Готово! Проверьте почту — мы отправили подтверждение.