Как создать чат-бота с помощью Google Dialogflow

Базовый обзор Dialogflow и его сравнение с другими облачными средами

Вступление

Доступен ряд сред разработки Conversational AI и Conversational UI, чтобы создать то, что мы будем называть чат-ботом. Для некоторых из этих сред барьер для входа довольно высок, для других - опять же, не так уж и много.

Более низкий порог входа может сначала привлечь внимание, но затем столкнется с препятствиями при масштабировании. Dialogflow, по-видимому, имеет очень низкий входной барьер, если учесть стоимость, простоту использования и доступность.

Другой фактор, привлекающий пользователей к Dialogflow, - это желание создавать интерфейсы на Google Assistant, Google Home и других устройствах, связанных с Google.

Мои топ-5 самых популярных историй о ботах:

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

Намерения

Намерения - это передовая линия любого чат-бота, их можно рассматривать как глагол. Также рабочее слово или фраза, намерение пользователя разговаривать с вашим чат-ботом.

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

Вы увидите, что есть элемент под названием События. События - очень удобный инструмент, мы не будем использовать его в этом примере. Однако, короче говоря, вы можете активировать свое намерение на основе события, а не ввода пользователя. Это особенно полезно с Google Assistant на разных устройствах.

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

Сущности

Если намерения - это глаголы, то сущности - это существительные. Это ключевые элементы, которые вы хотите зафиксировать в форме ввода данных пользователем.

Для погодного приложения это будет город или регион.

В большинстве случаев сущности обнаруживаются автоматически, а также полностью контекстуальны. Это означает, что вам не нужен конечный список сущностей, но Dialogflow может обнаружить сущность на основе контекстной осведомленности с точки зрения высказывания пользователя.

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

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

Системные сущности Dialogflow очень сильные и устоявшиеся.

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

Например, «Я хочу поехать из Лиссабона в Амстердам в четверг в 17:00 ».

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

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

Тестирование

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

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

Тестирование ввода и вывода может происходить в текстовом или голосовом формате. Если вы не хотите тестировать в тестовой панели Dialogflow, вы можете перейти к Симулятору Google Ассистента за секунды.

Важно, если Google Assistant станет вашим основным средством общения. Вы также можете просмотреть необработанный ответ API, который очень полезен для документации и разработки.

Интеграция

Точки интеграции называются Dialogflow как Выполнение. В рамках намерения вы можете определить, есть ли интеграция. В этом примере вы увидите, что я использовал встроенный редактор. Этот простой веб-перехватчик захватывает объект City и возвращает его в настраиваемом диалоговом окне.

Фактический диалог, отображаемый пользователю, также может быть определен в точке интеграции.

package.json

{
  "name": "DialogflowFirebaseWebhook",
  "description": "Firebase Webhook dependencies for a Dialogflow agent.",
  "version": "0.0.1",
  "private": true,
  "license": "Apache Version 2.0",
  "author": "Google Inc.",
  "engines": {
    "node": "6"
  },
  "scripts": {
    "lint": "semistandard --fix \"**/*.js\"",
    "start": "firebase deploy --only functions",
    "deploy": "firebase deploy --only functions"
  },
  "dependencies": {
    "firebase-functions": "^2.0.2",
    "firebase-admin": "^5.13.1",
    "googleapis": "^27.0.0",
    "actions-on-google": "2.2.0",
    "dialogflow-fulfillment": "0.5.0"
  }
}

index.js

/**
 * Copyright 2017 Google Inc. All Rights Reserved.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
'use strict';
const functions = require('firebase-functions');
const {google} = require('googleapis');
const {WebhookClient} = require('dialogflow-fulfillment');
exports.dialogflowFirebaseFulfillment = functions.https.onRequest((request, response) => {
const agent = new WebhookClient({ request, response });
function Weather(agent) {
    const city = agent.parameters['geo-city'];
agent.add(`The weather in ${city} is fine and mild.`);
    }
let intentMap = new Map();
  intentMap.set('AskCity', Weather);
  agent.handleRequest(intentMap);
});

Контекст

Контекстом можно управлять, используя Dialogflow как просто API и выполняя это в своей собственной структуре. Но также вы можете установить контекст в рамках намерений.

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

База знаний

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

Это аналогично тому, как IBM Watson Assistant можно интегрировать в Watson Discovery. Watson Discovery можно искать, используя естественный язык, и это позволяет Watson Assistant по умолчанию использовать Discovery в попытке выполнить намерение.

Cisco MindMeld имеет аналогичную концепцию, в которой они используют Elasticsearch для создания базы знаний.

Это мощный вариант, который может повысить устойчивость вашего чат-бота.

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

Для настройки вы определяете одну или несколько баз знаний, которые представляют собой коллекции документов.

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

Использование Dialogflow API

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

Однако в большинстве случаев, когда чат-бот запускается в производство, он может быть быстрым и эффективным, но по мере роста числа пользователей, функциональности и среды (среды, известной как каналы; например, RCS, WhatsApp, Messenger и т. Д.) Архитектурный дизайн тестируется.

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

При использовании Dialogflow в качестве API последовательность событий можно увидеть следующим образом:

  • Конечный пользователь вводит или произносит выражение.
  • Ваша служба отправляет это выражение конечного пользователя в Dialogflow в сообщении с запросом на обнаружение намерений.
  • Dialogflow отправляет вашей службе сообщение об обнаружении намерения. Это сообщение содержит информацию о совпавшем намерении, действии, параметрах и ответе, определенном для намерения.
  • Ваша служба выполняет действия по мере необходимости, например запросы к базе данных или вызовы внешнего API.
  • Ваша служба отправляет ответ конечному пользователю.
  • Конечный пользователь видит или слышит ответ.

В большинстве случаев Dialogflow будет использоваться как API для облегчения NLU с точки зрения:

  • обнаружение намерений,
  • захват объекта и слота
  • и какой должен быть ответ.

Будет структура, которая облегчит общение с Dialogflow, а также другие точки системной интеграции, такие как CRM и т.п.

Вам также необходимо будет реализовать уровень посредничества, который будет преобразовывать диалог чат-бота в нужный носитель для среды. Для Messenger диалоговое окно чат-бота будет отображаться иначе, чем в WhatsApp, текстовых сообщениях или Интернете.

Заключение

Если вы хотите создать быстрый интерфейс, особенно речевой, для Google Assistant это идеальный вариант. Если у вас не будет нескольких диалоговых поворотов и сложных диалогов для управления и контекстной осведомленности, это ваш путь. Обработка сущностей очень хорошая; в большинстве случаев сущность обнаруживается автоматически.

Если нет, то могут быть варианты получше ...

Если посмотреть на доступные облачные решения, Dialogflow - это очень интуитивно понятный и быстрый способ начать работу. Одним из преимуществ будет стоимость и простота доступа.

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

Интеграция указывает, что Dialogflow называет выполнением, может быть непросто, но у вас есть выбор: создать свою собственную точку интеграции на основе JSON или разместить ее в Cloud Functions for Firebase.

Последнее я использовал для примера.

Очевидно, что это удобный способ разместить вашего чат-бота или диалоговое приложение в Google Assistant, что облегчает доступ к множеству устройств.

Стандартная версия Dialogfow бесплатна, но есть квоты, поэтому необходимо учитывать ожидаемые объемы и то, как это может повлиять на стоимость.

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

Вопрос в том, хотим ли мы передать нашего чат-бота Google. Именно здесь Rasa набирает обороты, и организации все чаще хотят иметь локальную автономную установку.

Управление диалогом станет сложным и проблемным, если вы используете Dialogflow для Google Assistant, этого будет достаточно, и на самом деле это очень удобно. Однако в тот момент, когда вы начнете строить более сложные структуры диалогов, вам придется облегчить управление состоянием и контекстом в другой среде.

Статьи о других бот-фреймворках







Подробнее…

Исходный проект находится здесь: