Гайд

Как составлять карточки — гайд RepeatMe

Хорошая карточка — половина запоминания. Этот гайд объясняет, как устроена карточка RepeatMe, в каких режимах её покажут и почему, и как обойти типичные ловушки: синонимы, словарную и контекстную формы, разрывные выражения. Он же — спецификация для ИИ: машинная версия формата лежит по ссылке /prompts/v3/card-format, её можно отдать любой модели.

Как устроена карточка

Карточка — единица знания. У неё один или несколько кейсов, и каждый кейс хранит факты:

  • front и back — вопрос и ответ. Один кейс — обычная карточка. Несколько кейсов — карточка-правило (например, формы to be): каждое повторение показывает случайный кейс, а расписание повторений одно на всю карточку.
  • accept — другие формы ответа, которые засчитываются как верные.
  • distractors — неверные варианты для режимов выбора.
  • cloze — предложение с ответом на месте пропуска.

Обязателен только front. Карточка никогда не перечисляет свои режимы (переворот, выбор, ввод, заполнение пропуска, подбор пар): приложение выводит их из фактов и колоды. Поэтому карточка с одними front и back уже получает несколько режимов, а режим, который появится в приложении позже, включится у всех существующих карточек сам. Результат форма карточки показывает в блоке «Где покажется»: в каких режимах кейс будет в своей колоде, а для остальных — почему нет.

Автор отключает режимы только для всей колоды — в блоке «Режимы колоды» формы колоды. Ученик тоже может отключить режимы для себя — в разделе «Режимы обучения» профиля.

«Что показываем» ≠ «что принимаем»

  • back хранит каноническую форму: её карточка показывает как правильный ответ.
  • Принимаемые ответы — все формы, с которыми сверяется введённый ответ: сам back, его части через , или ; и каждый пункт accept. В пропуске — варианты внутри его {{ }}.

Как факты становятся режимами. Карточка никогда не перечисляет свои режимы: приложение выводит их из фактов и колоды для каждого кейса, и новый режим включается у старых карточек сам. Каждый кейс показывается в режимах:

Режим Когда Из чего строится
Flip всегда front → back, самооценка
ReverseFlip back не пустой, и ни у одной другой карточки колоды нет такого же back back → front, самооценка
Match обе стороны короткие (не длиннее 5 слов), и таких карточек в колоде достаточно пары сторон
Type back — слово или короткая фраза, а не целое предложение ввод back; засчитываются и его части через , или ;, и каждый пункт accept
ReverseType как у ReverseFlip, и front — слово или короткая фраза ввод front; засчитываются и лицевые стороны других кейсов карточки с тем же back
Choice есть distractors, или другие карточки колоды дают три варианта back среди неверных вариантов — сначала ваши, остальные из ответов других карточек
ReverseChoice как у ReverseFlip, и другие карточки колоды дают три лицевые стороны front среди лицевых сторон других карточек
ClozeType есть cloze ввод пропуска (или пропусков)
ClozeChoice есть cloze и варианты для его пропуска пропуск среди distractors (или, если пропуск — само слово ответа, среди ответов других карточек)

disabled-modes колоды отключает режим у всех её карточек; ученик тоже может отключить режимы для себя.

Чьи неверные варианты. distractors — неверные варианты к тому, что спрашивает кейс. Без cloze — к back. С cloze, где пропуск — само слово ответа (back: apple / cloze: I eat an {{apple}} every day.), — к обоим. С cloze, где пропущена только часть back (back: Does she live in Poland? / cloze: {{Does}} she live in Poland?), — только к пропуску: Do | Did | Is; варианты целых предложений тогда берутся из колоды.

Поэтому кейс размером с предложение (правило, которое отрабатывают на примерах) получает Flip и режимы пропуска, но не ввод стороны, а кейс-слово — Flip, ReverseFlip, Match, Type, Choice и то, что добавит его cloze. Обратным режимам факты вообще не нужны: приложение берёт их из карточки и колоды. Давайте факт, только если можете заполнить его хорошо — три правдоподобных неверных варианта, естественное предложение с пропуском в точке выбора, все принимаемые формы ввода. Слабый факт хуже никакого, а без distractors варианты всё равно подберутся из колоды.

Текстовый формат (cards)

Карточки пишутся простым текстом: одна пара ключ: значение на строку, --- между карточками. Его просят у чат-бота промпты «Свой ИИ», и его же проще всего писать руками. Те же карточки занимают примерно втрое меньше символов, чем в JSON, обрезанный ответ теряет одну карточку, а не всю колоду, а превью импорта говорит по каждой карточке, что не удалось прочитать. Текст читают диалог «Импорт колоды», поля вставки ответа ИИ и результат урока; машинный контракт — по ссылке /prompts/v3/card-format.

Ответы на старые промпты (v1 и v2, с ключом modes:) по-прежнему импортируются: их режимы превращаются в факты.

