Привет! Мы — команда StreetCode. На хакатоне AI Product Hack [AI]ducation мы решили проверить, может ли AI не просто помогать студентам, а понимать контекст академической дисциплины. Так появился Джейн — AI-ассистент преподавателя урбанистики, созданный для Университета ИТМО.
За десять дней мы прошли путь от идеи до работающего прототипа: сформулировали гипотезу, построили RAG-архитектуру, внедрили систему проверки безопасности и протестировали бота на реальных студенческих работах.
В этой статье расскажем, какую проблему мы решали, как устроен ассистент изнутри и что показали на финале хакатона.
Проблема
На курсах по урбанистике преподаватели снова и снова сталкиваются с одной и той же ситуацией: студенты пишут поверхностно, почти не обращаются к первоисточникам, а преподавателям приходится тратить часы на повторные проверки и однотипные комментарии.
Попробовать подключить универсальные AI-инструменты вроде ChatGPT — идея не новая, но в реальности она не решает задачу. Да, нейросети знают, кто такие Джейн Джекобс, Ян Гейл или Шэрон Зукин, и могут рассказать об их трудах. Проблема в другом — они не знают контекста конкретного курса. Универсальный AI подсказывает источники по теме, а не те, что студенты уже проходили или должны использовать по программе. В итоге рекомендации оказываются мимо цели: студенту приходится разбираться в новых материалах, что требует больше времени, и чаще всего он просто этого не делает. Плюс есть риск галлюцинаций — когда модель уверенно придумывает факты, которых нет в действительности, и выдаёт их за правду.
Хотелось, чтобы AI стал настоящим помощником преподавателя — с предметной экспертизой, характером и чувством меры. Таким, кто поможет студенту понять, где мысль недоработана, а где стоит обратиться к классике, и при этом действительно снимет рутину с преподавателя.
Почему мы выбрали Джейн Джекобс
Мы хотели, чтобы наш AI-ассистент был экспертом с характером. Джейн Джекобс, автор «Смерти и жизни великих американских городов», подошла идеально. Её внимание к деталям, живым процессам и людям стало моделью для нашего AI.
«Джейн» читает работы студентов, подсказывает, какие классические концепции использовать, и делает это поддерживающе, но с легкой критикой. Проверка превращается в живой диалог, студенты глубже работают с материалом, а преподаватели экономят время. Личность ассистента мотивирует: она независимая, настойчивая и с лёгким чувством юмора.

Идея решения и дорожная карта разработки
Мы шли по принципу «быстро сделать, быстро проверить, исправить», иначе никак за 10 дней. Каждая контрольная точка на хакатоне задавала, что должно быть готово, и помогала держать фокус.
6 сентября: MVP v0
Сначала мы собрали концепцию и накинули черновую архитектуру. Проверили, что AI вообще может читать материалы курса и выдавать осмысленные ответы через RAG.9 сентября: MVP v1
Подключили Telegram-бота и начали улучшать содержание ответов. Проверяли, как AI ведет себя «вживую» с пользователем, и подправляли рекомендации. Уже стало похоже на диалог с живым наставником.11 сентября: MVP v2
Сфокусировались на стиле и точности: ответы стали более содержательными, с нормальными ссылками на источники. Сделали базовую безопасность и улучшили UX, чтобы общение с ботом было комфортным.13 сентября: Финал
Демонстрация готового прототипа. Джейн теперь могла вести осмысленный диалог со студентами, подсказывать источники и экономить время преподавателей.
Каждая итерация давала нам новые инсайты. Так, меньше чем за 10 дней, из черновика получился живой, работающий прототип.
Техническая архитектура
Всё начинается с интерфейса. Почему Telegram? Быстро, удобно, привычно для пользователя и без лишнего фронтенда. Бот принимает файлы и текстовые запросы от студентов и возвращает готовые ответы, рекомендации и материалы. Пользователь видит простой чат, а за кулисами творится вся магия.
Архитектура построена по принципу разделения ответственности (Separation of Concerns) для достижения устойчивости, масштабируемости и простоты в поддержке.
Бот слушает входящие сообщения из Telegram. Получив сообщение, он немедленно преобразует его в стандартный HTTP-запрос и пересылает на бэкенд. Это освобождает бота от долгих операций — он всегда "отзывчив", а вся "магия" происходит за кулисами.
Все тяжёлые операции происходят на бэкенде. Он обрабатывает запросы, управляет очередью асинхронных задач, чтобы бот не зависал, пока LLM думает, логирует действия и подготавливает данные для модели. Можно сказать, backend — это сердце системы, своего рода “дирижер” проекта.
Чтобы всё работало одинаково на локальной машине и в продакшене, мы упаковали бэкенд, бота и работу с LLM в Docker-контейнеры. Это избавляет от классического «у меня работает, а у тебя нет» — запускаешь контейнер и всё сразу готово.
Система не пытается "изобретать велосипед", а использует существующие внешние сервисы:
Yandex LLM API предоставляет мощные языковые модели;
Lakera Guard API отвечает за AI-безопасность;
ClamAV Daemon предоставляет инструмент для антивирусной проверки;
Преимущества такого подхода:
бота и бэкенд можно масштабировать независимо, например, можно запустить несколько инстансов бэкенда, если нагрузка вырастет;
каждый компонент (бот, бэкенд, модули безопасности) можно тестировать изолированно;
изменения в логике AI не затрагивают код бота, и наоборот, а добавление новой фичи требует изменений только в одном месте;
даже если один из внешних сервисов временно недоступен, система реализует graceful degradation и не "упасть" полностью.

