Alpha Tessera Sensei
Мультиагентная сеть для весёлой проверки лабораторных работ
Установите виртуальную машину Java и загрузите дистрибутив из релизов GitHub — этого достаточно для начала работы.
На GitHub доступны полные исходные тексты под лицензией BUSL-1.1. Присоединяйтесь к проекту и вносите свой вклад!
Исходные тексты Alpha tessera Sensei подробно документированы.
Alpha Tessera Sensei — это система автоматической проверки лабораторных работ по программированию. Она использует агентов на базе больших языковых моделей, чтобы изучать студенческие репозитории, сопоставлять код с требованиями задания, выставлять оценку и формировать подробный отзыв. Но есть одна особенность! Результат проверки выдаётся не в виде бездушного отчёта с фразой «не соответствует требованиям!», а в виде комментариев древнего японского сенсея, для которого UNIX и путь бусидо — почти две стороны одной командной строки (или красота цветущей сакуры и красота UNIX, если сенсей понимает, что пишет студентке).
Зачем нужен Sensei?
Ручная проверка лабораторных работ отнимает у преподавателя часы, дни и иногда остатки веры в его любимый UNIX. Alpha Tessera Sensei берёт рутинную часть работы на себя. Преподаватель задаёт условие лабораторной работы, а система самостоятельно:
- клонирует репозиторий студента;
- находит нужную директорию с лабораторной работой;
- анализирует исходный код;
- проверяет соответствие требованиям задания;
- определяет команду для сборки и запуска;
- выставляет оценку от 0 до 10;
- формирует подробный отзыв;
- отправляет результат студенту по электронной почте.
Преподавателю остаётся сосредоточиться на действительно важных вещах. Например, на следующем задании, кофе или философском вопросе о том, почему программа прекрасно работает в UNIX, но отказывается это делать в Microsoft Windows.
Проверка в стиле древнего сенсея
Персонаж сенсея — не просто весёлая разновидность технического отчёта. Он превращает унылую проверку в понятную и запоминающуюся обратную связь. Хорошие решения получают похвалу в духе самураев, сёгунов и безупречно заточенных катан. Слабые места могут быть сравнены с ёкодзуном, который пытается пройти в дверь боком, или с воином, забывшим катану перед выходом на поле боя. При этом тон остаётся доброжелательным и конструктивным, сенсей никогда не касается чувствительных вопросов, имеет обширный список запретных тем, никогда не обижает и не оскорбляет учащегося, каждое письмо заканчивает поклоном и восхищением с наставлением укреплять в себе дух бусидо (или бант на кимано, дабы был похож на цветок цветущей сакуры). Цель системы — не высмеять студента, а объяснить, что именно получилось хорошо, где нарушены требования и в каком направлении стоит двигаться дальше, а где прямо совсем не ниндзя. Даже если программа падает сразу после запуска, путь к просветлению в мудрости UNIX ещё не закрыт.
Как устроен процесс проверки
Проверка лабораторной работы проходит через несколько специализированных AI-агентов. Каждый агент отвечает за отдельный этап, поэтому итоговый анализ не сводится к одному загадочному ответу нейросети.
DirectorySelector
Находит в репозитории нужную поддиректорию с лабораторной работой.
Это особенно полезно, когда в одном репозитории уже накопилась целая коллекция заданий, экспериментов и папок с названиями вроде my_lab_final_final_really_final.
TaskScorer
Проверяет исходные файлы на соответствие требованиям задания. Агент возвращает числовую оценку от 0 до 10.
TaskConforming
Готовит подробный итоговый вердикт в фирменном стиле UNIX-сенсея.
В отзыве можно увидеть как похвалу за чистую реализацию, так и мудрое напоминание о том, что комментарий TODO — это ещё не выполненная задача.
RunCommandDetector
Определяет команду, необходимую для сборки и запуска студенческого проекта. Агент учитывает язык программирования и структуру репозитория. Он умеет работать с Python, C, Java, shell-скриптами и другими языками.
NoCommandNotifier
Если подходящую команду запуска найти не удалось, этот агент формирует поэтичное уведомление. Потому что иногда даже самый мудрый сенсей не может запустить программу, которой не дали способа начать путь, подобный реставрации Мэйдзи.
Безопасный запуск студенческого кода
Студенческий код запускается внутри изолированного Docker-контейнера. Он не получает прямого доступа к хост-системе и работает в заранее определённых рамках. Для каждого запуска можно настроить:
- максимальный объём памяти;
- количество доступных виртуальных ядер;
- ограничение на число процессов;
- максимальное время выполнения;
- отключение сетевого доступа;
- режим только для чтения корневой файловой системы;
- временную файловую систему;
- максимальный размер логов.
Это позволяет проверять даже неидеальный код без риска превратить сервер в полигон для шуток студентов. Если программа решила создать тысячу процессов или вывести в лог весь интернет, контейнер вежливо напомнит ей о том, что на каждого самурая найдётся свой ниндзя.
Работа с Git-репозиториями
Система умеет клонировать студенческие репозитории в режиме shallow copy. Это сокращает объём загружаемых данных и ускоряет проверку. После завершения работы временные файлы и каталоги рекурсивно удаляются. Таким образом, сервер не превращается в археологический музей всех когда-либо отправленных лабораторных работ.
Автоматический запуск по расписанию
В Alpha Tessera Sensei встроен планировщик на основе внутреннего cron. Он периодически просыпается и начинает махать катаной над головой, т. е. запускает проверку для всех зарегистрированных студентов. Интервал запуска можно настроить под учебный процесс. Система может проверять работы регулярно, без необходимости вручную напоминать ей о каждом новом цикле.
Хранение данных
Информация о студентах и история взаимодействия с AI-агентами сохраняются в базе H2 MVStore. Данные переживают перезапуск приложения. Это означает, что Sensei помнит не только текущую проверку, но и контекст предыдущих решений. Память у него устроена надёжнее, чем у студента, который забыл, в какой ветке Git лежит рабочая версия.
Уведомления по электронной почте
После завершения проверки система отправляет результат студенту по почте. Студент получает не только оценку, но и подробный комментарий о своей работе.
Управление через gRPC
Для административных операций предусмотрен gRPC-интерфейс. Описание сервиса задаётся с помощью Protocol Buffers. Через интерфейс можно выполнять операции управления системой, например добавлять студентов. Такой подход делает интеграцию с внешними сервисами удобной и позволяет подключать Alpha Tessera Sensei к существующей инфраструктуре курса или университета.
Безопасное чтение исходного кода
Инструмент чтения файлов, доступный AI-агентам, использует Apache Tika для определения MIME-типа. Бинарные и скрытые файлы автоматически пропускаются. Пути, ведущие за пределы рабочего каталога, блокируются. Это защищает систему от обхода рабочей директории и не заставляет языковую модель изучать содержимое случайного бинарного файла. Иными словами, Sensei знает, какой файл стоит открыть, а какой лучше оставить в покое.
Настраиваемая AI-модель
Alpha Tessera Sensei работает с OpenAI-совместимыми API через LangChain4j. Параметры чат-модели можно настроить под конкретную инфраструктуру:
- URL конечной точки;
- API-ключ;
- название модели.
Это позволяет использовать подходящую модель и не привязываться к одному поставщику. Можно выбрать облачный сервис, корпоративный endpoint или собственную совместимую инфраструктуру.
Для кого предназначен проект
Alpha Tessera Sensei подойдёт:
- для всех, у кого есть хорошее чувство юмора и попутное желание постигать мудрость UNIX;
- преподавателям программирования;
- учебным лабораториям;
- университетским курсам;
- образовательным платформам;
- командам, проверяющим большое количество однотипных заданий;
- разработчикам систем автоматизированного code review.
Проект особенно полезен там, где преподавателю приходится регулярно проверять множество репозиториев по похожим критериям (или при явном недостатке духа бусидо у учащихся).