Skip to content

⚠️ статья в разработке..


Мини-образовательная система в формате коллекции колод карт

Введение

[08.09.25] Сегодня, наконец-то согласовал проект edu.iamlostshe.ru с учителем истории.

Концепция проекта такова:

  1. Существуют 2 основные структуры данных, колода и карта, колоды состоят из карт.

Колоды могут быть открытыми и закрытыми. Доступ к закрытой колоде может получить только пользователь, у которого есть ссылка (учителю будет удобно написать на доске).

Также важно сделать систему фильтров, по экзамену (ОГЭ/ЕГЭ), по конкретному заданию, по событиям (кластеризация с ии).

  1. Это будет улучшенная версия anki, преподнесённая в формате образовательной системы с красивым ui. Хотелось бы перенести концепцию запоминания (сомневаюсь, что есть определённое название).

"концепция запоминания" - если пользователь знает содержимое карты (правильно отвечает на вопрос или говорит, что знает), то увидит эту карту через продолжительный промежуток времени, в противном случае увидит ее очень скоро.

Однако, в связи со спецификой системы, придётся создать новые типы карт:

  • тест (пользователь вводит ответ вручную).
  • тест с вариантами ответа (пользователь выбирает ответ среди перемешанных (предотвращение списывания по "ключу") вариантов ответа).
  • доверие (пользователь оценивает знание карточки по пятибалльной системе).
  1. Для удобства администрирования/оценки успеваемости, придётся сделать админ-панель для учителей.

  2. Недавно, я нашёл в интернете интересную библиотеку для создания простого визуального интерфейса, vkui, скорее всего визуальный интерфейс будет создан на ней. А что касается backed-а, я бы взял связку python + fastapi, потому что имею опыт на этих технологиях.

Приступая к работе

Изначально, я думал, что просто создам платформу, без учебного материала, но реальность всё изменила, учитель, хочет, чтобы я составил колоды.

План такой:

  1. Определиться с заданиями, которые нас интересуют (задания ОГЭ/ЕГЭ где ученику предполагается сопоставить изображение объекта/предмета с его описанием).
  2. Изучить структуру сайта "решуегэ".
  3. Написать парсер сайта.
  4. Написать скрипт для кластеризации названий (описаний) объектов.
  5. Сгенерировать названия кластеров, с помощью 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, потому что у меня есть опыт и она достаточно простая.

Также хочется отметить философию проекта: в этом проекте, хочется сделать всё неаккуратно, обтёсывая по ходу разработки (то есть без перфектционизма), чтобы ускорить разработку и не забросить проект из-за выгорания.

Итак, для начала разберёмся с тем что такое колода и какие параметры ей необходимы:

python
name: str                               # Название
description: str                        # Описание
subject: str | None                     # Школьный предмет
link: str                               # Ссылка в формате uuid v5
private: bool                           # Отображается в поиске/нет
verified: bool                          # Верификация админами
cards: list[dict[str, str | list[str]]] # Карты в колоде