RAG
Чтобы AI не придумывал ответы «из головы», а опирался на реальные источники, мы сделали базовый RAG. Суть проста: сначала строим локальный индекс всех материалов курса — PDF, DJVU, лекции — с помощью модулями indexer.py. Индексатор превращает тексты в векторные представления (эмбеддинги) и сохраняет их в локальном индексе src/llm/index, чтобы модель могла быстро находить релевантные фрагменты. Мы добавляем к отрывкам текста информацию о том, из какого источника и с какой страницы был взят фрагмент, чтобы добавить это в контекст запроса.
Когда LLM генерирует ответ, она обращается к индексу, достает нужные куски и использует их для формирования содержательных рекомендаций. В результате модель всегда опирается на проверенные данные, что позволяет ей давать точные ответы со ссылками на конкретные источники - классические работы Джекобс, Гейла и Зукин и других авторов.
LLM
После того как RAG находит нужные материалы, мы добавляем их к контексту промпта. Gemma 3 27B, которую мы вызываем через Yandex Cloud API, генерирует отзывы о работах студентов в стиле Джейн Джекобс — поддерживающе, но с критикой, ссылаясь на классические концепции, и помогает студентам глубже погрузиться в материал.
Все взаимодействия происходят через наш бот: студент загружает работу, отправляет запрос на анализ и получает готовый ответ в том же чате. Бэкенд на Flask управляет всеми запросами, обрабатывает их асинхронно, логирует действия и передает данные модели.
Сочетание LLM и RAG позволяет Джейн давать конкретные рекомендации и ссылки на источники. Пользователь получает живой диалог с AI, который знает курс и помогает студенту работать с материалом глубже, а преподаватель экономит время на проверке.
Backend и безопасность
Бэкенд-система спроектирована с учетом принципов безопасности и отказоустойчивости. Мы реализовали многоуровневую систему защиты, которая охраняет как пользовательские данные, так и стабильность работы самого сервиса.
Все файлы шифруются на лету с AES-256 непосредственно перед сохранением, ключ шифрования ENCRYPTION_KEY хранится отдельно от кода и передается через переменные окружения, что обеспечивает защиту информации даже в случае несанкционированного доступа к системам хранения.
Каждое входящее сообщение проходит через серию проверок, образующих "защитный периметр", так все загружаемые файлы в реальном времени проверяются движком ClamAV Daemon на наличие известных вредоносных сигнатур, а все текстовые запросы анализируются сервисом Lakera Guard API для выявления и блокировки prompt-инъекций, попыток jailbreak и других атак, нацеленных на языковые модели. Также для снижения поверхности атаки система принимает только файлы доверенных текстовых форматов (.docx и .txt), что исключает риск выполнения вредоносного кода. Перед обработкой автоматически удаляются персональные данные из текста: имена, контакты и всю чувствительную информацию.
Чтобы предотвратить злоупотребления и гарантировать равный доступ для всех пользователей при высокой нагрузке, действует политика лимитов - для каждого пользователя установлено ограничение в один анализ в день. Это защищает систему от перегрузки и обеспечивает справедливое распределение вычислительных ресурсов.
Принцип "работает везде одинаково" распространяется и на настройки безопасности. Для запуска всей системы достаточно создать файл .env рядом с docker-compose.yml и прописать в нем все необходимые ключи доступа (Telegram Bot, Yandex Cloud, Lakera Guard) и секретный ключ шифрования.
Итоги тестирования
Мы успели протестировать прототип на 13 работах от 6 студентов. Результаты приятно удивили: пользователи добавляли по 1–2 новых конкретных тезиса в финальной версии работы после комментариев Джейн, а в вердиктах ассистента обычно использовались 1–3 релевантные цитаты из базы знаний.

