Advertisement

A Guide to Building an Intelligent Chatbot for Slack using Dialogflow API

阅读量:

Introduction

在自然语言处理(NLP)领域取得了显著的进展。
目前可获取的文本数据呈现爆炸式增长。
数据科学家正开发一系列创新的方法用于解析这些数据,并识别其中的模式。
无论是创作文学作品还是解读古老的文献资料,在NLP领域都展现了广泛的应用前景。

广受欢迎的应用程序之一是聊天机器人。包括Zomato、Starbucks、Lyft和Spotify在内的公司正在其网站和服务应用中整合这项技术。作为用户无需担心订单被搁置只需输入您的查询系统将立即解析文本并提供相应的反馈。

在这里插入图片描述

鉴于此,在本文中本节将详细阐述

听起来不错? 开始吧!

Table of Contents

  • 简述chatbot的基本概念及其重要性
  • 对当前chatbot技术的深入解析
  • 基于slack平台设计的自动化消息处理系统
  • 探索支持自然语言处理与机器学习的知识图谱引擎dialogflow(AI API
  • 实现智能化对话系统的技术整合:结合dialogflow与slack平台的技术优势

What is a Chatbot and why should you care?

智能对话机器人为用户提供了一个便捷的解决方案,能够以易懂的方式表达指令并执行复杂的行为操作。

在您的购物体验中,您可以使用聊天机器人作为辅助工具来完成购买过程。具体来说,在一个拥有自己聊天机器人管理的电子商务网站上购买鞋子时,请您明确指示机器人您希望购买的鞋类类型和数量。随后机器人会主动与您进行对话交流,并根据您的需求询问必要的信息如品牌、颜色、尺码以及具体的款式偏好等(例如:"什么牌子/颜色?""您的尺码是多少?""您倾向于选择运动鞋还是靴子?")。这种交流互动的方式能够更好地模拟零售店购物体验的特点,并帮助我们更直观地了解您的需求和偏好。

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

在这里插入图片描述

当与机器人交谈时,在点单咖啡方面非常便捷。你可以通过手动操作一系列按钮浏览订单信息,并根据需要进行相应的设置。

此段文字已经按照要求进行了同义改写以降低重复率

简单来说,在线聊天机器人是指能够在主流社交平台或应用中与用户实现有效沟通并提供服务的应用程序系统。它是能够通过各种对话界面与用户进行交流,并支持文本、语音甚至视频等多种互动方式。它能够根据不同的需求灵活表现:既可以以"笨拙"的方式展现出趣味性的一面来吸引用户的注意和兴趣(令人愉悦),也可以以"灵活应对"的方式展现其智慧的一面来满足用户的深层需求(周到应对)。

Anatomy of our Chatbot

基于我们对它具体功能需求的不同设定,有多种方案可供选择用于开发聊天机器人。 在本教程中,我们将介绍基础型的聊天机器人设计。 以下是它的高级设计:

在这里插入图片描述

通过调用Slack API向对话流(DF)发送消息。

A simple rule based Chatbot using Slack

在本研究中,我们选择了Slack作为主要沟通平台,并且由于其全球范围内的广泛应用以及在组织沟通中的重要性而得到了广泛认可。此外,在实现功能扩展方面,我们通过集成机器人API实现了良好的支持效果。然而,在深入使用和操作前,请确保做好必要的准备工作:

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

Creating a Slack Workspace

在Slack平台上创建并维护了多个专注于特定主题或项目的团队群组以促进协作和知识共享。
作为 Analytics Vidhya 社区的一员, 您已成功加入该平台上的专业社群, 与志同道合的朋友共同探讨数据分析领域的前沿技术与应用。
您可以访问以下链接获取更多资源和信息:

复制代码
    https://workspace-name.slack.com
    
    
      
    
    AI助手

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

复制代码
    https://slack.com/create#email
    
    
      
    
    AI助手
在这里插入图片描述

在填写电子邮件信息时,Slack系统会自动生成一个六位数的验证码。根据指引完成填写您的姓名、密码以及所属团队的人数。随后,请您在下一步操作中指定组名:

在这里插入图片描述

你可以为它起个任你 names的名字?我来向你说明一些事情。当您选择一个 URL 地址并创建一个工作区后,Slack 将建议发送一封电子邮件邀请函。你可以选择点击"立即跳过"按钮来跳过这一步,对吧?您现在已经在 Slack 上创建了自己的工作区了,不妨试着发送一些信息到 Slack 中吧!

在这里插入图片描述

Creating a Slack Application

鉴于此您需要一个能够集成机器人功能的应用程序请访问以下链接并按照指示完成配置

复制代码
    https://api.slack.com/apps
    
    
      
    
    AI助手

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

在这里插入图片描述

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

在这里插入图片描述

添加机器人用户

安装应用

单击【添加机器人用户

在这里插入图片描述

当我们采取以下步骤时:

  • Slack将进行相应的权限申请。
  • 请继续接受这一请求。
  • bot已获授权限。
  • 请利用Python语言构建一个基于规则导向型的对话机器人系统。

Using python to create a rule based bot

必须先确保Slack拥有访问机器人的适当权限。为此,请注意,在尝试建立连接时必须提供一个Alice token这一机制。请依次点击以下步骤:首先点击返回至应用主界面,并选择'OAuth & Permissions'选项。

在这里插入图片描述

接下来将开启应用程序的权限设置流程。 选择并保存'Bot用户OAuth访问令牌'(其中我选择了将其标记为私有以确保安全)。 此访问令牌将被用于机器人建立连接。

在这里插入图片描述

目前你已完成了所有必要的设置,请让我们编写一段Python代码。 以便更方便地接入Slack API,请帮助我们配置好开发环境。

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

1.安装slackclient库。

复制代码
    $pip install slackclient
    
    
      
    
    AI助手
  1. 克隆我的slack存储库。
复制代码
    $git clone https://github.com/mohdsanadzakirizvi/Slack-AI-ChatBot.git
    
    
      
    
    AI助手

对Bot User OAuth Access Token身份验证令牌进行松解配置,并将其值与环境变量中的bot名称同步设置。

复制代码
    $export SLACK_TOKEN=<your_bot_user_oauth_token_here>
    $export BOTNAME=<your_botname_here>
    
    
      
      
    
    AI助手

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

复制代码
    $export BOTNAME=skynet
    
    
      
    
    AI助手
  1. 转到Slack-AI-ChatBot目录。
复制代码
    $cd Slack-AI-ChatBot
    
    
      
    
    AI助手
  1. 启动python bot。
复制代码
    $python mainbot.py
    
    
      
    
    AI助手

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

在这里插入图片描述

当前一切配置已完成,请您前往Slack工作区开启与机器人对话。请注意,仅当您提及@chatbotname时,该机器人会回应您的消息——如同我们在Slack中的常规做法一样。

在这里插入图片描述

这是我在机器人系统中预先设置的一系列硬编码规则。 您可以选择修改现有规则并加入新的自定义规则。 如果您访问GitHub仓库,您将能够查看并下载完整的源代码包以获取更多详细信息]

