Недавно прошел хакатон AI Product Hack 2025 — интенсив, на котором за 10 дней команды создавали работающие MVP AI-решений для реальных образовательных и бизнес-задач. В программу вошли кейсы от Альфа-Банка, Яндекс Образования, X5 Tech, ИТМО, RAFT, Napoleon IT и других компаний.
GIGASCHOOL выступил партнёром и кейсодателем хакатона, предложив командным разработчикам задачу «AI-компаньон для профориентации». Идея заключалась в том, чтобы создать GenAI-агента, который в одном диалоге сможет проводить тесты и упражнения, собирать данные о пользователе и на выходе формировать персонализированный список профессий с образовательными маршрутами.
В этой статье мы расскажем, как команда «Команда есть, я их жду» взялась за этот кейс, почему он привлёк их внимание, какой стек технологий использовали и что планируется добавить.
Почему вы выбрали кейс от GIGASCHOOL? Что вас зацепило, почему именно эта проблема показалась вам интересной и откликнулась?
Катя: Я выбрала этот кейс, потому что мне близка тема профориентации. У меня есть диплом профориентолога, и я понимаю, как эта сфера работает. Именно поэтому я собрала команду для работы над этим кейсом.
Дима: Я присоединился уже к сформированной команде. Профориентация – это интересная возможность попробовать свои силы в практической области. Я часто взаимодействую со школьниками и студентами, которые стоят перед выбором. Этот проект для меня – шанс создать что-то полезное, что можно будет применить на практике. Ну и конечно, меня привлекла команда.
Георгий: Я тоже присоединился к команде позже. С Димой мы познакомились лично и сразу нашли общий язык. Он рассказал мне о команде и о выбранной теме, и мне захотелось присоединиться.
Техническая часть – самое интересное для тех, кто интересуется IT и будет читать это интервью. Какой стек технологий вы использовали, почему выбрали именно его и как построили логику работы?
Влад: Изначально нужно было разработать архитектуру. Я сделал наброски, мы обсудили их с командой и внесли корректировки.
UI у нас – Telegram. Это было одним из требований кейсодателя, т. к. это удобный, быстрый и достаточно устойчивый и масштабируемый инструмент.
В качестве ML-ядра мы использовали Яндекс.GPT-модель, подключались к ней через Яндекс.SDK, т. к. у них очень хорошая документация. Общение с моделью построили в формате диалога, разделив его на этапы, чтобы не перегружать контекст.

Первый этап – знакомство с пользователем. Мы узнаём имя, возраст и род занятий и определяем аудиторию: школьник, студент или работающий взрослый. Для каждой группы есть отдельные промты: школьникам задаём вопросы про любимые предметы, студентам – про учёбу и карьерные планы, взрослым – про текущее место работы и интересы. Диалог суммируется в текст, который далее мы будем использовать в системном промте.
Затем переходим к следующему этапу – проведение теста для профориентации. В технический промпт зашиваем собранные данные о пользователе. Модель сама формирует нужные вопросы – это было намного быстрее реализовать.
Далее мы агрегируем результаты теста и получаем 3 блока данных: краткая информация о пользователе, его интересы и предпочтения и результаты теста. На их основе модель выдаёт список подходящих профессий. Пользователь выбирает ту специальность, о которой хочет узнать, нажимая на кнопку. Например, «Python-разработчик». Бот подгружает из векторной базы знаний профессий описание, необходимые требования по хардам и пр. и список курсов из другой базы. Формируется одно сообщением с описанием специальности и роудмэпом по её освоению и отправляется пользователю.
После этого этапа пользователь может обсуждать конкретную профессию с моделью в формате диалога. Например, спрашивать, как долго нужно учиться или какие задачи будут на работе. Если ничего не подходит, бот уточняет причины и пересобирает список профессий.

