company_banner

Ботоводство



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

    Сфера применения


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

    Разнообразие сфер применения ботов я хочу привести на примере собственной работы в компании Selectel. Мини-спойлер: начинал свою работу я в качестве технического писателя, теперь являюсь инженером отдела облачных решений. Путь внедрения виртуальных помощников начался с бота для отдела маркетинга, который отслеживает комментарии и упоминания компании в социальных сетях. Такая разработка является очень простой, но эффективно дополняет существующие решения на рынке, например, сервис IFTTT.

    Следующими разработками в моей практике стали внутренний чат-бот для отдела HR и бот для общения с клиентами, представленный в качестве демо-стенда во время конференций SelectelTechDay в Санкт-Петербурге и Москве. Оба бота созданы с помощью разных сервисов и технологий. И прежде чем погружаться в технические подробности, рассмотрим верхнеуровневую схему устройства ботов.

    Основные принципы ботостроительства




    Деятельность чат-ботов строится вокруг 3 основных действий:

    1. Получение или вывод информации происходит через определенные каналы связи, например, в Slack или диалогах Vk.com
    2. Распознавание намерения — это комплексный анализ полученной информации для формирования ответа
    3. Обработка действия — любая работа, проведенная на серверной стороне, необходимая для подготовки верного ответа. Например, если был запрошен прогноз погоды, то будет произведен запрос к некому API о погоде в городе N, и пользователю будут отправлены результаты этой команды

    Основные действия чат-ботов объединяются в рамках задачи сохранения контекста для создания человекоподобной формы общения и поддержки диалога. Чат-бот должен «помнить» предмет разговора и адаптировать свои ответы соответствующим образом.

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

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

    Ботостроительство


    Изложенные выше 3 принципа работы чат-ботов (канал, анализ, действие) можно реализовать по-разному. Самый простой вариант — проводить сравнения поступающего текста и отправлять пользователю соответствующие ответы.



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

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

    • DialogFlow (Google)
    • Wit.ai (Facebook)
    • Azure Bot Service (Microsoft)
    • Rasa Core (Open Source)


    При выборе продукта учитываются следующие факторы:

    1. Насколько критично размещение исполняемого кода бота в рамках существующих систем
      Например, в случае Wit.ai и Dialogflow мы не контролируем полностью весь процесс — мы отдаем этим приложениям текст и получаем готовый ответ. Используя Rasa Core или Azure BotBuilder SDK, мы можем хранить всю переписку в границах внутренних систем
    2. Сколько каналов связи необходимо подключить
      Dialogflow предоставляет возможность использования ограниченного количества коннекторов, которые подключают мессенджеры и социальные сети через указание ключей доступа. Для Wit.ai и Rasa Core можно использовать любое количество каналов, но логику подключения к ним необходимо реализовать самостоятельно (зачастую это очень тривиальная задача). Azure Bot Service имеет возможность использования коннекторов к определенным каналам, но не ограничен ими, и его можно подключать также к другим источникам самостоятельно
    3. Насколько просто можно вносить изменения в базу знаний бота
      При создании бота в виде программного кода без использования визуального интерфейса для взаимодействия с ним мы ограничиваем круг лиц, кто может вносить изменения в диалоги и ответы бота. Функционал добавления и редактирования фраз должен быть доступен для каждого

    Для нашего внутреннего виртуального помощника чат-бота Тирекса была выбрана платформа от Google Dialogflow, которая предоставляет возможность визуального редактирования намерений, а выполнение действий осуществляется внутри частного облака в Selectel. Определяющими факторами стали скорость начала работы с ботом, безопасность при передаче сообщений и наличие канала Slack в списке поддерживаемых.



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

    • Рост числа сотрудников компании, а вместе с этим увеличивающийся поток однотипных вопросов вроде «Как пользоваться корпоративной библиотекой?» и «Где пообедать?»
    • Регулярное бронирование переговорных и оформление пропусков
    • Поиск информации и документов в корпоративной базе знаний



    Создание и подключение бота в Dialogflow занимает несколько минут. В начале рассмотрим принципы работы чат-бота в системе, а затем добавим выполнение сложных действий.

    Создание бота в Dialogflow


    Создание архитектуры


    Далее в тексте мы будем оперировать такими понятиями, как:

    • Намерение — формализованная задача, которую хочет выполнить пользователь
    • Параметры — набор данных, необходимых для выполнения задачи
    • Ответ — функция или программа, выполняемая в ответ на распознанное намерение
    • Тренировочная фраза — пример сообщения от пользователя, на котором чат-бот обучается

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

    Намерение включает в себя тренировочные фразы, параметры и ответы. Внутри тренировочной фразы мы выделяем параметры (например, время или место), которые необходимы для формирования корректного ответа.

    Ответ указывается либо в намерении, либо Dialogflow отправляет запрос на наш сервер, который выполняет необходимую работу и возвращает обратно ответ на примере нашего чат-бота:

    • На простые вопросы (например, «Есть ли у нас программа страхования заграницей?» ответ закладывается в намерение
    • На более сложные задачи как «Есть ли свободные переговорные сейчас?» ответ формируется с помощью дополнительного запроса к серверу, который определяет свободное время для всех участников и комнат



    Работа с намерениями


    Рассмотрим работу с Dialoglow на примере бронирования переговорной. Мы создаем агент управления бронированиями и определяем следующие намерения:

    • Просмотреть существующие бронирования
    • Забронировать переговорную

    Каждое из намерений вызывается тренировочными фразами. Чем больше их добавлено, тем вероятнее будет выполнено нужное действие. В нашем примере намерение «Забронировать переговорную» будем вызывать следующими фразами:

    • Забронируй на сегодня в 23.15 на 30 минут на меня
    • Привет. Прошу забронировать на 08.11.2018 переговорную с 15:00 до 16:00
    • Забронируй
    • Мне нужна переговорная



    Принцип работы сбора данных в намерениях следующий:

    1. Dialogflow на основе полученного ввода понимает, о каком намерении идет речь. В нашем примере — бронирование переговорных
    2. Если обязательные параметры не были указаны в первом сообщении (например, время встречи), то чат-бот задаст уточняющие вопросы
    3. После получения всех данных Dialogflow отправит запрос на наш сервер в VPC для бронирования нужной комнаты

    Посмотрим на этот процесс в действии:



    Обработка действия осуществляется отправкой запроса со всеми данными на заранее добавленный адрес сервера действий (Webhook URL):



    По адресу website.ru/webhook находится сервер, который выполняет обработку сложных команд (в нашем примере возвращает строку «Привет от сервера!»). Github Gist для быстрого старта:

    # -*- coding: utf-8 -*-
    from flask import Flask, request, make_response, jsonify
    
    app = Flask(__name__)
    
    
    @app.route('/webhook', methods=['POST'])
    def webhook():
        req = request.get_json(force=True)
        intent = req.get('queryResult').get('intent').get('displayName')
        print(intent)
        if intent == 'Sample intent':
            res = make_response(jsonify(
                {
                    "fulfillmentText": "Привет от сервера!",
                }
            ))
            return res
        return make_response(jsonify(
                {
                    "fulfillmentText": "Совпадений намерений не найдено!",
                }
            ))
    
    
    if __name__ == '__main__':
        app.run(host='0.0.0.0', debug=True, port=5000)

    Создание бота с помощью RASA


    Для использования чат-бота без сторонних сервисов для распознавания текста можно использовать инструменты наподобие Rasa, которые позволяют полностью управлять всем процессом работы бота. Rasa — набор программных компонентов с открытым исходным кодом, которые содержат распознавание речи и управление диалогами. Уже сейчас можно посмотреть на Boilerplate, который я подготовил для знакомства с платформой, а более подробную инструкцию мы опубликуем, если будут запросы от Habr-сообщества.

    Чат-боты и бизнес


    Использовать ли сервисы автоматизации для клиентского обслуживания — непростой вопрос. Современные инструменты предоставляют множество решений при выборе между гибкостью, скоростью начала работы и безопасностью. Системы распознавания намерений в естественном языке теперь доступны не только в проприетарном виде, но и свободно распространяются, что открывает большие возможности для собственных экспериментов. Мы рассмотрели один из вариантов, который позволяет быстро внедрить чат-ботов для автоматизации однотипных задач вашего бизнеса без капитальных затрат и с минимальными трудозатратами. Если вы в работе уже применяете чат-ботов, поделитесь обратной связью в комментариях о своих впечатлениях и, конечно, впечатлениях ваших клиентов.
    • +20
    • 6,7k
    • 7
    Selectel
    97,00
    ИТ-инфраструктура для бизнеса
    Поделиться публикацией

    Похожие публикации

    Комментарии 7

      +3
      Мои 5 копеек:
      1)На видео «Забронировать Стеклянная КТ», «Забронировать Кирпичная КТ» — зачем на каждой кнопке слово «Забронировать». Кажется, оно лишнее.
      2)Мои попытки использовать dialogflow и wit.ai с русским языком оказались не слишком успешными. Возможно, что-то изменилось с тех пор, но мало вероятно.
      3)Модель RASA NLU кмк позволяет добиться лучших результатов за счёт того, что при обучении «ответ» интерпретируется с учетом уже «заполненных» полей и последнего заданного вопроса. Это позволяет, с одной стороны извлекать «ключевые слова» из «широких фраз», но при этом правильно обрабатывать и ответы из закрытых уточняющих вопросов. Немного синтетический пример:
      «Хочу забронировать столик у окна на 4х на 17-00
      “Хочу забронировать столик» — «Какое количество гостей» — «4» — «Столик у окна» — «да» — «На какое время» — «5».
      Во втором случае «4»,«да»,«5» — могут означать что угодно и «правильный» смысл определяется уже заполненными полями и текущим вопросом.

      P.S. Если кто-то знает об opensource инструменте для «обучения» как в dialogflow — буду признателен за ссылки)
        +1
        Как ваш Тирекс поймет запрос типа:
        Забронируй переговорную в любое время после обеда, только не с 15 до 16?
          0
          В данном случае анализ речи определит намерение бронирования переговорной, однако не поймет ограничение по времени. Не добавлял таких условий из-за очень большого числа возможных сценариев — тогда будет теряться суть понятных задач бота и начнется разработка AI.
          +1

          В примере с переговорами, на мой взгляд, ограниченное количество вариантов развития событий. Почему не обойтись hardcoded цепочкой, наподобие IVR? Желаемый результат сотрудником быстрее будет получен и с меньшими затратами на разработку...

            0
            В данном случае добавление вариантов событий происходит без больших затрат — в намерении мы указываем все данные, которые нам нужно собрать. А уже как они соберутся из первой фразы пользователя или через дополнительные вопросы, которые отправит сам Dialogflow — нам не важно.
              +1

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

              0
              Ирония в том, что что form/slot filling примерно так и работает.
              Грубо говоря у нас есть «форма», которую нужно заполнить. Она состоит из списка полей. Для каждого поля есть «тип» и «вопрос».
              Тогда получаются двай крайних случая:
              Если пользователь присылает длинное развернутое сообщение — бот заполняет (в идеале) все поля формы.
              Если бот присылает короткое сообщение или сообщение из которого понятно только «намерение», например «переговорка» — бот последовательно проходит по этим полям и задает «вопрос» (иногда сразу с вариантами ответов), как раз как в IVR

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

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

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