使用Dialogflow API构建Slack智能聊天机器人的指南

介绍

自然语言处理(NLP)领域的突破近来出现了突然上升。我们可用的文本数据量巨大,数据科学家正在提出新的创新解决方案来解析它并分析模式。从编写整本小说到解码古代文本,我们已经看到了NLP的各种应用。

最受欢迎的应用程序之一是聊天机器人。Zomato,Starbucks,Lyft和Spotify等组织正在其网站和移动应用上利用这项技术。作为用户,我们不再需要担心被搁置 - 只需键入您的查询,聊天机器人将立即分析文本并给出适当的响应。

考虑到这些聊天机器人的流行程度和实用性,我想展示如何创建一个。在本文中,我们将使用Slack构建一个聊天机器人,Slack是世界上最大的团队通信应用程序。然后,我们将利用Google的DialogFlow(以前的api.ai)为机器人添加智能。

听起来不错?开始吧!

 

目录

  1. 什么是Chatbot,为什么要关心?
  2. 解剖我们的Chatbot
  3. 一个简单的基于Chatbot的规则使用Slack
  4. 了解用于NLP和机器学习的Google的Dialogflow(api.ai)
  5. 将Chatbot变为现实(集成DialogFlow和Slack)

 

什么是Chatbot,为什么要关心?

聊天机器人为用户提供了一种方法,可以使用简单的语言提供复杂的命令并完成复杂的任务。

例如,假设您想从拥有自己的聊天机器人的电子商务网站购买一双鞋子。你可以告诉机器人你想要购买一些鞋子,它会和你谈谈收集更多的细节,比如“什么牌子/颜色?”,“你的尺码是多少?”和“什么样的鞋子?运动鞋或靴子?“ 您不必浏览网站,而是与机器人进行对话,  反映出去零售店时的体验类型。

用例的另一个例子是星巴克的聊天机器人:

在与机器人交谈时,可以轻松订购咖啡,然后点击一堆按钮并手动搜索订单。出于这些原因,聊天机器人被认为是与用户互动的最佳方式之一。现在我们知道聊天机器人是什么了,让我们进入基础知识。以下是我对聊天机器人的定义:

聊天机器人是一种服务,由规则和人工智能提供支持,您可以通过聊天界面进行交互。该服务可以是任何数量的东西,从功能到娱乐,它可以存在于任何主要的聊天产品(Facebook Messenger,Slack,Telegram,Text Messages等)中。

通俗地说,聊天机器人是在聊天平台上与用户交互的程序。它可以像你想要的那样愚蠢(有趣),也可以像你需要的那样聪明(足智多谋)!

 

解剖我们的Chatbot

根据我们希望它具有哪种功能,有多种方法可以创建聊天机器人。在本教程中,我们将构建一个基本的聊天机器人。以下是它的高级设计:

我们将使用Slack的API将消息发送到DialogFlow(DF)。DialogFlow的NLP引擎将理解用户消息背后的意图和语义,并为我们的聊天机制发送适当的回复以发送给用户。Slack接口和DialogFlow一起构成了聊天机器人。举一个类比,Slack接口将是我们机器人的“面孔”,DialogFlow将是“大脑”。

 

一个简单的基于Chatbot的规则使用Slack

在本研究中,Slack是我们的首选平台,因为它在全球范围内广泛用于组织级通信。它还通过其API添加机器人提供了非常好的支持。然而,在我们对Slack做任何事情之前,我们需要准备好一些东西:

  • 一个Slack工作区来测试我们的机器人
  • 机器人的Slack应用程序

 

创建Slack工作区

工作区(组)是Slack组织团队的方式。如果您是Slack上的Analytics Vidhya小组的成员,那么您就是工作区的一员。工作区的URL地址如下所示:

https://workspace-name.slack.com

您可以在此网址创建自己的工作区:

https://slack.com/create#email

输入电子邮件后,Slack将向您发送电子邮件ID的6位数代码。按照他们给出的步骤选择您的姓名,密码,团队规模。然后,Slack要求您为该组提供名称:

你可以给它任何你喜欢的名字。我会说出一些东西  。选择URL地址并创建工作区后,Slack将建议发送电子邮件邀请。你可以点击“立即跳过”跳过这一步,瞧!您刚刚在Slack上创建了自己的工作区。尝试发送一些消息!

 

创建一个Slack应用程序

既然您有一个可以进行实验的工作空间,那么您需要一个可以附加机器人的应用程序。在以下链接上创建应用:

https://api.slack.com/apps

单击“创建应用程序”并为应用程序命名并选择您的工作区:

这会将您重定向到您的应用信息中心。从那里,您可以选择  “Bots”选项:

单击“添加机器人用户” - >为机器人命名。就我而言,我把它命名为“skynet”。现在我们已经为我们的应用程序创建了一个机器人,我们需要将它添加到我们的工作区,以便我们可以与它聊天!返回上面的应用程序仪表板并向下滚动以找到“将应用程序安装到工作区”选项。

一旦你这样做,Slack会要求你“授权”申请。继续并接受授权。现在我们已经授权了bot,让我们使用python创建一个基于规则的简单聊天机器人。

 

使用python创建基于规则的bot

在我们能够将任何外部程序连接到Slack bot之前,我们需要确保Slack拥有访问机器人的正确权限。为此,Slack提供了一个“auth令牌”,我们需要在尝试连接时提供该令牌。返回“app dashboard”并选择“OAuth&Permissions”选项:

这将打开应用程序的权限设置。选择“Bot用户OAuth访问令牌”并保存(我出于安全原因隐藏了它们)。此令牌有助于连接到我们的机器人。

现在你已经完成了所有设置,让我们编写一些python代码。为了便于连接到Slack API,我编写了一个小的python程序。让我们设置代码环境。

注意:整个项目都在python 2.7中

1.安装slackclient库。

$ pip install slackclient

2.克隆我的松散存储库。

$ git clone https://github.com/mohdsanadzakirizvi/Slack-AI-ChatBot.git

3.将松弛身份验证令牌设置为“Bot User OAuth Access Token”的值以及环境变量中bot的名称。

$ export SLACK_TOKEN = 
$ export BOTNAME = 

例如,我的BOTNAME是“skynet”,所以我将它设置为:

$ export BOTNAME = skynet

4.转到Slack-AI-ChatBot目录。

$ cd Slack-AI-ChatBot

5.启动python bot。

$ python mainbot.py

您现在应该收到以下通知:

现在一切都已设置完毕,您可以转到Slack工作区并开始与机器人聊天。请注意,它只会在您使用提及@chatbotname(就像我们通常在Slack中所做的那样)进行交谈时才会回复。

这些是我在机器人中预设的一些硬编码规则。您可以更改它们或添加自己的规则。如果你打开文件mainbot.py,你会发现以下功能:

def handle_command(slack_api, command, channel):
    """
    Recieves commands directed for the bot, if they are valid perform action 
    else resends clarification
    """
    EXAMPLE_COMMAND = 'do'
    if command.lower().startswith(EXAMPLE_COMMAND) or command.lower().startswith('what'):
        slack_api.rtm_send_message(channel, 'Yes, code me further to do that!')
    elif command.lower().startswith('hi') or command.lower().startswith('hey') or command.lower().startswith('hello') or command.lower().startswith('who are you'):
        slack_api.rtm_send_message(channel, 'Hey, I\'m your slack bot, how may I help you?')
    else:
        print 'Invalid Command: Not Understood'
    slack_api.rtm_send_message(channel, 'Invalid Command: Not Understood')

这就是所有魔法发生的地方。继续尝试添加自己的规则,并尽可能自定义聊天机器人!此外,我在项目的整个代码中添加了注释,以使其易于理解。请随意浏览此处的代码,以了解该过程的工作原理。

现在我们已经尝试使用自定义规则为Slack构建一个聊天机器人,让我们看看我们如何利用NLP和ML的强大功能让我们的机器人更加智能化!

注意:每次更改代码时,都必须重新启动程序才能使更改生效。

 

了解用于NLP和机器学习的Google的Dialogflow(api.ai)

在我们继续之前,回想一下我们在本文开头讨论的聊天机器人的解剖。供您参考,下面是该图:

包括设置Slack在内的第一部分已经完成。现在,是时候探索DialogFlow api了。

 

设置DialogFlow

1. 使用您的Google帐户免费访问https://dialogflow.com/并注册

2.您将可以访问您的控制台:

 

代理

DialogFlow通过创建代理来工作。代理最好被描述为NLU(自然语言理解)模块。这些可以包含在您的应用,产品或服务中。他们将自然用户请求转换为可操作的数据。

当用户输入与代理程序中的某个意图匹配时,会发生此转换。意图是处理用户请求的代理的预定义或开发人员定义的组件。

例如,您告诉聊天机器人您感觉很冷,或者您希望关闭风扇。代理需要知道这些语句背后的意图。更具体地说,“用户希望我做什么?”。一旦知道了意图,就可以生成相应的动作/回复。

