Как собрать курс#

Курс на платформе — релиз: один файл, в котором курс целиком — главы, уроки, цели и их пункты, проверка знаний, домашние задания, документ курса и указания агенту, который ведёт занятие. Релиз собирают из карты курса в закрытом репозитории course-design и публикуют командой. Куратор работает с картой вместе со своим агентом; писать код не нужно.

На платформе курс не правится по кусочкам: исправление — это новый релиз. Кураторский набор инструментов MCP и кабинет автора — для того, что происходит с курсом после публикации: посмотреть действующий релиз, открыть курс ученикам, разобрать заметки и репорты, увидеть, как ученики проходят уроки.

Страница описывает устройство платформы и порядок работы. Чему и как учить, платформа не предписывает: методика ваша.

Что нужно куратору#

Доступ к платформе. Роль куратора (Course Creator) выдаёт команда платформы. Агента подключают к кураторскому адресу сервиса — /authoring: у ученического адреса набор инструментов другой. Порядок работы агент получает в prompt author, а инструкции сервера при подключении называют, какой инструмент за что отвечает.

Доступ к course-design. Карта курса и команда публикации живут там. Ключ публикации в репозиторий не попадает: он лежит в локальном файле настроек у того, кто публикует, и его выдаёт команда платформы.

Место в списке кураторов курса. Карта курса называет кураторов — почты в поле instructors. Публикация делает их инструкторами курса: они видят прохождения учеников и получают сводку о домашках на проверку. Заметки, репорты и просмотр релиза доступны любому куратору платформы.

Как курс попадает на платформу#

  1. Карта курса — structure.yaml в course-design: главы, уроки, цели уроков и их пункты, вопросы квиза с верными вариантами, домашние задания, разделы документа, указания агенту, список кураторов. Формат описан в самом репозитории.
  2. Сборка и публикация — команда конвейера tools/publish_release.py. Она проверяет карту, собирает релиз, проверяет его и публикует на платформу вместе с коммитом git, из которого он собран. В выводе — версия релиза, её коммит, какие главы и уроки созданы, изменены или сняты из программы, и предупреждения: пустой текст для ученика, вопрос без пояснения. Любая беда — ненулевой код выхода.
  3. Открытие — publish_course. Новый курс после первого релиза — черновик, ученикам он не виден. Новый релиз уже открытого курса действует сразу, открывать курс заново не нужно.

Публикует ключ отдельного пользователя-публикатора с самой узкой авторской ролью. Инструктором курса он не становится: кураторы — те, кто назван в карте, и публикация каждый раз выставляет курсу ровно этот список. Списка в карте нет — инструкторы курса остаются прежними.

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

Анонс до первого релиза#

Курс можно показать в каталоге раньше, чем он готов. Ученик видит название, описание и цели курса и может попросить сообщить о выходе; записаться нельзя.

  1. create_course — курс без уроков с названием и описанием; правится update_course.
  2. announce_course с целями курса — их и увидят в каталоге.
  3. Первый релиз публикуют с привязкой к этому курсу (--course у команды публикации): курс получает программу, а подписчики остаются.
  4. publish_course открывает курс, и тем, кто просил сообщить о выходе, уходит письмо.

Анонсировать можно и курс из релиза, ещё не открытый ученикам: его цели в каталоге — названия глав действующего релиза.

Правка курса — новым релизом#

Курс правят в карте и выпускают заново. Ученики всегда на действующем релизе: новый релиз переносит их состояние — какие пункты разобраны, какие уроки пройдены — по ключам глав, уроков, целей и пунктов.

  • Ключи стабильны. Переименовать ключ — то же, что удалить узел и завести новый: отметки учеников по старому ключу к новому не перейдут.
  • Снятое из релиза уходит из программы. Урок или главу, по которым никто не занимался, публикация удаляет. Запись со следами учеников — занятиями, прохождениями, попытками квиза, сдачами домашки, репортами — остаётся вне программы: вернувшийся в следующем релизе ключ получает её, и прогресс учеников по нему возвращается.
  • Релиз неизменяем. Откат — публикация прежнего коммита карты новой версией.
  • Содержимое хранится только у действующей версии. От прежних остаётся запись в «Истории» кабинета автора и в course_releases: версия, кто и когда опубликовал, дайджест и коммит. Саму прежнюю версию смотрят в git course-design по коммиту; у версии, опубликованной без коммита, кандидата из истории карты проверяют по дайджесту. Не совпал дайджест ни у одного кандидата — восстановить такую версию нельзя.
  • Открытая попытка квиза переходит на новую версию, если квиз урока не изменился. Изменились вопросы, варианты, верный вариант или цели вопросов либо урок снят — попытка аннулируется: ученик начинает квиз заново, и прерванная попытка в счёт не идёт. Пояснения и порог в сравнение не входят: порог попытка берёт на старте.

Платформа не даёт править курс из релиза в обход релиза: Desk и редактор Learning откажут в правке его глав и уроков. Карточку курса — название, описание, обещание — тоже пишет релиз.

Проверка знаний#

Проверку знаний ведёт и оценивает сервер. Агент получает вопрос без верных вариантов, передаёт ответ ученика как есть и получает вердикт — подсказать он не может, даже если захочет. Верные варианты и пояснения лежат в релизе и не уходят ни в один ответ ученику и его агенту.

Вопрос — выбор из вариантов: минимум два, ровно один верный. Пояснение к вопросу ученик видит после ответа — это место для разбора ошибки, а не для подсказки. Если тема требует рассуждения, разложите её на проверяемые вопросы, а само рассуждение оставьте занятию — агент разберёт его в разговоре.

