Как создать чат-бота с помощью 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, этого будет достаточно, и на самом деле это очень удобно. Однако в тот момент, когда вы начнете строить более сложные структуры диалогов, вам придется облегчить управление состоянием и контекстом в другой среде.
Статьи о других бот-фреймворках
Подробнее…
Исходный проект находится здесь: