Меню Рубрики

Как написать бота для общения

Сделайте своего первого чат-бота даже без навыков программирования

Суперпростой способ создать бота, не зная программирования.

Материал рассчитан на тех, кто в жизни не написал ни строчки кода.

Многие слышали про чат-ботов и роботов для общения: им пишешь, они отвечают, получается диалог с машиной. Чат-бот может рассказать анекдот, поискать за вас в интернете, забронировать столик в ресторане и что угодно ещё, чему его обучат создатели.

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

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

На чём будем решать

Обычно, чтобы написать какую-то программу, нужно сделать несколько действий: например, скачать программу-обработчик языка, завести проект, написать программу, скомпилировать. И только потом ей можно пользоваться. Но мы пойдём по более простому пути: напишем программу, работающую прямо в браузере, через который вы читаете эту статью. Написать такую программу можно лишь на компьютере, на телефоне придётся пользоваться ботом.

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

Чтобы сделать что-то на JavaScript, нужно открыть консоль. Почти во всех современных браузерах это делается сочетанием клавиш Shift + Ctrl + J или Cmd + Alt + J. Справа или снизу появится дополнительное окно, в котором уже будет что-то происходить:

Если у вас не открылась консоль, зайдите в верхнее меню и поищите слово «Консоль». Обычно этот пункт меню прячется в разделе «Инструменты разработчика».

Когда вы открываете консоль, она сразу готова выполнять ваши команды. Если в неё вставить программу, написанную на JavaScript и нажать Enter, ваш браузер её выполнит. Если программа написана с ошибками, консоль сама подсветит их. Можно отправлять в консоль программу кусками или даже построчно: браузер будет помнить всё, что происходило в вашей программе, пока вы не перезагрузите страницу.

Первая строка

В консоли можно не только писать программы, но и выводить туда результаты. Давайте для начала сделаем самую простую программу, которая напишет в консоли слово «Привет!». Для этого используем команду

Вставим её в консоль и нажмём Enter:

Поздравляем, вы только что написали свою первую программу для компьютера! Она очень простая: компьютер просто говорит «Привет!». Но оцените момент: это вы его научили так говорить. Попробуйте научить его и другим словам.

Если написать несколько команд, получим сообщение из нескольких строк:

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

Переменная — это ячейка в памяти компьютера, где можно что-то хранить и менять. Дело в том, что компьютеру для вычислений нужно сказать: «Вот тут данные у нас меняться не будут, а вот тут будут, выдели память». И компьютер выделит достаточно памяти, чтобы хранить всё, что будет лежать внутри переменной. В последнюю можно записать новое значение, а можно узнать, что уже лежит внутри неё.

Чтобы дать понять компьютеру, что у нас сейчас будет переменная, нужно сказать ему слово var, после которого вписать название переменной — так нам проще к ней обращаться. Например, следующая строка создаст переменную name и положит в неё слово «Код»:

Название переменной может быть практически любым, главное, чтобы оно начиналось с буквы. По-русски переменные называть нельзя, только буквами латинского алфавита. Можно было бы назвать переменную imya или zovut, но программисты считают, что чем проще название переменной, тем лучше.

Теперь посмотрим содержимое переменной. Следующая команда выведет то, что сейчас записано в переменной Name:

Можно посмотреть, какое сегодня число. Это внутренняя системная переменная. Строго говоря, это не совсем переменная, но для начала давайте считать так:

Но это мы всё смотрим во внутренности компьютера. А нам нужно спросить что-то у пользователя. Чтобы мы могли ввести новые данные в нашу программу, используем команду promt()

Вставьте в консоль команду var name = prompt(‘Как тебя зовут?’); и посмотрите, что произойдёт. Компьютер выведет окно, и будет ждать, пока вы введёте туда своё имя. Окно выглядит красиво: давайте в диалоге общаться с компьютером не через консоль, а через такие появляющиеся окошки. Для этого напишем новые команды:

Пусть компьютер проявит вежливость и скажет, что ему приятно с нами познакомиться. Чтобы он смог обратиться к нам по имени, используем переменную name — в ней как раз хранится то, что мы ответили компьютеру:

