⚠️ статья в разработке..
Мини-образовательная система в формате коллекции колод карт
Введение
[08.09.25] Сегодня, наконец-то согласовал проект edu.iamlostshe.ru с учителем истории.
Концепция проекта такова:
- Существуют 2 основные структуры данных, колода и карта, колоды состоят из карт.
Колоды могут быть открытыми и закрытыми. Доступ к закрытой колоде может получить только пользователь, у которого есть ссылка (учителю будет удобно написать на доске).
Также важно сделать систему фильтров, по экзамену (ОГЭ/ЕГЭ), по конкретному заданию, по событиям (кластеризация с ии).
- Это будет улучшенная версия anki, преподнесённая в формате образовательной системы с красивым ui. Хотелось бы перенести концепцию запоминания (сомневаюсь, что есть определённое название).
"концепция запоминания" - если пользователь знает содержимое карты (правильно отвечает на вопрос или говорит, что знает), то увидит эту карту через продолжительный промежуток времени, в противном случае увидит ее очень скоро.
Однако, в связи со спецификой системы, придётся создать новые типы карт:
тест(пользователь вводит ответ вручную).тест с вариантами ответа(пользователь выбирает ответ среди перемешанных (предотвращение списывания по "ключу") вариантов ответа).доверие(пользователь оценивает знание карточки по пятибалльной системе).
Для удобства администрирования/оценки успеваемости, придётся сделать админ-панель для учителей.
Недавно, я нашёл в интернете интересную библиотеку для создания простого визуального интерфейса,
vkui, скорее всего визуальный интерфейс будет создан на ней. А что касается backed-а, я бы взял связкуpython+fastapi, потому что имею опыт на этих технологиях.
Приступая к работе
Изначально, я думал, что просто создам платформу, без учебного материала, но реальность всё изменила, учитель, хочет, чтобы я составил колоды.
План такой:
- Определиться с заданиями, которые нас интересуют (задания ОГЭ/ЕГЭ где ученику предполагается сопоставить изображение объекта/предмета с его описанием).
- Изучить структуру сайта "решуегэ".
- Написать парсер сайта.
- Написать скрипт для кластеризации названий (описаний) объектов.
- Сгенерировать названия кластеров, с помощью LLM.
Хорошо, что, я имею опыт в парсинге.
Итак, проанализировав пробные варианты, можно найти задания, которые нас интересуют:
ОГЭ: 11. ЕГЭ: 8, 16.
Есть впечатляющее приложение для заучивания разного рода информации - Anki.
В нём реализована система колод, для удобного заучивания/повторения информации.
А также, интересно применена система интервального повторения, также именуемая Системой Лейтнера (spaced repetition system, SRS, если пользователь не знает информацию, то будет видеть её чаще, если знает - реже).
Про кривую запоминания можно почитать тут: https://ru.wikipedia.org/wiki/Кривая_забывания.
Про интервальные повторения тут: https://ru.wikipedia.org/wiki/Интервальные_повторения
Однако, и у такого, казалось бы гениального подхода есть минус: если пропустить несколько дней, то заученные карты, вновь появятся в колоде, это стало предметом мемов. Однако, этот минус, также можно считать и плюсом, т. к. система мотивирует пользователя заходить ежедневно.
Также, многие отмечают скудный, серый, не понятный, не userfrendly интерфейс.
Повсеместное усложнение, если быть кратким.
И лично меня смущает система импорта колод: собственный формат файлов .apkg. Я бы использовал простой json для упрощения взаимодействия с системой.
Было бы интересно проанализировать насколько улучшится запоминание информации у конкретной группы людей, за счёт внедрения подобной системы. К примеру, это будет отлично работать с запоминанием иностранных слов.
Интересно, что проекты в сфере образования, в современной России, значительно децентрализованы => лучше сделать небольшой проект, выполняющий простую, маленькую задачу, а не зацикливаться на ненужном функционале.
Итак, раз уж мы разобрались с основными недостатками Anki, предлагаю перейти к созданию его аналога или улучшенной версии, если угодно.
Тут мне хотелось бы вести небольшой девлог, чтобы потом было проще составлять отчёты/писать проектную работу.
Для начала нужно выбрать стек. Я выбрал python-библиотеку fastapi, потому что у меня есть опыт и она достаточно простая.
Также хочется отметить философию проекта: в этом проекте, хочется сделать всё неаккуратно, обтёсывая по ходу разработки (то есть без перфектционизма), чтобы ускорить разработку и не забросить проект из-за выгорания.
Итак, для начала разберёмся с тем что такое колода и какие параметры ей необходимы:
name: str # Название
description: str # Описание
subject: str | None # Школьный предмет
link: str # Ссылка в формате uuid v5
private: bool # Отображается в поиске/нет
verified: bool # Верификация админами
cards: list[dict[str, str | list[str]]] # Карты в колоде