如何使用 Azure 机器人服务创建聊天机器人

为什么选择 Azure 机器人服务?

在 Azure 机器人服务上开发机器人的优势在于微软对其产品的高水平支持。公司专家积极与社区沟通,及时发现并修复服务中的漏洞。此外,Microsoft 提供了创建自定义 JSON 文件以使用某些 Messenger 的 API 的能力,从而在创建机器人时可以提供多种可能性。

记住其他优点也很重要:

  • Azure 机器人服务允许你使用开源 SDK 工具(软件开发工具包)来创建、测试和部署机器人。
  • 与认知服务集成是在工作中使用机器学习工具来解决典型任务的服务。CS 确保机器人和用户之间有更好的交互过程。
  • 多平台是无需更改原始代码即可将机器人连接到多个渠道的能力。
  • 大量开源示例,方便开发过程和快速上手(GitHub上大量现成代码示例)。

可以通过添加新功能来扩展在 Azure 上的机器人基础结构。例如,添加更多通道并使用每个通道进行测试。可以使用Cosmos DB服务来存储对话状态和用户输入的信息。要训​​练机器人,添加LUIS(语言理解)。这使用机器学习算法来更好地与用户沟通。但是,LUIS 不是免费的,并不是每一位客户都希望分配额外的资金。

Azure 机器人服务中的机器人剖析

在 Azure 上创建的机器人的功能结构可以表示如下:

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

Bot Builder SDK用于在 Azure 上开发机器人。该产品属于公共领域,其主要优势是开发人员的不断支持。在Github的单独分支中,始终可以获取有关该服务的最新信息或向其开发人员提问。

继续创建机器人

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

  • 破坏功能的更新。微软不断更新其产品。新的更新经常会破坏以前可以工作的部分代码。因此,请务必阅读新的 Bot Builder SDK 版本的补丁列表。将用于开发机器人的其他人的手册可能变得无关紧要。
  • 不明显的解决方案。使用 Bot Builder SDK 时,应该始终对实验持开放态度,并愿意做与以往不同的事情。
  • 多功能性。同一个机器人可以上传到不同的渠道(Telegram、Skype、Slack 等),而无需更改其源代码。但是,在开发机器人时,应该记住,这些平台中的每一个都有细微差别,作为开发人员,在创建应用程序的工作逻辑时需要采用不同的方法。

机器人是否正确理解我们?

与机器人的通信是通过用户界面进行的。用户界面允许我们以它理解的语言与机器人进行通信。为此,Azure 使用遵循特定层次结构的对话框系统:

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

  1. 提示——机器人通过提示和答案与用户交互。例如,我们将机器人信息作为数字提示提供。提示检查用户是否正确回答了提示。如果成功,与机器人的对话将继续。如果从用户那里收到不正确的答案,则会提示他输入有效数据。
  2. 瀑布是一种通过一系列顺序任务/问题从用户那里收集信息的方式。瀑布对话框的每一步都是作为异步函数实现的。在每个阶段,机器人都会向用户询问输入数据,等待响应,然后将结果传递到下一步。第一个函数的结果作为参数传递给后面的函数,依此类推,直到整个问题循环都通过。
  3. 组件是一种方法,它使用将大而大量的对话框分解成更小、易于管理的部分。组件允许我们创建一个可重用的对话框,并在以后将其用于各种独立场景。例如,我们可以使用它创建一个对话框,依次询问用户街道名称/地址/邮政编码。

在底行,我们可以看到创建对机器人的自定义请求的允许方式:

  • 文字查询(文字)
  • 号码查询 (号码)
  • 日期/时间请求(DateTime)
  • 确认请求(确认)
  • 选择请求 (选择)
  • 附件请求(附件)

本质上,查询是分阶段的对话:在第一阶段,机器人要求输入数据,在第二阶段,它向用户返回有效值,或者如果收到无效值则重新开始数据查询周期。

控制器和模板

让我们看一下我创建的“稍后提醒我”聊天机器人示例中的代码——它的主要任务是提醒我未来需要采取的任何行动。

为了创建机器人,我使用了Visual Studio 提供的Empty Template,其中包括几种类型的控制器:BotControllerNotifyController。 

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

NotifyController 确定何时向用户发送消息。稍后我将更详细地讨论这个问题。

启动功能和填充 ToDoDialog 选项卡

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

让我们看一下ToDoDialog.cs选项卡的内容。我已经声明了瀑布步骤,瀑布对话框的一组步骤,我们已经在上面提到过。在瀑布步骤中,我们指定在每个步骤中将使用哪些异步函数在用户和机器人之间建立对话。

我们可以在下面看到我们的机器人将使用哪些类型的输入提示。这里的内容非常标准:机器人会问我们一些关于活动的问题,然后提供安排提醒。

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

在 Bot Framework 模拟器中首次启动和测试

当我们运行应用程序时,会出现一个指向机器人等待用户消息的 URL 的链接。在我们开始测试之前,让我们在 Bot Framework Emulator 中指定这个链接:在第一个通信步骤中,机器人要求用户输入我们想要提醒的事件名称。为此,请调用以下代码:现在,当我们调用机器人时,它将返回以下文本:请输入事件描述。在声明要提醒的事件后(例如:买牛奶),调用第二步的代码——机器人将提供选择提醒时间的三个选项之一:

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

我们用Choice表示每个新的选择时间,并获得:

在 Bot Framework Emulator 中,此代码将呈现如下:

可以使用Parse 解析结果。让我提醒您,解析是自动收集数据然后对其进行结构化的过程。然后,机器人将询问用户是否确定所选的提醒时间,使用ConfirmPrompt确认协议:

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

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

我使用字典方法作为这些事件的临时存储库,因此机器人将其唯一的 instanceId分配给每个特定的对话框:

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

机器人如何穿越时间

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

为了获得通知,我将调用BotAdapter 的ContinueConversationAsync () 方法并将ConversationReference传递给它。ContinueConversationAsync ()的第一个参数必须始终是我们bot服务的appId(Application ID),否则不起作用。

此外,需要提醒机器人,当某个时间到达时,必须将事件提醒给特定用户。您可以使用 Azure 函数 ( BotTimerFunction ),该函数将由时间触发器 ( TimerTrigger ) 触发。 ​​​​​​​

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

千源万码

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值