Квиз с ИИ удобно проверять до сборки в конструкторе: сначала описать дерево вопросов на бумаге, затем прогнать каждый маршрут, включая неизвестный ответ и возврат назад. Ниже полный учебный пример: вымышленный каталог из трёх продуктов, три вопроса и семь конечных путей. Это не клиентский кейс и не выполненный тест нейросети, а эталон, с которым можно сверять фактическое поведение конкретного конструктора.
Замкните каталог и правила
Начните не с вопросов, а с каталога продуктов и правил перехода. Если продукта для ответа нет, это должно быть видно в графе, а не всплывать на экране результата.
В учебном примере три продукта: P1 — текстовая памятка на 5 минут, P2 — расширенный текстовый разбор на 15 минут, P3 — видеоурок на 15 минут. Видео на 5 минут в каталоге нет, поэтому такой вариант упирается в отдельный экран R_NONE, а не подменяется 15-минутным уроком. Продукт под каждый ответ не выдумывается.
Вопросы: Q1 «В каком формате хотите изучить материал?» с вариантами read / watch / unknown; Q2 «Сколько времени готовы выделить на чтение?» с 5 / 15 / unknown; Q3 «Сколько времени готовы выделить на видео?» с 5 / 15 / unknown. Вариант unknown — явный пункт, а не отсутствие выбора.
Правила: выбор только из options; после смены Q1 ответы скрытой ветки и прежний результат удаляются, новый вопрос требует отдельного ответа; нет сбора контактов, цен, оплат, автоматической передачи в CRM и гарантии образовательного результата. Пустой контактный шаг не добавляйте ради лида — он не относится к проверке рекомендации.
Конечные экраны заданы целиком: R_P1 — памятка на 5 минут; R_P2 — расширенный разбор на 15 минут; R_P3 — видеоурок на 15 минут; R_NONE — «в учебном каталоге нет видео на 5 минут», с возвратом к выбору; R_UNKNOWN — «не хватает выбранного формата или времени, рекомендация не определена».
Полный граф
Граф перехода задаётся один раз и целиком. Из Q1: read ведёт в Q2, watch — в Q3, unknown — сразу в R_UNKNOWN. Из Q2: 5 даёт R_P1, 15 — R_P2, unknown — R_UNKNOWN. Из Q3: 5 даёт R_NONE, 15 — R_P3, unknown — R_UNKNOWN.
Видимость зависит от ветки: Q2 виден только при read, Q3 — только при watch. Ответ на Q1 unknown не открывает ни одного следующего вопроса и сразу приводит к R_UNKNOWN. Эта зависимость и есть ветвление: ветвление — настройка в формах, которая позволяет показывать или не показывать определенное поле в зависимости от значений в других полях Как создать квиз.
Тип перехода в конструкторе важен: у полей выбора переходы срабатывают по ответу и имеют приоритет над общим переходом раздела Настройка логики переходов | Справка QForm. Если в графе ответ ведёт в одно место, а общий переход раздела — в другое, выполняется переход по выбранному ответу. Сверяйте оба уровня.
Семь конечных путей
Ниже полные маршруты: ответы, посещённые вопросы и единственный результат. Считайте их по листьям, а не по удачной рекомендации.
| ID | Ответы | Посещённые вопросы | Результат |
|---|---|---|---|
| T1 | Q1=read, Q2=5 | Q1, Q2 | R_P1 |
| T2 | Q1=read, Q2=15 | Q1, Q2 | R_P2 |
| T3 | Q1=read, Q2=unknown | Q1, Q2 | R_UNKNOWN |
| T4 | Q1=watch, Q3=5 | Q1, Q3 | R_NONE |
| T5 | Q1=watch, Q3=15 | Q1, Q3 | R_P3 |
| T6 | Q1=watch, Q3=unknown | Q1, Q3 | R_UNKNOWN |
| T7 | Q1=unknown | Q1 | R_UNKNOWN |
Семь путей складываются как 3 + 3 + 1. У каждого ровно один результат. Покрытие проверяйте по числу листьев: если у листа нет результата или их больше семи, граф не замкнут. Проверять только T1, T2 и T5 недостаточно — тогда отсутствующее короткое видео и неизвестный ответ останутся без экрана.
Возврат и отрицательный контроль
Смена ответа — отдельный тест, а не побочный эффект предыдущей проверки. Начните с состояния Q1=read, Q2=15 и результата R_P2.
T8, возврат и новый ответ. Меняем Q1 на watch. Ожидаем: Q1=watch сохранён, Q2 очищен, следующий вопрос — Q3, результат null. Пока Q3 не отвечен, R_P3 не показывается. Скрытый ответ Q2 нельзя использовать как ответ на Q3.
T9, смена на неизвестное. Было Q1=watch, Q3=15, результат R_P3. Меняем Q1 на unknown: Q1=unknown сохранён, Q3 очищен, следующего вопроса нет, результат R_UNKNOWN. Прежняя рекомендация видео удаляется.
T10, несуществующий вариант. Было пустое состояние. Пытаемся выбрать Q1=listen. Ожидаем статус invalid_option, остаёмся на Q1, результат null. Варианта listen нет — новый продукт или маршрут не создаётся.
Контракт очистки скрытых ответов и прежнего результата — наше правило учебного графа. Приписывать его конкретному конструктору без отдельной проверки нельзя. Как создать квиз описывает ветвление и условия видимости Как создать квиз. Настройка логики переходов | Справка QForm задаёт приоритет переходов по ответу над общими переходами разделов Настройка логики переходов | Справка QForm. Поведение при возврате нужно проверить в разрешённом аккаунте.
Промпт и перенос
Промпт ниже — самодостаточная спецификация: все входы, правила и ожидаемый эталон. Вернуть нужно полный граф и все пути, а не только текст вопросов.
Подготовь полную спецификацию учебного квиза по входам ниже. Верни тексты всех вопросов и вариантов, граф переходов и полные конечные экраны. Затем перечисли все достижимые конечные маршруты с ответами, посещёнными вопросами и единственным результатом. Отдельно проверь смену read/15 на watch: очисти скрытый ответ Q2, потребуй Q3, результат до нового ответа null. Проверь смену watch/15 на unknown: очисти Q3 и прежнюю рекомендацию. Проверь несуществующий вариант listen: invalid_option, остаться на Q1. Не придумывай продукты, цену, контактную форму или измеренный эффект. Это спецификация и ручной эталон, не выполненная генерация конструктора. Полные входы: {"type": "Вымышленный каталог и учебный граф, не опубликованный квиз и не тест Marquiz/Tilda/QForm", "catalog": [{"id": "P1", "name": "Текстовая памятка", "format": "read", "minutes": 5}, {"id": "P2", "name": "Расширенный текстовый разбор", "format": "read", "minutes": 15}, {"id": "P3", "name": "Видеоурок", "format": "watch", "minutes": 15}], "questions": [{"id": "Q1", "text": "В каком формате хотите изучить материал?", "options": {"read": "Читать", "watch": "Смотреть", "unknown": "Пока не знаю"}, "next": {"read": "Q2", "watch": "Q3", "unknown": "R_UNKNOWN"}}, {"id": "Q2", "text": "Сколько времени готовы выделить на чтение?", "options": {"5": "5 минут", "15": "15 минут", "unknown": "Не знаю"}, "next": {"5": "R_P1", "15": "R_P2", "unknown": "R_UNKNOWN"}}, {"id": "Q3", "text": "Сколько времени готовы выделить на видео?", "options": {"5": "5 минут", "15": "15 минут", "unknown": "Не знаю"}, "next": {"5": "R_NONE", "15": "R_P3", "unknown": "R_UNKNOWN"}}], "result_screens": {"R_P1": "Под ваш выбор подходит текстовая памятка на 5 минут.", "R_P2": "Под ваш выбор подходит расширенный текстовый разбор на 15 минут.", "R_P3": "Под ваш выбор подходит видеоурок на 15 минут.", "R_NONE": "В учебном каталоге нет видео на 5 минут. Не заменяем его 15-минутным. Можно вернуться и изменить выбор.", "R_UNKNOWN": "Не хватает выбранного формата или времени. Рекомендация не определена; вернитесь к соответствующему вопросу."}, "rules": ["Выбор только из options. Неизвестное — явный вариант unknown.", "После изменения Q1 удалить ответы скрытой ветки и прежний результат; новый вопрос требует отдельного ответа.", "Нет сбора контактов, цен, оплат, автоматической передачи в CRM или гарантии образовательного результата."]}
Эталон: вопросы Q1–Q3 и экраны R_P1–R_P3, R_NONE, R_UNKNOWN совпадают с входом; маршруты T1–T7 из таблицы; T8 очищает Q2 и не показывает R_P3 до нового ответа; T9 очищает Q3 и снимает R_P3, оставляя R_UNKNOWN; T10 возвращает invalid_option без нового варианта. Реальных публикаций, контактов и модельных прогонов здесь ноль.
Перенос в выбранный конструктор: соберите те же вопросы и экраны, затем отдельно прогоните T1–T7 и T8–T10 в разрешённом аккаунте и сравните фактическое поведение с эталоном. Где конструктор расходится с контрактом очистки — фиксируйте это как ограничение инструмента, а не правьте эталон вслепую. Соседние задачи с другим результатом: ТЗ на статью с нейросетью и анализ звонков с ИИ.
Учебный пример