Чтобы вывести осмысленную фразу, мы взяли начало ‘Привет, ‘, затем с помощью плюсика соединили со значением переменной name, которая хранит наше имя, а потом ещё одним плюсиком добавили к фразе концовку. Чтобы компьютер знал, что мы хотим вывести на экран текст, а не числа, используются кавычки. Компьютер воспринимает как текст то, что внутри кавычек. И выводит точно в том виде, в котором написано.

Расчёт дня рождения

Давайте соединим все наши команды в одну программу и допишем несколько новых фраз:

Обратите внимание: у нас появился новый вопрос и новая переменная hobby , в которой хранится информация об увлечении. А ещё — комментарии, которых можно добавлять сколько угодно. JavaScript не обращает внимания на то, что написано после двух косых черт:

Что ещё посмотреть

Вот кое-что, что может вам пригодиться при создании первого чат-бота:

performance.now() — эта команда возвращает время в миллисекундах с момента открытия текущей страницы. Можно поделить на 1000, и вы узнаете, сколько секунд вы сидите на какой-то странице. Если поделить на 60000 — сколько минут.

setTimeout() — позволяет выполнить любой код через определённое время. Например, вы можете задать вопрос и дать ровно минуту на размышление, после чего появится окно для ответа.

setInterval() — то же самое, что и предыдущее, но выполнение кода повторяется с равномерным интервалом, например, раз в 5 минут. Если вы хотите научить чат-бота, чтобы он раз в час напоминал попить воды, эта команда — то, что нужно.

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

Подписывайтесь на «Код» , чтобы не пропустить новые разборы!

Источник статьи: http://zen.yandex.ru/media/code/sdelaite-svoego-pervogo-chatbota-daje-bez-navykov-programmirovaniia-5cb579ca80f66f00b3879178

Делаем своего первого чат-бота

Уровень: начинающий

Мате­ри­ал рас­счи­тан на тех, кто в жиз­ни не напи­сал ни строч­ки кода. Если вы уже в кур­се основ про­грам­ми­ро­ва­ния, про­чи­тай­те луч­ше о чистых функ­ци­ях.

Мно­гие слы­ша­ли про чат-ботов и робо­тов для обще­ния: им пишешь, они отве­ча­ют, полу­ча­ет­ся диа­лог с маши­ной. Чат-бот может рас­ска­зать анек­дот, поис­кать за вас в интер­не­те, забро­ни­ро­вать сто­лик в ресто­ране и что угод­но ещё, чему его обу­чат созда­те­ли.

Ино­гда такое обще­ние выгля­дит как обще­ние с чело­ве­ком. Может даже пока­зать­ся, что там рабо­та­ет искус­ствен­ный интел­лект — и ино­гда так дей­стви­тель­но быва­ет. Но часто всё про­ще: это алго­ритм, кото­рый уме­ет рас­по­зна­вать неко­то­рые ваши сло­ва и давать отве­ты по зара­нее заго­тов­лен­ным шаб­ло­нам. Чем алго­ритм более раз­ветв­лён­ный, тем есте­ствен­нее и полез­нее бот.

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

Обыч­но, что­бы создать какую-то про­грам­му, нуж­но выпол­нить несколь­ко дей­ствий: напри­мер, ска­чать программу-обработчик язы­ка, заве­сти про­ект, напи­сать заду­ман­ную про­грам­му, ском­пи­ли­ро­вать. И толь­ко потом ей мож­но поль­зо­вать­ся. Но мы пой­дём по более про­сто­му пути: напи­шем про­грам­му, рабо­та­ю­щую пря­мо в бра­у­зе­ре, через кото­рый вы чита­е­те эту ста­тью. Сде­лать это мож­но лишь на ком­пью­те­ре, на теле­фоне при­дёт­ся поль­зо­вать­ся ботом.

Мы будем решать зада­чу на язы­ке JavaScript — это язык про­грам­ми­ро­ва­ния, кото­рый встро­ен в ваш бра­у­зер и на кото­ром напи­сать код мож­но пря­мо сей­час, ниче­го не уста­нав­ли­вая.

Что­бы сде­лать что-то на JavaScript, нуж­но открыть кон­соль. Почти во всех совре­мен­ных бра­у­зе­рах это дела­ет­ся соче­та­ни­ем кла­виш Shift + Ctrl + J или Cmd + Alt + J. Спра­ва или сни­зу появит­ся допол­ни­тель­ное окно, в кото­ром уже будет что-то про­ис­хо­дить:

