- BrainTools - https://www.braintools.ru -

Автоматизация создания тестов: связка NotebookLM + Gemini + Google Apps Script

Предположим, что вам нужно делать тесты для учащихся или студентов (или даже для себя). Предположим, что их нужно делать много. Действительно много. Можно использовать традиционный ручной труд. Сидеть, придумывать вопросы, подбирать варианты ответов. Повторять [1] по кругу, пока не надоест. Но мы же в XXI веке живем. Явно должны быть способы упростить задачу. Автоматизировать ее.

У меня возникла такая необходимость. Но навыки недопрограммиста подталкивали мысли в сторону написания каких-нибудь скриптов для решения задачи с меньшими усилиями. С другой стороны, зачем в такой, не очень уж и сложной ситуации, писать что-то самому? Если очевидно, что задача как раз для генеративного искусственного интеллекта [2]. Да и опыт [3] его использования в учебном процессе уже имеется. Как дополнительного инструмента, не подумайте чего плохого. Поэтому вооружаемся NotebookLM, Gemini, Google Drive и Google Apps Script и в путь автоматизации создания тестов для обучения [4]. Тем более, тесты пригодятся не только для преподавателей, но и для тех, кто активно занимается самообразованием.

TL;DR:
  • ручное создание десятков учебных тестов это рутина, сжирающая часы преподавательского времени;

  • использование “эффекта тестирования” позволяет превратить тесты из инструмента контроля в инструмент обучения;

  • автоматизация и использование стека из NotebookLM, Gemini, Google Drive и Google Apps Script ускоряют процесс создания тестов.

Экзамен из прошлого

Нужны ли тесты в процессе обучения? Вряд ли кто-то ответит отрицательно. Вопрос заключается в том, насколько они нужны, в каком виде и количестве.

Впервые с тестами я столкнулся в бытность свою студентом. На первом курсе мы изучали предмет “Основы экономической теории”. Преподаватель, молодая девушка, как и многие молодые педагоги, реально горела желанием научить нас чему-то полезному и стремилась использовать самые современные на тот момент методы обучения и контроля. Поэтому экзамен мы сдавали на компьютерах. В виде тестов. Вполне традиционных, вопрос и варианты ответов. Оценку компьютер ставил сам на основе количества правильных ответов.

Сейчас таким никого не удивишь. Только это было почти 30 лет назад. Она заморочилась, разобралась со всем этим и сделала. В отличии от меня, который неоднократно обещал уже своим студентам сделать подобное, но руки так и не дошли. До поры до времени.

Экзамен я тогда сдал. Если память [5] мне не изменяет, то со второй попытки на 4 балла. С первой попытки из группы сдало всего несколько человек. А больше половины в первый день так и не сдали. Несмотря на 5 или 6 попыток, которые они успели сделать. Но впечатлений хватило надолго. Идея мне понравилась.

Зачем нужны тесты

В книге Питера Брауна “Запомнить все” во второй главе много внимания [6] уделено как раз тестированию. Традиционно все привыкли, что тесты используются для проверки знаний. Но они могут быть полезны и непосредственно в процессе обучения, для повторения и запоминания [7] изучаемой информации. “Эффект тестирования” – так психологи называют действие припоминания [8] как инструмента обучения.

Существует такое понятие как “кривая забывания” [9]:

Кривая забывания

Кривая забывания [10]

Сначала человек помнит прочитанное (изученное) очень хорошо. Но быстро начинает забывать [11]. Если материал регулярно повторять (припоминать), то забывание замедляется. На этом построены интервальные повторения. На этом же построено использование тестов для запоминания и повторения изученного, а не просто как инструмента для контроля знаний. С этой мыслью я и стараюсь использовать тесты при работе со студентами.

Это вовсе не значит, что тесты могут заменить все прочие инструменты обучения. Но при изучении основ чего-либо, теории и базы, они могут помочь. При прохождении тестов учащемуся приходится вспоминать [12] изученное, прикладывать для этого умственные усилия. Это благотворно влияет на запоминание информации. Чтобы послужить основой для дальнейшего развития и изучения более сложных тем необходимого предмета. Как говорится в книге:

Понятно болезненное отношение к стандартизованным тестам для «зубрил» – их проводят только для оценки уровня знаний. Но пусть оно не настраивает нас против одного из самых действенных инструментов обучения. Усвоение базовых знаний или развитие творческого мышления [13] – это ложное противопоставление. Надо работать и над тем, и над другим. Чем крепче знание предмета – тем больше пространства для маневра получает наш творческий ум, когда приступает к решению новой проблемы. Без неординарного восприятия [14] и воображения знание почти бесполезно, но и креативность бесплодна, если под нее не подведен надежный фундамент знаний. Только их союз позволяет построить крепкий «дом».

