# ИИ-Тренажёр — План развития v4: разнообразие задач + все направления **Дата:** 2026-06-26. Фокус заказа — **разнообразие задач и условий по текущим темам**; плюс полный охват направлений (форматы, педагогика, адаптивность, вовлечение, охват ЦТ, техника). План собран глубоким анализом (11 агентов, каждый сверялся с РЕАЛЬНЫМ движком): **103 новых генератора, 38 новых формулировок условий, 44 сквозных улучшения.** ## Что уже есть (база v1–v3) - Движок параметрических генераторов + детерминированная проверка `SimExpr`. - **64 генератора / 21 тема** (алгебра + геометрия). Виды: `solve`, `compute`, `roots`, `simplify`, `inequality`, `system`. - Геометрия с **чертежами-данными** (`figures.js`, 13 типов) + режим **«читать с чертежа»** (`figurePrompt` у всех 19 геом-генераторов, тумблер «Текст / На чертеже»). - Структурные уровни сложности (1–3), умная тренировка + интервальное повторение (SR, мигр.081/082), LLM-задачи с серверной проверкой (мигр.083), пошаговое решение (`checkStep`), правиловый разбор ошибок (`analyzeMistake`), 3-уровневое объяснение (`/api/practice/explain`), мат-клавиатура + live-KaTeX, аналитика класса, авторинг/раздача учителем, конструктор генераторов (`/trainer-builder`, мигр.084). ## Инварианты (НЕ нарушать ни в одном пункте) 1. ⛔ Только `SimExpr` — **без `eval`/`new Function`**. 2. **«Корень-вперёд»**: сначала выбираем целый корень/множители, ВЫВОДИМ остальное → ответ всегда чистый (целое ИЛИ конечная десятичная дробь, как окружность с π≈3,14), самопроверка движка проходит. Ответ ВСЕГДА вводим без потери точности. 3. ⛔ **Без эмодзи** — только inline SVG `.ic` / Lucide. Тексты экранируются. 4. Зарезервированные имена параметров: `t, w, h, pi, e, E, PI, tau` — нельзя. 5. Каждая фаза — со смоуками/тестами и коммитом; `lint:routes` baseline 0. ### Ключевые ограничения движка (выявлены анализом — важно для реализации) - `roots` проверяет КАЖДЫЙ корень подстановкой → `|ax+b|=c` реализуется как `roots` с `lhs:'abs(...)'` (exprToLatex уже рендерит `\left|...\right|`). - `inequality` поддерживает только ОДНУ полупрямую `{op, bound}`. Двойные неравенства `aa (смена знака) | 3 | inequality | | inequalities | `ineq-paren` | a(x+b)>c | 2 | inequality | | inequalities | `ineq-count-int` | сколько целых решений / наим. целое | 2 | compute | | systems | `sys-subst` | подстановка (одно ур-е разрешено) | 2 | system | | systems | `sys-sum-diff` | x+y=S, x−y=D | 1 | system | | systems | `sys-3x3` | система 3×3 (тизер, answerVars=3) | 3 | system | | systems | `sys-word` | текстовая на два неизвестных | 2 | system | **Формулировки:** инверс «при каком a корень = R», конструктор «дополни 2x+▢=10 чтобы корень 3», пропущенный шаг (берётся из `solution[]`), счёт целых решений (обход ограничения `inequality`), инверс параметра системы «при каком k решение (1;2)». ### Группа 2. Пропорции · Проценты · Текстовые (17 генераторов) | Тема | id | Форма / условие | L | kind | |---|---|---|---|---| | proportions | `prop-direct-word` | прямая пропорция (цена/кол-во) | 1 | compute | | proportions | `prop-inverse-word` | обратная (рабочие/дни) | 2 | compute | | proportions | `prop-scale-map` | масштаб карты | 2 | compute | | proportions | `prop-compound` | тройная пропорция | 3 | compute | | proportions | `prop-share-ratio` | деление в отношении a:b | 2 | compute | | percents | `pct-increase` | увеличение на p% | 2 | compute | | percents | `pct-decrease` | уменьшение на p% | 2 | compute | | percents | `pct-change` | на сколько % изменилось | 3 | compute | | percents | `pct-simple-interest` | простые проценты (вклад) | 2 | compute | | percents | `pct-compound-2y` | сложные проценты (2 года) | 3 | compute | | percents | `pct-restore-before` | исходное до изменения | 3 | compute | | applied | `app-meet` | встречное движение | 2 | compute | | applied | `app-overtake` | движение вдогонку | 3 | compute | | applied | `app-upstream` | по реке (по/против течения) | 2 | compute | | applied | `app-work-joint` | совместная работа | 3 | compute | | applied | `app-mix-blend` | смешивание растворов | 3 | compute | | applied | `app-profit-pct` | прибыль в процентах | 3 | compute | **Формулировки:** «что больше: 30% от 80 или 40% от 50», таблица-данные, цепочка скидка→налог, проценты vs процентные пункты, прикидка, средняя скорость кругового рейса (2v₁v₂/(v₁+v₂)). ### Группа 3. Выражения: Упрощение · Степени · Формулы (16 генераторов) | Тема | id | Форма / условие | L | kind | |---|---|---|---|---| | simplify | `simp-like-multivar` | привести подобные (две буквы) | 2 | simplify | | simplify | `simp-like-const` | подобные с числом | 2 | simplify | | simplify | `simp-sub-bracket` | вычесть скобку (знаки) | 3 | simplify | | simplify | `simp-distribute-combine` | раскрыть и привести | 3 | simplify | | simplify | `simp-factor-common` | вынести общий множитель | 2 | simplify | | simplify | `simp-factor-group` | группировка | 3 | simplify | | formulas | `diff-sq-factor` | разложить разность квадратов | 3 | simplify | | formulas | `sq-trinom-factor` | свернуть в квадрат | 3 | simplify | | formulas | `sq-sum-coef` | квадрат суммы с коэффициентом | 3 | simplify | | formulas | `cube-sum` | куб суммы | 3 | simplify | | formulas | `sum-cubes-factor` | сумма кубов | 3 | simplify | | powers | `pow-div` | частное степеней | 2 | simplify | | powers | `pow-product-base` | степень произведения | 2 | simplify | | powers | `pow-frac-combine` | дробь степеней | 3 | simplify | | powers | `pow-numeric-laws` | степени одного основания (число) | 2 | compute | | powers | `pow-standard-form` | стандартный вид числа | 2 | compute | **Формулировки:** вставь число в тождество (`(x+a)²=x²+▢x+a²`), найди-ошибку→правильный ответ, «запиши в виде произведения» (обратное разложение, simplify-эквивалентность), «в какую степень возвести», упрости-и-вычисли при x=x₀ (мост к арифметике, защита от заучивания строки). ### Группа 4. Квадратные · Прогрессии (16 генераторов) | Тема | id | Форма / условие | L | kind | |---|---|---|---|---| | quadratic | `quad-incomplete-bx` | ax²+bx=0 (вынесение x) | 2 | roots | | quadratic | `quad-incomplete-c` | ax²=c (корень) | 2 | roots | | quadratic | `quad-disc-clean` | ax²+bx+c=0 (дискриминант, чистый D) | 3 | roots | | quadratic | `quad-trinomial-factor` | разложить трёхчлен | 2 | simplify | | quadratic | `quad-find-b` | найти b по корню | 3 | compute | | quadratic | `quad-count-roots` | сколько корней (знак D) | 2 | compute | | quadratic | `quad-vertex-x` | вершина x₀=−b/2a | 2 | compute | | quadratic | `quad-complete-square` | выделить полный квадрат | 3 | simplify | | progressions | `prog-arith-sum` | сумма n членов (арифм.) | 2 | compute | | progressions | `prog-arith-find-d` | найти d по двум членам | 2 | compute | | progressions | `prog-arith-find-n` | каким по счёту идёт член | 3 | compute | | progressions | `prog-arith-mean` | вставить среднее арифм. | 2 | compute | | progressions | `prog-geom-find-q` | найти знаменатель q | 2 | compute | | progressions | `prog-geom-mean` | геометрическое среднее | 3 | compute | | progressions | `prog-geom-sum` | сумма n членов (геом.) | 3 | compute | | progressions | `prog-arith-word` | ряды кресел / зарплата | 2 | compute | **Формулировки:** корни-как-пара (сумма/произведение по Виета), «составь приведённое ур-е по корням» (simplify), классификация по знаку D, кратный корень (полный квадрат, 1 корень), числовой сюжет (произведение последовательных), инверс a₁/n/q, сумма 1..n и 1+3+..+(2n−1), реальный геом. сюжет (мяч/бактерии, q∈{2,3}). ### Группа 5. Арифметика 5–6: НОД/НОК · Дроби · Десятичные · Отрицательные (19 генераторов) | Тема | id | Форма / условие | L | kind | |---|---|---|---|---| | gcd-lcm | `gcd-triple` | НОД трёх чисел | 2 | compute | | gcd-lcm | `lcm-triple` | НОК трёх чисел | 3 | compute | | gcd-lcm | `coprime-check` | взаимно простые? (1/0) | 2 | compute | | gcd-lcm | `lcm-buses` | «снова вместе» (НОК-задача) | 2 | compute | | fractions | `frac-reduce` | сократить дробь | 2 | compute | | fractions | `frac-add-unlike` | сложение (разные знаменатели) | 3 | compute | | fractions | `frac-mult` | умножение дробей | 2 | compute | | fractions | `frac-compare` | сравнить дроби (код 1/2/0) | 2 | compute | | fractions | `frac-of-whole-inverse` | число по его части | 3 | compute | | fractions | `frac-to-decimal` | дробь → десятичная | 2 | compute | | decimals | `dec-div` | деление десятичных | 3 | compute | | decimals | `dec-round` | округление | 2 | compute | | decimals | `dec-times-pow10` | ×/÷ на 10/100/1000 | 1 | compute | | decimals | `dec-compare` | сравнить десятичные | 1 | compute | | negatives | `neg-div` | деление (отрицательные) | 2 | compute | | negatives | `neg-order-ops` | порядок действий со знаками | 3 | compute | | negatives | `neg-abs` | модуль числа/выражения | 2 | compute | | negatives | `neg-compare-line` | сравнение на коорд. прямой | 1 | compute | | negatives | `neg-square` | квадрат отрицательного | 2 | compute | **Формулировки:** истина/ложь (1/0), «что больше» кодом (1/2/0), «вставь знак» (1/2/0), словесный контекст (НОК-автобусы, остаток пирога), прикидка с округлением, смешанное число ↔ неправильная дробь. ### Группа 6. Геометрия: Углы · Пифагор · Площади · Многоугольники · Подобие · Окружность (20 генераторов) Все используют систему **фигур-данных** (`figures.js`); где нужно — новый тип фигуры. | Тема | id | Форма / условие | L | Нужна фигура | |---|---|---|---|---| | g-angles | `ang-parallel-transversal` | параллельные + секущая | 2 | новый тип `parallel-lines` | | g-angles | `ang-isosceles-base` | углы равнобедренного | 2 | `triangle-angles` (расш.) | | g-angles | `ang-vertical-bisector` | вертикальные / биссектриса | 1 | новый `crossing-lines` | | g-pyth | `pyth-perimeter` | периметр прям. треугольника | 3 | `right-triangle` | | g-pyth | `pyth-distance` | расстояние между точками | 3 | новый `coord-points` | | g-pyth | `pyth-rect-diagonal` | диагональ прямоугольника | 2 | `rectangle`+диагональ | | g-pyth | `pyth-space-diagonal` | диагональ параллелепипеда | 3 | новый `box-3d` | | g-area | `area-rect-inverse` | сторона по площади | 2 | `rectangle` (▢) | | g-area | `area-l-shape` | площадь L-фигуры | 3 | новый `l-shape` | | g-area | `area-sector` | площадь сектора | 3 | `circle-arc`+заливка | | g-poly | `poly-diagonals` | число диагоналей | 2 | `regular-polygon`+диаг. | | g-poly | `poly-find-n` | число сторон по углу | 3 | `regular-polygon` | | g-poly | `poly-exterior-sum` | внешний угол правильного | 2 | `regular-polygon`+метка | | g-sim | `sim-scale-factor` | коэффициент по сторонам | 2 | `two-similar` | | g-sim | `sim-area-ratio` | отношение площадей (k²) | 3 | `two-similar` | | g-sim | `sim-thales` | отрезок по т. Фалеса | 3 | новый `thales` | | g-sim | `sim-map-scale` | масштаб карты | 2 | (без фигуры) | | g-circle | `circ-inscribed-angle` | вписанный/центральный угол | 3 | `circle`+две хорды | | g-circle | `circ-chord-pyth` | длина хорды через радиус | 3 | `circle`+хорда | | g-circle | `circ-tangent-len` | длина касательной | 3 | `circle`+касательная | **Формулировки:** только-с-чертежа (L3-вариант любого углового), двухшаговая «погоня за углом» (вертикальный→смежный; накрест→сумма треугольника), обратная «прямоугольный ли?» (1/0, `rhs:'(a*a+b*b==c*c)'`), закрашенная область (круг в квадрате, π≈3,14), инверс «сколько сторон по сумме углов», подобие через тени (дерево/столб), угол в полуокружности (Фалес). --- # ЧАСТЬ II — НОВЫЕ ФОРМАТЫ ЗАДАНИЙ (kinds) Дают наибольший прирост разнообразия условий — применимы ко всем темам. Каждый сохраняет SimExpr-проверку. | # | Формат | Усилие | Суть реализации | |---|---|---|---| | P1 | `choice` (выбор) | M | 4 варианта; дистракторы из `analyzeMistake` (типовые ошибки) + случайные; правильный — текущий ответ | | P2 | `verify` (верно/неверно) | M | утверждение → булева SimExpr (1/0); часть истинных, часть ложных | | P3 | `findError` (найди ошибку) | M | портим ОДИН шаг `solution[]`; ученик указывает номер неверного шага | | P4 | `fillBlank` (вставь пропуск) | M | равенство с ▢; ответ — число/выражение, проверка подстановкой/эквивалентностью | | P5 | `estimate` (оценка) | S | ответ в допуске (band ±ε); для прикидки/π | | P6 | `multi` (многошаговая) | M | несколько gated под-ответов в одной задаче (путь→время→…) | | P7 | `order` (упорядочи) | M | расставить числа/шаги; идеально для отрицательных/дробей/десятичных | | P8 | `match` (сопоставь) | L | два столбца: выражение↔форма, фигура↔площадь | | P9 | `context` (бытовой сюжет) | S | тонкая обёртка существующих compute/solve в случайные сюжеты (данными) | | P10 | `figureAsk` (с чертежа/таблицы) | M | ответ ЧИТАЕТСЯ с фигуры; + новый тип фигуры `table` | **Старт:** P9 (контекст-обёртки — почти бесплатно), P5 (estimate), затем P1/P4/P2 (высокая ценность, средняя цена). P8 (match) — позже. --- # ЧАСТЬ III — ПЕДАГОГИКА / РЕПЕТИТОР | # | Что | Усилие | |---|---|---| | C1 | 3-уровневые подсказки (намёк → первый шаг → полное решение) из `solution[]` | S | | C2 | Библиотека типовых ошибок по темам (`MISTAKES` data, расширяет `analyzeMistake`) | M | | C3 | Режим «сначала образец» (worked example) → задача-близнец | M | | C4 | Направляемые пропуски в шагах (валидатор — `checkStep`) | M | | C5 | Мастерство с учётом помощи (флаг `assisted` → «освоено» = без подсказок) | M | | C6 | Сократический «объясни мою ошибку» (вопрос вместо ответа, анти-чит) | M | | C7 | Интервальное повторение МЕТОДА (мини-карточки «вспомни формулу») | L | --- # ЧАСТЬ IV — АДАПТИВНОСТЬ / МАСТЕРСТВО / ДИАГНОСТИКА | # | Что | Усилие | |---|---|---| | D5 | **Фундамент:** писать структурный `level` и `time_ms` в попытку (POST attempt) | S | | D3 | Мастерство = серия верных на уровне 3 (а не на 1) | M | | D7 | Авто-калибровка уровня по точности/времени последних попыток | M | | D1 | Граф пререквизитов навыков + гейтинг (как `unlockStars` в Квантике) | M | | D2 | Входная диагностика → персональный стартовый план | L | | D6 | Подмешивание due-навыков (кривая забывания) в КАЖДУЮ сессию | M | | D4 | «Повторить всё слабое» — кросс-темовый режим слабых навыков | M | | D8 | Полоса мастерства на чипе навыка + аналитика глубины учителю | S | > Начинать с **D5** — без записи уровня/времени остальные пункты слепы. --- # ЧАСТЬ V — ВОВЛЕЧЕНИЕ + УЧИТЕЛЬ | # | Что | Усилие | |---|---|---| | E1 | XP/монеты за практику (хук в `submitAttempt`, reuse геймификации) | S | | E2 | Практика в Дневной цели + календарь серий на странице | M | | E3 | Достижения/бейджи (объёмы, мастерство, идеальная сессия) | M | | E4 | Задания учителя + журнал (`practice_assignments`: темы/цель/дедлайн, трекинг) | L | | E5 | Глубже аналитика класса (помастерство, слабые места, время, динамика) | M | | E6 | Карта-созвездие навыков (reuse `QuantikMap`) с пререквизитами | L | | E7 | Очередь ревью LLM-пула (одобрить/править/удалить черновики) | M | | E8 | Конструктор генераторов на ВСЕ виды + шаринг/клон | L | > Учитывать **kill-switch геймификации** (`body.no-gamification`) для E1–E3/E6. --- # ЧАСТЬ VI — ОХВАТ ЦТ/ЦЭ (новые темы) + ТЕХНИКА/КАЧЕСТВО **Новые темы (к программе 9–11 и ЦТ):** | id | Тема | Усилие | Заметка | |---|---|---|---| | `g-func` | Функции: чтение графика, значение, область | M | новые kinds `graph-read`/`domain`; линейная/квадратичная | | `roots` | Корни и иррациональности (7–9) | S | √ из точных квадратов; √(a²b)→a√b (simplify) | | `logs` | Логарифмы и показательные (10–11) | M | log_a(aᵏ)=k, aˣ=aᵏ; целые логи | | `trig` | Тригонометрия (9–11) | M | значения в особых углах (0/30/45/60/90) | | `g-coord` | Координатная геометрия (9) | M | середина, расстояние (пифагоровы пары), прямая | **ЦТ-режим (B5, L):** формат А1–А10 / В1–В20, бланк ответов, таймер, тег `ct_code` со связью с таксономией exam-prep (как `tag-exam-textbook`). **Техника/качество (сквозное):** | # | Что | Усилие | |---|---|---| | H1 | Ленивая загрузка KaTeX/Lucide, defer модулей тренажёра (first-paint) | S | | H4 | **Закоммиченный** смоук: инстанс КАЖДОГО генератора × сидов + покрытие всех kinds | M | | H3 | Телеметрия: труднейшие навыки, эффективность подсказок | M | | A11y | ARIA, клавиатура, `prefers-reduced-motion`, озвучка формул | M | | H2 | Офлайн/PWA для параметрики + очередь синка прогресса | L | --- # ЧАСТЬ VII — РЕКОМЕНДУЕМАЯ ПОСЛЕДОВАТЕЛЬНОСТЬ Сначала — то, что даёт максимум разнообразия при минимуме риска (чистые данные), затем форматы, затем педагогика/адаптивность/вовлечение, затем охват ЦТ. 1. **V4.1 — Контент-разнообразие волнами (★ главное по запросу).** Выкатить 103 генератора группами (1→6) + формулировки, требующие ТОЛЬКО данных (инверс, пропущенный шаг, словесные, «что больше», 1/0, счёт целых решений) + контекст-обёртки P9. Геометрия — с расширением `figures.js` (новые типы: `parallel-lines`, `crossing-lines`, `coord-points`, `box-3d`, `l-shape`, `thales`, таблица). Риск низкий — движок не меняется (кроме фигур). 2. **V4.2 — Новые форматы условий (kinds):** P9→P5→P1→P4→P2→P3→P6→P7→P10→P8 (движок + страница + смоуки). 3. **V4.3 — Педагогика:** C1→C2→C5→C3→C4→C6→C7. 4. **V4.4 — Адаптивность:** D5 (фундамент)→D3→D7→D6→D4→D8→D1→D2. 5. **V4.5 — Вовлечение + учитель:** E1→E2→E3→E5→E7→E4→E6→E8. 6. **V4.6 — Охват ЦТ:** `roots`→`g-coord`→`g-func`→`logs`→`trig`→ЦТ-режим (B5) + `ct_code`. 7. **Сквозное (каждую фазу):** H4 (закоммиченный смоук всех генераторов/kinds), затем H1/H3/A11y/H2. **Каждая фаза:** смоук движка (инстанс всех генераторов + самопроверка) + смоук страницы + бэкенд-тесты (где есть API) + коммит/пуш; эмодзи/eval = 0; `lint:routes` baseline 0. --- ## Приложение — где что в коде - Генераторы (данные): `frontend/js/trainer/generators.js` - Движок/проверка/kinds: `frontend/js/trainer/_trainer_engine.js` - Чертежи-данные: `frontend/js/trainer/figures.js` - Умная сессия: `frontend/js/trainer/adaptive.js` - Страница: `frontend/trainer.html` - Прогресс/SR/пул: `backend/src/controllers/practiceController.js`, `routes/practice.js`, мигр.081/082/083; конструктор — `customGeneratorController` + мигр.084. - Предыдущие планы: `plans/ai-trainer/PLAN.md`, `ROADMAP_V2.md`, `ROADMAP_V3.md`.