> ## Documentation Index
> Fetch the complete documentation index at: https://faq.exode.biz/llms.txt
> Use this file to discover all available pages before exploring further.

# Практика в уроке

> Практический блок урока, задания, варианты и связь с базой заданий

Помимо теории (контент-блоков), урок может содержать **практику** — набор заданий, которые студент
выполняет и сдаёт. Практика описывается сущностью `CourseLessonPracticeEntity` и настраивается на
отдельной вкладке урока.

## Где настраивается практика

Практика открывается по адресу `/manage/course/:courseId/content/:lessonId/practice`. Внутри есть
переключатель между двумя вкладками:

| Вкладка                    | Назначение                                |
| -------------------------- | ----------------------------------------- |
| **Задания** (`tasks`)      | Состав практики: варианты и задания в них |
| **Настройки** (`settings`) | Параметры прохождения и проверки практики |

Параметры прохождения (порог сдачи, попытки, ограничение по времени, дедлайн, режим показа
результата) описаны в разделе [Настройка урока и модуля](/online-schools/lessons-modules/settings).

<img src="https://mintlify.s3.us-west-1.amazonaws.com/exode-faq/images/online-schools/lessons-modules/practice-tasks.png" alt="Вкладка «Задания» практики урока со списком заданий варианта" />

## Варианты и задания

Практика состоит из одного или нескольких **вариантов** (`CourseLessonPracticeVariantEntity`).
Каждый вариант — это независимый набор заданий. Внутри варианта задания упорядочены полем `order`,
и у каждого задания есть флаг **обязательности** (`required`).

* Если вариантов несколько, при повторной попытке студенту может выдаваться другой вариант — режим
  задаётся настройкой `retryVariantMode` (по очереди `Sequence` или случайно `Random`).
* Задания внутри варианта показываются либо **списком** (`List`), либо по одному
  последовательно (`Sequence`).

<Note>
  Режим показа заданий «Последовательность» (`Sequence`) в интерфейсе помечен как «Скоро» и пока
  недоступен для выбора — практика показывает задания списком.
</Note>

## Связь с базой заданий

Задания в практику добавляются через **селектор заданий** (`TaskSelector`). Каждое задание —
это сущность `TaskEntity` из общей **базы заданий** школы. Практика ссылается на задание через
промежуточную запись `CourseLessonPracticeTaskEntity` (вариант + задание + порядок + обязательность).

Добавить задание в вариант можно двумя путями:

<Steps>
  <Step title="Создать новое задание">
    Прямо в практике создаётся задание нужного типа (тест, открытый ответ, файл и т.д.). При
    создании выбирается тип ответа (`TaskAnswerType`) — полный список см. в разделе
    [Типы заданий](/online-schools/lessons-modules/task-types).
  </Step>

  <Step title="Взять готовое из базы">
    Задание можно склонировать из шаблонов базы заданий (`createManyFromTemplate`,
    `clonePracticeTask`). Так одно и то же задание переиспользуется в разных уроках и курсах —
    в базе оно помечается как шаблон (`isTemplate`).
  </Step>
</Steps>

<Tip>
  Поскольку задания живут в общей базе, имеет смысл вести библиотеку задач-шаблонов: тогда наполнение
  практики сводится к выбору готовых заданий, а не написанию каждого заново.
</Tip>

## Генерация заданий через AI

На вкладке «Задания» доступен инструмент **AI-генерации практики**: по содержанию урока
предлагаются задания, которые затем проходят проверку и подтверждение прямо на странице перед
добавлением в вариант. Сгенерированные, но ещё не принятые задания представлены типом
`GeneratedAiTask` и ждут ручного подтверждения куратором.