Желающие (или сомневающиеся, если таковые найдутся) узнать подробности о преимуществах тестирования при обучении и запоминании могут посмотреть вторую главу книги “Запомнить все”. Там это все подробно расписано, с примерами научных исследований и ссылками на их результаты. А мы идем дальше.

Тесты разные нужны

Создание хороших тестов задача не самая простая и требующая значительных затрат усилий и времени. Современные технологии позволяют этот процесс в значительной мере упростить. Особенно в тех случаях, когда тестов нужно много. Автоматизация наше все.

Для меня, как преподавателя, тестов много не бывает. Ранее приходилось все делать вручную. Придумывать вопросы, ответы, проверять и перепроверять. Затем, если необходимо, загонять все это в какие-нибудь инструменты или программы. Например, в Google Forms.

Тесты нужны разные. Иногда очень важно действительно продумать каждую мелочь, обратить внимание на отдельные понятия или сложные для восприятия и запоминания элементы. Тут ручную работу заменить все еще сложно. Даже если вопросы сгенерировать с помощью искусственного интеллекта, все равно придется потом половину менять, исправлять, согласовывать между собой и все это перепроверять. Но часто нужны простые тесты на базовые темы. Тут существующие инструменты для автоматизации вполне способны справиться на достаточном уровне. Нужно лишь потом бегло пробежаться и проверить на наличие явных ошибок. Чаще всего их нет. Максимум можно подкорректировать отдельные незначительные детали.

Учитывая все это, столкнувшись в очередной раз с необходимостью создания целой пачки тестов, я решил, наконец-то, использовать доступные мне средства, чтобы максимально упростить задачу. Прям сильно быстро не вышло, в силу большого количества экспериментов, которые пришлось проводить в процессе попыток максимально автоматизировать процесс. Но, с учетом сохраненного в будущем времени, все прошло очень даже хорошо. Поэтому и решил поделиться результатами с другими.

Тут нет каких-то особых секретов. Как обычно в подобных ситуациях. Чаще всего важна идея, инструменты и алгоритм. Про идею рассказал, теперь к инструментам, алгоритму и моим экспериментам.

Базовый псевдо конвейер тестов

Первым делом я подумал, что можно использовать чат-бот для генерации тестов. Затем скопировать результаты в файл. Файл распечатать и выдать студентам на занятии.

Автоматизации при таком варианте не очень много, к тому же надо как-то максимально уменьшить риски галлюцинаций чат-бота. В последнее время я активно использую NotebookLM для создания локального учебного пространства (называются они блокноты). Как раз с такой целью. Дело в том, что чат NotebookLM использует для генерации исключительно те источники, которые мы ему предоставляем. Главное ответственно подойти к их подбору. Чем лучше отберешь источники – тем меньше риски будущих ошибок при генерации учебных материалов.

Все пошло как по маслу. У меня уже было несколько готовых блокнотов с хорошими источниками, которые я использовал в работе и для собственного обучения. Выбрал один для экспериментов, попробовал – работает.

Пример промпта для генерации тестов в блокноте NotebookLM

Пример промпта для генерации тестов в блокноте NotebookLM

Замечательно. Но закидывать тесты в документ это как-то попахивает позавчерашним днем. И тут меня осенило. Есть же Google Forms! В формах можно автоматизировать даже прохождение тестов студентами (и выставление оценок, при необходимости). Сложно только одна – заполнение форм. Приходилось это делать ранее и занятие весьма нудное и долгое. Но раньше у меня не было велосипеда искусственного интеллекта под рукой.

Иду в Gemini и спрашиваю, как бы мне закинуть пачку готовых вопросов в гуглоформу, какие есть варианты? Из предложенных мне больше всего понравился вариант с использованием Google Apps Script. На том и порешили. Закидываю первый набор вопросов для теста, получаю в ответ код для скрипта и описание что с ним делать. Все пошагово как для тупых меня.