Квиз выдаётся, когда разобраны все обязательные пункты урока. Порог зачёта задаёт урок в релизе; число попыток и паузу между ними — настройки платформы, одни на всех. Вопросы стоит писать так, чтобы на них отвечал понявший, а не угадавший: при свободных попытках вариант можно подобрать перебором, и понимание проверяет разговор с агентом, а не квиз.

Домашние задания#

К уроку можно дать домашнее задание — одно и необязательное: что сделать на своём проекте до следующего занятия и что сдать — текстом, файлами или тем и другим. Задаётся оно в карте курса вместе с уроком. Срок — дни после закрытия урока; организация может заменить его своим в назначении курса.

Ученик получает задание, когда урок закрыт. Агент озвучивает его в конце занятия и начинает следующее с того, как оно сдано. На зачёт домашка не влияет и ничего не блокирует.

Проверка. Сданные домашки ждут в разделе «Домашние задания» платформы, на вкладке «Ждут проверки» — в той же очереди, что у руководителей организаций. Вы видите домашки всех курсов платформы, не только своих, — в том числе сданные в личном пространстве: принимаете, возвращаете на доработку с комментарием, отменяете ошибочный приём. Если ту же домашку проверяет руководитель, действует последнее решение, а журнал показывает, чьё оно. Проверить собственную домашку нельзя, даже с правом проверять: в очереди её нет, её проверяет другой руководитель или автор курса.

Сводка на почту. Раз в день, утром, — письмо: сколько домашек ждут проверки по курсам, где вы инструктор, и ссылка на очередь. Инструкторы курса — кураторы из карты курса. Нечего проверять — письма нет.

Кабинет автора#

Страница /author на сайте платформы показывает курсы так, как их видит агент ученика; из desk она лежит в разделе «Обучение через агента».

  • Курсы: версия и дата действующего релиза, открытые заметки и сколько из них ждут вас, число тестеров.
  • Курс: вкладки «Релиз», «Заметки», «История» и «Тестеры». Релиз — действующий целиком: главы, уроки, цели и их пункты, вопросы квиза с верными вариантами, домашние задания, документ курса; пакет агента урока и рамка курса свёрнуты. История — версия, дата, кто опубликовал, какой действует. Заметки — очередь к курсу: что проверить, на что ответить, что ждёт агента. У курса без релиза — только карточка анонса.

Когда выходит новый релиз или агент отвечает на заметку, открытая страница об этом скажет — обновите её, чтобы увидеть новое. Курсы общие: все авторы видят все курсы и все заметки.

Заметки#

Вычитывая релиз в кабинете, вы ставите заметки прямо на место: курс, главу, урок, цель, пункт, вопрос квиза, раздел документа, указания агенту или узел карты курса. Заметка помнит версию релиза, к которой написана; место, которого в действующем релизе больше нет, помечается.

Агент берёт заметки инструментом course_notes, правит карту курса, выпускает новый релиз и отмечает заметку сделанной — resolve_note — с тем, что поменял и в какой версии. Дальше решаете вы: принять правку или вернуть заметку с ответом. Если агенту нужно ваше решение, он спрашивает в нити или ставит вопрос на место — add_note; такие вопросы собраны на вкладке «Заметки», в разделе «Агент спрашивает».

Как курс проходят#

Репорты. Агент ученика сообщает авторам, когда курс мешает учиться: материал неверен, вопрос двусмыслен, указание не подходит. Агент куратора читает их course_reports — по уроку, по виду, по статусу — и закрывает resolve_report, когда правка вышла релизом. Ответ видит ученик, поэтому он о курсе, без оценок и имён.

Прохождения. goal_runs показывает, как ученики проходят уроки: какие пункты разобраны и на каком свидетельстве, где урок застрял, что засчитано квизом. Видят их инструкторы курса — кураторы из карты, — модераторы и администраторы платформы. Свидетельства — слова учеников: они для улучшения курса и в ответы на репорты не переносятся.

Программы: курсы по порядку#

Несколько курсов можно связать в программу — например, «Где теряется работа между отделами» → «Как заметить проблему заранее». Программу заводят в интерфейсе Learning: раздел «Программы», курсы в нужном порядке, флажок порядка курсов («Enforce Course Order»), описание и публикация. Описание — одно-два предложения: для кого программа и что будет у ученика в конце; оно стоит на странице программы под названием.

У программы одна страница для всех: путь пронумерованными шагами — курс, его строка и статус («В разработке», «Доступен», «Идёт», «Пройден», «Откроется после курса N») — и одно действие: «Вступить в программу», после вступления «Продолжить: курс». Опубликованную программу видит и гость, в неё ученик вступает сам. Если первый курс ещё в разработке, вступление подписывает на письмо о его выходе.

  • С флажком порядка участник программы не запишется на следующий курс и не начнёт по нему занятие, пока предыдущий не пройден целиком. Платформа проверяет это и на записи, и на занятии, а страница курса вместо записи ведёт к предыдущему курсу.
  • Порядок — только для участников программы. Курс напрямую из каталога берётся без условий, назначения организаций порядок не затрагивают.
  • На странице курса видно, какой он по счёту в программе, со ссылкой на неё.
  • Агент о программах пока не знает: места курса в цепочке в его ответах нет, запертый курс он узнаёт по отказу program_order.

Снять курс#

Снять курс с публикации можно — unpublish_course; анонс снимается так же. Прогресс учеников при этом сохраняется. Удаления курсов на платформе нет.