Александр Шарапов Автор работы Номинация: Лучший отраслевой проект

CampusHub — ИИ-ассистент и чат-бот для учебных заведений: расписание, аудитории и Moodle в мессенджере

Лучший отраслевой проект
CampusHub — ИИ-ассистент и чат-бот для учебных заведений: расписание, аудитории и Moodle в мессенджере

Задача

Сначала — пара слов о себе, иначе непонятно, откуда вообще взялся этот проект. Я преподаю на кафедре информационных технологий и при этом больше двадцати лет пишу код не в учебных примерах, а в бою. Эти две роли в какой-то момент и сошлись в одном небольшом проекте, который я затеял для себя.

Началось всё с бытового раздражения. Чтобы узнать свои пары, мне — ровно как студентам — каждый раз приходилось заходить на сайт, искать нужную группу или свою фамилию. Таблица на всю неделю сделана под большой экран: на телефоне её растягиваешь пальцами и возишь туда-сюда. И однажды я поймал себя на мысли: я же разработчик, почему я это терплю?

Так появился бот в мессенджере. Первая версия была совсем простой: указываешь группу или фамилию преподавателя — и получаешь расписание на сегодня и на несколько дней вперёд. Свободный текст он тогда не понимал вовсе: строго группа или фамилия, строго расписание. Но даже так это оказалось куда удобнее сайта, и бот прижился — сначала у меня, потом у коллег и студентов.

Дальше становится видно настоящую задачу. Люди пишут в бот не командами, а свободным текстом: «что у меня сегодня», «когда пара у Ивановой», «есть ли окна в чт», «какие пары были в понедельник» И спрашивают не только про пары, но и про свободные аудитории, зачеты и экзамены. Так же поступают вопросы, которых в расписании нет вовсе, — как перевестись, как восстановиться, что с задолженностями, стипендией, общежитием. И это уже вопросы по регламенту учебного заведения, а это десятки, а то и сотни страниц, которые целиком никогда никто не читает.

И за всем этим стоит одна и та же рутинная работа. Студент пишет старосте или куратору, преподаватель ищет себя в общей таблице и не помнит, какая аудитория сейчас свободна. Замена, поставленная утром, доходит до группы через сарафанное радио — и часто уже после пары. Снять этот поток одинаковых вопросов с людей, которые вместо своей работы весь день отвечают на одно и то же, — вот что нужно было сделать.

Отдельное приложение тут не спасает: его нужно устанавливать, обновлять и объяснять заново каждому новому курсу. А мессенджер MAX и так есть у всех. Значит, отвечать надо там, чем человек уже пользуется.

Решение

Почему MAX. Первый мессенджер выбирался просто: там, где уже сидят студенты и коллеги. К 2026 году MAX стал национальным мессенджером — его предустанавливают на новые телефоны, а учебные заведения переводят в него официальное общение. Для отрасли это и есть решающий довод: ставить и осваивать ничего не нужно ни студенту, ни преподавателю, ни родителю. Плюс у MAX открытый интерфейс для ботов — кнопки, вебхуки, рассылки, — то есть бот может не только отвечать, но и писать первым. Позже добавился VK: часть людей пользуется им, и ВК работает как равноправный канал, а не как пересылка из MAX.

На чём сделано. Сервер — TypeScript на Node.js, MongoDB для расписаний, настроек пользователей и документов, Express для API, планировщик для регулярных задач. Расписание снимается с сайта заведения: где-то это разбор вёрстки, где-то готовый JSON источника. Текст из PDF, DOCX и HTML вытаскивается отдельными библиотеками. Языковая модель подключается через свой слой провайдеров — OpenAI-совместимые модели, YandexGPT, Anthropic, локальная Ollama; модель меняется одной переменной, и есть запасная на случай отказа основной. Поиск по смыслу считает отдельный контейнер с моделью эмбеддингов. Тесты — встроенный в Node инструмент, без внешних фреймворков. Бэкенд разворачивается в Docker, а где Docker невозможен — одним самостоятельным файлом.

В поиске используется каскадный разбор свободного запроса вместо «пусть решает модель». Сначала строгие шаблоны, потом языковая модель раскладывает фразу по полочкам — что спросили, о ком, на какую дату, — и только потом поиск по смыслу как дополнительная страховка.

Данные — только из расписания, документов и Moodle. Модель переписывает готовый ответ по-человечески, и не придумывает ответ. Если вдруг в расписании занятия есть, а модель написала «занятий нет», предохранитель срабатывает и пользователю уходит шаблонный ответ.

Результат

Сервис CampusHub работает в продакшне, и колледж, в котором я работаю, пользуется им каждый день. Теперь все типовые вопросы про расписание, аудитории, экзамены и зачеты закрывает бот — за пару секунд и круглосуточно. Замена доходит до группы в тот же час. Преподаватель видит свою нагрузку в академических часах, окна и свободные аудитории. Студенты получают уведомления из Moodle при добавлении новых дополнительных заданий от преподавателей.

Второй экземпляр сервиса развёрнут для технического университета, но пока еще не запущен в продакшн.
Так же есть открытый демонстрационный бот вымышленного университета «ДемоТех» для того, чтобы любой человек смог оценить функционал.