Botovodstvo



自2000年代初以来,有关将聊天机器人引入这项工作的消息以令人羡慕的频率出现。 在本文中,我将告诉您从哪里开始,并概述现有解决方案,并分享为Selectel创建机器人的经验。

适用范围


业务发展通常不仅伴随着扩大核心业务,还伴随着调试支持流程。 聊天机器人只是日常自动化中业务活动的一部分。 通信和同类型简单任务的实现是聊天机器人的工作基础。 有了它,您不仅可以执行重复性任务,而且还可以执行人无法执行的任务,例如,监视社交网络上的活动。

我想以我在Selectel的工作示例为机器人的各种应用领域。 小型破坏者:我从技术作家开始工作,现在是云解决方案部门的工程师。 实施虚拟助手的途径始于市场部门的机器人,该机器人在社交网络上跟踪公司的评论和提及。 这样的开发非常简单,但是有效地补充了市场上现有的解决方案,例如IFTTT服务

在我的实践中,以下发展为人力资源部门的内部聊天机器人和与客户进行交流的机器人,在圣彼得堡莫斯科的 SelectelTechDay会议上作为演示台展示。 两种漫游器都是使用不同的服务和技术创建的。 在深入探讨技术细节之前,请考虑设备机器人的顶级方案。

植物学的基本原理




Chatbot活动是围绕3个主要动作构建的:

  1. 信息是通过某些通信渠道接收或显示的,例如在Slack或Vk.com对话框中。
  2. 意图识别是对接收到的信息进行综合分析以形成答案
  3. 动作处理-准备正确答案所必需的在服务器端执行的任何工作。 例如,如果请求天气预报,则将向某个API发出有关城市N的天气的请求,并将此命令的结果发送给用户

聊天机器人的主要动作在维护上下文任务的框架内组合在一起,以创建人形形式的交流和支持对话。 聊天机器人应“记住”对话的主题并相应地调整其答案。

将聊天机器人连接到社交平台的问题单独存在。 即时通讯程序和社交网络的连接器可以独立实现,也可以在用于创建聊天机器人的现有产品框架内得到支持。

目前,有许多解决方案可提供现成的服务,以使技术支持或销售流程自动化。 我将更加关注工具,这些工具使您可以创建满足公司安全性内部要求的服务,而不会使开发过程复杂化。

植物构造


聊天机器人的上述3条原则(渠道,分析,操作)可以以不同的方式实现。 最简单的选择是比较传入的文本并将相应的答案发送给用户。



我们的目标是更高一些-获得一个可以快速添加新脚本并在大多数情况下可以理解用户的系统。

为此,我们需要了解用户在说什么,控制对话的进度,并在某些情况下执行某些操作(例如,预订会议室)。 可以使用以下工具来实现:

  • DialogFlow(Google)
  • Wit.ai(Facebook)
  • Azure Bot服务(Microsoft)
  • Rasa Core(开源)


选择产品时,请考虑以下因素:

  1. 在现有系统中放置机器人的可执行代码有多重要
    例如,对于Wit.ai和Dialogflow,我们不能完全控制整个过程-我们将文本提供给这些应用程序并获得现成的答案。 使用Rasa Core或Azure BotBuilder SDK,我们可以将所有对应关系存储在内部系统的边界内
  2. 您需要连接多少个通讯渠道
    Dialogflow通过指定访问密钥,可以使用有限数量的连接器来连接即时通讯程序和社交网络。 您可以为Wit.ai和Rasa Core使用任意数量的通道,但是连接它们的逻辑必须独立实现(通常这是一项非常琐碎的任务)。 Azure Bot Service可以使用连接器连接某些通道,但不仅限于此,它还可以独立连接到其他源
  3. 更改机器人知识库的难易程度
    当以程序代码的形式创建机器人而不使用可视界面与之交互时,我们限制了可以更改该机器人的对话框和响应的人员圈子。 每个人都应该可以使用添加和编辑短语的功能