Пример кода для Apps Script
function createCSForm() {
  const folderId = "1CxqAry-CvwVFRQFldSt_dw_9Oymz1JAY";
  const formTitle = "Тест: Раздел 1. Хранение данных (Computer Science)";
  
  // Создаем новую форму
  const form = FormApp.create(formTitle);
  form.setIsQuiz(true);
  
  const questions = [
    {q: "Как называются цифры 0 и 1, используемые для кодирования информации на самом низком уровне?", options: ["Байти", "Биты", "Вентили", "Триггеры"], correct: "Биты"},
    {q: "Какая логическая операция дает результат 1 только в том случае, если оба входных значения равны 1?", options: ["И (AND)", "ИЛИ (OR)", "Исключающее ИЛИ (XOR)", "НЕ (NOT)"], correct: "И (AND)"},
    {q: "Какое устройство в компьютере используется для хранения одного бита информации с помощью электронных схем?", options: ["Вентиль", "Триггер", "Магнитный диск", "Шина"], correct: "Триггер"},
    {q: "Сколько бит содержится в одном байте?", options: ["4", "8", "16", "32"], correct: "8"},
    {q: "Как называется система счисления, использующая символы 0–9 и A–F?", options: ["Двоичная", "Десятичная", "Шестнадцатеричная", "Восьмеричная"], correct: "Шестнадцатеричная"},
    {q: "В чем измеряется адрес ячейки в основной памяти компьютера?", options: ["В битах", "В гигабайтах", "Это уникальный числовой идентификатор ячейки", "В частоте процессора"], correct: "Это уникальный числовой идентификатор ячейки"},
    {q: "Какая память является энергозависимой (теряет данные при выключении питания)?", options: ["Жесткий диск (HDD)", "Флеш-накопитель", "Основная память (RAM)", "Компакт-диск"], correct: "Основная память (RAM)"},
    {q: "Как называется совокупность дорожек на разных пластинах жесткого диска, находящихся на одном расстоянии от центра?", options: ["Сектор", "Цилиндр", "Кластер", "Спираль"], correct: "Цилиндр"},
    {q: "Какой тип массовой памяти использует лазер для чтения данных?", options: ["Магнитный диск", "Твердотельный накопитель (SSD)", "Оптические системы (CD/DVD)", "Регистры"], correct: "Оптические системы (CD/DVD)"},
    {q: "Для чего используется код ASCII?", options: ["Для сжатия видео", "Для представления текстовых символов", "Для вычисления дробных чисел", "Для защиты от вирусов"], correct: "Для представления текстовых символов"},
    {q: "Какая система кодирования текста позволяет представлять символы большинства языков мира?", options: ["ASCII", "Unicode", "ISO", "Двоичный код"], correct: "Unicode"},
    {q: "Как называется метод кодирования изображений сеткой из мелких точек?", options: ["Векторный", "Растровый (битовая карта)", "Геометрический", "Потоковый"], correct: "Растровый (битовая карта)"},
    {q: "Что такое «дискретизация» (sampling) в контексте звука?", options: ["Удаление шумов", "Измерение амплитуды волны через равные промежутки времени", "Увеличение громкости", "Перевод звука в текст"], correct: "Измерение амплитуды волны через равные промежутки времени"},
    {q: "Какая система обычно используется для хранения отрицательных целых чисел?", options: ["Прямой код", "Двоичный дополнительный код", "Шестнадцатеричный код", "Код с плавающей точкой"], correct: "Двоичный дополнительный код"},
    {q: "Как называется ошибка, когда результат превышает лимит памяти?", options: ["Усечение", "Переполнение", "Сдвиг", "Инверсия"], correct: "Переполнение"},
    {q: "Какой метод используется для представления дробных чисел?", options: ["Двоичная нотация с избытком", "Формат с плавающей точкой", "ASCII", "Растровый метод"], correct: "Формат с плавающей точкой"},
    {q: "В чем заключается основная цель сжатия данных?", options: ["Увеличение скорости процессора", "Уменьшение объема памяти", "Шифрование", "Исправление ошибок"], correct: "Уменьшение объема памяти"},
    {q: "Какой вид сжатия удаляет часть информации, неразличимую для человека?", options: ["Сжатие без потерь", "Сжатие с потерями", "Архивация", "Кодирование четности"], correct: "Сжатие с потерями"},
    {q: "Что такое «бит четности»?", options: ["Бит знака", "Бит для обнаружения ошибок", "Первый бит в байте", "Бит, равный нулю"], correct: "Бит для обнаружения ошибок"},
    {q: "Какая технология хранения данных использует «плавающий затвор» без движущихся частей?", options: ["Магнитная лента", "Флеш-память", "Оптический диск", "HDD"], correct: "Флеш-память"}
  ];

  questions.forEach(function(data) {
    var item = form.addMultipleChoiceItem();
    item.setTitle(data.q);
    var choices = data.options.map(function(opt) {
      return item.createChoice(opt, opt === data.correct);
    });
    item.setChoices(choices);
    item.setPoints(1); // 1 балл за вопрос
    item.setRequired(true);
  });

  // Перемещаем файл в нужную папку
  const file = DriveApp.getFileById(form.getId());
  const folder = DriveApp.getFolderById(folderId);
  file.moveTo(folder);
  
  Logger.log('Форма создана: ' + form.getEditUrl());
}

Такой способ комбинирования NotebookLM и Gemini меня вполне устроил. Дальше стал переходить на условно конвейерный метод. Да, все еще приходилось давать отдельные запросы и туда и туда, делать copy/paste, потом файл формы из корня Google Drive закидывать в нужную мне папку. Последнее я затем исправил и файл уже создавался где надо. Но это явно было лучше, чем в самом начале пути.

Улучшенный конвейер тестов

В целом все было неплохо, экономия времени и сил налицо. Но в душе кошки скребли от ощущения, что автоматизация прям какая-то очень частичная. Логика [15] подсказывала, что копи/пасте тут явно лишнее. Почему бы не попробовать объединить два инструмента? Тем более я видел, что блокнот NotebookLM можно прикрепить к чату Gemini. Поэтому решил у него же и спросить. Можно ли так сделать?

Ну вот же он, значит присоединить можно? Или нельзя? Или...

Ну вот же он, значит присоединить можно? Или нельзя? Или…

По правде сказать, сначала он меня немного запутал. Вроде и нельзя, но как бы и можно… Так что я решил действовать по простому в лоб. Просто присоединил блокнот к текущему разговору и сказал, чтобы он использовал оттуда источники и сам сгенерировал на их основе вопросы с ответами для теста. И затем сам же их использовал при написании кода для Apps Script. Отправляю промпт и… все работает. Минус одно лишнее телодвижение.

Промпт в лоб. Можно, нельзя... Давай лучше попробуем

Промпт в лоб. Можно, нельзя… Давай лучше попробуем

Получилось почти идеально. Даешь запрос, сделай тесты по такой-то теме, получаешь код для скрипта. Вставляешь код в редактор скриптов, запускаешь и форма в нужном месте готова. Настраиваешь в ней несколько параметров под свои нужды и тест можно отправлять студентам. Или воспользоваться самому, если занимаешься самообучением и самотестированием.

И вроде бы отлично. Но вообще-то хотелось волшебную кнопку “Сделай мне хорошо”. Чтобы Gemini полученный код поместил в скрипт и выполнил… Тут явно тянет на использование агента, а это пока не то, что мне нужно. Но за спрос не дают в нос.

Снова спрашиваю, а есть ли варианты? И в итоге сошлись на приложении-форме Web App, с помощью которой можно чуть упростить использование кода для скрипта, которые генерировал мне гуглоформы. Беда только в том, что все оказалось завязано на парсере и необходимости использовать шаблон для тестовых вопросов и ответов. Попробовал. Интересно, симпатично, но не очень полезно по итогу. Обойдемся пока что и без этого.

Web App. Интересный вариант, хотя и не без минусов

Web App. Интересный вариант, хотя и не без минусов

Итоги

Вот так, с помощью NotebookLM и Gemini, используя также Google Drive, Google Apps Script и Google Forms, я сумел упростить себе задачу по созданию тестов для студентов и для себя. Сэкономил не один час времени и получил интересный опыт. Может быть мой опыт пригодится кому-то еще, кто преподает или занимается самообразованием.

Я использую исключительно бесплатные версии инструментов. Какой-то идеологической привязки именно к Gemini и производным нет. Просто так сложилось, что именно он в свое время показался самым простым и удобным, который не требовал регистрации или авторизации, в отличии от большинства других аналогов. При этом качеством в моих задачах ничем не уступал конкурентам. Думается, что подобное без проблем можно провернуть используя и другие варианты генеративного искусственного интеллекта.

PS: начальная картинка для статьи сгенерирована Nano Banano 2, весь текст написан лично мной, без использования каких-либо генераторов текста. Как, впрочем, и всегда.

Автор: IgorLutiy

Источник [16]


Сайт-источник BrainTools: https://www.braintools.ru

Путь до страницы источника: https://www.braintools.ru/article/27722

URLs in this post:

[1] Повторять: http://www.braintools.ru/article/4012

[2] интеллекта: http://www.braintools.ru/article/7605

[3] опыт: http://www.braintools.ru/article/6952

[4] обучения: http://www.braintools.ru/article/5125

[5] память: http://www.braintools.ru/article/4140

[6] внимания: http://www.braintools.ru/article/7595

[7] запоминания: http://www.braintools.ru/article/722

[8] припоминания: http://www.braintools.ru/article/353

[9] “кривая забывания”: https://ru.wikipedia.org/wiki/%D0%9A%D1%80%D0%B8%D0%B2%D0%B0%D1%8F_%D0%B7%D0%B0%D0%B1%D1%8B%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F

[10] забывания: http://www.braintools.ru/article/3931

[11] забывать: http://www.braintools.ru/article/333

[12] вспоминать: http://www.braintools.ru/article/3999

[13] мышления: http://www.braintools.ru/thinking

[14] восприятия: http://www.braintools.ru/article/7534

[15] Логика: http://www.braintools.ru/article/7640

[16] Источник: https://habr.com/ru/articles/1014564/?utm_source=habrahabr&utm_medium=rss&utm_campaign=1014564

www.BrainTools.ru

Rambler's Top100