复制代码
    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')
    
    
      
      
      
      
      
      
      
      
      
      
      
      
      
    
    AI助手

这就是所有奥秘所在之处。 请继续按照个人设定调整规则,并努力使聊天机器人具备独特性。 此外,在整个项目的代码框架中添加了详细的注释。 建议您访问该链接探索此处的代码,以深入了解这个过程的工作原理。

目前我们已着手为Slack开发一个聊天机器人,并通过自定义规则探索性地设计并编码一系列智能对话逻辑。让我们一起来深入探讨如何借助自然语言处理(NLP)和机器学习(ML)的强大功能来实现高度智能化的对话流程。

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

Understanding Google's Dialogflow (api.ai) for Natural Language Processing and Machine Learning

在继续之前,请您回想一下我们在文章开篇阐述了聊天机器人的解剖结构。 您可以参考下图:

在这里插入图片描述

包括设置Slack在内的前一部分工作已经顺利完成。 现在,请您做好充足准备并着手探索DialogFlow API的工作。

在这里插入图片描述

Setting up DialogFlow

Go to https://dialogflow.com/ and signup for free using your Google account

You will get access to your console:

在这里插入图片描述

Agents

对话流主要通过创建代理来进行运作。其中最优的实现方式是将其定义为自然语言理解模块。这些功能模块通常会整合到您的应用、产品或服务中。它们能够将用户的自然语言查询转化为易于处理的数据形式。

当用户的输入与代理程序中的某个预定义意图相匹配时,则会发生相应的转换操作。这些意图构成处理用户请求所需的基本构建模块。

比如说,在指示聊天机器人时,请您告知它您的感受或要求让它关闭风扇等设备。
具体来说,“请告诉我您的需求是什么?”一旦识别出用户的深层需求,则可以相应地发出指令并提供回应。

在这里插入图片描述

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

在工作区左上方区域中可以看到一个'生成代理'按钮。 在您点击此按钮后,请为其指定一个代号。

在这里插入图片描述

目前我们已准备好开展代理工作。为此,我们需要为该代理系统需识别的关键实体及其相应的意图进行详细定义。

Understanding intents and entities
a.) Entity

