Материал из Скретч Вики
Чат-бот — это программа, которая позволяет имитировать общение с компьютером или приложением. Чат-бота можно разработать и в Скретче; в Скретче есть множество списков, операторов, и необходимых блоков, особенно блок спросить [] и ждать
. Тема этого руководства — создание чат-бота.
Примеры для чат-бота включают в себя ассистенты в проектах операционных систем.
Краткое описание
Чтобы создать чат-бота, необходим блок спросить [] и ждать
для ввода сообщения. Затем проект берёт это сообщение, разбивает его на слова и сканирует список на определённые слова. Если сообщение содержит эти определённые слова, чат-бот может ответить предварительно заданным ответом.
Чтобы разбить переменную (ответ)
, каждая буква должна быть повторно добавлена в список до того момента, когда появится пробел, и затем нужно создать новый элемент в списке и повторить процесс.
Чтобы запрограммировать это, необходим один список, в который будет сохраняться ответ по словам:
(слова::list)
и переменные:
(№ буквы)
Чтобы брать каждую следующую букву при переносе ответа в список и переменную
(выбор)
Чтобы бот выбирал какой-либо ответ из существующих
Программирование бота
когда щёлкнут по зелёному флагу повторять всегда спросить [введите сообщение] и ждать задать [№ буквы v] значение [1] // итерация начнётся с первой буквы ответа удалить все из [слова v] // очищает список слов; первый шаг — разделение слов в список вставить [] в [слова v] из (1) // необходим пустой элемент для начала повторить (длина (ответ)) раз если <(буква (№ буквы) в (ответ)) = [ ]> , то // обратите внимание, что здесь указан пробел, а не ничего вставить [] в [слова v] из (1) // т. к. это пробел, создадим новый элемент иначе заменить элемент (1) в [слова v] на (объединить (элемент (1) в [слова v]) (буква (№ буквы) в (ответ))) // иначе, вставим букву в текущее слово end изменить [№ буквы v] на [1] // переместимся на следующую букву end // по одному повторению для каждой буквы если <[слова v] содержит [привет] ?> , то // обнаружение слов говорить [Тебе тоже привет!] (2) секунд // ответ end если <[слова v] содержит [нравится] ?> , то задать [выбор v] значение (выдать случайное от (1) до (2)) // для использования альтернативных ответов если <(выбор) = [1]> , то говорить [Мне тоже это нравится!] (2) секунд иначе говорить [Серьёзно? Мне вообще это не нравится.] (2) секунд
Например, если ввести «Мне нравится Скретч», то чат-бот ответит «Мне тоже это нравится!» или «Серьёзно? Мне вообще это не нравится», т. к. список слов содержит «нравится». Скрипт можно сделать более сложным, разбив его на различные лайки и больше ответов. Переменная (выбор)
используется только для возможности ответа одним из многих ответов. Однако, если ввести «Мне нравится Скретч», бот может ответить фразой «Мне тоже это нравится!», но если ввести это ещё раз, то бот может также ответить «Серьёзно? Мне вообще это не нравится.» Чтобы предотвратить это, можно создать некоторые списки для хранения слов, на которые бот уже ответил.
Создайте два списка:
(интересы::list)
(неприязни::list)
Затем измените эту часть скрипта:
если <[слова v] содержит [нравится] ?> , то задать [выбор v] значение (выдать случайное от (1) до (2)) // для использования альтернативных ответов если <(выбор) = [1]> , то если <не <[интересы v] содержит (элемент (1) в [слова v]) ?>> , то говорить [Мне тоже это нравится!] (2) секунд добавить (элемент (1) в [слова v]) к [интересы v] иначе удалить (длина списка [интересы v]) из [интересы v] говорить [Я разве уже не говорил, что мне это нравится?] (2) секунд end иначе если <не <[неприязни v] содержит (элемент (1) в [слова v]) ?>> , то говорить [Серьёзно? Мне вообще это не нравится.] (2) секунд добавить (элемент (1) в [слова v]) к [неприязни v] иначе удалить (длина списка [неприязни v]) из [неприязни v] говорить [Я уже говорил, что мне это не нравится!] (2) секунд
Конечный скрипт
Весь скрипт выглядит примерно так:
когда щёлкнут по зелёному флагу повторять всегда спросить [введите сообщение] и ждать задать [№ буквы v] значение [1] // итерация начнётся с первой буквы ответа удалить все из [слова v] // очищает список слов; первый шаг — разделение слов в список вставить [] в [слова v] из (1) // необходим пустой элемент для начала повторить (длина (ответ)) раз если <(буква (№ буквы) в (ответ)) = [ ]> , то // обратите внимание, что здесь указан пробел, а не ничего вставить [] в [слова v] из (1) // т. к. это пробел, создадим новый элемент иначе заменить элемент (1) в [слова v] на (объединить (элемент (1) в [слова v]) (буква (№ буквы) в (ответ))) // иначе, вставим букву в текущее слово end изменить [№ буквы v] на [1] // переместимся на следующую букву end // по одному повторению для каждой буквы если <[слова v] содержит [привет] ?> , то // обнаружение слов говорить [Тебе тоже привет!] (2) секунд // ответ end если <[слова v] содержит [нравится] ?> , то задать [выбор v] значение (выдать случайное от (1) до (2)) // для использования альтернативных ответов если <(выбор) = [1]> , то если <не <[интересы v] содержит (элемент (1) в [слова v]) ?>> , то говорить [Мне тоже это нравится!] (2) секунд добавить (элемент (1) в [слова v]) к [интересы v] иначе удалить (длина списка [интересы v]) из [интересы v] говорить [Я разве уже не говорил, что мне это нравится?] (2) секунд end иначе если <не <[неприязни v] содержит (элемент (1) в [слова v]) ?>> , то говорить [Серьёзно? Мне вообще это не нравится.] (2) секунд добавить (элемент (1) в [слова v]) к [неприязни v] иначе удалить (длина списка [неприязни v]) из [неприязни v] говорить [Я уже говорил, что мне это не нравится!] (2) секунд