Открытая платформа персонального обучения: агент ведёт занятия по вашим материалам, помнит прогресс и цитирует источники. Разворачиваем на своём сервере за четыре шага.
DeepTutor — открытая платформа персонального обучения от команды HKUDS: агент-репетитор, который работает не по одному промпту, а по учебному workspace — с книгами, траекториями освоения, практикой, памятью о прогрессе и цитированием ваших же материалов. Репозиторий набрал 55 635 звёзд и 6 818 форков, последний релиз — v1.7.1 от 31.10.2026, лицензия Apache-2.0. Ниже — как поднять его на своём сервере и на что смотреть в первые полчаса.
DeepTutor — не модель и не обёртка над одним API. Это рантайм агента плюс веб-приложение: Next.js-фронтенд, бэкенд на Python, набор инструментов (поиск в вебе, поиск статей, Zotero, исполнение кода, RAG по своим базам, генерация изображений и видео) и файловая память. Модель вы подключаете сами — любой OpenAI-совместимый провайдер, включая локальные vLLM, LM Studio и llama.cpp, а также облачные DashScope и NVIDIA NIM.
Рабочее пространство делится на пять областей. Home — чат, доска задач, календарь и учебный блокнот. Learning — книги, траектории освоения (Mastery Path), иммерсивное чтение и практика. Resources — история чатов, избранное, журнал обучения, банк вопросов и центр знаний. Partners — постоянные агенты-компаньоны с собственной памятью и каналами в мессенджерах. Personalization — персоны, навыки, MCP-сервисы, CLI-приложения и настройки памяти.
Практическая ценность в том, что все режимы делят один контекст сессии: вы можете начать с чтения PDF, попросить объяснить фрагмент, сгенерировать по нему вопросы и вернуться к тем же материалам через неделю — состояние учебной активности сохраняется. Это ближе к LMS с агентом внутри, чем к чат-интерфейсу.
Схема важна для диагностики: когда ответ «не знает» материал, проблема почти всегда в слое баз знаний, а когда «не помнит прошлый разговор» — в слое памяти. Настройки этих слоёв независимы, и это экономит время при разборе инцидентов.
Терминальные варианты используют один общий runtime home: приватные настройки лежат в data/user/settings/ рядом с каталогом запуска либо там, куда указывают DEEPTUTOR_HOME или deeptutor start --home. Проектный .env намеренно игнорируется — конфигурация живёт в JSON-файлах, и это стоит запомнить, чтобы не искать «почему не подхватился ключ».
| Способ | Что требуется | Что получаете | Когда выбирать |
|---|---|---|---|
| Docker | Только Docker | Полное веб-приложение | Быстрый пробный запуск |
| PyPI (deeptutor[full]) | Python 3.11–3.14, Node.js 20.9+ | Веб-приложение и CLI | Постоянная работа на сервере |
| Из исходников | Python 3.11–3.14, Node.js 22 LTS | Dev-сборка и правки кода | Разработка и отладка |
| CLI (core) | Python 3.11–3.14 | Чат, вопросы, SDK без фронтенда | Агентный режим и скрипты |
docker run --rm --name deeptutor -p 127.0.0.1:3782:3782 -v deeptutor-data:/app/data ghcr.io/hkuds/deeptutor:latest
curl -I http://127.0.0.1:3782
mkdir -p deeptutor && cd deeptutor python -m pip install -U "deeptutor[full]"
deeptutor init
deeptutor start
После запуска приложение открывается без модели: чат не работает, пока не настроен провайдер. Логика такая: провайдер хранит адрес и ключ вендора, а модели ссылаются на провайдера и задают имя модели и её возможности. Отдельная страница Task models закрепляет маленькую быструю модель для служебных задач — автоназваний диалогов, стартовых подсказок, починки анимаций; если оставить поле пустым, возьмётся активная модель по умолчанию.
Поддерживаются OpenAI-совместимые API — это значит, что подойдёт и облачный вендор, и локальный сервер. Из коробки в релизах упоминаются DashScope, NVIDIA NIM, Atlas Cloud, Eden AI, LM Studio и llama.cpp; для локального инференса достаточно поднять vLLM или LM Studio и указать его адрес как OpenAI-совместимый эндпоинт. Отдельный экспериментальный путь — вход через OpenAI Codex OAuth: профиль использует вашу подписку ChatGPT, ключ не нужен, но токен привязан к одному человеку и не шарится между пользователями.
Проверять подключение лучше сразу, до загрузки материалов: в интерфейсе есть пробный прогон модели перед сохранением, а раздел Runtime status показывает матрицу готовности — какие возможности заблокированы, где предупреждения. Это быстрее, чем искать причину пустых ответов в логах.
Центр знаний строит версионируемые библиотеки на одном из четырёх движков: LlamaIndex, PageIndex, GraphRAG или LightRAG. Версия библиотеки фиксирует, чем именно она построена, — это защита от классической проблемы RAG, когда после смены модели эмбеддингов старый индекс начинает выдавать мусор, а причина не видна. Здесь индекс можно перестроить и сравнить результат.
Ответы по материалам приходят со ссылками на источник: у цитат есть привязка к фрагменту, а в режиме иммерсивного чтения разговор идёт рядом с документом, страницей или видео. Для учебного сценария это принципиально: студент должен видеть, откуда взялось утверждение, а преподаватель — проверить, что агент не выдумал параграф.
Практический порядок: сначала один компактный корпус (методичка, набор лекций, внутренний регламент), потом проверка цитат на трёх-четырёх вопросах, и только затем расширение. Загружать сразу десятки тысяч страниц в первый день — верный способ получить долгую индексацию и разочарование.
Память в DeepTutor намеренно файловая, а не скрытое векторное хранилище — её можно прочитать, отредактировать и проверить. Уровень L1 — зеркало рабочего пространства и журнал событий в формате JSONL (append-only). L2 — курируемые факты по каждой поверхности с ссылками на сущности L1. L3 — кросс-синтез, который фиксирует, какие поверхности L2 в него вошли.
В интерфейсе это показано графом памяти: синтез L3 в центре, факты L2 в среднем кольце, трассы L1 снаружи. Память отслеживается по чату, блокноту, квизам, базам знаний, книгам и агентам-компаньонам. Бюджеты консолидатора (обновление, аудит, дедупликация) настраиваются отдельно — если модель начинает «придумывать» прошлые договорённости, начинать разбор надо именно оттуда.
Практика обучения живёт в отдельных активностях: Mastery Path разбивает цель на темы и копит доказательства освоения, Practice собирает вопросы и назначает следующий повтор, Book превращает материалы в интерактивную книгу с блоками и квизами. Карточки из блокнота экспортируются в Anki, календарь — в формат .ics для Apple Calendar, Google Calendar, Outlook и Thunderbird. Это тот слой, из-за которого DeepTutor интересен не как чат, а как учебная система.
Один бинарник deeptutor даёт два входа: интерактивный REPL для человека и структурированный JSON для другого агента. Это редкая и полезная особенность — DeepTutor спроектирован так, чтобы им управлял coding-агент: в репозитории лежит корневой SKILL.md с описанием handover, а вывод в режиме --format json идёт потоком NDJSON, по событию на строку, с session_id в каждом.
deeptutor chat deeptutor chat --capability deep_solve --kb my-kb deeptutor run chat "Explain the Fourier transform" \ --kb textbook --format json deeptutor run deep_research "Survey 2026 papers on RAG" \ --config mode=report --config depth=standard --format json
Флаг --kb подключает базу знаний к автоматическому RAG и к инструменту поиска «за пределами материала»; --tool включает отдельные инструменты; --workspace выбирает зарегистрированное рабочее пространство. Прогоны headless-safe: если модель захочет уточнить вопрос, а терминала нет, пауза разрешится пустым ответом, а не зависнет.
Для администраторов пригодятся служебные команды: deeptutor memory show и memory clear для разбора памяти, deeptutor book health — чтобы увидеть, что источники книги изменились, и deeptutor module list — чтобы понять, какие модули реально установлены после обновления.
| Симптом | Причина | Что делать |
|---|---|---|
| Порт 3782 занят | Другой контейнер или сервис | Сменить левую часть проброса: -p 127.0.0.1:3783:3782 |
| Чат отвечает пусто | Провайдер не настроен или модель не выбрана | Настройки → Провайдеры, затем Language models; прогнать пробный вызов |
| Не подхватился .env | Проектный .env игнорируется | Писать конфигурацию в data/user/settings/*.json |
| Ответы без цитат | База знаний не подключена к диалогу | Выбрать KB в чате или передать --kb в CLI |
| Индекс выдаёт мусор | Сменилась модель эмбеддингов | Перестроить библиотеку: версия индекса фиксирует движок |
| Модули пропали после обновления | Остался старый deeptutor-cli | pip check и deeptutor module list, затем переустановка модулей |
Отдельно про многопользовательский режим: в релизах есть аккаунты ученика и наставника, админские гранты и изолированные рабочие пространства, но это включается осознанно. Если разворачиваете для класса или отдела, сначала настройте разграничение доступа и только потом загружайте материалы — иначе общие базы знаний станут общими и для тех, кому они не предназначены.
Для self-host-платформы активность важнее звёзд: заброшенный проект придётся поддерживать самому. По данным GitHub API, за последние 52 недели в репозиторий ушло 3 512 коммитов, а последний пуш был 06.11.2026 — в день подготовки этого гайда. Релизы идут регулярно: v1.7.0 вышел 28.10.2026, v1.7.1 — 31.10.2026.
Что это значит на практике: проект развивается быстрыми итерациями, и часть интерфейса меняется между минорными версиями (в 1.7.0 переделали навигацию и внешний вид). Перед промышленным развёртыванием фиксируйте версию образа или пакета, а не тяните latest — иначе обновление может принести переименованные маршруты и новые обязательные шаги настройки.