让我们从创建自己的代理开始。我们将以披萨公司的聊天机器人为例。

在窗口的左上角,您将看到“创建代理”选项。单击它并为您的代理选择一个名称。我把我的名字命名为“pizzaBot”。

现在我们已准备好代理,我们需要定义一些它需要识别的实体以及它需要理解的一些意图。

 

理解意图和实体

a.) Entity

实体是您需要代理识别的一组对象。例如,如果我们要创建一个pizzaBot,我们的一些实体将是披萨通常需要的对象:

  1. Breads
  2. Toppings
  3. Cheese, etc.

让我们创建我们的实体。

  • 单击左侧的“实体”按钮,然后选择“创建实体”。

  • 为您的披萨选择一堆配料。

  • 单击“保存”按钮,您将拥有您的浇头实体。
  • 让我们的代理人添加另一个实体“奶酪”:

现在我们的实体已准备就绪,我们需要定义一些意图,以帮助我们的代理了解如何处理这些实体。

 

b。)意图

简单来说,意图是用户“说”的内容与机器人对该指令采取的操作之间的映射。如果单击intent选项卡,您将看到已存在两个意图。

  • 当机器人不理解用户说的内容时的默认回退意图,以及
  • 当用户说出“你好”的内容并且你希望机器人用类似的东西回应时,会触发欢迎意图。

让我们来玩默认意图吧。

由于我们尚未对我们的代理进行过培训,因此它使用了默认的回退意图,并使用为该方案存储的众多响应之一进行响应。让我们创建一个烹饪比萨饼的意图,并称之为“makePizza”。单击“创建意图”,选择一个名称并保存。你会看到这样的东西:

DialogFlow的工作方式是从一些示例用户句子开始。然后,它训练它的引擎,以生成一个算法,使这些句子与正确的意图最匹配。让我们为我们的代理添加一些基本的培训短语:

我们的想法是尽可能多地和多样化地训练我们的代理人,使其更加精确。设置训练短语后,您需要定义代理在遇到此意图时应采取的操作。 您可以通过单击“添加参数和操作”选项来执行此操作。添加以下操作和参数:

这些列名称的含义是什么?

  • 必需 - 定义此参数是否对操作是必需的。
  • 实体 - 这里我们将参数映射到我们预定义的实体。
  • 值 -如果我们想在响应中重用这个参数,我们可以简单地使用它的值名称,参数将替换它的位置。
  • 是List - 如果参数值可以是列表(例如,顺序中可以有多个浇头)。
  • 提示 -代理在提示用户输入参数时应该说什么?我们在这里定制。

点击浇头旁边的“定义提示”,然后写上“您想要在披萨上添加什么配料?”

同样,添加一个奶酪。哇。这是很多工作。让我们看看我们取得了什么。保存意图并返回代理的演示区域。尝试向代理商询问披萨。由于我们已经在一些示例短语上训练了代理,因此它应该能够立即识别与订购披萨相关的任何短语。它还应该问你想要的配料和奶酪类型?查看以下视频,了解我在说什么。

 

注意谈话的自然感觉。触发意图后,代理会尝试通过对话从用户中提取您标记为重要的参数。请注意,您只需要提供一些训练短语的示例; DialogFlow的NLP引擎负责其余部分。

此外,您可以为用户添加自定义响应,以防意图成功执行并完成。单击“操作和参数”下面的“添加响应”按钮,添加以下响应,然后保存:

一旦你的披萨准备好了,你会受到以下消息的欢迎:

幕后发生了什么?当我们在响应字段中使用$ cheese和$ toppings时,它们会自动被从用户对话中提取的参数值替换。方便,不是吗?

 

培训代理商

现在关于代理的所有内容都已设置好,现在是时候进行培训了。单击代理名称旁边的设置图标。

在设置窗口中,选择“ML设置”。

以下是一些需要注意的重要事项:

  1. 训练模型有两种模式:
    • 混合模式
    • 仅ML模式
  2. 训练样本较少时,混合模式很好 如果你有一个大的设置,你应该去ML模式
  3. ML分类阈值是模型应具有的最小置信度分数。只有这样才能对意图采取行动,否则它将回到我们之前讨论过的“默认意图”。

单击“训练”按钮,一旦训练了训练,将其保存。现在我们的NLP代理人很高兴。让我们进入下一步并将其与我们的Slack应用程序集成,以使聊天机器人完成!

 

将Chatbot变为现实(集成DialogFlow和Slack)

DialogFlow(DF)是与大多数流行应用程序集成的绝佳选择。 支持开箱即用与Slack的集成。让我们的DF代理与我们的Slack机器人一起工作吧!

 

使用DialogFlow设置Slack应用凭据

在窗口的左侧,单击“Integrations”按钮,您将看到许多选项。选择Slack图标,然后单击下面的设置。弹出如下框:

在右上角,切换开关以“打开”与Slack的集成。

向下滚动,您将找到输入Slack应用程序凭据的字段:

为此,请回到Slack应用程序的控制台。如果您尚未打开它,只需转到以下URL并选择您的应用:

https://api.slack.com/apps

向下滚动页面,您将找到应用程序的凭据(出于安全原因,我隐藏了它们)。

将它们复制到DialogFlow页面中的相应字段。

注意:要复制“客户端密钥”,您必须先单击旁边的“显示”选项按钮。复制凭据后,单击DialogFlow中Slack框右下角的“开始”。

 

继续松弛设置

现在您已经设置了Slack和Dialogflow,您需要启用OAuth(帮助身份验证),事件请求URL(由Dialogflow提供)和事件订阅(我们的机器人会听哪种事件?)。

添加OAuth URL

  1. 从Dialogflow的Slack设置页面复制OAuth URL
  2. 转到Slack Developer Console并单击左侧菜单中的OAuth&Permissions
  3. 单击“ 添加新的重定向URL”按钮并粘贴OAuth URL。
  4. 单击添加。

 

添加事件请求URL

  1. 从Dialogflow的Slack设置页面复制事件请求URL
  2. 转到Slack Developer Console并单击左侧菜单中的Event Subscriptions
  3. 单击开关以启用事件,然后将事件订阅URL粘贴到  请求URL字段中。

片刻之后,您应该会在“请求URL”字段上方看到绿色的“已验证”文本。

 

启用事件订阅

事件订阅是聊天机器人最具竞争力的事情。它基本上告诉Slack我们的机器人会听到什么样的事件并被触发。 事件的范围可以从加入频道的人到新的个人信息。

  1. 单击左侧菜单中的“ 事件订阅 ”。
  2. 单击开关以启用该选项。
  3. 订阅机器人事件下,单击添加机器人用户事件按钮。
    这将显示文本字段和事件列表。您可以在此字段中输入术语,以搜索您希望机器人响应的事件。以下是我建议添加的事件列表:
  4. 添加事件后,单击屏幕底部的“ 保存更改”按钮。

 

将Slack Bot添加到团队中

  1. 在Slack Developer Console中,单击左侧菜单中的Manage Distribution
  2. 在“ 与您的团队共享您的应用程序”部分下,单击“ 添加到松弛”按钮。
  3. 在下一页上,单击“ 授权”按钮以添加代理。

完成此步骤后,您可以返回工作区并开始与机器人交谈!

 

与聊天机器人交谈

转到你的工作区和个人DM机器人,或提到他的名字,如@botname,它将开始响应。

 

 

你注意到了吗?

除了回答普通的披萨问题之外,机器人还擅长回复诸如“hi”,“hello”和“thank you”等通用消息?这是可能的,因为DialogFlow功能称为“SmallTalk”。

 

配置小谈话

如果单击DialogFlow左窗格中的“Small Talk”按钮,您将遇到一组选项:

Small Talk让你添加你的机器人在收到诸如“嗨,你好”之类的通用评论或诸如“你是谁?”和“你能做什么?”等一般性问题时应该如何反应。继续并使用特定于项目的详细信息进行设置。

 

结束笔记

我们的聊天机器人终于完全成型了!既然您已经能够理解聊天机器人的工作方式并且已经实现了基于规则的简单机器人和基于ML的智能机器人,那么您可以通过探索Slack和DialogFlow提供的功能来做更多的事情。

这对我来说是一次很棒的学习经历。利用DialogFlow的强大功能,我们能够避免在我们从头开始实施NLP和ML模型时遇到的大量复杂性。我挑战你继续建立自己的一些有趣的聊天机器人!

总结一下,这里有一些您可以查看的资源/链接:

  1. 查看DialogFlow文档,了解有关其API的任何疑问。
  2. Slack bot-users文档对于他们的bot平台存有疑虑。
  3. 本文中使用的所有代码都可以在GitHub上找到。

你可能感兴趣的:(Chatbots,机器人对话,AI,Chatbots)