Кейс 4 — обязательный функционал
Что делает сервис одной фразой?
Учитель загружает эталон → система генерирует 2–10 вариантов той же сложности → учитель проверяет, правит, выгружает раздатку.
TeacherFlow — веб-сервис для школьных учителей: мультипликация заданий с контролем методики, а не «ещё один чат с GPT».
Покажите полный сценарий от загрузки до PDF
Эталон (текст / PDF / DOCX / фото) → анализ → параметры (N, типы вариации) → генерация → карточки вариантов → экспорт PDF/DOCX/ZIP.
Прогресс — асинхронная job + polling/SSE. Учитель не ждёт в одном HTTP-запросе. Демо: teacherflow.ru, материалы: /zakazchik.
Какие способы ввода эталона поддержаны?
Текст, PDF, DOCX, изображение с OCR, повтор из библиотеки заданий.
Фото распознаётся через GigaChat по шаблону ocr.md (дроби, степени, разбиение на пункты), затем текст автоматически приводится к нормальному виду.
Сколько вариантов можно сгенерировать?
От 2 до 10 за один запуск — по требованию кейса.
Каждый вариант проходит тот же контур проверки; если не проходит, система делает автоматическую доработку и повторную попытку (до 4 попыток на весь набор вариантов, а не на каждый вариант отдельно).
Какие типы вариации реализованы?
Числа, порядок условий, синонимы, контекст (с сохранением логики), имена/единицы — через анализатор + генератор.
Учитель может зафиксировать части условия. В интерфейсе есть готовые наборы настроек («стандартная вариация чисел» и т.п.). Детали — docs/research.md, §2.
Есть ли параллельное сравнение вариантов?
Да — сетка карточек с подсветкой различий относительно эталона и вердиктами качества.
Можно открыть вариант, отредактировать вручную, перегенерировать один вариант, не трогая остальные.
Экспорт — что именно выдаётся?
PDF, DOCX, ZIP; маркировка «Вариант 1…N»; ответы для учителя — отдельно от ученической раздатки.
В PDF/DOCX дроби для печати упрощаются (a/b), чтобы WeasyPrint не ломал вёрстку. Нумерация пунктов — без двойных «1. 1.».
Библиотека заданий — это что?
Личное хранилище эталонов и прошлых наборов вариантов с поиском и повторным запуском генерации.
Не публичный каталог чужих заданий — только данные учителя после регистрации.
Классы и назначение вариантов ученикам?
Да — сущности класс, ученики, назначение «вариант №» каждому.
Дополнение к кейсу: помогает на уроке раздать разные листы без ручной таблицы. Это не полноценная система ведения журнала и оценок.
Публичные ссылки для учеников — без ответов?
Да — /share/[slug] на share.teacherflow.ru: только условие, без эталона и без ключей.
Раздача вынесена на отдельный домен; учитель копирует ссылку из интерфейса. Это не «второй продукт», а страница только для просмотра варианта.
Методика и качество (приоритет кейса)
Как вы доказываете «одинаковую сложность»?
5-осевой профиль сложности + пороги в правилах + (в полном режиме) 3 ИИ-судьи с голосованием.
Не IRT по реальным ответам учеников — честно заявляем: относительная сопоставимость с эталоном. Подробно: docs/difficulty-methodology.md.
Какие 5 осей в профиле сложности?
steps, operations, bloom_level, lexical_complexity, answer_form.
Что это значит на практике:
steps — число шагов решения. Сколько логических действий нужно, чтобы решить задачу. Пример: «найти 3/4 от 60» — это 2 шага (умножить, потом разделить), а не 1.
operations — какие именно действия нужны. Не только «сколько шагов», но и «какие»: сложение, деление, перевод, грамматическая трансформация и т.д. Если в варианте появилась новая операция, сложность может уехать.
bloom_level — когнитивный уровень по Блуму. Условно: вспомнить / понять / применить / проанализировать и т.п. Большинство школьных задач — apply; если вариант сдвинулся в analyze, это уже другой уровень.
lexical_complexity — сложность формулировки текста. Насколько «тяжелый» язык условия: длина, структура фраз, лексика. Даже при одинаковой математике текст может стать сложнее для ученика.
answer_form — форма ответа. Что ожидается: число, выражение, список, текст, выбор. Если было «одно число», а стало «развернутый текст», это уже другое задание.
Для математики добавляются диапазон чисел и уникальность решения. Для английского — уровень CEFR и грамматические цели. Пороги лежат в apps/api/policies/ и версионируются.
Кто такие три судьи?
Три независимые проверки: сохранена ли структура задания, сопоставима ли сложность, и не дублируются ли ответы между вариантами.
Если «за» минимум 2 из 3 проверок — вариант принимается. Иначе уходит на доработку или в ручной разбор. Судьи работают на GigaChat-2 Lite (быстрее и дешевле Pro).
Быстрый и полный режим — в чём разница?
Быстрый — для демо: меньше проверок и заметно быстрее. Полный — все три судьи и голосование, как в методологии.
На скринкасте для жюри лучше показывать полный режим на 2–3 вариантах; для массовой генерации учитель может выбрать быстрый.
Что такое goldset и зачем он в CI?
Эталонный набор пар «задание → хороший вариант». В автоматической проверке на живом GigaChat нужно набрать минимум 80%, иначе изменение не принимается.
Базовое ядро — 15 ручных пар (10 математика 5–6 + 5 английский A2). Далее покрытие расширено до 47 фикстур / 26 предметов. См. docs/goldset/.
Антипримеры — что это?
9 заведомо плохих вариантов; в автоматической проверке система должна отклонять минимум 80% таких кейсов.
Примеры: сдвиг Bloom, скачок лексики, коллизия ответов, дубликат формулировок. docs/antipatterns/.
Что значат статусы keep / warn / repair / needs_review?
keep — вариант принят; warn — принят с предупреждением; repair — уходит на автодоработку; needs_review — нужен ручной разбор учителем.
Это подсказка, а не жёсткий запрет: финальное решение всё равно остаётся за учителем.
Учитель всё равно может выпустить плохой вариант?
Да — финальное решение за учителем. Система предупреждает (warn/fail), не блокирует экспорт жёстко.
Продуктовая позиция: ИИ — ассистент, не замена педагога. Журнал правок и вердикты сохраняются для разбора.
Как проверяете, что вариант не копирует эталон?
Генератор + судьи + политики на уникальность ответа и лексическое расстояние.
Antipattern a01-answer-collision и дубликаты формулировок — отдельные кейсы в bench.
Математика «на уровне 7–9» в демо — это обман?
MVP сначала калибровали на математике 5–6 и английском A2, затем расширяли покрытие на каталог предметов.
Важно: строгая проверка в CI есть там, где уже собран goldset. Для остальных направлений это режим пилота, без той же гарантии порога.
Что такое «Почему эти варианты равноценны»?
Блок на странице задания после генерации: отпечаток сложности по пяти осям (эталон и варианты на одной шкале с зоной допуска) + заключения судей в полном режиме.
Это объяснение для учителя, не оценка ученика. Дополняет карточки вариантов и goldset-контур, но не заменяет финальное решение педагога.
Методматериалы и методсоветник — что это?
Раздел /methodical: учитель загружает методички, КТП, критерии. Два совещательных контура: проверка эталона до генерации и комплекта после — по соответствию загруженным документам.
API: POST /tasks/{id}/methodical-check и POST /variant_sets/{id}/methodical-check. Fail-open, не трогают idempotency генерации. Отличие от судей сложности: там сравнение с эталоном, здесь — с методичкой учителя.
Исследование и продукт
Где отчёт по продуктовому исследованию?
docs/research.md — обзор практик и ограничений: вариативные задания, таксономия Блума, когнитивная нагрузка, реальные барьеры учителей.
Ограничение: без живых интервью (соло-участник). После MVP — 5+ интервью для калибровки порогов. Ссылка на диске и в /links.
Сколько времени экономите учителю?
Гипотеза: с 30–60 мин ручной работы до нескольких минут (генерация + просмотр).
Это оценка из проектной модели, пока без полноценного полевого сравнения. На пилоте в школе планируем уточнить цифры на реальных уроках.
Почему не ChatGPT / Copilot «в лоб»?
Нужен не один «умный запрос», а целый контур: анализ структуры, инварианты, метрики сложности, судьи, автоматическая проверка регрессий, экспорт, библиотека, классы.
Простой запрос в чат не даёт повторяемости результата и не проходит критерий методического качества из кейса.
Карточка прототипа — где?
PDF на Яндекс Диске + веб-страница /zakazchik/mat-prototype.
В репозитории: docs/Карточка_прототипа.md.
Кто в команде?
Соло-участник + оркестрация ИИ-агентов (Claude, Codex, Cursor) под единым планом и проверками качества в CI.
Школьный учитель-предметник в команде не привлекался — методику валидируем через goldset и документацию.
UX и демо
Дизайн — откуда система?
DESIGN.md — шрифт Inter, нейтральный фон, акцент #3D52D5, без визуального шума.
Статусы: зелёный «принято», янтарный «предупреждение», красный «нужна доработка». Иконки SVG, без эмодзи.
Справка для учителя?
/help — пошаговые статьи с примерами экранов + PDF.
Двойной источник: TSX + scripts/help_pdf_bodies.py — синхронизация перед релизом.
Страница для жюри / заказчика?
/zakazchik — ценность, пайплайн, контроль качества, границы MVP и план развития.
Все ссылки собраны на /links (QR в презентации). Методматериалы: /zakazchik/methodical-materials.
Демо-файлы для проверки на защите?
В репозитории — папка demo-materials: TXT-методички (~3000 символов) для математики 6 и биологии 6, скриншоты эталонных контрольных, сценарий демо.
Сценарий: загрузить методичку → эталон по скриншоту → проверка эталона → генерация → «Почему эти варианты равноценны» → проверка комплекта.
Регистрация обязательна?
Да, для генерации нужен вход: личная библиотека и классы привязаны к аккаунту учителя.
Публичная ссылка для ученика открывается без логина. Отдельного единого школьного входа в MVP пока нет.
Технические решения
Стек?
FastAPI + PostgreSQL + Next.js 14 + GigaChat (Pro/Lite) + WeasyPrint (PDF).
Python 3.12, Pydantic v2, Alembic, фоновые asyncio-задачи. Фронт: Tailwind, shadcn/ui.
Почему GigaChat?
Требование/контур хакатона СберОбразования; Pro для анализа/генерации/OCR, Lite для судей.
Единый клиент LLMClient с режимами «без сети», «записанные ответы» и «живой GigaChat» — это позволяет стабильно тестировать и локально, и в CI.
Почему не Celery / RQ?
Генерация запускается как фоновая asyncio-задача и пишется в generation_jobs; интерфейс обновляет статус каждые 2 секунды.
Осознанное упрощение MVP: один сервер и один воркер, без Redis. Масштабирование вынесено в следующий этап.
Лимиты и бюджеты?
Ограничения такие: не больше 8 параллельных LLM-вызовов, 60 секунд на один запрос, до 4 повторных попыток на набор вариантов.
Идемпотентный ключ защищает от дублей при повторном клике. Корреляционный ID помогает разбирать ошибки в логах.
Все LLM-вызовы через один слой?
Да — apps.api.llm.LLMClient.call(schema=…). Прямой httpx к GigaChat вне слоя запрещён.
Шаблоны запросов версионируются в apps/api/prompts/*.md; какая версия ушла в прод — сохраняется в variant_sets.prompt_versions_json.
Где живут промпты и политики?
Промпты — в apps/api/prompts/*.md, политики сложности — в apps/api/policies/*.yaml.
И промпты, и политики версионируются: при изменениях обновляем версии, а в variant_sets сохраняется, чем именно был сгенерирован набор (для отладки и воспроизводимости).
Как версионирование промптов и политик видно в продукте?
В каждом наборе вариантов сохраняются версии шаблонов запросов и правил — можно точно понять, «на какой конфигурации» получен результат.
Технически: variant_sets.prompt_versions_json + policy_name/policy_version. Это помогает разбирать регрессии после изменений и связывать поведение с конкретным MR.
Как устроен пайплайн?
Анализатор → Генератор → профиль и правила → Судьи → Голосование → Доработка (если вариант не прошёл).
Схема: /zakazchik/pipeline, код: apps/api/pipeline/.
Тесты — что гоняется в CI?
pytest -m fast (<5 с) + в merge request проверка goldset + антипримеров на GigaChat.
Кассеты tests/cassettes/ нужны для повторяемых тестов без ключа. Раннер — свой, на Docker.
Открытый API?
Swagger, OpenAPI JSON, healthz/readyz.
Сейчас API в первую очередь обслуживает собственный фронт; партнёрские интеграции вынесены на следующий этап (mat-production).
Чего нет в MVP (честно)
LMS, журнал, оценки?
Нет. Только подготовка и раздача вариантов, не ведение успеваемости.
SSO / роли администратора?
Нет. Один тип пользователя — учитель. Роль школьного администратора — после MVP.
Горизонтальное масштабирование / Kubernetes?
Нет. Сейчас один сервер, Docker Compose, nginx-proxy + Let's Encrypt.
Достаточно для демо и пилота; при росте — вынести workers и Redis (план в PDD).
Мобильное приложение?
Нет. Адаптивный веб; touch targets ≥44px.
Автоматическая проверка решений ученика?
Нет универсального солвера. Только контроль структуры и сложности варианта, не проверка ответов класса.
Гарантия 100% корректности задач?
Нет. LLM может ошибиться; goldset снижает регрессии, учитель — финальный фильтр.
Деплой и ссылки
Где крутится прод?
VPS pet-server, запуск через docker compose -f infra/docker-compose.prod.yml.
Домены: teacherflow.ru (web), api.teacherflow.ru (API), share.teacherflow.ru (раздачи). Инструкция: docs/deploy.md.
Где исходники и документация?
GitLab · проектный пакет docs/project/ · разработчик docs/developer/.
Сводка ссылок: teacherflow.ru/links.
Материалы для сдачи (видео, PDF, презентация)?
Яндекс Диск «Macadamm» — скринкаст, карточка прототипа, слайды.
Как проверить, что API жив?
curl https://api.teacherflow.ru/healthz и /readyz (database: ok).
Локально: make smoke с API_URL / WEB_URL.
Каверзные вопросы
Вы просто обёртка над промптом?
Шаблон запроса — только один слой. Поверх него есть структурированный анализ, правила, метрики, ансамбль судей и автоматическая проверка регрессий.
Без этого контура любое изменение запроса легко ломало бы результат; CI ловит такие срывы до выката.
IRT / ФИПИ / ЕГЭ — почему не сделали?
Для IRT нужны большие массивы реальных ответов и предметные банки. В MVP мы решаем более узкую задачу: учителю быстро получить 2–10 сопоставимых вариантов на урок.
По методике опираемся на идею параллельных форм заданий (см. research), а не на экзаменационную статистическую калибровку.
LLM галлюцинирует условие — что делаете?
Срабатывает многоуровневая защита: структурный судья, инварианты, предупреждение на карточке, ручная правка и точечная перегенерация одного варианта.
Antipatterns ловят типовые срывы (Bloom, шаги, ответы). 100% автоматом — нереалистично обещать.
Почему OCR на фото иногда кривой?
Фото распознаёт vision-модель по шаблону v1.2 (дроби, пункты). После обновления шаблона фото нужно загрузить заново.
Учитель всегда может поправить текст эталона перед генерацией — это ожидаемый путь.
Данные учеников — 152-ФЗ?
MVP: минимум PII (имя в классе), без паспортов; хостинг на своём VPS; политика и DPA — перед пилотом в школе.
Тексты заданий уходят в GigaChat — как у любого LLM-сервиса; для прода нужен договор с провайдером.
Стоимость одной генерации?
Зависит от N, выбранного режима и числа доработок. Нагрузку ограничиваем лимитами параллельности и бюджетом повторных попыток.
Точные рубли за запрос не обещаем на защите — есть лимиты в коде; биллинга для учителя в MVP нет.
Что если GigaChat упал?
Задача помечается как неуспешная, учитель видит ошибку и может повторить запуск. Остальная часть сервиса при этом продолжает работать.
Для тестов есть режим записанных ответов; в проде остаёмся зависимы от внешней доступности провайдера модели.
Чем вы лучше конкурентов (Worksheet Crafter, etc.)?
Наш фокус — сопоставимая сложность с измеримым профилем и автоматическим контролем качества, а не просто «красивый лист».
Конкурентный обзор — в research; честно: у крупных игроков больше контента, у нас — прозрачная методика для жюри кейса 4.
План развития после хакатона?
/zakazchik/mat-roadmap — пилот в школе, расширение предметов, единый школьный вход, API для партнёров.
Подробный план: docs/project/09-execution-plan.md.
~58 вопросов в 8 блоках. Поиск по вопросам и ответам. Esc — очистить поиск. Тап по заголовку — наверх.