Если у вас не откры­лась кон­соль, зай­ди­те в верх­нее меню и поищи­те сло­во «Кон­соль». Обыч­но этот пункт пря­чет­ся в раз­де­ле «Инстру­мен­ты раз­ра­бот­чи­ка».

Когда вы откры­ва­е­те кон­соль, она сра­зу гото­ва выпол­нять ваши коман­ды. Если в неё вста­вить про­грам­му, напи­сан­ную на JavaScript, и нажать Enter, ваш бра­у­зер её реа­ли­зу­ет. Если в коде есть ошиб­ки, кон­соль сама под­све­тит их. Мож­но отправ­лять в неё про­грам­му кус­ка­ми или даже построч­но: бра­у­зер будет пом­нить всё, что про­ис­хо­ди­ло в вашей про­грам­ме, пока вы не пере­за­гру­зи­те стра­ни­цу.

Первая строка

В кон­со­ли мож­но не толь­ко писать код, но и выво­дить туда резуль­та­ты. Давай­те для нача­ла сде­ла­ем самую про­стую про­грам­му, кото­рая отоб­ра­зит в кон­со­ли сло­во «При­вет!». Для это­го исполь­зу­ем коман­ду console.log(‘Привет!’);

Вста­вим её в кон­соль и нажмём Enter:

Поздрав­ля­ем, вы толь­ко что напи­са­ли свою первую про­грам­му для ком­пью­те­ра! Она очень про­стая: ком­пью­тер все­го лишь гово­рит «При­вет!». Но оце­ни­те момент: это вы его научи­ли так гово­рить. Попро­буй­те научить его и дру­гим сло­вам.

Если напи­сать несколь­ко команд, полу­чим сооб­ще­ние из несколь­ких строк:

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

Переменные

Что­бы дать понять ком­пью­те­ру, что у нас сей­час будет пере­мен­ная, нуж­но ска­зать ему сло­во var, после кото­ро­го впи­сать назва­ние пере­мен­ной — так нам про­ще к ней обра­щать­ся. Напри­мер, сле­ду­ю­щая стро­ка создаст пере­мен­ную name и поло­жит в неё сло­во «Код»:

Назва­ние тут может быть прак­ти­че­ски любым, глав­ное, что­бы оно начи­на­лось с бук­вы. По-русски пере­мен­ные назы­вать нель­зя, толь­ко бук­ва­ми латин­ско­го алфа­ви­та. Мож­но было бы исполь­зо­вать вари­ант imya или zovut, но про­грам­ми­сты счи­та­ют, что чем про­ще назва­ние пере­мен­ной, тем луч­ше.

Теперь посмот­рим содер­жи­мое эле­мен­та. Сле­ду­ю­щая коман­да выве­дет то, что сей­час запи­са­но в пере­мен­ной name:

Мож­но посмот­реть, какое сего­дня чис­ло. Это внут­рен­няя систем­ная пере­мен­ная. Стро­го гово­ря, это не совсем пере­мен­ная, но для нача­ла давай­те счи­тать так:

Но это мы всё смот­рим во внут­рен­но­сти ком­пью­те­ра. А нам нуж­но спро­сить что-то у поль­зо­ва­те­ля. Что­бы мы мог­ли вве­сти новые дан­ные в нашу про­грам­му, исполь­зу­ем коман­ду prompt()

Вставь­те в кон­соль коман­ду var name = prompt(‘Как вас зовут?’); и посмот­ри­те, что про­изой­дёт. Ком­пью­тер выве­дет окно и будет ждать, пока вы вне­сё­те туда своё имя. Интер­фейс выгля­дит кра­си­во: давай­те в диа­ло­ге общать­ся с ком­пью­те­ром не через кон­соль, а через такие появ­ля­ю­щи­е­ся окош­ки. Для это­го напи­шем новые коман­ды:

Пусть ком­пью­тер про­явит веж­ли­вость и ска­жет, что ему при­ят­но с нами позна­ко­мить­ся. Что­бы он смог обра­тить­ся к нам по име­ни, исполь­зу­ем пере­мен­ную name — в ней как раз хра­нит­ся то, что мы отве­ти­ли ком­пью­те­ру:

