Концепция редактора адаптивных курсов

Перенимаю эстафету и попробую как-то изложить концепцию системы “Редактор адаптивных курсов”

  1. Я создаю базу понятий — с объяснениями, указанием типов, примерами и связями с другими основными понятиями. Это фундамент, на основе которого формируется руководство для достижения мастерства в определённой области. При этом я, как автор, могу использовать заранее подготовленные мета-мета-понятия из трансдисциплинарного интеллект-стека, размещённые на нашей платформе. За этот мета-мета уровень будет отвечать научный руководитель.

Для этих целей подходит Neo4j. Следует определить стандарт для графа и затем с помощью LLM пересобрать его, указав необходимые узлы, свойства и связи. После работы LLM потребуется участие научного руководителя для доведения графа до удовлетворительного состояния. Для контроля соблюдения стандарта предлагаю использовать плагин n10s (Neo4j) совместно с SHACL validator. В SHACL-файле описывается паспорт узла, а плагин n10s проверяет, например:

  • добавлен ли перевод на русский и английский языки;
  • существует ли хотя бы одна связь с другим понятием;
  • приведён ли пример.

Если автор пытается сохранить узел без примера, валидатор выдает ошибку прямо в интерфейсе. Мета-мета-уровень (трансдисциплинарные понятия) хранится там же, но отмечается отдельной меткой, например :MetaConcept . Редактирует их научный руководитель в Protégé: он видит OWL-дерево, меняет только верхние определения, а n10s автоматически синхронизирует изменения с Neo4j.

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

Мета-мета-уровень (онтологический контроль) можно реализовать разными инструментами, но в волонтёрском чате акцент сделан на Protégé, и чем больше я изучаю этот инструмент, тем больше он мне нравится, и я хочу его опробовать.

Таким образом, мы получаем проверку соответствия заданному стандарту узлов, их свойств и связей, а также строгий редактор, который на основе онтологии не позволит допускать ошибки вроде «этика – это система».

  1. Задаю шаблон руководства: структуру типового раздела, логику входа, связки, объяснения и задания. Это выполняется в общем фреймворке на нашей платформе.
  1. Для каждого конкретного руководства определяю цель и целевую аудиторию, указываю разделы, раскрываемые понятия и рабочие продукты, которыми должен овладеть стажёр. Здесь автор создаёт промпт, отражающий его методологические идеи. Дополнительно он может выбрать идеи по методике, для чего на платформе будут предложены соответствующие сервисы. Потребуется изучение современных методик обучения.
  1. После этого прошу ИИ собрать черновик руководства. При необходимости корректирую вручную, но структура уже задана. Это будет универсальное руководство для всех. Возможно, на промежуточном этапе это потребуется, но в дальнейшем этот шаг можно пропустить.
  1. Добавляю модель личности — пока это простой чек-лист, чтобы человек мог быстро определить текущий уровень своего развития (характеристики). В дальнейшем возможно создание цифрового двойника, что потребует отдельной разработки подсистемы, способной учитывать особенности стажёра.

Предполагаю, что задачу можно реализовать на базе веб-интерфейсов вроде этого , или так где автор выбирает шаблоны и заполняет поля с понятиями (идеально — с автодополнением). Выбрав шаблон Template1, появляются поля из TemplateBlock — компоненты будущего текста: intro / explain / example / task / check и TemplateParam — что конкретно вставлять в текст: concept / example / task. Всё это отлично интегрируется с Neo4j.

В форме есть поле «Пожелания к тону и подаче», содержание которого дополняет стандартный промпт (определения + примеры) через prompt-gateway. LLM (OpenAI через langchain) формирует текст и возвращает блоки.

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

  1. На основе описанного и дополнительных пользовательских настроек запускается генерация индивидуальной траектории обучения. Чек-лист → Персональное руководство, генерируемое ИИ-агентом → Программа на каждый день. Пользователь может запросить варианты: «приводи примеры из моей профессиональной области» или «составь программу, учитывая моё ограниченное время (например, 5 часов в неделю)».

Пока планируется использовать graphiti + собственные скрипты, которые будут наполнять характеристики (ссылка), что позволит выстраивать персонализированную траекторию.

Текущая форма проста:

  • Сколько часов в неделю? (число)
  • Отрасль (выбор из списка)
  • Уровень уверенности (ползунки по ключевым навыкам)

Эти ответы становятся узлом UserProfile . Затем подключаем graphiti (Zep), который автоматически обновляет профиль при поступлении xAPI-событий («завершил раздел с оценкой 80%»).

В перспективе можно интегрировать модель BigFive/OCEAN для анализа доступных стпажерских текстов и добавления характеристик, таких как экстравертность, интровертность, стиль и мотивация.

Небольшой Python-скрипт адаптации: Запрашивает из Neo4j опубликованные разделы с уровнем сложности <= текущий + 1.

Итог

  • Строгая, но гибкая база: любое понятие проходит проверку.
  • Автоматический черновик с правильной структурой.
  • Индивидуальная программа с учётом времени и потребностей стажёра.
  • Расширяемая платформа: новая методика мгновенно доступна всем авторам.

Очень интересно почитать предложения единомышленников вообще всех, а особенно, кто работал с чем-то подобным или видит явные косяки.

graph TD
  %% --- Мета-мета ---
  subgraph "0 Мета-мета слой"
    Meta[Мета-мета<br/>Трансдисциплинарные понятия]
  end

  %% --- Графы знаний ---
  subgraph "1–3 Графы понятий"
    Neo[Neo4j<br/>Граф понятий и руководств]
    SHACL[SHACL<br/>Валидатор]
    Protege[Protégé]
  end

  %% --- Авторский интерфейс ---
  subgraph "Веб-интерфейс автора"
    UI[UI автора<br/>Шаблон и промпт]
    PromptGW[Шлюз промптов]
  end

  %% --- LLM ---
  LLM[LLM / Graph-RAG]
  Vec[Векторный индекс]

  %% --- Сторона обучающегося ---
  subgraph "Цифровой двойник"
    Twin[Профиль пользователя<br/>Чек-лист / Двойник]
    Traj[Построитель траектории]
    Daily[Интерфейс дневного плана]
  end

  %% --- Потоки ---
  Meta --> Neo
  UI   --> Neo
  Neo  --> Vec
  Neo  --> Protege
  Protege --> Neo
  Neo  --> SHACL
  SHACL --> UI

  UI -- промпт --> PromptGW
  PromptGW --> LLM
  Neo --> PromptGW
  Vec -. эмбеддинги .-> PromptGW
  LLM --> UI
  UI  --> Neo

  Twin --> Traj
  Neo  --> Traj
  Traj --> Daily
  Daily -. события xAPI .-> Neo

P.S. Круто бы в клубе добавить mermaid

В схему сил всматриваться не осталось, но вроде общее представление отражает и хорошо подсвечивает объекты внимания

Узлы и свойства(максимально обогащенный граф)

Label Минимальный набор свойств Комментарий
Concept name_ru, name_en, synonyms, definition_ru, definition_en, category, complexity (0-5), bloom_level, source, version, embedding Эмерджентность, Подсистема, Надсистема, Шкура на кону
Skill name, esco_code, description, level_scale (0-8), embedding
Practice title, description, modality (reading/video/hands-on), duration_min, difficulty, obj_text, outcome_metric, embedding Утренняя рефлексия, Мышление письмом, систематическое медленное чтение
Lesson / Module title, summary, objectives, estimated_effort, difficulty, author, lang, license, version, embedding Становятся кирпичами курсов.
AssessmentItem answer_key, difficulty, embedding Вопросы для проверки.
Explanation / Example type (analogy/case), text, complexity, embedding Короткие иллюстрации.
LearningGoal goal_text, target_date, priority Личное «хочу освоить…».
User (Student) uid, profile_json (уровни навыков, предпочтения), created_at Храним отдельно, но в том же графе.
Event actor_id, verb, object_id, timestamp, score, success, duration, raw_json Прямой порт xAPI-statement.

Связи и их свойства

Тип ребра Направление Ключевые свойства
CONTAINS Course → Module / Module → Lesson / Lesson → Concept order (целое), weight
HAS_PREREQUISITE любая сущность → Требуемый Concept/Skill min_level, rationale
SUPPORTS_SKILL Practice → Skill gain_estimate (0-1)
EXEMPLIFIES Example → Concept relevance
ADDRESSES_GOAL Lesson/Practice → LearningGoal coverage (0-1)
NEXT Lesson₁ → Lesson₂ confidence, edge_type (mandatory/optional)
RELATED Concept ↔ Concept relation_type (is_a, part_of, cause_of), weight
EVALUATED_BY Skill/Concept → AssessmentItem threshold_score
PERFORMED User → Event — (сам Event хранит детали)
GENERATED_FROM Lesson/Practice → Source (PDF, дискуссия) citation

Связи и ребра собрал из чатов с ИИ. Если граф будет обогащен всем этим, то можно свернуть горы как мне чувствуется.

У каждого ребра стоит добавить created_by, created_at, valid_from, valid_to - пригодится для версионирования и отката.

4 лайка

Мне кажется, больше шансов имеют менее формальные подходы к интеграции онтологии и curriculum learning, как lazyGraphRAG (который микрософт так и не зарелизил) или LightRAG: GitHub - HKUDS/LightRAG: "LightRAG: Simple and Fast Retrieval-Augmented Generation"

1 лайк

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

Очень понравился подход LightRAG. Похоже, именно так и нужно действовать. Говорят об экономии в 3-7 раз.

Теперь вместе с вами стою в очереди за lazyGraphRAG :man_standing: