RocketBot是与VK,Telegram和Bitrix24集成的可编程聊天机器人。 今天,我们将讨论基础架构和基于其构建的其他技术。
/照片Darryl Braaten CC BY-SA工具包
在开发RocketBot时,我们专注于开发和原型开发的速度。 因此,系统是用Python编写的,并且选择了MySQL作为数据库。
迄今为止,Python在TIOBE的人气排名中
排名第三 。 这意味着该语言拥有大量的社区和无数的参考文献:书籍,站点,课程和源代码。 例如,在GitHub上,您可以找到
用于Python开发的最佳实践的集合 ,并且在StackOverflow上
有大量的线程是开放的 。 O'Reilly出版社为这种语言投入了大量书籍;人们可以通过“
用Python搭便车 ”和“
用Python进行机器学习 ”来区分它。
除了大量资源外,Python的主要优点之一是库和功能性ML框架的多样性。 例如
PyTorch和
SciKit-learn-这些功能强大的工具可简化自然语音,对话框和脚本的处理。
特别是在训练模型的开发中,我们使用了PyTorch,因为它具有广泛的原型制作能力。 另外,我们实现了scikit-learn,它执行数据预处理,以及pymorth2和gensim(分别用于形态学和文本矢量化)。 我们还体验了DeepPavlov-我们评估其功能。
至于数据库,我们之所以选择它是因为它并不复杂。 MySQL仍然是功能强大的服务器数据库中最受欢迎的服务器。 因此,您可以在Internet上找到很多有关它的信息(例如,
开发人员提供了详细的
手册 ),并且广泛的社区总是会告诉您解决问题的方法(如果有)。 另外,尽管MySQL不遵循所有SQL标准,但它提供了广泛的功能。
我们的聊天机器人可以做什么
我们的聊天机器人可让您配置用户问题的自动答案(例如,用于实施FAQ),以及使用脚本自动执行例行操作(例如,民意调查)。
该系统能够处理两种类型的问题:定制问题和标准问题。 在第一种情况下,管理员将独立规定问题的实质和机器人将响应的关键字。 列出所有关键字是可选的。 RocketBot算法将评估短语的含义并根据语义接近度找到答案。
为了评估语义接近度,使用查询的矢量表示。 它标识主要组件(
PCA )并在数据库中搜索最接近距离选项。 在我们的案例中,cosine_similarity(sciki-learn)指标表现最佳。
在第二种情况下,机器人所有者无需配置任何内容。 他只需要从列表中选择一个标准问题,然后该机器人自己就会知道将被问到什么。 现在,我们使用Dialogflow服务突出显示标准主题,但是将其更改为我们自己的实现。 我们对Google服务的依赖性感到不满意,因为它会延迟数据同步。 请注意,用户可以通过创建自己的短语版本并分配适当的操作来随时更改标准模板。
在这两种情况下,聊天机器人都可以使用文本消息或脚本进行响应。 短信只是对情况的标准回应。 至于脚本,它暗示了对话的树形结构。 实际上,这些都是成熟的通信场景,其中聊天机器人根据用户的响应执行编程的动作。 例如,此功能可用于进行调查或收集反馈。
为了编译脚本,使用了三种类型的块:
- 问题块-向用户提出问题,并将答案写在变量中。
- 条件块-实现脚本的分支。
- 变量检查块-根据脚本控制用户的路线。
机器人所有者在脚本编辑器中独立填充所有块。 到目前为止,该编辑器还没有可视化工具(但它们会在不久的将来出现)。 根据我们的经验,聊天机器人应用程序中视觉设计师的存在无助于为其工作创建方案。 大多数用户不会事先考虑算法,因此没有任何内容可以转移到编辑器。
退出脚本并回答“您是否年满18岁?”的设置示例。但是,有了这些,我们可以帮助客户根据流程图自定义其脚本,他将在xmind或draw.io之类的图形编辑器中绘制该脚本。 我们将独立验证算法并执行初始设置-通常需要几个小时。
除了回答问题和实施脚本外,该机器人还可以与自然语言处理系统一起使用。 但是,尽管他们执行的任务范围非常狭窄:他们在知识库中寻找问题的答案并确定用户的意图(为此使用了相同的Dialogflow)。
由于存在难以预测的行为的潜在困难,我们限制了智能解决方案的任务范围。 现代AI系统仍然容易出错,并且在创建业务服务时,机器人无法以一种方式响应80%的问题,而以另一种方式响应其他20%的问题。
迄今为止,为了实现自然语音处理系统,使用了非常简单的搜索算法。 随着时间的流逝,我们希望基于LSTM网络实施一个使用强化学习的新版本。 新的实现很可能将基于已经提到的DeepPavlov框架。
我们的机器人的另一个功能是与CRM系统集成。 运行脚本后,RocketBot可以在CRM(Bitrix24)中自动创建线索和任务。 机器人会转发用户编写的所有内容,以及来自Messenger或社交网络的有关他的信息。 一切都按照标准协议并通过CRM系统的主要API以HTTP请求和JSON数据的形式工作。
在将来的版本中,我们计划向bot添加创建自动程序的功能。 这将使业务使潜在客户熟悉商品并直接在聊天中完成交易。 系统将根据输入的答案和问题将必要的实体独立地添加到CRM中,包括线索,交易,任务。
/ 斯宾塞·库珀 CC BY-ND聊天机器人所基于的基础架构
我们所有的服务都
在IT-GRAD云中运行 -前端服务器,数据库和应用程序服务器都托管在其中。 总体而言,云基础架构可帮助我们快速扩展服务,以应对不断增长的负载和突然的流量激增。 因此,将来我们仅计划扩大在云中的存在。
该机器人本身是一组五个微服务,它们通过HTTP – JSON相互交互(服务之间的所有内部通信均在安全段中进行)。 尽管这会导致一到两秒钟内无法回答问题,但该体系结构具有很大的扩展潜力,并允许我们修改单个块而不影响其他块。 例如,更新FAQ中的搜索微服务不会影响与CRM的微服务集成。
为了测试和创建机器学习模型和神经网络,我们使用Nvidia Tesla M40 16GB。 但是即使这样,培训也不是很快。 我们用于自然语言处理任务的数据集为数十GB。 因此,在某些情况下(例如,对数据集进行矢量化处理),我们使用了具有64个CPU的虚拟机。
其他阅读-First Corporate IaaS博客中的帖子:
从我们的电报频道: