信使、网络服务和其他软件都离不开机器人(bot)。而在软件开发和应用中,机器人是一种应用程序,旨在自动执行(或根据预设脚本执行)响应用户请求创建的操作。

译者 | 李睿

审校 | 孙淑娟

信使、网络服务和其他软件都离不开机器人(bot)。而在软件开发和应用中,机器人是一种应用程序,旨在自动执行(或根据预设脚本执行)响应用户请求创建的操作。在本文中, NIX United公司的.NET开发人员Daniil Mikhov介绍了使用微软Azure Bot Services创建聊天机器人的一个例子。本文将对想要使用该服务开发聊天机器人的开发人员有所帮助。

为什么使用Azure Bot Services?

在Azure Bot Services上开发聊天机器人的优势在于微软公司对其产品的高度支持。该公司的专家积极与技术社区沟通,并迅速识别和修复服务中的漏洞。此外,微软公司提供了创建自定义JSON文件的能力,以配合一些信使的API,让开发人员在创建聊天机器人时有很多可能性。

记住Azure Bot Services的其他优点也很重要:

  • Azure Bot Services允许开发人员使用开源SDK工具(软件开发工具包)来创建、测试和部署聊天机器人。 

  • 与认知服务的集成是指在工作中使用机器学习工具来解决典型任务的服务。认知服务确保了聊天机器人和用户之间更好的交互过程。 

  • 多平台是指将聊天机器人连接到多个通道而无需更改原始代码的能力。 

  • 大量的开源示例以促进开发过程和快速启动(GitHub上有很多现成的代码示例)。 

开发人员可以通过添加新功能来扩展Azure平台上的聊天机器人基础设施。例如,可以添加更多通道并使用每个通道进行测试。可以使用Cosmos DB服务来存储对话状态和用户输入的信息。要训练聊天机器人,可以添加语言理解 (LUIS)。它使用机器学习算法来更好地与用户交流。然而,LUIS并不是免费的,并且不是每个客户都想分配额外的资金。 

Azure Bot Services中的聊天机器人剖析

在Azure上创建的聊天机器人的功能结构可以表示为: 

可以在右侧看到连接到聊天机器人的可能通道列表。这个列表会随着新的平台不断更新。其底部是Azure平台可以使用的Microsoft认知服务。这些服务允许通过语音请求、面部表情、手势等与聊天机器人交流。 

Bot Builder SDK用于在Azure上开发聊天机器人。该产品处于公共领域,其主要优势是开发人员的持续支持。在GitHub上的一个单独的分支中,可以获得关于该服务的最新信息,或者向其开发人员提问。 

创建聊天机器人

在编写代码之前,分析一下在Azure Bot Service上创建聊天机器人之前应该考虑的细微差别: 

  • 破坏功能的更新。微软公司正在不断更新其产品。新的更新经常会破坏以前可以工作的部分代码。所以一定要了解新的Bot Builder SDK版本的补丁列表,而用来开发聊天机器人的其他手册可能会变得无关紧要。 

  • 不明显的解决方案。在使用Bot Builder SDK时,应该始终对实验持开放态度,并愿意以不同于以往的方式进行操作。

  • 多功能性。同一个聊天机器人可以上传到不同的频道(Telegram、Skype、Slack等等),而不需要更改源代码。在开发聊天机器人时应该记住,每个平台都有细微差别,这需要开发人员在创建应用程序的工作逻辑时采用不同的方法。 

(1)聊天机器人能正确理解人们的问题吗? 

与聊天机器人的交流是通过用户界面进行的。用户界面允许开发人员采用聊天机器人能理解的语言与它交流。为此,微软Azure使用了一个对话框系统,它遵循特定的层次结构: 

在这里可以看到与聊天机器人建立对话的三种基本方法:

  • 提示——聊天机器人通过提示和回答与用户交互。例如,以数字提示的形式给出聊天机器人信息。Prompt检查用户是否正确地回答了提示。如果成功,与聊天机器人的对话将继续进行。如果从用户那里收到不正确的回答,他将被提示输入有效的数据。 

  • 瀑布——瀑布是一种通过一系列连续任务/问题从用户那里收集信息的方法。瀑布对话框的每个步骤都是作为异步函数实现的。在每个阶段,聊天机器人要求用户输入数据,等待响应,然后将结果传递到下一步。第一个函数的结果作为参数传递给下一个函数,以此类推,直到传递完整个问题循环。 

  • 组件——组件是将一个庞大的对话框分解成更小的、易于管理的部分的一种方法。组件允许开发人员创建一个可重用的对话框,并在以后的各种独立场景中使用它。例如,可以使用它来创建一个对话框,该对话框将依次向用户询问街道名称/地址/邮政编码。 

在最下面的一行,可以看到为聊天机器人创建自定义请求的允许方法:

  • 文本查询(文本) 

  • 号码查询(数量) 

  • 日期/时间请求(日期时间) 

  • 确认请求(确认) 

  • 选择请求(选择) 

  • 附件要求(附件) 

在本质上,查询是分阶段的对话框:在第一个阶段,聊天机器人请求输入数据在第二个阶段,它向用户返回有效值,或者在收到无效值时重新启动数据查询循环。

(2)控制器和模板 

以下看看Daniil Mikhov创建的“稍后提醒我”聊天聊天机器人示例中的代码,它的主要任务是提醒他将来需要采取的任何行动。 

为了创建聊天机器人,Mikhov使用了Visual Studio提供的Empty Template,它包括几种类型的控制器:BotController和NotifyController。 

BotController为聊天机器人接收消息并将它们传递给聊天机器人框架。聊天机器人还包含几个部署模板,用于更轻松地将应用程序部署到Azure平台。 

Notify Controller确定何时向用户发送消息。将在后面更详细地讨论这个问题。 

(3)启动功能和填充ToDoDialog选项卡 

转到Startup.cs选项卡,查看它的内容。在这里可以看到注册的错误处理程序AdapterWithErrorHandler。如果错误发生在程序中,应用程序对错误的反应是必要的。注意注册ConversationState——使用它来让聊天机器人了解正在与哪个用户交流,以及在对话的哪个阶段。 

以下看看ToDoDialog.cs选项卡的内容。Mikhov声明了waterfallSteps,这是瀑布对话框的一组步骤,已经在上面提到过了。在waterfallSteps中,指定在每个步骤中使用哪些异步函数来构建用户和聊天机器人之间的对话。 

以下可以看到聊天机器人将使用什么类型的输入提示。这里的内容是相当标准的:聊天机器人会问人们一些关于事件的问题,然后提供安排提醒。

现在运行聊天机器人,并使用Bot Framework Emulator界面测试它的操作。 

(4)在聊天机器人框架模拟器中首次启动和测试 

当运行这个应用程序时,会出现一个链接到聊天机器人将等待用户消息的URL。 

在开始测试之前,在聊天机器人框架模拟器中指定这个链接:

在第一个通信步骤中,聊天机器人要求用户输入需要提醒的事件名称。为此,调用以下代码 

现在,当调用聊天机器人时,它将返回以下文本:请输入事件描述。在声明想要进行提醒的事件(例如买牛奶)后,调用第二步的代码,在这里,聊天机器人将提供三个提醒时间选项中的一个:

注意stepContext的使用。它保存关于对话框的所有信息,记录中间值。为了实现可能的提醒时间列表,使用了ChoicePrompt。这个方法将为用户提供三个选项和一个可能的提醒时间(2分钟,5分钟,或第二天的同一时间)。本来可以有更多的选择,但只选了三个。

采用选择来表示每个新的选择时间,可以得到:

在聊天机器人框架模拟器中,这段代码将像这样呈现:

可以使用Parse对结果进行解析。在此提醒的是,解析是一个自动收集数据并对其进行结构化的过程。然后聊天机器人会询问用户是否确定所选的提醒时间,使用ConfirmPrompt来确认协议:

从视觉上看,这个方法如下所示:

最后一步是从stepContext中取出之前填写的信息,并生成一个SavedNotificationModel,必须向其添加一个conversationReference。如果没有它,聊天机器人将无法恢复与用户的对话,也无法确定是哪个用户专门解决了这个问题。

Mikhov使用字典方法作为这些事件的临时存储库,多亏采用它,聊天机器人将其唯一的instanceId分配给每个特定的对话框: 

这将结束与聊天机器人的对话。可以向用户显示文本,指示对话框的结束并创建相应的提醒请求:“谢谢。通知已成功保存”。 

(5)聊天机器人如何穿越时间

为了及时定位聊天机器人,Mikhov创建了notiffiedcontroller方法NotifyTimeCheck()。这种方法允许系统地轮询应用程序,如果某个事件即将发生,聊天机器人将从字典中检索该事件并向用户发送通知。

为了获得通知,将调用BotAdapter的ContinueConversationAsync()方法,并将ConversationReference传递给它。ContinueConversationAsync()的第一个参数必须始终是聊天机器人服务的appId(应用ID),否则,它将无法工作。 

此外,还需要提醒聊天机器人,当某个时间到达时,必须将事件提醒给特定的用户。开发人员可以使用Azure Function(BotTimerFunction),它将由一个时间触发器(TimerTrigger)触发。 

每隔一分钟,函数将向这个端点发送一个请求,并开始检查指定的事件。如果它到达了正确的时间框架,聊天机器人将通知用户预定的事件即将发生。

如今,WhatsApp、Facebook Messenger、Telegram和其他通信工具不仅是交流平台,也是业务平台。聊天机器人帮助企业有效地在线销售和推广商品和服务。实现日常流程的自动化,及时向客户提供必要的产品信息,接收和处理请求——所有这些适当配置的聊天机器人的功能将有助于将用户转化为客户。因此,作为开发人员,应该记住这个工具现在是多么流行,能够创建这样的应用程序并因此成为受欢迎的专家是多么酷的事。

原文标题:How to Create a Chatbot Using Azure Bot Service: Step-by-Step Instruction作者:Daniil Mikhov