Текстовый контракт колоды (формат cards). Его читают диалог «Импорт колоды», поля вставки «Свой ИИ» и результат урока — наравне с JSON колоды, который они тоже принимают. Документ — это шапка (ключи колоды) и следом карточки. Каждая строка — ключ: значение, ключ с начала строки. Карточка называет факты, которые знает, — свои стороны, другие принимаемые формы ответа, неверные варианты, предложение с пропуском — и никогда свои режимы: приложение выводит режимы из фактов (см. «Как факты становятся режимами»).

deck: English basics
description: Core vocabulary, first 100 words.
front-language: ru
back-language: en
---
front: яблоко
back: apple
distractors: banana | orange | grape
cloze: I eat an {{apple}} every day.
---
note: till and until are interchangeable; from opens the interval.
front: с … до …
back: from … till …
cloze: The shop is open {{from}} 9 a.m. {{till|until}} 6 p.m.
distractors: at | on | in

Грамматика:

  • --- на отдельной строке начинает новую карточку. case: (значение — необязательная подпись) начинает ещё один кейс той же карточки — карточка-правило с множеством примеров, слово с несколькими значениями. Второй front: без того и другого между ними читается как новая карточка.
  • Значение продолжается на следующих строках, если они начинаются хотя бы с одного пробела (Markdown внутри стороны, многострочное пояснение). Строка без ключа и без отступа пропускается.
  • Списки — accept, distractors, tags, disabled-modes — разделяют пункты через |. Пустой вариант («слово не нужно») пишется как "".
  • Больше ничего не экранируется и не берётся в кавычки. Зарезервированы: ключ с начала строки, --- с начала строки, | внутри списка, {{ }} внутри cloze.
  • Весь документ печатается внутри одного блока ```cards; всё вне блока пропускается, поэтому другого текста внутри него быть не должно.

Ключи (последний столбец — имя поля в JSON колоды: те же факты, записанные как JSON):

Где Ключ Смысл Имя в JSON
шапка deck название колоды (обязательно) title
шапка description одно-два предложения о колоде description
шапка front-language, back-language коды языков (ru, en, …) стороны вопроса — родного языка ученика — и изучаемой стороны, от которой зависит произношение frontLanguage, backLanguage
шапка disabled-modes режимы, которые колода отключает у всех карточек, например disabled-modes: ReverseType, ReverseChoice; без ключа остаются все режимы, которые допускают факты disabledModes
шапка tags, visibility (private / unlisted / public) необязательно tags, visibility
карточка title необязательная подпись (грамматический тег, тема); никогда не копия front title
карточка note пояснение, которое показывается после ответа, — напоминание правила, мнемоника; может называть ответ explanation
карточка format markdown, если сторона использует Markdown; по умолчанию простой текст contentFormat
кейс front сторона вопроса (обязательно) — один чистый термин, без пояснений в скобках front
кейс back сторона ответа — одна каноническая форма; пустая, если ответ — «слово не нужно» back
кейс context уточнение, которое показывается вместе с вопросом, — ТОЛЬКО когда у front больше одного верного ответа; никогда не подсказывает ответ или правило context
кейс accept другие формы back, которые ученик может ввести (accept: go for a walk) accept
кейс distractors три правдоподобных неверных варианта к тому, что спрашивает кейс, — к back или к пропуску, если cloze пропускает только часть back distractors
кейс cloze одно предложение на изучаемом языке с ответом внутри {{ }} — см. правила пропусков cloze

В JSON колоды карточка — { "title", "explanation", "cases": [ { "front", "back", "context", "accept", "distractors", "cloze" } ] }; каждый case: в тексте — ещё один элемент cases.

Никогда не пишите front-image, back-image, back-audio и front-audio: картинки загружает владелец колоды, произношение подставляет сервер, а выдуманная ссылка оказывается битой (E19).

Ответы и пропуски

Введённый ответ сверяется со всеми принимаемыми формами, поэтому большинство ошибок в карточке — ошибки в её наборах ответов. Правила этого раздела относятся к back вместе с accept и к каждому пропуску в cloze.

Пропуски и принимаемые формы (важно). Ответ пропуска стоит внутри предложения:

front: Она живёт в Польше?
back: Does she live in Poland?
cloze: {{Does}} she live in Poland?
distractors: Do | Did | Is

Два разных смысла «нескольких ответов» — не путайте их:

  • Синонимы / варианты — верен ЛЮБОЙ (till / until; оба / обе) → одна группа через |, контекстная форма первой: {{till|until}}. Первую карточка показывает как правильный ответ.
  • Последовательность / отдельные пропуски — нужны ВСЕ части, каждая на своём месте (три формы неправильного глагола; разрывное from … till …) → по группе на пропуск: cloze: The shop is open {{from}} 9 a.m. {{till|until}} 6 p.m.
  • Разные значения одного слова (fair = «справедливый» и «ярмарка») — одна карточка с кейсом на значение, у каждого свой front; обратный вопрос fair тогда сам принимает любое значение (E18).

Группа бывает только у пропуска: ничто видимое в предложении не является ответом, и ничто вне {{ }} тоже. В Our team {{develops|builds}} new features. один пропуск и одна группа.

Когда в предложении несколько пропусков, его distractors служат им всем: никогда не кладите среди них ответ одного из пропусков (в предложении он верен) и никогда не принимайте в группе вариант, который отличается только регистром ({{Polish|polish}}): регистр — не ответ, его проверяют неверные варианты.

В группу идёт каждая равноправная форма, а не одна «каноническая». Ввод проверяется посимвольно: верная форма, которую вы не перечислили, засчитывается как ошибка и отправляет карточку на переучивание. Поэтому перечисляйте всё, что приняли бы сами:

  • вежливость и к кому обращаются: {{успокойтесь|успокойся}};
  • род и число, когда вопрос их не задаёт: {{оба|обе}}, {{рад|рада}};
  • вид глагола, когда подходят оба: {{остыть|остывать}};
  • равноценные переводы: {{till|until}};
  • служебное слово, которое можно опустить: {{go for a walk|to go for a walk}}.

Регистр, ё/е, вид кавычек и знаки препинания на краях — не ответы: приложение выравнивает их само, такие написания перечислять не нужно.

То же правило действует для вводимого ответа самой карточки: back хранит одну каноническую форму, а accept перечисляет остальные (back: Успокойтесь / accept: Успокойся; back: to go for a walk / accept: go for a walk). Лицевой стороне список не нужен: при обратном вводе засчитываются front, front без пояснения в скобках и другие значения карточки.

Когда правильный ответ — «слово не нужно» (нулевой артикль, нулевой предлог), пропуск пустой, и back тоже пустой — одинаково во всех фактах кейса. Никогда не придумывайте замену (—, 0, no article): приложение показывает пустой ответ со своей подписью, поэтому в режимах ввода ученик оставляет поле пустым, а в режимах выбора выбирает вариант «слово не нужно».

front: article with most country names (France, Russia)
back:
distractors: a | an | the
cloze: She lives in {{}} France.

Соседние кейсы (back: the для the UK, back: a для a doctor) по той же причине держат "" среди своих distractors: «без артикля» должно оставаться живым вариантом везде, иначе ученик выберет правильный артикль методом исключения.

Ответы и варианты не должны содержать символ | — он разделяет варианты и пункты списков.

Ловушка словарной формы (citation vs in-context)

Слово в словарной форме несёт служебные элементы, которых в предложении быть не должно:

  • инфинитивное to: to go for a walk → в предложении «we often go for a walk»;
  • артикль: an apple → «I ate the apple»;
  • связку: be keen on → «he is keen on …»;
  • спряжение: wait for → «I'm waiting for …».

Правило: в пропуске стоит та форма, которую слово реально принимает в предложении. Если она отличается от канонической, кладите в группу обе, контекстную первой: {{go for a walk|to go for a walk}}. В back остаётся словарная форма, а форма без to идёт в accept.

Правила генерации (лексика):

  • L1. Каждый пропуск и ответ пишется в той форме, которую он принимает в предложении (без словарного «to», в спряжении по подлежащему, без артикля, который уже есть в предложении) — по грамматике данного языка. Когда в предложении на этом месте нет слова вовсе (нулевой артикль, нулевой предлог), пишется пустой пропуск {{}}, никогда не замена.
  • L2. Когда контекстная форма отличается от исходного слова, указываются обе, контекстная первой: {{go for a walk|to go for a walk}}.
  • L3. Синонимы и варианты — отдельные пункты через |, никогда не через запятую внутри одного пункта.
  • L4. У разрывного выражения — по пропуску на часть.
  • L5. Неверные варианты правдоподобны, но неверны, того же рода, что и ответ, и никогда не повторяют принимаемый вариант.
  • L6. Предложение естественное и грамматически правильное.

Контекст, пояснение и заголовок

В форме карточки context — это поле «Контекст», note — «Пояснение», title — «Заголовок». Все три необязательны, и большинству карточек не нужен ни один.

context и note — две разные подсказки, не путайте их:

  • context показывается вместе с вопросом, до ответа. Его единственная задача — снять настоящую неоднозначность: ставьте его, когда у одного front больше одного верного ответа, чтобы выбрать нужное прочтение. Омоним: front: язык → context: орган ⇒ ожидается tongue, а не language. Кейс с артиклем: front: Я вижу птицу., back: I see a bird. — the bird тоже верный перевод, поэтому context: какую-то, не конкретную выбирает a. Проверка: был бы без подсказки верен и другой ответ? Если нет, context не нужен — по умолчанию подсказки нет.
  • context уточняет, что значит front, а не как образуется ответ: в нём НЕ должно быть ответа или его части, и он НЕ должен намекать на отрабатываемое правило. На карточке про a/an context: university начинается с согласного звука [j] пересказывает само проверяемое правило и превращает вспоминание в чтение — этой фразе место в note. Ученик, который не знает правила, не должен ничего узнать из context.
  • context показывается, только когда вопрос — сторона front; обратные режимы и Match его не показывают. Поэтому context не снимает неоднозначность обратной стороны: когда один back отвечает на несколько разных front (многозначное слово), сделайте их кейсами одной карточки — см. E18. Держите подсказку только в context — никогда не вшивайте её в сам front (front: высокий / context: о росте — а НЕ front: высокий (о росте)): всё внутри front становится частью термина в обратных режимах, вариантах выбора, вводимых ответах и списках терминов. В front — только чистый термин.
  • note (explanation в JSON колоды) показывается после ответа (кнопка с лампочкой): напоминание правила, разбор или мнемоника; в нём МОЖНО называть ответ и правило.

context живёт на кейсе (у каждого кейса карточки-правила может быть своя подсказка); note и title относятся ко всей карточке. Ставьте их, только когда они действительно помогают, — пустые значения норма. Если сомневаетесь, не ставьте.

title: ставьте, только если он добавляет то, чего нет в front и context, — грамматический тег («Фразовый глагол»), тему, пометку о стиле. Никогда не копируйте front в title дословно: это дублирует то, что ученик и так видит. У подавляющего большинства карточек title нет.

Тип знания → форма карточки

Прежде чем писать карточки, решите, какое знание несёт каждая: колода столиц, колода слов и грамматическое правило требуют карточек разной формы. Колода слов — обычно перевод (родной ↔ изучаемый язык), колода терминов — определение (термин ↔ значение на одном языке), викторина — факт (вопрос ↔ факт).

Тип знания → форма карточки (решите это ДО того, как писать карточки):

Карточка — единица знания, а не отдельный вопрос. Сначала определите, что изучается, потом выберите форму карточки по типу. Никогда не делайте карточку на каждое предложение-пример: сгруппируйте материал по правилу, слову или противопоставлению и положите примеры в кейсы одной карточки. При каждом повторении показывается случайный кейс, и ученик осваивает закономерность, а не заучивает одну строку.

Тип знания Пример Форма карточки Какие факты дать Неверные варианты
Правило / закономерность — выбор формы (do/does, артикль, форма глагола, окончание) вопросы с does 1 правило = 1 карточка, 6–12 кейсов: разные предложения на одно правило cloze с пропуском в точке выбора + distractors к пропуску; стороны — предложения, поэтому ввода стороны нет минимальные пары: do/does/did, work/works
Порядок слов / позиция usually перед смысловым глаголом 1 закономерность = 1 карточка, 5–8 кейсов back = правильное предложение, distractors = те же слова в неверном порядке те же слова, неверный порядок
Путаемый набор (интерференция) speak, learn и study 1 набор = 1 карточка; front/back = член набора и его значение; кейсы чередуют верный член cloze на кейс + distractors = другие члены набора; подсказка context, когда одно предложение неоднозначно другие члены набора — в этом смысл карточки
Слово / сочетание develop a service 1 слово = 1 карточка, 2–5 кейсов: одно слово в разных предложениях back = слово (+ accept), cloze на предложение, distractors близкие синонимы, которые здесь неверны
Написание study, а не stady 1 слово = 1 карточка back и cloze — ввод слова и есть проверка не нужны
Факт / определение столица X; термин ↔ значение 1 факт = 1 карточка, 1 кейс стороны; distractors — только если есть правдоподобные неверные факты того же рода; cloze редко правдоподобные факты того же рода
  • Один выбор на вопрос. Ввод целого предложения проверяет пять вещей сразу и размывает сигнал об ошибке; пропуск cloze ровно в точке выбора выделяет то, что тренируется.
  • Каждый кейс и каждый факт проверяют один выбор карточки. Карточка про do/does никогда не пропускает в одном из кейсов смысловой глагол — другому выбору место на другой карточке.
  • Многозначное слово — одна карточка с кейсом на значение. fair = «справедливый» и «ярмарка» — не две карточки: у них один обратный вопрос, и порознь приложению пришлось бы отключить их обратные режимы. Кейсами одной карточки они позволяют обратному вопросу принимать любое значение (E18).
  • У карточек-слов front/back — само слово (слово ↔ значение), никогда не предложение; предложения с контекстом живут в cloze. Так Flip остаётся чистым, а Match становится доступен — самый быстрый режим, чтобы прогнать много карточек-слов за раз.
  • Регистр проверяется только выбором. Вводимые ответы проверяются без учёта регистра, поэтому правилу о заглавной букве (English, а не english) нужны distractors, отличающиеся регистром (English и english); приложение тогда не показывает этот кейс в режимах ввода.
  • Воспроизведение сильнее узнавания. Выбор — ступенька: дайте слову и вводимую форму (короткий back, пропуск в cloze), чтобы знание в итоге воспроизводилось, а не только узнавалось.
  • Карточкам-правилам нужны свежие примеры. Меняйте подлежащие, глаголы и темы за пределами предложений, которые ученик уже видел, — иначе карточка проверяет память об уроке, а не правило.
  • По умолчанию — проще. Тяжёлая разметка не нужна, когда она ничего не добавляет: для неправильного глагола с тремя формами достаточно back: go, went, gone.

Рецепты по типу знания

Каждый рецепт — карточка в текстовом формате. В JSON у тех же фактов те же имена (раздел «Формат JSON»).

Факт / формула / определение → только стороны

---
front: Площадь круга
back: πr²

Других фактов не нужно: в колоде из похожих карточек такая карточка покажется и в обратную сторону, и с вводом, и в парах, и выбором среди ответов других карточек. distractors стоит добавить, когда есть правдоподобные неверные значения того же рода, — следующий рецепт.

Факт с неверными вариантами (в стиле ПДД, на родном языке)

---
front: Что означает сплошная линия разметки?
back: Пересекать запрещено
distractors: Можно перестраиваться | Только для автобусов | Парковка разрешена

Неверные варианты — правдоподобные, но неверные факты. В выборе они идут первыми; колода добавляет свои, только если их меньше трёх.

Слово → перевод

---
front: яблоко
back: apple
distractors: banana | orange | grape
cloze: I eat an {{apple}} every day.

Карточка-слово получает все режимы: переворот, ввод и выбор в обе стороны, пары и оба режима пропуска. Пропуск — само слово ответа, поэтому distractors служат и выбору слова, и пропуску.

Синонимы / варианты рода → один список принимаемых форм

Англоязычному ученику русского нужно ввести оба или обе для both. Хранить back: оба, обе одним ответом — неверная форма для карточки-слова (Match и варианты выбора покажут всё перечисление). Вместо этого — каноническая форма на стороне ответа, остальные принимаемые формы рядом:

---
front: both
back: оба
accept: обе

Теперь при вводе засчитываются и оба, и обе. Обратной стороне список не нужен: там единственный ответ — both.

Многозначное слово (несколько значений) → одна карточка, кейс на значение

Прямая сторона у таких кейсов однозначна (справедливый → fair, ярмарка → fair), а обратная — нет: каждый кейс спрашивает одним и тем же словом — fair, — и context там не поможет, он показывается только с прямым вопросом.

Кейсами одной карточки значения решают это сами: при вводе обратного вопроса засчитывается любое значение карточки, и соседнее значение никогда не предлагается неверным вариантом. Двумя отдельными карточками они делили бы один back, и приложению пришлось бы отключить обратные режимы у обеих.

---
title: fair
front: справедливый
back: fair
distractors: unfair | honest | equal
cloze: The judge made a {{fair}} decision.
case:
front: ярмарка
back: fair
distractors: market | festival | exhibition
cloze: We went to a street food {{fair}}.

Одно слово — одна карточка: значения учатся и планируются вместе, а не соревнуются за один и тот же вопрос из разных карточек. title здесь оправдан — он называет само слово, которого нет ни в одном front.

Словарная форма с to / артиклем → контекстная форма + принимаемый вариант

---
front: идти на прогулку
back: to go for a walk
accept: go for a walk
cloze: After dinner we often {{go for a walk|to go for a walk}} in the park.

В предложении — go for a walk (контекстная форма первой), словарная остаётся принимаемым вариантом. В back наоборот: каноническая — словарная форма, а форма без to идёт в accept.

Разрывное выражение from … till … → по пропуску на часть

---
front: с … до …
back: from … till …
cloze: The shop is open {{from}} 9 a.m. {{till|until}} 6 p.m.
distractors: at | on | in

Два пропуска {{ }}, нужны оба. Пропуски — часть ответа, поэтому distractors — варианты для пропусков; в режиме выбора правильной кнопкой пропуск показывает свой первый вариант (from / till), а until никогда не предлагается как неверный.

Неправильный глагол (3 формы) → три пропуска

---
front: идти (3 формы)
back: go, went, gone
cloze: {{go}}, {{went}}, {{gone}}

Каждая форма проверяется в своём пропуске. При вводе back засчитывается любая одна из форм через запятую, поэтому все три ученик воспроизводит именно в пропусках.

Грамматическое правило → одна карточка, много кейсов, пропуск в точке выбора

Ученик путает do/does. Неправильно — карточка на каждое исправленное предложение: запоминается предложение, а не правило. Правильно — одна карточка-правило, где каждый кейс — другое предложение, пропуск стоит ровно там, где делается выбор, а неверные варианты — формы, которые на самом деле путают:

---
title: Present Simple questions: do or does?
note: he/she/it → does; I/you/we/they → do. After does the main verb returns to its base form.
front: Она живёт в Польше?
back: Does she live in Poland?
cloze: {{Does}} she live in Poland?
distractors: Do | Did | Is
case:
front: Ты работаешь по выходным?
back: Do you work on weekends?
cloze: {{Do}} you work on weekends?
distractors: Does | Did | Are
case:
front: Почему он изучает английский?
back: Why does he study English?
cloze: Why {{does}} he study English?
distractors: do | did | is

Настоящая карточка продолжается до 6–12 кейсов: меняйте подлежащие, глаголы и темы и придумывайте новые предложения помимо тех, что ученик уже видел. Каждое повторение показывает один случайный кейс, поэтому расписание следит за правилом, а не за отдельным предложением. Каждый кейс остаётся на том же выборе, ради которого карточка: здесь пропуск всегда на do/does. Кейс, где пропущено другое слово (скажем, смысловой глагол), проверяет другое знание, и его место на другой карточке. Стороны — целые предложения, поэтому карточка получает Flip и режимы пропуска, но не ввод стороны, который требовал бы предложение буква в букву. Пропуск — часть ответа, поэтому distractors относятся к пропуску.

context на кейсе карточки-правила допустим, только когда у front несколько верных ответов. Классический пример — артикли: в русском front артиклей нет, поэтому для Я вижу птицу. верны и I see a bird, и I see the bird. context: какую-то, не конкретную выбирает нужное значение, а без подсказки неверный вариант the оказался бы вторым верным. Никогда не используйте context, чтобы повторить условие правила: context: university начинается с согласного звука [j] на карточке про a/an выдаёт ответ до вспоминания. Когда у кейса один верный ответ, context не нужен; напоминание правила живёт в note карточки и показывается после ответа.

У карточки про артикли есть и кейсы, где правильный ответ — без артикля. Это пишется пустым back и пустым пропуском {{}}, а неверные варианты сохраняются: нулевой артикль — именно тот выбор, который ученик должен уметь сделать сам, поэтому его нельзя проверять только выбором из списка.

---
front: артикль с большинством стран (Франция, Россия)
back:
distractors: a | an | the
cloze: She lives in {{}} France.

Соседние кейсы (back: the для the UK, back: a для a doctor) по той же причине держат "" среди своих distractors: «без артикля» должно оставаться живым вариантом везде, иначе ученик выберет правильный артикль методом исключения.

Путаемые слова → одна карточка на различение, кейсы чередуют верный член

Ученик путает speak (уметь говорить на языке) и learn (процесс изучения). Одна карточка на путаемый набор; другие члены набора — неверные варианты, а кейсы чередуют, какой член верен, — так ученику приходится различать, а не узнавать один заученный ответ:

---
title: speak vs learn
note: speak = уметь говорить на языке; learn = учить, осваивать (процесс).
front: говорить (на языке)
back: speak
cloze: Do you {{speak}} Polish?
distractors: learn | study | talk
case:
front: учить, осваивать (язык)
back: learn
cloze: I {{learn|study}} Polish and English.
distractors: speak | talk

Это карточка-слово, поэтому front/back несут только слово и его значение, а предложения с контекстом живут в cloze. Так Flip остаётся чистым (слово ↔ значение, а не пара предложений), и становится доступен Match — самый быстрый режим, чтобы прогнать много карточек-слов за раз. Пропуск — само слово ответа, поэтому distractors служат и пропуску, и простому выбору слова. Когда в предложение действительно подходят несколько членов набора, принимайте их все одной группой (как {{learn|study}} выше): неверный вариант никогда не должен совпадать с принимаемым. Когда одно предложение не задаёт единственного прочтения, добавьте кейсу подсказку context, а не искажайте предложение.

Одно слово, несколько контекстов → одна карточка, кейс на контекст

Ученик неверно употребил одно слово (make a service → должно быть develop a service). Сосредоточьте карточку на этом слове и покажите его в разных предложениях — по одному случайному кейсу на повторение:

---
title: Collocation: develop (software)
note: develop / build a service, an app — not "make a service".
front: разрабатывать (сервис, приложение)
back: develop
cloze: I {{develop|build}} a spaced repetition service.
case:
front: разрабатывать (сервис, приложение)
back: develop
cloze: We {{develop|build}} mobile apps for banks.
distractors: make | do | invent
case:
front: разрабатывать (сервис, приложение)
back: develop
cloze: Our team {{develops|builds}} new features every month.

Вводимый ответ — всегда слово, никогда не целое предложение. Обратите внимание на третий кейс: контекстная форма (develops) стоит первой в своей группе, по правилам пропусков, а back остаётся словарной формой — именно её карточка-слово показывает как ответ и именно её Match ставит в пару.

Полный пример колоды

Валидная колода-образец, в которой каждый режим выводится хотя бы у одной карточки. Её можно вставить в диалог «Импорт колоды» как есть:

deck: English basics — sample
description: A tiny sample deck showing every key.
front-language: ru
back-language: en
---
front: яблоко
back: apple
distractors: banana | orange | grape
cloze: I eat an {{apple}} every day.
---
front: язык
back: tongue
context: орган
---
title: Phrasal verb
front: идти на прогулку
back: to go for a walk
accept: go for a walk
cloze: After dinner we often {{go for a walk|to go for a walk}} in the park.
---
note: till и until взаимозаменяемы; from задаёт начало интервала.
front: с … до …
back: from … till …
cloze: The shop is open {{from}} 9 a.m. {{till|until}} 6 p.m.
distractors: at | on | in
---
note: be – was/were – been.
front: быть (3 формы)
back: be – was/were – been
cloze: {{be}}, {{was|were}}, {{been}}
case:
front: он устал (Present Simple, to be)
back: he is tired

Формат JSON

Те же факты в JSON, по полю на каждый ключ текстового формата. На нём говорят экспорт, REST API и agent API, а диалог «Импорт колоды» и все поля вставки его принимают. JSON-файл со старыми списками modes (экспорт прежней версии, ответ на промпт v1) тоже импортируется: его режимы превращаются в факты.

Контракт JSON колоды. Объект колоды, который принимают диалог «Импорт колоды», POST /api/decks/import-json и agent API, — те же факты, что и в тексте cards, по полю JSON на ключ. У карточек нет deckIds: саму колоду создаёт импорт.

{
  "title": "string",                  // deck name (required)
  "description": "string | null",
  "frontLanguage": "ru",              // language of the question side (front) — the learner's native language (optional)
  "backLanguage": "en",               // language of the studied side (back) — drives pronunciation (optional)
  "disabledModes": [],                // study modes the deck switches off for every card (optional)
  "cards": [
    {
      "title": "string | null",       // optional label; never copy the front — set it only when it adds information
      "explanation": "string | null", // post-answer note (rule recap / mnemonic); MAY reference the answer
      "contentFormat": "PlainText",   // or "Markdown"
      "cases": [
        {
          "front": "string",          // question side (usually the native language), required
          "back": "string",           // answer side (usually the studied language); "" = "no word belongs here"
          "context": "string | null", // cue shown WITH the question; set ONLY when several answers would be correct without it
          "accept": ["string"],       // other forms of the back the learner may type (optional)
          "distractors": ["string"],  // three plausible wrong options for what the case asks (optional)
          "cloze": "string | null"    // a sentence with the answer in {{ }}: "I eat an {{apple}} every day."
        }
      ]
    }
  ]
}

Опускайте то, что кейсу не нужно: отсутствующее и пустое поле значат одно и то же. Никогда не пишите frontImage, backImage, backAudio и frontAudio (E19) и никогда — список modes: режимы выводятся из этих фактов. Где правила цитируют поле в нотации текста cards (back: apple, case:), читайте note как explanation, каждый case: — как ещё один элемент cases, а список через | — как массив JSON.

Пример колоды в JSON — те же карточки, что и в текстовом примере:

{"title":"English basics — sample","description":"A tiny sample deck showing every key.","frontLanguage":"ru","backLanguage":"en","cards":[{"cases":[{"front":"яблоко","back":"apple","distractors":["banana","orange","grape"],"cloze":"I eat an {{apple}} every day."}]},{"cases":[{"front":"язык","back":"tongue","context":"орган"}]},{"cases":[{"front":"идти на прогулку","back":"to go for a walk","accept":["go for a walk"],"cloze":"After dinner we often {{go for a walk|to go for a walk}} in the park."}],"title":"Phrasal verb"},{"cases":[{"front":"с … до …","back":"from … till …","distractors":["at","on","in"],"cloze":"The shop is open {{from}} 9 a.m. {{till|until}} 6 p.m."}],"explanation":"till и until взаимозаменяемы; from задаёт начало интервала."},{"cases":[{"front":"быть (3 формы)","back":"be – was/were – been","cloze":"{{be}}, {{was|were}}, {{been}}"},{"front":"он устал (Present Simple, to be)","back":"he is tired"}],"explanation":"be – was/were – been."}]}

Картинки и произношение

Картинка ставится в форме карточки: «Загрузить» свою или «Подобрать картинку» в бесплатных фотобанках (Pixabay, Wikimedia Commons, Pexels); выбранная сохраняется вместе с автором и лицензией. Картинка на лицевой стороне показывается вместе с вопросом, на обратной — только после ответа. Произношение изучаемого слова берётся из открытых записей: «Подобрать произношение» в форме карточки. Не пишите ссылки на картинки и аудио в текст или JSON: ссылка, придуманная вручную или чат-ботом, почти всегда битая.

Чек-лист перед импортом

По этим правилам приложение проверяет ответы ИИ: замечания, которые кнопка «Скопировать замечания для ИИ» отдаёт чату, ссылаются на них по номерам.

Чек-лист валидности:

  • E1. У каждого кейса есть front (back может быть пустым — см. E16).
  • E2. В cloze есть хотя бы один пропуск {{ }} — ровно одна группа на пропуск.
  • E3. Каждый набор ответов — группа {{ }}, back вместе с accept — не пуст, контекстная форма первой. Пункт в нём может быть пустым — это ответ «слово не нужно» (E16).
  • E4. Синонимы — отдельные пункты, никогда не a, b одним пунктом.
  • E5. Контекстная форма грамматична в своём предложении (никаких «we often to go», «is be keen on»).
  • E6. Неверные варианты неверны и никогда не совпадают с принимаемым вариантом, а при нескольких пропусках в одном предложении — с ответом любого из них.
  • E7. Факт даётся, только если его можно заполнить хорошо: никаких distractors для галочки, никаких натянутых cloze. У карточки, которую только переворачивают, нет ни того, ни другого — остальные режимы ей даёт колода.
  • E8. В ответах и вариантах нет символа | (это зарезервированный разделитель).
  • E9. Вводимые ответы — back карточки-слова вместе с accept, каждый пропуск — это слово или короткая фраза. back размером с предложение допустим (приложение не просит его вводить), но выбор внутри него проверяется пропуском cloze ровно в этой точке.
  • E10. У карточки-правила несколько кейсов (стремитесь к 6+), каждый — другое предложение-пример; одно правило никогда не делится на карточку на каждое предложение.
  • E11. distractors — минимальные пары проверяемого выбора (do/does/did): здесь неверные, но правдоподобно путаемые; никогда не случайные посторонние слова.
  • E12. Различие, которое ввод не видит, — один только регистр (English и english) или одна только ё/е (всё и все), — проверяется distractors, которые отличаются ровно этим. Приложение тогда показывает кейс только в режимах выбора (ввод не различает регистр и ё, поэтому принял бы неверную форму); такой вариант никогда не кладут в accept.
  • E13. Каждый кейс и каждый факт карточки проверяют один её выбор. Карточка про do/does никогда не пропускает в одном из кейсов смысловой глагол: другой выбор — другая карточка.
  • E14. У карточек-слов front/back — само слово (слово ↔ значение), никогда не целое предложение; предложения с контекстом идут в cloze. Так Flip остаётся чистым, а Match становится доступен. И одна форма, а не список: upside down; inverted; wrong way up покажется ученику перечислением в Match и в вариантах выбора. Равноценные формулировки — пункты accept (E17); разные значения — разные кейсы с context (E15).
  • E15. context ставится, только когда у front больше одного верного ответа; он выбирает нужное прочтение и никогда не подсказывает ответ или отрабатываемое правило (напоминание правила живёт в note).
  • E16. Когда правильный ответ — отсутствие слова (нулевой артикль, нулевой предлог), он записывается пустым — и в back, и в пропуске ({{}}), одинаково во всём кейсе. Никогда не замена (—, 0, no article): приложение подставляет свою подпись.
  • E17. Каждая форма, которую вы приняли бы, — отдельный пункт: вежливость (успокойтесь/успокойся), род и число (оба/обе), равноценные синонимы (till/until). Перечисление в одной строке (оба, обе одним пунктом accept) не работает — ученику пришлось бы вводить этот список буквально. Регистр, ё/е и знаки препинания на краях перечислять не нужно. Верно и обратное: ответ, который ученик должен дать целиком (red, green, blue), и один термин через косую черту (and/or) — один пункт.
  • E18. Один вопрос — один набор верных ответов. Два кейса карточки (или две карточки колоды) не должны по-разному отвечать на один и тот же вопрос — ученик гадал бы, о чём его спрашивают. Тот же front, разные back: вопрос снимает свой context у каждого кейса (E15). Тот же back, разные front (многозначное слово): context не поможет, обратные режимы его не показывают, — сделайте значения кейсами одной карточки, и обратный вопрос сам примет любое значение. Две отдельные карточки с одним back теряют обратные режимы.
  • E19. Никогда не выдумывайте ссылку на картинку или аудио: никаких front-image, back-image, back-audio, front-audio. Картинки загружает владелец колоды, произношение подставляет сервер; угаданная ссылка — битая картинка, а битая картинка хуже никакой.

Создание карточек с ИИ

Составлять карточки вручную не обязательно — есть три пути:

  • Базовый ИИ — кнопка «Создать с помощью ИИ» на странице колод: опишите колоду свободным текстом, отредактируйте план и получите готовые карточки.
  • Свой ИИ — тот же диалог собирает готовый промпт: скопируйте его в любой чат-бот (ChatGPT, Claude, Gemini), а ответ вставьте обратно — блок ```cards, который он напечатает, или JSON, если он настоит на своём. Так же работает «Заполнить с помощью ИИ» в форме карточки и в массовом редактировании.
  • Внешний чат после занятия — если вы разбирали тему с ИИ-чатом, дайте ему ссылку /prompts/v3/deck-builder: он задаст пару уточняющих вопросов о ваших слабых местах, соберёт колоду и выдаст текст для импорта.

Импорт

  1. Откройте страницу колод и нажмите «Импорт колоды» (или перейдите по ссылке /decks?import=1 — диалог откроется сам).
  2. Вставьте текст: диалог читает блок ```cards, объект колоды JSON { "title", …, "cards": [ … ] }, просто массив карточек [ { "cases": … }, … ] или по паре вопрос — ответ на строку — название берётся из текста, если он его называет, иначе из поля «Название» диалога.
  3. Прочитайте превью — сколько карточек найдено и, по каждой карточке, что не удалось прочитать — и подтвердите: колода и все карточки создадутся за один шаг.

Отдельную карточку можно вставить во вкладку JSON формы карточки.