На главную
Черновик Практики

Практика с n8n: от ручной сборки первой ветки к полному pipeline проверки контрольной

Это подробный HTML-черновик для семинарного блока по n8n. Здесь собран полный маршрут: как мы вручную собрали первую ветку create_assessment, как проверили её на живом endpoint, как затем импортировали полную схему на три ветки и как провести финальный эксперимент по нескольким темам на выбор.

Формат

60-90 минут. Сначала ведущий показывает ручную сборку, потом группа импортирует готовую полную версию и тестирует три режима.

Главная идея

Показать, что n8n полезен не как “ещё один чат”, а как повторяемый процесс: создать контрольную, проверить ответы и подготовить выдачу результатов.

Артефакты

Ручная первая ветка, готовый импортируемый workflow, инструкция для учителя и эксперимент по 3-5 учебным темам.

Что Нужно Подготовить

Перед началом практики нужен локально запущенный n8n, рабочий credential для модели и готовность запускать workflow вручную.

Локальный n8n OpenRouter или совместимый endpoint Bearer credential Ручной запуск через Manual Trigger

Что не хранить в раздатке: реальные API keys.

Credential создаётся внутри n8n отдельно. В раздатке фиксируем только тип credential и endpoint.

1. Как Мы Собирали Первую Ветку Вручную

Первая живая цель была простой: руками собрать только ветку create_assessment, проверить, что она действительно отвечает, а потом уже расширять workflow.

  1. Создали пустой workflow и добавили Manual Trigger.
  2. Добавили Edit Fields (Set) и руками ввели поля: mode, subject, grade, topic, difficulty, task_count, task_types.
  3. Поставили mode = create_assessment.
  4. Добавили Switch и настроили три правила на mode.
  5. Для первой ветки добавили HTTP Request.
  6. Подключили Bearer Auth credential.
  7. Настроили POST к https://openrouter.ai/api/v1/chat/completions.
  8. В headers оставили только Content-Type: application/json.
  9. В body передали JSON с моделью openrouter/free и prompt для генерации контрольной.
  10. Добавили второй Edit Fields (Set), чтобы вытащить {{$json.choices[0].message.content}} в поле assessment_result.
Это был правильный учебный маршрут: сначала не пытаться строить всю систему целиком, а доказать, что одна ветка действительно живая.
После ручной сборки стало понятно, что базовый цикл работает: ввод параметров → запрос к модели → чистый результат в отдельном поле.

Что Именно Мы Вводили Вручную

Поля В Set Create Input
mode = create_assessment
subject = биология
grade = 7 класс
topic = фотосинтез
difficulty = средний
task_count = 6
task_types = 2 тестовых, 2 коротких открытых, 1 на объяснение, 1 на применение

Что Мы Передавали В HTTP Request

JSON Для Первой Ветки
{
  "model": "openrouter/free",
  "temperature": 0.2,
  "messages": [
    {
      "role": "system",
      "content": "Ты помогаешь учителю создавать контрольные работы. Пиши ясно, без лишней воды, не выдумывай факты, учитывай возраст и уровень учащихся. Возвращай результат только в трех блоках и ничего больше: CONTROL_WORK, ANSWER_KEY, TEACHER_NOTES."
    },
    {
      "role": "user",
      "content": "Создай контрольную работу.\n\nПредмет: {{$json.subject}}\nКласс: {{$json.grade}}\nТема: {{$json.topic}}\nСложность: {{$json.difficulty}}\nКоличество заданий: {{$json.task_count}}\nТипы заданий: {{$json.task_types}}\n\nТребования:\n- контрольная должна подходить для реального урока;\n- задания должны быть разнообразными, но посильными;\n- после контрольной отдельно дай ключ ответов;\n- добавь краткое пояснение для учителя, как лучше использовать эту работу."
    }
  ]
}

Как Мы Тестировали Первую Ветку

  • Сначала запускали только Execute step внутри Edit Fields, чтобы убедиться, что входные поля собираются правильно.
  • Потом запускали Switch и проверяли, что item попадает именно в выход 0 для create_assessment.
  • Дальше запускали HTTP Request и смотрели, отвечает ли endpoint в OpenAI-compatible формате.
  • В конце открывали Extract Assessment Text и проверяли, что поле assessment_result действительно содержит текст контрольной.