对于我们的聊天机器人Tirex的内部虚拟助手,选择了Google Dialogflow提供的平台,该平台提供了可视化编辑意图的功能,并且操作在Selectel私有云中进行 。 决定性因素包括开始使用该漫游器的速度,发送消息时的安全性以及所支持消息列表中是否存在Slack通道。



创建聊天机器人的想法长期以来一直存在于公司中,特别是考虑使用它可以解决什么问题:

  • 公司员工人数增加,与此类似的问题如“如何使用公司资料库”的流量也在增加。 和“在哪里吃午饭?”
  • 定期预定会议室和发行通行证
  • 在公司知识库中搜索信息和文档



在Dialogflow中创建和连接机器人需要几分钟。 首先,我们将考虑系统中聊天机器人的原理,然后添加复杂动作的实现。

在Dialogflow中创建机器人


建筑创作


在本文的进一步内容中,我们将使用以下概念进行操作:

  • 意图是用户想要执行的形式化任务。
  • 参数 -完成任务所需的一组数据
  • 答案 -为响应所识别的意图而执行的功能或程序
  • 训练词组 -聊天机器人从其获得的来自用户的消息示例

Dialogflow处理自然语言并提取所有必要的数据以执行复杂的命令。 为此,将创建包含多个意图的 代理 。 每种意图都可以使您准备一个聊天机器人,以理解提出请求时的细微差别。

目的包括训练短语参数答案 。 在训练短语中,我们突出显示形成正确答案所必需的参数(例如,时间或地点)。

答案intent表示,或者Dialogflow向我们的服务器发送请求,该服务器执行必要的工作并使用我们的聊天机器人示例返回响应

  • 对于简单的问题(例如,“我们在国外有保险计划吗?”, 答案在于意图
  • 对于更复杂的任务,例如“现在有免费的呼叫室吗?” 使用对服务器的附加请求来形成响应 ,该请求确定所有参与者和会议室的空闲时间



有意工作


考虑使用Dialoglow作为协商保留的示例。 我们创建一个预订管理代理,并确定以下意图:

  • 查看现有预订
  • 预定会议室

每个意图都由训练短语来调用。 添加的次数越多,执行所需动作的可能性就越大。 在我们的示例中,“预订会议室”的意图将由以下短语引起:

  • 今天2315分预订 30分钟
  • 你好 请在08/08/201815:0016:00预订会议
  • 书本
  • 我需要一间会议室



意向性数据收集的原则如下:

  1. 根据收到的输入,Dialogflow会了解其意图。 在我们的示例中-预订谈判
  2. 如果在第一条消息中未指定所需的参数(例如,会议时间),则聊天机器人将询问澄清的问题
  3. 收到所有数据后,Dialogflow将向VPC中的服务器发送请求以保留所需的空间

让我们看一下这个过程:



通过将包含所有数据的请求发送到操作服务器的预添加地址(Webhook URL)来处理操作:



website.ru/webhook上有一个服务器,它处理复杂的命令(在我们的示例中,它返回字符串“ Hello from server!”)。 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创建机器人


要使用不带第三方服务的chatbot进行文本识别,可以使用Rasa之类的工具,该工具可让您完全控制Bot的整个过程。 Rasa是一组包含语音识别和对话管理的开源软件组件。 现在,您已经可以浏览Boilerplate了 ,我准备熟悉该平台,如果有Habr社区提出要求,我们将发布更详细的说明。

聊天机器人和业务


是否将自动化服务用于客户服务不是一个容易的问题。 在灵活性,工作速度和安全性之间进行选择时,现代工具可提供许多解决方案。 现在,自然语言的意图识别系统不仅可以以专有形式使用,而且可以自由分发,这为他们自己的实验提供了巨大的机会。 我们考虑了一种选择,可以让您快速实现聊天机器人,以自动执行您的业务相同任务,而无需花费资本支出,并以最低的人工成本进行操作。 如果您已经在工作中使用聊天机器人,请在评论中分享有关您的印象以及客户印象的反馈。

Source: https://habr.com/ru/post/zh-CN436622/


All Articles