目标是您需要代理完成的一项任务。例如,在开发一个pizzaBot时,您的目标将是确定其所需的各种核心组件和辅助设备:比如制作披萨所需的面团配方、烤箱类型以及 topping选择等关键要素。

  • Breads
  • Toppings
  • Cheese, etc.

创建实体.

  • 单击左侧的“实体”按钮,然后选择“创建实体”。
在这里插入图片描述
  • 为您的披萨选择一堆配料。
在这里插入图片描述
  • 点击“保存”按钮后,您将获得您的toppings实体。
  • 请指示我们的代理人为此添加另一个实体:奶酪。
在这里插入图片描述

当前我们已完成初步准备的实体,请问您是否需要我们制定一些意图以帮助我们的代理更好地处理这些实体?

b.) Intent

具体而言,意图是指用户"说"的内容与其被机器人采取的行为之间的对应关系. 当您点击intent选项卡时,请特别注意屏幕上会显示已有两个意图.

在机器无法准确理解用户的表述时所采取的默认应对策略
以及
当机器人收到类似于"hello"这样的指令时
触发相应的欢迎回应机制

在这里插入图片描述

让我们来体验默认意图哦! 在右侧的演示字段里试输入 '比萨请’ ,观察一下代理如何回应:

视频展示

video demo

因为我们在与代理系统互动时缺乏专门的培训, 所以它会默认采用回退策略, 并根据预先存储的各种可能回应中的一种来进行回应. 现在让我们创建一个新的烹饪比萨饼相关的意图, 给它起名为"makePizza". 接下来, 您只需要点击"创建意图"按钮, 在名称字段中输入"makePizza", 然后完成保存操作即可. 您会看到如下界面:

在这里插入图片描述

对话流(Dialogue Flow)的工作模式是基于一些典型用户的对话样本展开的。随后,在其引擎中进行训练工作,并生成一个高效的意图识别机制——以便将这些输入文本与相应的意图进行精确匹配。为了优化这一过程,请向我们的代理补充一组基础的训练指令。

在这里插入图片描述

我们旨在通过尽可能广泛的训练方案和多样的训练内容来提升代理的准确性。在设置训练短语之后,必须明确代理应采取的操作。请通过单击‘添加参数与操作’选项来进行相关设置。以下是需要配置的具体操作及参数:

在这里插入图片描述
What do these column names mean?
  • Essential Specification – 定义此参数是否为操作所需的关键要素。
  • Parameter Mapping – 在此处,默认将该参数映射至我们预先设定的标准实体集合中。
  • Value Representation – 如果希望在系统响应中复用该参数,则可以直接引用其值标识符即可实现其位置替代。
  • Can Be a List – If该参数值允许包含多个条目(例如,在序列中允许多个浇头),则可将其视为可选列表进行处理。
  • Customized Prompts – During prompts for user input queries, 代理应向用户提供什么样的指令? 这里我们进行了专门的设计与配置。

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

在这里插入图片描述

同样,请添加一份奶酪。 真是令人惊叹! 这意味着大量的工作。 让我们回顾一下成果。 请先保存您的意图,并将此操作返回代理所在的演示区域。 请让代理商为我们提供一份披萨。 因为我们已经在多个示例短语上对代理进行了训练,在处理订单时它能够迅速识别与订购披萨相关的关键词和短语。 它还需要了解您所需的配料以及所选用的奶酪类型吗? 观看下面的视频片段。

video

确保对话具有自然流畅的感觉。当意图被触发后,代理将试图从对话中提取标记为重要的参数。请注意,在此情境下仅需提供一些训练短语作为示例;DialogFlow内部处理剩余的部分。

另外,在此建议您根据需求设置自定义回复以应对目标被成功触发并完成相应的操作。 您可点击"操作和参数"菜单下的"新增回复"功能块,在此处填写所需信息后保存设置即可。

在这里插入图片描述

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

在这里插入图片描述

幕后的 happenings 是什么? 当我们使用 cheese 和 toppings 在响应字段时,它们会被从用户的对话中自动提取的参数值所替换。 看起来很方便吧?

Training the agent

关于代理的所有内容均已设置完毕;现已是时候进行培训了。 点击代理名称旁的设置图标。

在这里插入图片描述

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

在这里插入图片描述

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

  • 训练模型有两种模式:

    • 混合模式
    • 仅ML模式
  • 若训练样本数量有限,则采用集成学习方案会更优。

  • ML分类阈值必须是模型必须具备的最低置信度分数。

  • 仅此方式才能确保对用户意图的有效识别。

  • 如果不遵循这一标准,则模型可能回归到之前的默认意图设定。

点击位于屏幕顶端的“训练”按钮。当进行过一次训练后,请将模型进行保存。目前我们的NLP代理系统运行良好。下一步将与我们的Slack应用程序结合使用。