Кроме того, мы жёстко зашили в промтах, чтобы нельзя было увести модель на сторонние темы, например, на обсуждение погоды или чего-то другого. Мы говорим только о профессиях и карьерном пути. Если пользователь попытается сменить тему, модель плавно возвращает его в формат диалога о профессии.
Дима: У нас было две основные базы данных.
Первая – база профессий. Мы собрали информацию с hh.ru, используя их API, проанализировали десятки тысяч вакансий и сформировали базу данных профессий. Сравнивали новые записи с уже существующими (порог совпадения примерно 80%), выделяли навыки, задачи и отрасли. В проекте мы использовали косинусную близость между эмбеддингами (полученными через Yandex Embeddings) для сравнения вакансий и профессий. В итоге получилась векторная база с суммаризацией по профессиям.
Вторая – по образованию. Информацию собирали из двух источников: для MVP мы брали данные о курсах, используя Stepik API (обработали десятки тысяч курсов, извлекли их описания); бакалаврские и магистерские программы с postupi.online, преимущественно по Москве, Санкт-Петербургу и Казани (формат обучения, преподаваемые дисциплины, преимущества и краткое описание). Эта информация также суммировалась и формировалась в векторную базу.
Когда модель формирует список профессий, она берёт подробности их базы профессий. А для построения роадмапа обращается к базе образования, подбирая курсы и программы.
Влад: Для создания MVP мы стремились минимизировать время на сбор открытых данных и использовать удобные источники, такие как API. Мы можем приоритизировать курсы GIGASCHOOL или собирать базу только из них, чтобы исключить отправку на другие платформы, такие как Stepik или Яндекс.Практикум.
Мы продолжаем дорабатывать этот функционал.
Как вы выстраивали взаимодействие с пользователем?
Мы построили структуру диалога таким образом, что система переходит из одного состояния в другое. Это отражается и в самом интерфейсе Telegram-бота.

На одном этапе мы просто ведём диалог, а на другом – выводим кнопки, при нажатии на которые происходит отправка запроса в RAG-систему для получения подробной информации о курсах. Система реализована как конечный автомат (finite state machine), с суммаризацией данных и формированием нового системного промта на каждом этапе. Это позволяет нам не хранить всю информацию в базе данных. В нашем решении вообще нет базы данных.
Такая архитектура позволяет отрабатывать и негативные сценарии. Например, пользователю выводится список рекомендаций: «Вот четыре профессии, которые тебе больше всего подходят», а он пишет: «Мне это не подходит». Мы обрабатываем подобные негативные сценарии и делаем систему гибкой к расширениям в дальнейшем.
Возникали ли у вас какие-то сложности при решении кейса? Были ли моменты, когда вы не знали, как двигаться дальше?
Да, одна из проблем была в использовании Яндекс API для онлайн-поиска рекомендуемых предметов, роадмапов и курсов. К сожалению, мы не получили ответа и поддержки от Яндекс API, поэтому Диме пришлось создать оффлайн-базу данных для рекомендации по курсам и профессиям. Поддержка Яндекса, кстати, до сих пор разбирается с проблемой: пришёл ответ, что ошибку воспроизвели, но решения пока нет.
Вы, по сути, подкинули Яндексу кейс для решения. Расскажите, как формировалось ML-ядро, как и чем обучали модель. Думаю, читателям будет полезно узнать прикладные знания.
Сами модель мы не обучали: нам предоставили API от Яндекса и сертификат на всё это. Даже без него мы бы не стали обучать модель, потому что это слишком ресурсозатратно и для нашего кейса избыточно.
Работа построена поэтапно. Сначала идёт этап «Кто» – нужно понять, кто перед нами. Для этого есть отдельный промпт. Когда информации достаточно, модель пишет «Выход», и мы переходим дальше. В MVP решили оставить этот шаг максимально простым.
Дальше – сбор мета-информации. Здесь используем functional calling: модель принимает данные о пользователе и возвращает строго один вариант из списка («школьник», «студент», «работающий взрослый»). Так мы исключаем размытые ответы и всегда знаем, какой сценарий запускать. Это называется tool calling, вызов функций LLM. Аналогично это повторяется и на следующих этапах.