Мы были очень рады еще до защиты запустить пилот. От заказчика получили положительный отзыв, а студенты оценили пользу бота настолько, что несколько раз подряд отправляли свои работы на проверку. Чтобы студенты не застряли в бесконечной итеративной доработке нам пришлось ввести ограничение — не более одного анализа в день на пользователя.
Мы проанализировали, на какие источники чаще всего опиралась модель при формировании вердиктов:
Автор |
Доля в ответе модели |
Доля в чанках RAG |
Зукин |
12/13 (≈92%) |
13/13 (100%) |
Лэндри |
9/13 (≈69%) |
13/13 (100%) |
Джекобс |
3/13 (≈23%) |
11/13 (≈85%) |
Ревзин |
0/13 (0%) |
13/13 (100%) |
Ольденбург |
1/13 (≈8%) |
5/13 (≈38%) |
Холлис |
0/13 (0%) |
1/13 (≈8%) |
По таблице видно, что модель в основном опиралась на предоставленные источники, как и задумано. Иногда, как в случае с Ревзиным, она считала материал не релевантным конкретному запросу, поэтому не включала его в ответы.
Итог: бот помогает углублять проекты студентов, повышает академическую глубину работ и экономит время преподавателей, а ограничение на проверки добавило дисциплины и предотвратило "цирк" с отправкой работы 20 раз подряд.
Дальнейший план
Перенос бота на вычислительные ресурсы ИТМО
Расширение базы знаний и функционала
Внедрение в учебный процесс кафедры урбанистики и пилотные курсы
Впечатления
Хакатон стал для нас настоящим испытанием и одновременно отличной возможностью. Всего за несколько дней мы прошли полный цикл разработки — от идеи и проектирования архитектуры до работающего прототипа и презентации перед экспертами. Это показало, как важно быстро находить общий язык внутри команды, принимать смелые технологические решения и расставлять приоритеты в условиях ограниченного времени.
— Артём Кузьмичев, System Architect, Backend, Telegram Bot. Инженер по разработке (MLE/MLOps), Сбер
Особенно помогла преподаватель, которая была кейсодателем: её поддержка и открытость позволили создать проект, который действительно полезен и содержателен. Мы видели, как студенты взаимодействуют с ботом, как модель помогает им углубляться в материал и получать конструктивную обратную связь — это стало лучшей проверкой того, что мы сделали.
— Егор Колесников, LLM, RAG. Разработчик CV, Яндекс
Главный вывод из проекта: успех IT-решения держится на трёх столпах — чёткое распределение ролей в команде, честное выполнение обязательств и активное участие заказчика в процессе разработки. Когда все три элемента на месте, продукт не просто выходит на финиш, он выходит качественным и полезным.
— Сергей Станкевич, Product Manager. Руководитель программы проектов, Альфа-Банк
Хакатон показал нам, на что мы реально способны как команда, дал бесценный опыт кросс-функциональной работы и научил ценить ответственность и сотрудничество. Этот формат проверяет и знания, и коммуникацию, и умение быстро принимать решения — и именно такой опыт хочется повторять.
Подробнее о проекте: SourceCraft — StreetCode / Jane AI Assistant