- BrainTools - https://www.braintools.ru -
Я дата-инженер, которому захотелось немного творчества [1]. Писать сотни строк SQL на работе не всегда доставляет радость, поэтому решил углубиться в веб-разработку, чтобы иметь возможность сделать то, что можно “потрогать” руками и, возможно, поделиться этим с окружающими.
В итоге родилась идея AI тьютора – смесь двух популярных нынче направлений Онлайн-обучение и AI. AI Тьютор – сервис генерации образовательного контента с возможностью проверки знаний и виртуальным помощником.
Изначально задумка была в том, чтобы люди могли найти готовую образовательную программу в виде списке тем, загружали в сервис и получали в ответ готовый структурированный курс с контентом от AI. Идея реализовалась, но достаточно быстро трансформировалась и обросла дополнительным функционалом.
Платформа поддерживает два режима создания курсов, которые подойдут как для быстрого старта, так и для опытных авторов:
Идеально подходит, если вы хотите быстро запустить курс. Достаточно ввести название , ваш запрос или список тем — AI сам:
предложит структуру курса (модули и уроки)
создаст содержимое всех уроков
сгенерирует задания
Вы полностью контролируете структуру и материалы курса:
Добавляйте модули и уроки вручную
Загружайте свои тексты и заметки
Используйте AI для редактирования и дополнения
Отлично подходит для авторов и индивидуальных программ.

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

Что есть кроме лекций?
Я решил сделать несколько дополнительных “фишек”
В каждом уроке работает AI-помощник: задавайте вопросы, получайте пояснения, расширяйте темы. Это как личный репетитор — всегда рядом и готов объяснить.

AI автоматически создаёт проверочные задания по каждому уроку. Выполнили — получите обратную связь, советы и рекомендации по улучшению.

Не любите читать? Слушайте уроки в аудиоформате. Генерация голосом — идеальна для обучения [2] в дороге, на прогулке или по пути на работу.

Отмечайте пройденные уроки, следите за прогрессом и возвращайтесь к материалам, когда удобно. Обучение — в удобной системе, которая всё запомнит за вас.

А что же там под капотом?
По умолчанию используется open-source модель Qwen2.5-32B, но пользователь может в личном кабинете подлключить свой аккаунт от другой более продвинутой и быстрой модели для генерации более качественного контента. Например, всяческие GPT от OpenAI. Лично я тестировал разные варианты и все они +- одинаково справлялись с генерацией текстов. Но GPT от OpenAI, конечно, справляются с задачей пошустрее % на 20-30.

Запросы к LLM идут с заранее прописанными промптами, в которые втыкается пользовательский ввод. Единственное, что из-за ограничений OpenAI для РФ пришлось хостить сервис в Digital Ocean. Забавно то, что изначально он вообще был установлен просто дома на подоконнике на Raspberry Pi. Потом пару раз заглючил провайдер и решил, что потратить 1000р в месяц не жалко, зато пусть уж работает нормально + не пришлось мутить какую-то отдельную проксю, чтобы запросы в OpenAI отрабатывали корректно. Я, конечно, такой вариант потестил и в целом он работал, но проще сразу в иностранное облако все затолкать.
Из проблем с LLM это стриминг ответов на страницу. При флаге stream=True и запуске через Nginx + Runserver все ок, ответ модели печатается на страничке, а вот с uvicorn и gunicorn не срослось пока что, есть какие-то сложности. Весь ответ на каком-то этапе буферизируется и потом кучно попадает на фронт. То есть конфиг nginx один и тот же, бекенд и JS на странице тоже, но без Runserver ничего не стримится. Моих знаний пока не достаточно, чтобы понять, в чем причина.
Как вариант, сделать отдельный какой-то микросервис, который будет отвечать исключительно за стриминг и уже его дергать на фронте, чтобы получать нужный результат. (GPT советует Fast API сервис рядышком развернуть, руки пока не дошли протестировать гипотезу)
Сам сервис написан в классическом варианте Django + Jinja Templates. Нет никакого модного фронтенд фреймворка, т.к. я вообще в них ничего не знаю. Вся эта история задумывалась как некий учебный проект, который по итогу перерос в нечто большее.
Внутри 3 приложения:

Accounts – отвечает за юзеров и их атрибуты, типа использование токенов, подключенные AI модели и т.д.
Courses – тут все, что касается AI курсов и курсов, которые стали публичными
CreatorCourses – редактор авторских программ, где юзер может сам набить список модулей и уроков, внести свои заметки и черновики, а AI это все прошерстит и трансформирует в итоговый нарядный AI курс
Внутри все построено на стандартных CBV типа ListView, CreateView и т.д. По моделям, это CustomUser, Course, Module, Lesson, Task. Отдельно есть модели Creator режима, аналогичные осноывным, просто в момент публикации Creator курса происходит клонирование всех данных в модели простых курсов.
Какие планы
Хотелось бы прикрутить wysiwyg редактор, чтобы создавать более качественные уроки в Creator режиме
Добавить всякие авторизации через Я, VK и другие почты, пока только через Gmail и штатную связку логин/пароль
Подумать над UX и UI
Восстановить стриминг ответов, чтобы текст от AI как бы печатался на странице, через Runserver + Nginx все ок, а как ставишь Uvicorn или Gunicorn, то поток на каком-то этапе буферизируется и не стримится на страницу. Пока в виде заглушки реализовал progress bar ожидания ответа.
Приглашаю всех дочитавших посетить мой сервис, написать слова поддержки, ну или накинуть г***а на вентилятор в комментариях :-)
Автор: pnirtep
Источник [4]
Сайт-источник BrainTools: https://www.braintools.ru
Путь до страницы источника: https://www.braintools.ru/article/16575
URLs in this post:
[1] творчества: http://www.braintools.ru/creation
[2] обучения: http://www.braintools.ru/article/5125
[3] https://aitutor.pnirtep.ru/: https://aitutor.pnirtep.ru/
[4] Источник: https://habr.com/ru/articles/921624/?utm_source=habrahabr&utm_medium=rss&utm_campaign=921624
Нажмите здесь для печати.