OpenMAIC
Личный ИИ-преподаватель на вашем сервере: называете тему или загружаете PDF - и разбираете ее не в лоб текстом, а на живом занятии со слайдами, квизами, ИИ-педагогом и ИИ-одногруппниками. Для тех, кто хочет разобраться в предмете, а готового курса под запрос нет. Мы развернули его на своей VM в РФ, прошли занятие от и до и собрали грабли, о которых README молчит.
Вердикт
- преподавателю или L&D-команде - быстро собрать интерактивный курс из своих материалов
- кто хочет свой инстанс с собственным ключом LLM вместо облачной подписки
- если нужна мульти-тенантность с разграничением аккаунтов - ее в продукте нет by design
- кто не готов держать свой ключ LLM и egress вне РФ (провайдеры из РФ отдают 403)
Что это и какую задачу решает
OpenMAIC (Open Multi-Agent Interactive Classroom) - проект команды из Университета Цинхуа. Вы вводите тему («Объясни Docker за 5 минут») или загружаете документ, а платформа сама строит интерактивный курс: слайды на вайтборде, квизы, PBL-задания, а ведет занятие ИИ-преподаватель с ИИ-одногруппниками, которые задают вопросы и обсуждают материал. Это закрывает боль «есть материал, но нет времени и сил превратить его в нормальный интерактивный урок».
В версии 1.0 добавили Pro-workbench: агент планирует программу, строит и правит страницы курса из ваших материалов. Продукт provider-neutral - работает с любым OpenAI-совместимым LLM (OpenAI, Anthropic, Google, OpenRouter, DeepSeek, Qwen, локальные Ollama/Lemonade). Один ключ LLM обязателен - модель вы приносите свою.
Чем отличается от привычных способов разобраться в теме
Сравнение не с конструкторами курсов, а с тем, что человек реально выбирает, когда хочет во что-то вникнуть: готовый видеокурс или просто спросить ИИ в чате.
| Что важно ученику | OpenMAIC (self-hosted) | Готовый видеокурс / онлайн-школа | Просто спросить ИИ в чате |
|---|---|---|---|
| Под ваш запрос | курс строится под вашу тему или PDF здесь и сейчас | фиксированная программа для всех | под запрос, но без учебной структуры |
| Структура занятия | слайды, квизы, PBL-задания, план урока | есть, но записана заранее | простыня текста без слайдов и проверки |
| Интерактив | педагог спрашивает вас, ИИ-одногруппники обсуждают | одностороннее видео | диалог один на один, без «класса» |
| Цена | свой сервер плюс токены своего ключа LLM | подписка или оплата за курс | подписка на чат-сервис |
| Данные и приватность | на вашем сервере, свой ключ | в облаке вендора | уходят провайдеру чата |
Тех-стек и архитектура
Фронт и бэкенд - единое Next.js 16 приложение (React 19, TypeScript 5) с оркестрацией агентов на LangGraph. Генерация курса идет server-side через API-роуты (/api/chat, /api/generate/*): клиент отправляет тему, сервер обращается к LLM и стримит слайды и реплики агентов обратно в браузер по SSE. Это важно для РФ - наружу к провайдеру ходит сервер, а не браузер пользователя.
Один контейнер на приложение (образ на базе node:22-alpine, standalone-сборка Next.js). Персистентность опциональна: профиль с PostgreSQL включает durable-сессии, переживающие рестарт. В нашей карте мы держим легкий вариант без БД - сессии живут в браузере, ресурсов нужно минимум.
Минимальная конфигурация
Реальные требования против официального минимума.
| RAM для сборки из исходников | 8 GB+ (build Next.js 16 тяжелый) |
| RAM для готового образа, простой | ~114 MiB |
| RAM под генерацией курса | ~128 MiB |
| Рекомендуем тариф | CPU2-RAM4-DISK50 |
Важно: сборка Next.js 16 из исходников требует 8 GB+, но у нас образ уже собран и лежит готовым - при заказе карты клиент только скачивает и запускает, поэтому под рантайм хватает CPU2-RAM4-DISK50. Тяжелая память нужна только тем, кто собирает образ сам.
В маркетплейсе Fatmetal
Не хотите ставить руками?
Этот стек есть в маркетплейсе Fatmetal - можно не повторять установку из этого разбора вручную. Заказываете сервер, за пару минут получаете рабочий сервис на своем домене, валидный TLS и файл с доступами.
Рекомендуемая конфигурация:
2 vCPU · 4 ГБ RAM · 50 ГБ NVMe от 450 ₽/мес
Развертывание на Fatmetal
Через карту маркетплейса - одна кнопка. Ниже - что происходит внутри, если ставить руками.
Взять образ и поднять контейнер
Образ уже собран (сборка Next.js 16 тяжелая), приложение слушает только localhost - публичный вход через Caddy с TLS.
docker load < openmaic-fatmetal-1.0.1.tgz docker compose up -dПрописать ключ LLM (BYOM)
В
.env.localваш ключ и модель по умолчанию, egress-прокси уводит вызов за пределы РФ:OPENROUTER_API_KEY=sk-or-... DEFAULT_MODEL=openrouter:google/gemini-2.5-flash ACCESS_CODE=ваш-код-доступа OUTBOUND_PROXY=http://api-proxy.fatmetal.net:8080Применить изменения - именно
up -d(пересоздает контейнер и перечитывает env), а неrestart:docker compose up -dОткрыть по HTTPS
Caddy выпускает валидный TLS по magic-DNS. Заходите на
https://ваш-домен, вводите код доступа - и создаете курс.
Что измерили после запуска
Цифры со свежей установки, без нагрузки. Только реальные замеры.
| Размер образа (сжатый) | ~194 MiB |
| Старт контейнера до 200 | секунды (Next standalone) |
| RAM в простое | ~114 MiB |
| RAM под генерацией курса | ~128 MiB, CPU ~3% |
| Отклик главной | ~160 мс |
| Генерация курса (outlines + агенты) | ~15-20 c до готового классрума |
Главное: само приложение почти ничего не ест - под курсом всего ~128 MiB. Тяжелая часть не сервер, а токены LLM: чем крупнее модель, тем дольше и дороже генерация. Ресурсно OpenMAIC спокойно живет на CPU2-RAM4.
Проверено на версии v1.0.1, сентябрь 2026. На новых версиях результаты могут отличаться.
Где может сломаться
Реальные грабли, на которые наткнулись при запуске.
Прокси не подхватывается сам. LLM-путь OpenMAIC (openai/openrouter) не читает поле proxy из конфига, а переменную HTTPS_PROXY на Node 22 undici игнорирует. Вдобавок пакет undici в standalone-сборке вообще отсутствует, поэтому штатная proxy-фича приложения падает. Лечится глобальным диспетчером: вендорим undici в образ и через NODE_OPTIONS=--import=/app/proxy-preload.mjs ставим setGlobalDispatcher(new ProxyAgent(OUTBOUND_PROXY)) - весь server-side fetch уходит за пределы РФ. В нашей карте это уже вшито.
Код доступа требует HTTPS. ACCESS_CODE ставит cookie с флагом Secure - по plain HTTP браузер ее не сохраняет, и все API-роуты отвечают «Access code required», генерация падает. Значит обратный прокси с TLS (Caddy) обязателен, а не опционален.
Смена ключа: up -d, не restart. Ключ LLM в env_file подхватывается при пересоздании контейнера. docker compose restart его НЕ перечитывает - нужен docker compose up -d.
Причина. Запрос к провайдеру LLM ушел напрямую с российского IP - OpenRouter/OpenAI блокируют РФ.
Решение. Увести server-side fetch через egress вне РФ глобальным undici-диспетчером (см. камень про прокси выше). После этого 403 сменяется рабочим стримом генерации.
Безопасность и обновления
Единственный механизм защиты - ACCESS_CODE (site-level код доступа). Не задан → инстанс полностью открыт всем, кто знает адрес. Задавайте код обязательно и работайте только по HTTPS. Изоляции пользователей в продукте нет by design: все сессии в одном инстансе под общим кодом - это личный или командный инстанс, не мульти-тенант SaaS. Ключ LLM держите в .env.local (chmod 600), в UI-настройки его не вводите (клиентский путь из РФ упрется в 403).
Обновление - заменить образ на новую версию и пересоздать контейнер:
docker load < openmaic-fatmetal-НОВАЯ.tgz
docker compose up -d
Связь с другими стеками
- Обратный прокси - Caddy для валидного TLS (обязателен, см. про код доступа).
- Egress-прокси - выход к LLM-провайдерам за пределами РФ, без него из РФ 403.
- PostgreSQL - опциональный профиль для durable-сессий, переживающих рестарт.
- Свой LLM - Ollama / Lemonade локально, если не хотите платить за облачные токены.
Когда это НЕ ваш выбор
Нужны отдельные аккаунты учеников
Мульти-тенантности и разграничения пользователей в OpenMAIC нет by design - все под одним кодом доступа. Для полноценной LMS с ролями и прогрессом учеников берите Moodle или подобное.
Не готовы возиться с ключом и egress
Продукт BYOM: без своего ключа LLM и выхода к провайдеру вне РФ генерация не поедет. Если нужен «включил и работает» без настройки - это облачный SaaS, а не self-hosted.
Частые вопросы
Какая модель LLM нужна?
Любая OpenAI-совместимая. Разработчики рекомендуют Gemini 3 Flash; мы гоняли на google/gemini-2.5-flash через OpenRouter. Ключ свой (BYOM).
Хватит ли 4 GB RAM?
С запасом: под генерацией курса приложение ест ~128 MiB. 8 GB нужны только для сборки образа из исходников, а в карте образ уже собран.
Почему из РФ ошибка 403?
Провайдеры LLM блокируют российские IP. Нужен egress-прокси вне РФ, прошитый глобальным undici-диспетчером - в нашей карте это уже сделано.
Можно несколько учеников с разными аккаунтами?
Нет, изоляции пользователей нет by design. Это личный или командный инстанс под общим кодом доступа.
Обязателен ли код доступа?
Да. Без ACCESS_CODE инстанс открыт всем. И работать он должен строго по HTTPS - иначе cookie с флагом Secure не сохраняется.
Переживут ли курсы перезапуск?
В базовом варианте сессии живут в браузере. Для durable-хранения включите профиль с PostgreSQL.
Какая лицензия?
MIT (перелицензирован с AGPL-3.0 на v0.3.0) - можно использовать в том числе коммерчески.
Итог
OpenMAIC превращает тему или PDF в интерактивный курс с ИИ-преподавателем за пару минут и почти не ест ресурсы (~128 MiB под нагрузкой, спокойно живет на CPU2-RAM4). Главные оговорки для РФ - свой ключ LLM и egress-прокси вне России (иначе 403), обязательный TLS для кода доступа и отсутствие мульти-тенантности. Все это в нашей карте уже прошито, поэтому получаете рабочий инстанс, а не набор граблей.
Рекомендуемая конфигурация для установки:
2 vCPU · 4 ГБ RAM · 50 ГБ NVMe
Не хотите устанавливать вручную?
Запустите OpenMAIC на этой конфигурации автоматически - от 450 ₽/мес.
Этот стек у нас запущен на тарифе CPU2-RAM4-DISK50. Нашли баг в гайде - напишите, поправим в течение дня.