Пошагово: Где Нажимать И Что Получится

Шаг 1. Пустой Workflow

  1. Открыть новый workflow.
  2. Убедиться, что на экране только пустой холст.
  3. Начать с добавления первого шага.
Пустой workflow в n8n
Стартовая точка: пустой workflow без узлов.

Шаг 2. Manual Trigger

  1. Нажать Add first step.
  2. В поиске ввести Manual.
  3. Выбрать Manual Trigger.
Поиск Manual Trigger
Поиск и выбор Manual Trigger.

Шаг 3. Edit Fields

  1. Нажать + после Manual Trigger.
  2. Найти Edit Fields (Set).
  3. Открыть его для ввода стартовых параметров.
Открытый Edit Fields
Узел Edit Fields (Set) открыт и готов к заполнению.

Шаг 4. Поля Для Первой Ветки

  1. Добавить поля mode, subject, grade, topic, difficulty, task_count, task_types.
  2. Сразу задать явные значения: mode: create_assessment, grade: 1 класс.
  3. Нажать Execute step и убедиться, что output содержит эти поля.
Заполненные поля Set
Стартовые поля введены, первая ветка готова к маршрутизации.

Готовые Значения Для Полей

Ниже перечислены переменные для первой ветки. Можно выбрать типовое значение и сразу скопировать его маленькой кнопкой справа.

Шаг 5. Switch

  1. Добавить Switch после Edit Fields.
  2. В верхнее поле правила подставить {{$json.mode}}.
  3. Сравнить его с create_assessment.
  4. Позже добавить ещё две ветки: grade_submissions и publish_results.
Switch с выражением mode
Ключевой момент: в Switch подставляется именно выражение, а не просто текст mode.

Шаг 6. HTTP Request

  1. Добавить HTTP Request к первой ветке Switch.
  2. Поставить POST.
  3. Указать URL модели.
Поиск HTTP Request
Поиск и добавление узла HTTP Request.

Шаг 7. Credential

  1. Создать или выбрать Bearer Auth credential.
  2. Подключить его к HTTP Request.
  3. Оставить в headers только Content-Type: application/json.
Bearer Auth подключен
Credential подключён, узел готов к реальному запросу к модели.

Шаг 8. Первый Живой Ответ

  1. Вставить JSON body с prompt на генерацию контрольной.
  2. Нажать Execute step.
  3. Убедиться, что endpoint возвращает ответ в OpenAI-compatible формате.
Ответ OpenRouter
Самый важный момент ручной сборки: видно, что запрос действительно отвечает.

Шаг 9. Чистый Текст Результата

  1. Добавить ещё один Edit Fields (Set) после HTTP Request.
  2. Создать поле assessment_result.
  3. Вставить значение {{$json.choices[0].message.content}}.
  4. Нажать Execute step.
Извлечение assessment_result
Готово: текст контрольной вынесен в отдельное поле и его уже удобно читать.

2. Что Получилось По Итогу

После ручной сборки мы расширили схему и довели её до полноценного workflow с тремя режимами: create_assessment, grade_submissions и publish_results.

Главный принцип пользования сейчас такой: открываете узел Set Pipeline Input, меняете mode и нужные поля, затем нажимаете Execute workflow и смотрите результат в конечном узле соответствующей ветки.

3. Скачать Готовую Доработанную Схему

Ниже лежат три файла. Первый это export из уже доработанного и проверенного live instance. Второй удобен, если импортируете workflow в ту же локальную инсталляцию n8n, где уже есть ваш credential. Третий подходит как переносимый шаблон.

Live Export: версия, уже прогнанная вручную в живой локальной инстанции и скачанная обратно из n8n.

Same instance: уже ссылается на существующий credential Bearer Auth account.

Template: после импорта нужно вручную выбрать credential в трёх HTTP-узлах.

Пошагово: Что Делать С Полной Схемой

  1. Откройте новый пустой workflow в n8n.
  2. Выберите Import from file....
  3. Сначала попробуйте импортировать Local Assessment Pipeline - Full.json.
  4. Если нужен технический вариант под ту же базу n8n, возьмите local_assessment_pipeline_full.same_instance.json.
  5. Откройте Set Pipeline Input.
  6. Поставьте нужный mode.
  7. Заполните только те поля, которые нужны выбранной ветке.
  8. Нажмите Execute workflow.
  9. Откройте финальный узел нужной ветки:
    • Extract Assessment Text
    • Extract Grading Result
    • Extract Publish Result

