company_banner

Hello, Bot! Чат-боты – следующее поколение приложений?

    Недавно прошла конференция //BUILD, на которой Майкрософт традиционно представляет новые технологии для разработчиков. В ключевом докладе первого дня была высказана одна очень важная мысль – по мере того, как общение с компьютерами становится всё более естественным, возрастает роль диалогового общения на естественном языке. Речь здесь не только о том, что мы сможем просить голосовой помощник Cortana просить поставить нам будильник, но и что множество других задач (заказать пиццу, забронировать гостиницу, купить билеты и т.д.) может быть решено с помощью диалога. Более того, это может быть не только диалог между пользователем и компьютером: в более сложном случае человек может попросить Cortana спланировать путешествие, и затем Cortana будет сама общаться с другими ботами, совершая заказ гостиницы и билетов.



    Здесь интересно то, что само “общение” может происходить а различных местах: на десктопе с помощью клиента Cortana, но также и в других традиционно используемых для чата каналах: в Skype, Telegram, Slack и т.д. Личность и память нашего персонального ассистента не зависит от канала общения, а располагается где-то в облаке, готовая пообщаться с нами на любом из так называемых “conversational canvases”.

    Для создания ботов была представлена предварительная версия Microsoft Bot Framework и соответствующие API, о которых мы поговорим ниже. Мы также покажем, как можно создать своего простейшего бота, поддерживающего беседу с пользователем на английском языке.

    Для работы с ботами используются следующие ключевые элементы:
    • Bot Builder SDK (доступен для C# и для Node.js) предназначен для создания ключевой функциональности бота. Он основан на WebAPI, и определяет протокол общения бота с внешним миром. В рамках SDK есть эмулятор, позволяющий отлаживать ботов, а также набор классов для упрощения реализации некоторых ключевых абстракций, таких, как продолжительные диалоги с состоянием.
    • Cognitive Services (ранее известные как LUIS, составная часть Project Oxford) позволяют упростить анализ естественного языка и выделение смысла из текстовых предложений. С помощью веб-интерфейса мы можем определить основные синтаксические конструкции, и автоматически присвоить им соответствующие намерения пользователя (intents), на которые затем будет реагировать бот.
    • Bot Connector позволяет привязать наш бот к одному или нескольким каналам общения, таким, как Skype, Slack, Telegram и др. Для этого достаточно сконфигурировать соединение бота на сайте botframework.com.
    • Каталог ботов, в котором со временем можно будет публиковать ссылки на различные боты.


    Пример: знакомимся с Murphy Bot


    Отличный пример бота – это Murphy, созданный в рамках проекта http://www.projectmurphy.net/. Зайдя на сайт, вы можете установить Murphy себе в Skype и начать с ним общаться (только убедитесь, что вы используете последнюю версию Skype, которая поддерживает ботов). Этому боту можно задавать вопросы вида “What if Cindy Crawford were a superman?” (пример диалога вы видите ниже), или “What if I were a programmer” (в этом случае он попросит вас загрузить свою фотографию).



    Hello, Bot! Пишем себе собеседника


    В качестве примера давайте рассмотрим, как создать простейшего бота на базе Bot Framework. Вспомним, что сердце и мозг бота – это веб-сервис, который обычно располагается в облаке.



    Для создания такого сервиса проще всего скачать Bot Framework Template для Visual Studio (убедитесь, что у вас стоит Visual Studio 2015 Update 1 с веб-инструментами). Полученный ZIP-файл положите в каталог с шаблонами Visual Studio, обычно это “%USERPROFILE%\Documents\Visual Studio 2015\Templates\ProjectTemplates\Visual C#". После этого в Visual Studio вы сможете создать новый проект типа Bot Application:



    В созданном проекте за основную функциональность бота отвечает метод Post в файле Controllers/MessagesController.cs. Для простейшего Hello-бота реализуем этот метод следующим образом:

    public async Task<Message> Post([FromBody]Message message)
    {
        if (message.Type == "Message")
        {
            var reply = 
                message.Text.ToLower() == "hello" ?
                    "Hello!" :
                    "I do not understand you!";
            return message.CreateReplyMessage(reply);
        }
        else
        {
            return HandleSystemMessage(message);
        }
    }
    


    Чтобы протестировать бота, запустим проект на локальном веб-сервере (F5), скопируем адрес и порт из адресной строки открывшегося браузера, и откроем его в Microsoft Bot Framework Emulator (его необходимо предварительно скачать и установить). Обратите внимание, что к адресной строке сайта необходимо дописать путь /api/messages.



    Чтобы заставить бот делать что-то чуть более полезное, я использовал порт на C# известной программы Eliza. Получившийся чат-бот вы можете скачать в нашем репозитории GitHub. В первой версии схема построения бота мало чем отличается от приведенной выше программы, только для формирования ответа вызывается метод готовой библиотеки Eliza.

    Такая простая реализация не очень подходит для поддержки длительных диалогов с пользователем, поскольку метод Post используется для обработки запросов всех пользователей, и нет разделения состояния между ними. Чтобы это сделать, можно в явном виде смотреть на идентификатор сессии (message.ConversationID), использовать объекты BotUserData/BotConversationData, или же задействовать более продвинутые API с поддержкой диалогов (о них мы расскажем в дальнейших статьях). Пока же не будем обращать внимания на эти детали, считая, что бот является stateless.

    Чтобы запустить бота в облаке, нам для начала нужно опубликовать получившися Web API в Azure. Затем следует войти на сайт http://dev.botframework.com и зарегистрировать нового бота. Важно придумать для бота уникальный AppID, и получить сгенерированный автоматически App Secret.

    После этого необходимо сделать важный шаг – в файле Web.Config нашего приложения необходимо добавить App ID и App Key:

    <configuration>
      <appSettings>
        <add key="AppId" value="YourAppId" />
        <add key="AppSecret" value="YourAppSecret" />
      </appSettings>
    


    После чего необходимо повторно развернуть бота в облаке, чтобы Web Config обновился.



    Сделав это, можно протестировать работоспособность бота в панели свойств на сайте Bot Framework, или же воспользоваться уже знакомым нам эмулятором – правда в этом случае надо будет ввести правильные AppID и App Secret:



    Теперь, когда бот работает в эмуляторе, можно привязать его к различным каналам связи. Для этого в панели управления ботом на сайте Bot Framework необходимо добавить и сконфигурировать эти каналы. Для этого выбираем предпочитаемый канал связи, и следуем инструкциям:



    Например, в случае с Telegram необходимо создать новый бот в Telegram с помощью беседы со специальным ботом Bot Father, после чего получить Access Tokem, и предоставить его сайту Bot Framework. После этого Bot Connector возьмет на себя все посреднические операции между Telegram API и вашим ботом, и вы сможете общаться с вашим ботом из Telegram. Кстати, мой бот называется в телеграме @ElllizaBot, можете с ним поговорить!

    Подробнее про создание бота с нуля с помощью Bot Framework вы можете посмотреть в этом англоязычном докладе в BUILD.

    Канальная абстрация


    Основная прелесть Bot Framework API состоит в том, что мы можем теперь писать боты, не ориентируясь на какой-то один канал общения. По сути дела, Bot Framework даёт нам правильный уровень абстракции для реализации механизмов беседы и диалогов, а конкретную связь с различными инструментами общения берет на себя Bot Connector. Это разделение позволяет программисту написать бот один раз, а общаться с ним отовсюду. Можно сформулировать этот принцип следующим образом, перефразируя известный из мира Java слоган: Write Once – Chat Everywhere.

    Несколько слов про Skype Bot API


    Ещё одна новость, объявленная на //BUILD – это доступность отдельного Skype API для создания ботов. На самом деле создавать Skype-ботов можно и через Bot Framework, но возможности Bot Framework пока позволяют нам работать только с текстом (плюс с некоторыми видами attachemnt-ов), в то время как Skype Bot API несколько шире, и позволяет в том числе создавать видео-боты. При выборе технологии следует отдавать предпочтение Bot Framework, из-за её универсальности, однако если вы хотите создать действительно удивительный бот именно для Skype – посмотрите на Skype Bot SDK.

    Заключение


    Диалог – это естественная форма взаимодействия людей, и может статься, что она станет естественной формой взаимодействия людей и компьютеров. Майкрософт предлагает удобную программную абстракцию в виде Bot Framework, которая позволяет начать достаточно просто создавать свои чат-боты, работающие сразу со многими каналами общения. Это не только перспективно, но ещё и очень занимательно! Давайте пока экспериментировать с созданием ботов, а через несколько лет (или месяцев) посмотрим, являются ли боты заменой веб-сайтам или мобильным приложениям, как о том говорят аналитики.
    Microsoft 284,68
    Microsoft — мировой лидер в области ПО и ИТ-услуг
    Поделиться публикацией
    Комментарии 52
    • +6
      Все новое — хорошо забытое старое, в irc были боты, с самым различным функционалом, от банальных игр до систем управления серверными стойками, веселое время было, а главное для работы клиента, да и самого сервера, не нужен был core i7 и n^2 ядер процессора с 8+ гб памяти… помню даже 3dsmax мог работать на 166 пне с 16 метрами оперативы, ностальжи…
      • 0
        Безусловно! Интересно будет наблюдать, как боты будут превращаться из относительно нишевого продукта (irc) во что-то массовое. И будет ли происходить это «второе рождение», как это происходит сейчас с виртуальной реальностью.
        • +2
          Ну почему «были», они и сейчас есть, и даже относительно активно используются. ;)
          • 0
            Да, о XDCC-ботах правообладатели не знают, в этом их плюс. Ну и можно всякое старье скачать, которое по BitTorrent уже сто лет как не раздают.
        • +3
          Я бота для Skype сделал, но все жду его approval'а. Соответствующая статья тоже ждёт в черновиках этого момента. Этот процесс как-то регламентирован? Сколько ждать?
          • +1
            А можно на статью посмотреть, надоело биться с авторизацией бота, либо я криворукий от природы, либо что то тут не так…
            • +1
              Большой кусок в статье как раз об этом — тоже с этим долго бился. Завтра статью опубликую.
              • 0
                Буду ждать, спасибо!
            • 0
              Пока что Skype API тоже в достаточно ранней стадии развития, поэтому думаю, что регламента скорее нет. Ждем статью!
            • 0
              Я правильно понимаю, что Cognitive Services — это не про русский язык? По крайней мере без Bing Translator.
              • 0
                Пока да. На текущий момент ситуация выглядит так, что Bot Connector может переводить с нескольких языков на английский перед тем, как скармливать текст боту — но это не совсем то, что хочется получить в идеале. Поэтому пока что для анализа русского языка лучше использовать другие инструменты…
              • 0
                А есть подобный бот, но для ТГ? Это был бы самый крутой способ улучшить свой английский для стеснительных)
                Особенно, если бы он указывал на твои ошибки
                • 0
                  Я не очень понял, что такое ТГ, но в целом идея бота для обучения английскому — плодотворная!
                  • 0
                    это месседжер Телеграм
                    • 0
                      Там же помимо всяких Slack и Skype есть и Telegram
                      • 0
                        Так именно этот бот уже сделан для Telegram. Добавляйте в друзья @ElllizaBot и наслаждайтесь!
                        • 0
                          этот бот очень примитивный(
                • 0
                  У нас давненько встала проблема написания ботов для:
                  — экономии на операторах технической поддержки
                  — экономии на разработке веб-интерфейсов не требующих особого дизайна

                  Итого получилась связка Corezoid (логика ботов) + Telegram, Sender, SiteHeart, e-mail, страница обращений в хелпдеск (каналы поступления обращений клиентов/сотрудников)

                  Логика для бота одна, а каналы обычно добавляются почти без перерисовки логики.

                  • 0
                    Класс! Узнал новое для себя слово — Corezoid :) Интересно, Corezoid используется на уровне intent-ов, или на уровне анализа отдельных фраз? Для реалистичности диалогов ведь нужно рассматривать много вариантов, и делать всё это на графическом интерфейсе Corezoid кажется может оказаться громоздким…
                    • +1
                      Для понимания — Corezoid это не платформа для сбора ботов. Это платформа для построения логики с выходами на API.

                      Насчёт анализа и интентов — начал описывать примеры и понял, что получается очень длинно для комментария =(

                      Если кратко, то можно и так и так. Если логику собирает человек, далёкий от кода, то получается длинное и разветвлённое дерево узлов, зато всё просто и понятно. Если есть знание хотя бы основ javascript или erlang, то можно просто сделать узел для анализа фразы, а на выход из узла давать переменные для возврата в чат.

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

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

                      • 0
                        Я про Corezoid понял, поэтому и стало интересно, как вы поверх него реализуете разбор текста. Теперь чуть более понятно, спасибо!
                    • +1
                      А Вы сотрудник некоего банка П*? И есть какая-то статистика, какую экономию в плане операторов тех.поддержки дало ботостроение в интернет-банке? Потому что у меня с этим ботом получается общаться только вбивая в текст сообщения вроде «sdfiofjsdjflsdjflfjdlfjsdkljfl», которые он не может разобрать — это самый быстрый и чуть ли не единственный путь к живому оператору, способному на самом деле решить проблему. Все мои знакомые пользуются этим ботом примерно аналогично.
                      • 0
                        Да, сотрудник именно этого банка. Но ботами общения с клиентами я прямо не занимаюсь. Больше ботами общения с сотрудниками. Цифры в денюжке называть не буду, но у нас сейчас около 80% заявок в тех. поддержку закрывается ботом.
                      • 0
                        Напишите статью про Corezoid человеческим языком.
                        Несколько раз делал подходы к документации, смотрел видео, просто «методом тыка» — так ничего и не понял.
                        Может конечно «не моя тема», но жутко интересно.
                        • 0
                          Сорри, но нормальная статья не получилась — не прошла модерацию в песочнице. Если интересно — можно ознакомиться засунув в редактор статьи и нажать «предпросмотр»

                          ссылка
                          • 0
                            Такого извращения я еще не пробовал. Спасибо!
                      • НЛО прилетело и опубликовало эту надпись здесь
                        • 0
                          Позволю себе заметить, что Вы не всё учли в своём комментарии.
                          Во-первых — веб-страница тоже может быть ботом. Суть не в функционале, который предоставляют боты, а в том, что они реагируют на ввод текста пользователем. То есть идеальный сайт это поле для ввода текста и возможность наговаривать этот текст в микрофон.

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

                          Ну и в третьих — суть статьи не в том, что «смотрите мы заново изобрели ботов», а в «вам больше не надо заморачиваться сопровождением логики похожих ботов в разных средах, пишите логику в одном месте, а каналы используйте разные». Конечно они бы могли пойти ещё дальше и сделать среду доступной и для не программистов, но не всё же сразу.
                          • 0
                            А возможно ли организовать оповещения/уведомления используя ботов?
                            То есть инициатором разговора будет бот а не человек.
                            • 0
                              Да, можно. Особенно это помогает, когда со стороны Head-office запускаются централизованные коммуникации. То есть не сотрудник фронт-офиса приходит с проблемой, а мы узнав, что у него произошёл сбой сразу шлём ему рекомендации как это сделать с N вариантов решения.
                            • НЛО прилетело и опубликовало эту надпись здесь
                              • 0
                                Возможно я не до конца Вас понял, но суть Вашего перового комментария воспринимается как «Боты устаревшая и не интересная технология», а второго «облачные технологии это зло, так как не находятся под контролем заказчика функционала». Поправьте меня, пожалуйста, если я что не так понял.

                                На первый я думаю уже ответил.

                                На второй:
                                1. Почему? Речь же как раз о том, что хорошо иметь логику программного комплекса в одном месте, а интерфейсы прицеплять/отцеплять по желанию. Например, у нас есть боты, которые общались только в SiteHeart, потом их функционал перенесли в Corezoid и когда захотели подключить в качестве каналов общения емэйлы и страничку HelpDeska это заняло не слишком много времени.

                                2. Речь не о юзерах, речь об экономии компаниями средств на реализацию одного и того же на разных платформах

                                3.
                                а) Веб-сайт точно так же могут прикрыть. Не аргументный аргумент.
                                б) Если есть выгода для себя, то почему бы и нет? И кто сказал, что ботов делают бесплатно?
                                г) например согнать всех в одну сеть и заставить там общаться, а ведь можно было бы по старинке бумажные письма отправлять, и что б только своих курьеров держать — ведь почта — это тоже загон всех в одно русло.

                                Не обижайтесь, но вопрос в том надо это делать или не надо давно не стоит. И никто же никого не заставляет, просто кто-то вкурил фишку, а кто-то нет.
                                • НЛО прилетело и опубликовало эту надпись здесь
                                  • 0
                                    Опять двадцать пять. Вы сначала говорите, что ущербна сама идея ботов, потом переключаетесь на отсутствие контроля над облачными технологиями.
                                    Вот если по порядку:
                                    1) тот же Corezoid обладает коробочным изданием, на тот параноидальный случай, когда хочется «своё».
                                    2) Никто не мешает делать такую простую вещь как бэкапы. Те же процессы в корезоиде можно постоянно сливать и хранить у себя в формате json. И, если что-то случится — написать на скорую руку обработчик их логики (а можно и заранее =) ). Как план Б.
                                    Нет никаких гарантий, что интернет не прикроют, датацентр не сгорит, фреймворки не перекроят на скорую руку. Дело же не в этом. Сейчас мне выдать бота внутри организации соседнему подразделению занимает две-три минуты. И если реализовывал его я, то сопровождать и дорабатывать может человек вообще без навыков программирования.
                                    3.а уже ответил выше — либо не нарушайте правила, либо поднимайте свой экземпляр
                                    б это как продолжать держать свой почтовый сервак обеспечивая работой разработчиков, администраторов, менеджеров, которые могли бы заниматься чем-то действительно инновационным
                                    г да, но это всё «облачные» структуры, а не Ваши структурные подразделения и если они прикроются, то никто Ваши недоставленные посылки не вернёт

                                    Конкретной в этой статье я увидел две фишки:
                                    ф1 — концентрация логики в одном месте, а устройства ввода-вывода рассредоточены по разным мессенджерам. Как скайнет.
                                    ф2 — переход к тому, что не пользователь должен ходить и искать себе услуги, а его место обитания должно быть максимально комфортным. Вот есть «умный дом», а тут «умный чат»
                          • 0
                            Может я что-то не понимаю или путаю. Но вроде бы чат-боты намного старше интернета.

                            Я помню ещё в далеком 2008 с одноклассником сидели ещё на dial-up модеме писали всякую фигню боту на flash.

                            Может следовало бы назвать статью «Чат боты возвращаются спустя 25 лет»?

                            Элиза (ELIZA) кстати вроде бы первый чат-бот, берет начало в 66 году. 50 лет назад.
                            • 0
                              Ну чат боты появились вместе с чатами. Истоки где-то тут.. То есть, 23 года спустя. А вообще боты действительно чего только не делали, от имитации присутствия кого-либо в чате до управления оборудованием.
                            • 0
                              Получается, для поддержки ботов для Скайпа нужна новая его версия? Получается, на линукс не завезут?
                              • 0
                                Когда планируется брать плату за это все, и во сколько будет обходиться бот?
                                • 0
                                  Из собственного опыта — молодежь сейчас очень много времени проводит во всяких мессенджерах. А боты — это очень удобный способ интегрировать в мессенджеры функциональность любого сайта или сервиса и, соотвественно, получить больше пользователей/покупателей.
                                  • +1
                                    А как в универсальном коннекторе решаются вопросы разных возможностей API например у Slack и Telegram. Например, в Telegram есть custom keyboard, это, получается, не доступно?
                                    • 0
                                      Универсальный коннектор, очевидно, будет реализовывать некоторую достаточно общую функциональность. Всегда найдутся тонкости конкретного API, которые не укладываются в общую концепцию. Поэтому, например, есть отдельное Skype API, которое шире.
                                    • 0
                                      Не совсем понял из описания, Bot Connector — это некий сервис Микрософт? Или его код доступен и я могу поднять его на своем сервере?
                                      • 0
                                        Немного уточню — я спрашиваю о той части, где «мой бот» связывается с разными каналами, например, с Telegram
                                        • 0
                                          Сервис MS, как я понимаю к этому сервису MS планирует подключать все то что дает свое бот API. Суда по последней презентации Цукерберга скоро и FB
                                          • 0
                                            Всё верно. И это кстати неплохо, потому что тогда забота об обновлении API у всех поставщиков ложится на плечи Майкрософт, а не на ваши…
                                      • 0
                                        Я смотрю, уже вышла 3-я версия фреймворка. Даешь обновленный пример под v3!
                                      • 0
                                        Опубликовал в Azure и получаю ошибку 401 Unauthorized
                                        • 0
                                          Надо не забыть изменить AppId и App Secret в Web.Config, после чего пере-публиковать код ещё раз.
                                          • 0
                                            Дмитрий, я так и сделал, но ситуация не поменялась…
                                        • 0
                                          Эх, жалко что API поменялся в новой версии, Bot Application.zip уже под новую версию Microsoft.Bot.Builder 3.8.0, этот пример не работает, надо разбираться заново. Есть что-то поновее? Благодарю!

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

                                          Самое читаемое