Bringing the Chatbot to life (Integrating DialogFlow and Slack)

该系统(DF)是广泛使用的最佳选择,并能实现无缝整合。 它内置支持开箱即用功能以及与Slack的深度集成 ,能够无缝连接到现有的协作环境。 请帮助我们开发一个能够协调两者工作的系统方案。

Setting up Slack app credentials with DialogFlow

在窗口左侧区域,请您点击"Integrations"按钮。
点击该区域后,请您将会呈现多个可供选择的功能模块。
选择Slack图标后,请您随后点击下方设置菜单。
系统会自动弹出配置界面:

在这里插入图片描述

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

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

在这里插入图片描述

为了方便您访问Slack应用程序控制台,请您前往该平台并登录后完成设置。

复制代码
    https://api.slack.com/apps
    
    
      
    
    AI助手

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

在这里插入图片描述

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

请 重 点 注意 : 要 在 客 户 端 获取 “ 客 户 界 面 密 钥 ” , 请 先 单 击 临 近 的 “ 显 示 设置 ” 选 项 按 钮 。 复 制 完 成 后 , 请 在 对 话 流 界 面 的 Slack 框 右 下 方 点 击 “ 开 始 ” 按 钮 。

请 重 点 注意 : 要 在 客 户 端 获取 “ 客 户 界 面 密 钥 ” , 请 先 单 击 临 近 的 “ 显 示 设置 ” 选 项 按 钮 。 复 制 完 成 后 , 请 在 对 话 流 界 面 的 Slack 框 右 下 方 点 击 “ 开 始 ” 按 钮 。

Continuing Slack Setup

目前您已配置了Slack与对话流服务,请确保已启用OAuth功能(用于身份认证)。请查看事件请求URL字段(由对话流生成),并指定机器人应监听的事件类型。

Add OAuth URL
  • Navigate to OAuth URL located in Dialogflow’s Slack settings page.
  • Access OAuth & Permissions by clicking on that item within the left-hand menu of the Slack Developer Console.
  • Click on the Redirect URL button, then paste the OAuth URL into its field.
  • Finally, click Add to complete this action.
在这里插入图片描述
Add Event Request URL
  • 从Dialogflow的Slack设置页面获取Event Request URL。
  • 访问Slack Developer Console,在左侧菜单中找到并点击Event Subscriptions。
  • 在启用Events之前,请点击开关并将其粘贴到Request URL字段。

After a brief period, you will notice a green 'Verified' indicator appears above the Request URL field.

在这里插入图片描述
Enable Event Subscriptions

Event subscription plays a vital role in the functionality of the chatbot. This information indicates what types of events our bot is designed to monitor and trigger upon. These events include examples such as someone joining a channel or receiving a new personal message.

  • 在左侧菜单中点击并选择【事件订阅
在这里插入图片描述

After recording all events, click on the central save interface to generate permanent updates to your schedule.

Add Your Slack Bot to a Team

  • When using the Slack Developer Console, navigate to and select Manage Distribution from the sidebar.
  • Within the Share Your App with Your Team section, choose or click on the Add to Slack button.
在这里插入图片描述
  • On the next page, click the Authorize button to add the agent.
在这里插入图片描述

Upon completing this phase, you can return to your designated workspace and initiate communication with the bot.

Conversing with the chatbot

导航至你的工作界面以及私聊机器人,并在对话框中输入@botname账号ID(此为示例),机器人会自动回应您的请求

demo

Did you notice?

That aside from responding to typical pizza-related inquiries, the bot is also skilled in replying to common messages such as 'hi', 'hello', and 'thank you'. This is owing to its ability to perform small talk through a feature named SmallTalk in DialogFlow.

Configuring the Small Talk

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

在这里插入图片描述

当你遇到类似于"嗨,你好"这样的通用评论或如"你是谁?"和"你能做什么?"这样的常见问题时,请用Small Talk来进行回应。同时结合项目特有的详细信息来进行设置。

End Notes

Our chatbot, now refined to its full potential, has reached a significant milestone. As you gain an understanding of how our advanced AI-powered conversation platform operates, we have successfully implemented two distinct types of intelligent agents: one based on traditional rule-based systems and another leveraging machine learning algorithms. Now that you have the necessary background knowledge, you can delve into exploring Slack's rich API features and DialogFlow's powerful NLP capabilities to develop innovative solutions tailored to your specific needs.

这次经验对于我来说非常宝贵。借助DialogFlow的强大功能,在我们从零开始构建自然语言处理和机器学习模型时会遇到诸多挑战。我向你发起了挑战,并致力于开发出一些有趣的聊天机器人应用。

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

全部评论 (0)

还没有任何评论哟~