Какие Поля Нужны Для Каждого Режима

Create Assessment
  • subject
  • grade
  • topic
  • difficulty
  • task_count
  • task_types
Grade Submissions
  • assessment_text
  • answer_key
  • student_name
  • student_answers
  • grading_scheme
Publish Results
  • student_name
  • subject
  • grade
  • topic
  • grading_result
  • result_format

4. Как Пользоваться На Практике

Ниже короткая версия пользовательского сценария. Более полный текст лежит в файлах how-to-use.md и teacher-quickstart.md.

  1. Учитель выбирает тему контрольной и параметры заданий.
  2. Система генерирует контрольную и ключ.
  3. Ученики отвечают в структурированном формате.
  4. Workflow делает первичную автопроверку.
  5. Учитель смотрит результаты и типичные ошибки.
  6. При необходимости дорабатывает замечания и высылает результаты.
Для первой рабочей версии не стоит сразу делать длинные сочинения и полноценного бота для учеников. Гораздо устойчивее использовать форму с отдельным полем на каждый ответ.
Рекомендованный формат контрольной для старта: 2 тестовых задания, 2 коротких открытых ответа и 1 короткий развёрнутый ответ.

5. Эксперимент По Темам На Выбор

Финальный блок семинара можно построить как эксперимент по 3, 4 или 5 темам. Группа выбирает одну тему, затем прогоняет все три режима: создание контрольной, автопроверку одного ученика и подготовку выдачи результата.

Выберите тему. Ниже автоматически обновятся рекомендуемые поля для create_assessment, пример ответа ученика и короткий сценарий, как провести эксперимент на семинаре.

Для короткого семинара достаточно 3 тем. Для более насыщенной практики — 5 тем.

Как Вести Финальный Эксперимент

  1. Разделите участников на 3-5 мини-групп.
  2. Каждая группа выбирает одну тему.
  3. Сначала все делают create_assessment.
  4. Потом ведущий выдаёт готовый пример ответа ученика, и группа делает grade_submissions.
  5. После этого группа делает publish_results и обсуждает, что стоит править руками.
  6. В конце сравните, на каких темах система сработала увереннее, а где больше нужна ручная педагогическая проверка.

Как Выглядит Полная Линия После Import

Шаг 1. Импорт Полной Схемы

  1. Создать новый пустой workflow.
  2. Выбрать Import from file....
  3. Сначала импортировать Local Assessment Pipeline - Full.json.
  4. Если нужен технический вариант под ту же инстанцию, взять local_assessment_pipeline_full.same_instance.json.
  5. Убедиться, что на схеме один Manual Trigger, один Set Pipeline Input, один Switch и три полноценные ветки.
Полный импортированный workflow
Чисто импортированная полная схема без наложения старых узлов.

Шаг 2. Проверка Create Assessment

  1. В Set Pipeline Input поставить mode = create_assessment.
  2. Нажать Execute workflow.
  3. Проверить, что верхняя ветка стала зелёной.
Успешный create_assessment
Первая полная проверка: верхняя ветка рабочая.

Шаг 3. Проверка Grade Submissions

  1. В Set Pipeline Input поставить mode = grade_submissions.
  2. Оставить тестовые поля ученика и ключа.
  3. Снова нажать Execute workflow.
  4. Проверить, что средняя ветка стала зелёной.
Успешный grade_submissions
Средняя ветка отрабатывает автопроверку.

Шаг 4. Проверка Publish Results

  1. В Set Pipeline Input поставить mode = publish_results.
  2. Оставить заполненные поля по ученику и краткому результату.
  3. Ещё раз нажать Execute workflow.
  4. Проверить, что нижняя ветка стала зелёной.
Успешный publish_results
Нижняя ветка готовит человеческую выдачу результатов.

6. Куда Развивать Дальше

После этого семинарного блока логично идти не в “ещё больше ручных полей”, а в более удобный интерфейс:

Полезные файлы в проекте: teacher-form-spec.md, student-form-spec.md, batch-workflow-plan.md, sample-students-25.json.