Я дата-инженер, которому захотелось немного творчества. Писать сотни строк SQL на работе не всегда доставляет радость, поэтому решил углубиться в веб-разработку, чтобы иметь возможность сделать то, что можно "потрогать" руками и, возможно, поделиться этим с окружающими.
В итоге родилась идея AI тьютора - смесь двух популярных нынче направлений Онлайн-обучение и AI. AI Тьютор - сервис генерации образовательного контента с возможностью проверки знаний и виртуальным помощником.
Изначально задумка была в том, чтобы люди могли найти готовую образовательную программу в виде списке тем, загружали в сервис и получали в ответ готовый структурированный курс с контентом от AI. Идея реализовалась, но достаточно быстро трансформировалась и обросла дополнительным функционалом.
Что имеем на данный момент?
Платформа поддерживает два режима создания курсов, которые подойдут как для быстрого старта, так и для опытных авторов:
AI-режим (быстрый)
Идеально подходит, если вы хотите быстро запустить курс. Достаточно ввести название , ваш запрос или список тем — AI сам:
предложит структуру курса (модули и уроки)
создаст содержимое всех уроков
сгенерирует задания
Creator-режим (на основе своих материалов)
Вы полностью контролируете структуру и материалы курса:
Добавляйте модули и уроки вручную
Загружайте свои тексты и заметки
Используйте AI для редактирования и дополнения
Отлично подходит для авторов и индивидуальных программ.

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

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

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

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

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

А что же там под капотом?
По умолчанию используется 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 ожидания ответа.
Приглашаю всех дочитавших посетить мой сервис, написать слова поддержки, ну или накинуть г***а на вентилятор в комментариях :-)