Пишем SHACL-файл concept.shape.ttl (название, перевод, ≥2 связи, ±примеры…).
Файл + успех валидатора pyshacl
Настраиваем Woodpecker-CI: при Pull-Request с TTL запускается SHACL-тест.
.woodpecker.yml
Woodpecker-CI
Простота — написан на Go, легко развернуть даже на слабом сервере. Открытый код — нет ограничений на репозитории или параллельные задачи (в отличие от GitHub Actions). Поддержка Docker — задачи выполняются в контейнерах. Интеграция с Git-платформами — GitHub, GitLab, Gitea, Forgejo и др. Расширяемость — можно подключать плагины (например, для уведомлений в Telegram/Slack).
pySHACL
загружает RDF-граф (в формате Turtle, JSON-LD, XML и т.д.);
загружает SHACL-constraints (описания того, каким должен быть граф);
проверяет, соответствует ли RDF-граф правилам SHACL;
Поток обработки:
Пользователь/автор вносит понятие через UI.
Система собирает RDF-описание этого понятия (например, в JSON-LD).
До сохранения — вызывается pySHACL.validate(…).
Если валидация не пройдена — система отказывает в сохранении и показывает ошибку.
это шаг в обработчике формы или до коммита в базу;
если conforms == False, ты:
возвращаешь ошибку в интерфейс;
не сохраняешь данные;
логируешь проблему или отправляешь методологу на проверку.
У нас не утвержден паспорт понятий и не утвержден валидатор(какие свойства подвергаются жесткой проверке)
Этап 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 · Генерация раздела универсального руководства
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 поумней отдать все это на заполнение паспорта понятий(по каждому понятию)