Как работает платформа для курса
Последнее время ловлю себя на мысли, что драйвит разработка подобных систем. Особенно в этом помогают кодовые агенты по типу Claude, с которыми достаточно быстро можно воплотить свои задумки в реальность.
Находясь в роли "проектировщика", подумать, какие будут компоненты у системы, выбрать соответствующие для этого технологии, а после собрать все это как конструктор. Сейчас у меня не так много опыта в этом, но все же стараюсь разбираться что да как)
Вдохновился я подходом платформы deeplearning.ai, в которой как раз имеется удобный формат обучения, когда все в одном. Видео, текст, а также Jupyter с ноутбуками, в котором сразу можно выполнять задачи. На основе нее я решил попробовать сделать такую платформу для своего курса.
Каждая сессия Jupyter запускается в виде pod в Kubernetes с использованием JupyterLab. Данный подход позволил сделать изолированной каждую сессию пользователя. Каждая сессия имеет ограничения по CPU и памяти. В случае превышения лимитов — pod отключается, не затрагивая работу платформы.
В Jupyter я предоставил возможность обращения к LLM, но только внутри самой сессии. Для этого был создан прокси с простой очередью, через который идут все запросы к LLM. Внутри него настроены ограничения на количество запросов в минуту и максимальное количество использования токенов. Отсюда же я снимаю данные для мониторинга.
В качестве LLM взял GigaChat API. Для работы с OpenAI API используется прокси gpt2giga, который переводит запросы в формат GigaChat. При желании его можно заменить. Например на OpenRouter.
Начало работы с платформой начинается с Telegram бота на aiogram. В нем пользователь регистрируется и получает логин, пароль и URL с API KEY для доступа к LLM.
В качестве фронтенда используется React, основной бекенд - FastAPI, база данных - PostgreSQL. Все это работает в Docker. В качестве единой точки входа используется Nginx.
Также для себя добавил простенький мониторинг (на рисунок не попал) - FastAPI + Jinja-шаблоны, в котором видно количество пользователей, количество использованных токенов и запросов к LLM, количество запущенных сессий Jupyter по времени.
Сейчас платформа развернута на небольшом сервере: 2 vCPU, 8 ГБ RAM и 80 ГБ диск. На данный момент этого достаточно, чтобы выдерживать одновременно ~15 работающих сессий Jupyter (проводил стресс тест).
Подводя итог могу сказать, что возможно платформа сделана не идеально. Вопросы безопасности, архитектуры, кодовой базы и другого остаются открытыми. Мне было интересно сделать что-то такое, развернуть и попробовать дать это реальным пользователям. Работаем дальше!
Максим Максимов // IT, AI
Post #126
801

- 👍 6
- ❤ 4
- 🤯 1