После завершения сбора информации мы формируем системный промпт с выжимкой именно по конкретному пользователю (например: «Вася, 18 лет, закончил школу, хочет быть программистом, сильные и слабые стороны такие-то»). Модель уже работает только с этой суммаризацией, а не с полной историей диалога. На основе данных она предлагает список тестов и рекомендации. Затем в новый промпт передаётся суммаризация и задача: «Провести такие-то тесты». Так шаг за шагом строится индивидуальная работа с пользователем.
После тестирования мы снова вызываем tool calling, чтобы сформировать JSON – ключи: названия профессий, значения: короткие описания. Этот список сохраняем локально – он нужен для подписей кнопок в Telegram-боте и для перехода в векторную базу: при нажатии кнопки вместе с ней уходит информация о профессии в RAG-систему.
Дальше из RAG-системы доставляем контекст по выбранной профессии; модель по этому контексту формирует полное описание и список необходимых навыков. По полученному описанию идём во вторую базу – подбираем курсы и образовательные программы (бакалавр/магистратура). Финальный ответ для пользователя состоит из двух частей: описание профессии и подбор курсов.
После этого очищаем историю, создаём новый технический промпт с краткой выжимкой о пользователе и информацией о выбранной профессии (например, «Python-разработчик»), чтобы дать более детальные ответы по задачам, перспективам и т. д. Процесс повторяется при каждом нажатии кнопки, часть данных о пользователе при этом сохраняем.
Отмечу важный момент RAG: для каждой профессии мы парсим топ-20 вакансий, суммируем их (через модель) и записываем именно выжимку в векторную базу. Это даёт фактический контекст для генерации и снижает риск выдумок – модель формирует описание на основе сохранённых фактов.
Из мощностей Яндекса мы использовали API Яндекс.GPT через Yandex.Cloud.ML (SDK), а также индексовые эмбеды и векторную базу для перевода текстов в векторы и поиска по ним.
Какие перспективы по оптимизации и масштабированию проекта?
Проект можно оптимизировать так, чтобы подключать любую модель – не только Яндекс.GPT, но и GigaChat или OpenAI. Для этого архитектуру нужно сделать более гибкой. Мы же выбрали SDK от Яндекса: на раннем прототипе с GigaChat возникли проблемы с универсальной библиотекой, а Яндекс-библиотека оказалась стабильнее и безошибочнее.
В плане масштабирования можно подключать и локальные модели, не обязательно всё отправлять по API. Но их качество ниже, поэтому часть функционала придётся дорабатывать.
В презентации проекта я видела упоминание о транскрибации голосовых сообщений. Планируете ли это добавить?
Влад: Да, добавить транскрибацию несложно. Мы уже готовы принимать текст. Просто будем пропускать его через сервис, который преобразует голос в текст. Архитектура решения почти не изменится. Добавится лишь ещё один сервис для получения текста из голоса, и всё будет работать как прежде.
Георгий: Ядру не важно, откуда приходит информация: из Telegram через текстовое сообщение, видеосообщение или голосовое сообщение. Добавится только дополнительный сервис, своего рода «прослойка».
А как насчёт сбора базы данных пользователей?
Базу данных прикрутить – это не проблема. Но нужна консультация юриста: какую информацию мы можем хранить.
Сейчас проходит множество хакатонов, почему вы выбрали именно этот и решили, что сейчас самое время? И это был ваш первый опыт участия в хакатонах?
Влад: Тут университету спасибо. Если хотите получить зачёт, идите на хакатон. Если хотите иметь долг, не идите на хакатон. Шутка, конечно) Просто идите на хакатон и всё.
Для меня это был первый хакатон – раньше руки как-то не доходили. За 2 недели мы почти не спали (суммарно сна было, дай бог, часов 12), выпили примерно 6 литров энергетиков и около 8 литров кофе, но это привело к победе. Хакатон дал классный опыт: сжатые сроки, новая задача, возможность проверить себя. Плюс, команда у нас собралась отличная – если возникала проблема, мы всё оперативно обсуждали и перестраивали вектор нашего решения.
Георгий: Команда была разношёрстная, но если у кого-то случался затык, мы на обсуждении быстро приходили к какому-то решению. Глобальных проблем не было.
Ребята продемонстрировали глубокое понимание самой проблемы профориентации и доказали, что за ограниченное время можно собрать рабочий прототип с реальным прикладным значением. Команда «Команда есть, я их жду» продумала архитектуру, интеграцию ML-ядра, векторных баз и удобного интерфейса. Их решение объединяет тестирование, аналитику и образовательные маршруты в одном диалоге, что делает выбор профессии проще и понятнее для разных аудиторий – школьников, студентов и взрослых.
Этот кейс показывает, что технологии могут помогать людям принимать важные карьерные решения, подчеркивает ценность хакатонов как пространства, где рождаются практические и социально значимые AI-продукты.
Комментарии (2)
Kupkupich
30.09.2025 18:12Профориентация слишком тонкая тема, чтобы полностью доверять ИИ. Хорошо как подсказка, но точно не как приговор
dennmyre
Не знаю, как кто, а я полагаю, мощный вышел кейс. Сам только начинаю входить в тему, а тут сразу такой подгон полезных фишек, еще и на основе YaGPT, что довольно актуально (ибо хорош дяде Сэму монополизировать ИИ ;). Благодарос!