Что­бы выве­сти осмыс­лен­ную фра­зу, мы взя­ли нача­ло ‘При­вет, ‘, затем с помо­щью плю­си­ка соеди­ни­ли со зна­че­ни­ем пере­мен­ной name , кото­рая хра­нит наше имя, а потом ещё одним плю­си­ком доба­ви­ли к фра­зе кон­цов­ку. Что­бы ком­пью­тер знал, что мы хотим выве­сти на экран текст, а не чис­ла, исполь­зу­ют­ся кавыч­ки. Ком­пью­тер вос­при­ни­ма­ет как текст то, что внут­ри кавы­чек. И выво­дит точ­но в том виде, в кото­ром напи­са­но.

Расчёт дня рождения

Давай­те соеди­ним все наши коман­ды в одну про­грам­му и допи­шем несколь­ко новых фраз:

Обра­ти­те вни­ма­ние: у нас появил­ся новый вопрос и новая пере­мен­ная hobby, в кото­рой хра­нит­ся инфор­ма­ция об увле­че­нии. А ещё — ком­мен­та­рии, кото­рых мож­но добав­лять сколь­ко угод­но. JavaScript не обра­ща­ет вни­ма­ния на то, что напи­са­но после двух косых черт:

Теперь у вас есть всё, что нуж­но, что­бы напи­сать свою вер­сию чат-бота для обще­ния. Если про­дол­жи­те решать наши задач­ки, то смо­же­те научить ком­пью­тер по-разному реа­ги­ро­вать на ваши отве­ты и даже вести осмыс­лен­ный диа­лог.

Что ещё посмотреть

Вот кое-что, что может вам при­го­дить­ся при созда­нии пер­во­го чат-бота.

performance.now() — эта коман­да воз­вра­ща­ет вре­мя в мил­ли­се­кун­дах с момен­та откры­тия теку­щей стра­ни­цы. Мож­но поде­лить на 1 000, и вы узна­е­те, сколь­ко секунд вы сиди­те на какой-то стра­ни­це. Если поде­лить на 60 000 — сколь­ко минут.

setTimeout() — поз­во­ля­ет выпол­нить любой код через опре­де­лён­ное вре­мя. Напри­мер, вы може­те задать вопрос и предо­ста­вить ров­но мину­ту на раз­мыш­ле­ние, после чего появит­ся окно для отве­та.

setInterval() — то же самое, что и преды­ду­щее, но выпол­не­ние кода повто­ря­ет­ся с рав­но­мер­ным интер­ва­лом, напри­мер раз в 5 минут. Если вы хоти­те научить чат-бота, что­бы он раз в час напо­ми­нал попить воды, эта коман­да — то, что нуж­но.

Как поль­зо­вать­ся эти­ми шту­ка­ми, мы рас­ска­жем в одной из буду­щих ста­тей, но вы все­гда може­те само­сто­я­тель­но поис­кать в интер­не­те, как они рабо­та­ют. Поль­зу­ясь эти­ми тре­мя воз­мож­но­стя­ми JavaScript, полу­чит­ся создать непло­хо­го бота, кото­рый будет сле­дить за вашей про­дук­тив­но­стью и интер­ва­ла­ми рабо­ты. Под­пи­сы­вай­тесь на «Код», что­бы не про­пу­стить новые раз­бо­ры.

Источник статьи: http://thecode.media/chat-bot/

Чат-бот — как написать удобного и полезного?

Чат-боты — один из самых противоречивых трендов. Самых простых ботов можно написать и «пришить» к сайту за несколько часов, но насколько полезен этот сделанный на скорую руку продукт? Действительно ли он откроет новые возможности для аудитории и решит те проблемы, с которыми хуже справляются другие средства? Или приведет к очередному эпик фейлу? Я с некоторого времени интересуюсь этой темой и хочу поделиться своими наблюдениями о своих «хороших практиках» разработки чат-ботов. Надеюсь, эти наблюдения будут полезны как разработчикам, так и заказчикам чат-ботов.

При оценке ботов я использую две группы факторов:

  • Юзабилити (удобство использования);
  • Создание ценности для пользователя.

Далее в статье я расскажу, как я оцениваю чат-ботов по этим группам.

Юзабилити

