Проводник по персональному маршруту(MVP)

Код диаграммы
mermaid
flowchart TD
 subgraph subGraph0["База знаний"]
        NEO["Neo4j — граф понятий"]
        QD["Qdrant — векторный индекс"]
  end
 subgraph s1["Git-контур"]
        GIT["Git — TTL-репозиторий"]
        CI["Woodpecker CI"]
  end
 subgraph s2["Сервисы"]
        UI["Streamlit UI<br>(автор&nbsp;+ стажёр)"]
        API["FastAPI Gateway"]
        LLM["<b>LLM</b>"]
        RAG["LightRAG"]
        KC["Keycloak логины"]
  end
 subgraph s3["Логи"]
        XAPI["xAPI-лог"]
  end
    GIT -- webhook --> CI
    CI -- import --> NEO
    CI -- update --> QD
    UI -- REST --> API
    API -- REST --> LLM & RAG
    API -- Bolt --> NEO
    RAG -- REST --> QD
    UI -- OIDC --> KC
    UI -- Pull Request --> GIT
    API -- statement (completed) --> XAPI

Этап 1 · Хостинг

Шаг Рабочий продукт
Утвердить устанавливаемый софт и определить конфигурацию VPS VPS готовый к работе

❓git
  • Bitbucket
  • RhodeCode
  • GitLab (ALT linux)
  • Forgejo

Этап 2 · Мини-граф знаний и SHACL

Задача Рабочий продукт
Установка neo4j(systemd) + плагины n10s Установка Qdrant neo4j настроенная под задачи MVP Qdrant на сервере
Создаём в Neo4j шаблон понятия Понятие-эталон
Добавляем 30-50 канонических понятий («Система», «Подсистема», …) Граф с мета-мета-моделью
Пишем SHACL-файл concept.shape.ttl (название, перевод, ≥2 связи, ±примеры…). Файл + успех валидатора pyshacl
Настраиваем Woodpecker-CI: при Pull-Request с TTL запускается SHACL-тест. .woodpecker.yml
Woodpecker-CI

:white_check_mark: Простота — написан на Go, легко развернуть даже на слабом сервере.
:white_check_mark: Открытый код — нет ограничений на репозитории или параллельные задачи (в отличие от GitHub Actions).
:white_check_mark: Поддержка Docker — задачи выполняются в контейнерах.
:white_check_mark: Интеграция с Git-платформами — GitHub, GitLab, Gitea, Forgejo и др.
:white_check_mark: Расширяемость — можно подключать плагины (например, для уведомлений в Telegram/Slack).

pySHACL
  • загружает RDF-граф (в формате Turtle, JSON-LD, XML и т.д.);
  • загружает SHACL-constraints (описания того, каким должен быть граф);
  • проверяет, соответствует ли RDF-граф правилам SHACL;

Поток обработки:

  1. Пользователь/автор вносит понятие через UI.
  2. Система собирает RDF-описание этого понятия (например, в JSON-LD).
  3. До сохранения — вызывается pySHACL.validate(…).
  4. Если валидация не пройдена — система отказывает в сохранении и показывает ошибку.

это шаг в обработчике формы или до коммита в базу;

  • если conforms == False, ты:
    • возвращаешь ошибку в интерфейс;
    • не сохраняешь данные;
    • логируешь проблему или отправляешь методологу на проверку.

:question:У нас не утвержден паспорт понятий и не утвержден валидатор(какие свойства подвергаются жесткой проверке)


Этап 3 · Простая форма автора на Streamlit

Задача Рабочий продукт
Форма «Новое понятие»: название, перевод, определение, 2 связи, примеры… app_author.py - интерфейс для добавления понятий.
Кнопка Проверить — вызывает API → SHACL; ошибки подсвечиваются. Тест с положительным результатом
Кнопка Отправить — создаёт ветку и Pull Request через bot-token.(если решим git) PR в Git с TTL-файлом.
Дашборд «Мои запросы» (статусы PR). Раздел в интерфейсе.

Этап 4 · Импорт после одобрения

Шаг Рабочий продукт
Автор в Git нажимает Merge. Зеленый merge-лог.
Woodpecker запускает шаг neo4j-admin load → статус OK. CI-лог.
Скрипт 02_embeddings.py генерирует summary и embedding → грузит в Qdrant. CSV concepts.csv.

Этап 5 · Генерация раздела универсального руководства

Задача Рабочий продукт
Создаём шаблон SectionTemplate в Neo4j: intro → explain → task → check. Скрипт 03_template.cypher.
FastAPI-шлюз получает:– список понятий из автора;– методический промпт. api_gateway.py
LightRAG читает Qdrant, вытягивает факты → формирует короткий контекст. Лог JSON rag_context.json.
Отправляем в локальный Ollama-LLM → получаем JSON блока раздела. Файл draft_section.json.
Сохраняем в Neo4j узел :DraftSection. Скрин «черновик в базе».

Этап 6 · Профиль стажёра и траектория

Задача Рабочий продукт
Страница «Чек-лист»: время в неделю, отрасль, базовый уровень.(?) app_student.py
Узел :UserProfile создаётся в Neo4j. Скрипт 04_profile.cypher.
Алгоритм-навигатор (Python): выбирает разделы с difficulty ≤ current+1. navigator.py
Генерирует таблицу плана на 3(?) дня (Markdown). План plan.md.
Отображение прогресса: простой progress-bar, процент от выполненных task. UI-скрин.

Этап 7 · xAPI-логгер

Шаг Рабочий продукт
При клике «Завершить задание» отправляется xAPI-statement completed. JSON в лог-папке.
Событие пишется в Neo4j узлом :Event. 05_xapi.py.
Страница «Мой прогресс» считает выполненные задачи и показывает процент. Дашборд.

Этап 8 · Тестирование MVP

Действие Рабочие материалы
Тест-скрипт: автор → понятия → PR → merge → генерация раздела. test_author_flow.md.
Тест-скрипт: студент → чек-лист → получает план → выполняет task. test_student_flow.md.
Сбор метрик: средний prompt-токен ≤ 1200, стоимость запроса ≤ 0 $. Отчёт metrics.xlsx.

Этап 9 · Документация и запуск (2 дня)

Что готовим Файл/ссылка
README_MVP.md — как установить, запустить, роли, логины В репозитории.
Руководство “ввод понятий” demo.mp4.
Todo-список “Следующие улучшения” roadmap.md.

@advat Интересно попробовать какой-то локальной моделью пропарсить руководства для сбора объяснений, характеристик и пр. для понятий. было бы круто автоматизировать максимально процесс. Сохранять по понятию все в json а LLM поумней отдать все это на заполнение паспорта понятий(по каждому понятию)

Океюшки… Буду дома (23.06? — Не точно), если будет ещё актуально (?) обязательно проработаю.

Вот это:

самое слабое звено. ИМХО.

1 лайк