Привет! Мы — команда 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

Комментарии (0)