С первой группой факторов помогает разобраться статья Кевина Скотта о применении эвристик юзабилити к интерфейсу ботов. Но с оговорками. Давайте немного покритикуем один из примеров авторов, который они считают образцовым. Например, старый-добрый Пончо:

Я вижу следующие улучшения:

    Если пользователь уже установил бота и запустил его, не нужно требовать дополнительных подтверждений («Let’s do it»). По возможности бот должен начинать предлагать свои услуги как можно раньше, избавляя пользователя от необходимости нажимать на экран.

Сейчас пользователь вынужден вводить свой адрес текстом — это долго и неудобно (не все используют голосовой ввод). Вместо этого рекомендую сделать процесс ввода более интерактивным (например, послать локацию, получить адрес из метаданных, дать выбрать из 7 самых популярных городов и т.д.).

После ввода имени города пользователю приходится потратить еще одно нажатие на подтверждение. Вместо этого, если адрес хорошо определился, можно сразу показать результат (ведь бедняга так трудился).

  • Если пользователь ошибся, бот неумолимо требует ввести новый адрес. По-хорошему бот должен предложить пользователю близкие к введенному тексту адреса.
  • Из улучшений вырисовывается три правила:

    Нажатие на вес золота

    В этом правиле нет ничего нового для специалистов по удобству использования. Операция должна занимать минимальное количество нажатий / вводов информации. Чем дольше вы выполняете операцию, тем больше времени теряют пользователи и тем больше любви теряет ваш чат-бот. Взаимодействие с пользователем — это главное при очень ограниченном интерфейсе. Используйте весь имеющийся инструментарий для помощи пользователю: распознавание аудио, контекстные элементы управления, пользовательские меню и другие элементы.

    Чем меньше сообщений — тем лучше

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

    Предлагай решения

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

    • Если пользователь ничего не делает, дать ему больше информации;
    • Если пользователь начал что-то делать, попытаться помочь;
    • Если пользователь ошибся, предложить корректировку;
    • Если пользователь завершил операцию, предложить сопутствующие.

    Фуф, с юзабилити разобрались, теперь пара слов про ценность для пользователя.

    Создание ценности для пользователя

    Techcrunch говорит, что цель чат-ботов — соединять бизнес и клиентов. Но так ли это сейчас? Если мы посмотрим в каталог Telegram ботов, то будем слегка удивлены, потому что на топовых позициях там:

    • Заработок денег;
    • Текстовый покер (текстовый, Карл!);
    • Прогноз погоды;
    • Виртуальный друг.

    Я готов поверить, что заработок денег в любом своем проявлении может нести некоторую ценность для пользователей, но остальное? Гораздо удобнее играть в покер в мобильном приложении, прогнозов погоды 9000+ в любом магазине приложений, ну а виртуальный друг — не стоит вскрывать эту тему.

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

    Используйте многошаговые сценарии

    Не копируйте функционал мобильного приложения и сайта. Обычно веб-сайт или приложение оптимизируется под основные функции, которые выполняет пользователь. Если у вас есть мобильное приложение, на котором уже все хорошо с основными функциями, зачем копировать его функционал в чат-бота? Это скорее всего будет:

    • Неудобно для пользователя — ведь интерфейс чат-ботов не настолько гибок, как интерфейс мобильного приложения.
    • Непонятно для пользователя — раньше он успешно выполнял операции в приложении, зачем ему переучиваться?

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

    Экономьте время пользователя

    Недавно я из нескольких разных мест услышал об идее заменить IVR-меню (интерактивный автоответчик) на номерах 8800 чат-ботом. И действительно, IVR-меню построено так, что пользователь должен выслушать массу ненужной ему информации, чтобы, наконец, выбрать пункт. Если он не услышал нужный пункт или ошибся, то ему опять предстоит прослушать детали по каждому пункту. Вместо этого чат-бот предложит пользователю ту же информацию, но уже в текстовом виде, и поможет при необходимости. Результат: экономия времени и более высокое качество обслуживания. Прикиньте для своего бота, экономит ли он время пользователей по сравнению с альтернативами.

    Присмотритесь к групповым возможностям

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

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

    Источник статьи: http://habr.com/ru/post/311008/


    0 0 голоса
    Article Rating
    Подписаться
    Уведомить о
    guest

    0 Комментарий
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии