category
适用于:SDK v4
机器人是一种用户以对话方式进行交互的应用程序,使用文本、图形(如卡片或图像)或语音。Azure AI机器人服务是一个云平台。它托管机器人,并将其提供给微软团队、脸书或Slack等渠道。
机器人框架服务是Azure AI机器人服务的一个组件,它在用户的机器人连接应用程序和机器人程序之间发送信息。每个通道都可以在它们发送的活动中包含额外信息。在创建机器人程序之前,了解机器人程序如何使用活动对象与用户通信是很重要的。
此图说明了两种活动类型,会话更新和消息,当用户与echo bot通信时可能会交换这两种活动。
当一方加入会话时,Bot框架服务会发送会话更新。例如,在使用Bot Framework Emulator启动对话时,您可能会看到两个对话更新活动(一个用于加入对话的用户,另一个用于机器人加入)。要区分这些会话更新活动,请检查活动的成员添加属性中包含的人员。
消息活动携带双方之间的对话信息。在echo-bot示例中,消息活动携带简单文本,通道将呈现此文本。或者,消息活动可以携带要说的文本、建议的动作或要显示的卡片。
提示
实现Bot框架协议取决于每个通道,每个通道的实现方式可能有点不同。例如,有些频道首先发送会话更新活动,有些频道在发送第一个消息活动后发送会话更新事件。一个通道可能在一个会话更新活动中同时包括机器人程序和用户,而另一个通道则可能发送两个对话更新活动。
在本例中,机器人程序创建并发送了一个消息活动,以响应其收到的入站消息活动。然而,机器人程序可以以其他方式响应接收到的消息活动,并且机器人程序通常通过发送带有欢迎消息的消息活动来响应会话更新活动。有关详细信息,请参阅如何欢迎用户。
Bot框架SDK
Bot Framework SDK允许您构建可以托管在Azure AI Bot服务上的机器人。该服务定义了一个REST API和一个活动协议,用于机器人程序和频道或用户如何交互。SDK构建在这个REST API之上,并提供服务的抽象,以便您可以专注于会话逻辑。虽然您不需要了解REST服务就可以使用SDK,但了解它的一些功能可能会有所帮助。
机器人是具有对话界面的应用程序。它们可以用于将简单、重复的任务(如预订晚餐或收集个人资料信息)转移到可能不再需要直接人工干预的自动化系统上。用户使用文本、交互式卡片和语音与机器人进行对话。机器人互动可以是快速的问答,也可以是智能地提供服务访问的复杂对话。
笔记
对SDK和REST API提供的功能的支持因渠道而异。您可以使用bot Framework Emulator测试您的机器人程序,但也应该在您打算使机器人程序可用的每个通道上测试机器人程序的所有功能。
互动包括活动的交换,这些活动是轮流处理的。
活动(Activities)
用户(或频道)和机器人之间的每一次交互都被表示为一个活动。机器人框架活动模式【Activity schema】定义了用户或频道与机器人之间可以交换的活动。活动可以表示人工文本或语音、应用程序到应用程序的通知、对其他消息的反应等等。
回合(Turns)
在谈话中,人们通常一次只说一句话,轮流说话。对于机器人,它通常会对用户输入做出反应。在Bot Framework SDK中,回合包括用户对机器人的传入活动以及机器人作为即时响应发送回用户的任何活动。您可以将回合视为与机器人接收给定活动相关的处理。
例如,用户可能会要求机器人执行某项任务。机器人可能会回答一个问题,以获取有关任务的更多信息,此时此回合结束。在下一轮中,机器人程序从用户处接收到一条新消息,该消息可能包含机器人程序问题的答案,也可能表示主题的更改或忽略执行任务的初始请求的请求。
Bot应用程序结构
SDK定义了一个机器人程序类,用于处理机器人程序应用程序的对话推理。机器人程序类:
- 识别并解释用户的输入。【Recognizes 】
- 输入的原因并执行相关任务。【Reasons 】
- 生成关于机器人正在做什么或已经做了什么的响应。【Generates responses】
SDK还定义了一个适配器类,用于处理与通道的连接。适配器:
- 提供一种处理来自用户通道的请求的方法和生成对用户通道的要求的方法。
- 包括一个中间件管道,其中包括机器人程序回合处理程序之外的回合处理。
- 调用机器人的回合处理程序并捕获回合处理程序中未处理的错误。
此外,机器人通常需要每次检索和存储状态。状态通过存储、bot状态和属性访问器类进行处理。SDK不提供内置存储,但提供了存储的抽象和存储层的一些实现。管理状态主题描述了这些状态和存储功能。
机器人具有连接和推理元素,以及状态的抽象
SDK不需要使用特定的应用程序层来发送和接收web请求。Bot框架有ASP的模板和示例。NET(C#)、restify(JavaScript)和aiohttp(Python)。但是,您可以选择为应用程序使用不同的应用程序层。
当您使用SDK创建机器人程序时,您将提供接收HTTP流量并将其转发到适配器的代码。Bot框架提供了一些模板和示例,您可以使用这些模板和示例来开发自己的机器人。
笔记
Bot Framework JavaScript、C#和Python SDK将继续受到支持,但Java SDK将退役,最终长期支持将于2023年11月结束。
使用Java SDK构建的现有机器人程序将继续运行。
对于新的聊天机器人构建,请考虑使用Power Virtual Agents,并阅读有关选择正确的聊天机器人解决方案的信息。
有关更多信息,请参阅机器人构建的未来。
Bot逻辑
bot对象包含回合的会话推理或逻辑,并公开回合处理程序,该方法可以接受来自bot适配器的传入活动。
SDK为管理机器人程序逻辑提供了几种不同的范例。
- 活动处理程序提供了一个事件驱动的模型,其中传入的活动类型和子类型就是事件。考虑为与用户进行有限、短暂交互的机器人提供一个活动处理程序。
- 使用活动处理程序【activity handler 】,并为您的机器人程序将识别和响应的每个活动类型或子类型实现处理程序。
- 使用Teams活动处理程序【Teams activity handler】创建可以连接到Teams频道的机器人程序。(Teams频道要求机器人程序处理某些频道特定的行为。)
- 对话框库【dialogs library 】提供了一个基于状态的模型来管理与用户的长时间对话。
- 使用活动处理程序和组件对话框进行基本上按顺序的对话。有关更多信息,请参阅有关组件和瀑布对话框【about component and waterfall dialogs】的信息。
- 实现你自己的机器人类,并提供你自己的逻辑来处理每个回合。例如,请参见如何创建自己的提示来收集用户输入。
机器人程序适配器
适配器有一个用于启动转弯的流程活动方法。
- 它将请求主体(请求有效负载,转换为活动)和请求头作为参数。
- 它检查身份验证标头是否有效。
- 它为转弯创建一个上下文对象。上下文对象包括有关活动的信息。
- 它通过中间件管道发送上下文对象。
- 然后,它将上下文对象发送到机器人程序对象的回合处理程序。
适配器还:
- 格式化并发送响应活动。这些响应通常是针对用户的消息,但也可以包括将由用户的频道直接消费的信息。
- 曲面Bot连接器REST API提供的其他方法,如更新消息和删除消息。
- 捕捉转弯时未捕捉到的错误或异常。
转弯上下文
turn上下文对象提供有关活动的信息,如发送方和接收方、通道以及处理活动所需的其他数据。它还允许在机器人程序的各个层之间的转换过程中添加信息。
turn上下文【turn context 】是SDK中最重要的抽象之一。它不仅将入站活动携带到所有中间件组件和应用程序逻辑,而且还提供了中间件组件和bot逻辑可以发送出站活动的机制。
中间件
中间件与任何其他消息中间件非常相似,它包括一组线性组件,每个组件都按顺序执行,给每个组件一个操作活动的机会。中间件管道的最后阶段是回调应用程序已向适配器的流程活动方法注册的bot类上的turn处理程序。中间件实现了适配器调用的一个on turn方法。
回合处理程序以回合上下文为参数,通常,回合处理程序函数内部运行的应用程序逻辑将处理入站活动的内容,并生成一个或多个活动作为响应,使用回合上下文上的send活动函数发送这些出站活动。在turn上下文上调用send活动将导致在出站活动上调用中间件组件。中间件组件在机器人程序的回合处理程序功能之前和之后执行。执行本质上是嵌套的,因此,有时被称为洋葱。
中间件【middleware】主题更深入地描述了中间件。
Bot状态和存储
与其他网络应用程序一样,机器人程序本质上是无状态的。机器人程序中的状态遵循与现代web应用程序相同的模式,并且机器人程序框架SDK提供了存储层和状态管理抽象,使状态管理更容易。
管理状态主题描述了这些状态和存储功能。
消息传递端点和资源调配
通常,您的应用程序将需要一个REST端点来接收消息。它还需要根据您决定使用的平台为您的机器人提供资源。
按照Create a bot quickstart创建并测试一个简单的echo bot。
HTTP详细信息
活动通过HTTPPOST请求从bot框架服务到达机器人。机器人程序使用200 HTTP状态代码响应入站POST请求。从机器人程序发送到通道的活动通过单独的HTTPPOST发送到机器人程序框架服务。这反过来又通过一个200 HTTP状态代码得到确认。
该协议没有指定这些POST请求及其确认的顺序。然而,为了适应常见的HTTP服务框架,这些请求通常是嵌套的,这意味着出站HTTP请求是从入站HTTP请求范围内的bot发出的。这种模式如上图所示。由于背靠背有两个不同的HTTP连接,因此安全模型必须同时提供这两个连接。
笔记
在大多数频道上,机器人有15秒的时间确认呼叫,状态为200。如果机器人在15秒内没有响应,则会发生HTTP网关超时错误(504)。
活动处理堆栈
让我们深入到前面的序列图,重点关注消息活动的到达。
说明机器人程序如何处理活动的序列图。
该通道将用户的消息发送到Azure AI机器人服务,该服务将消息转发到机器人的消息传递端点。机器人程序的响应将发送给回合范围内的用户。
在上面的示例中,机器人程序使用包含相同文本消息的另一个消息活动来回复消息活动。处理从HTTPPOST请求开始,活动信息作为JSON有效载荷携带,到达web服务器。通常,ASP。NET项目用于C#机器人,而流行的框架(如Express或restify)用于JavaScript Node.js机器人。
适配器是SDK的集成组件,是SDK运行时的核心。该活动在HTTPPOST主体中以JSON的形式携带。这个JSON被反序列化以创建活动对象,然后通过其流程活动方法将该对象交给适配器。在接收到活动时,适配器创建一个turn上下文并调用中间件。
如上所述,turn上下文为机器人程序提供了发送出站活动的机制,通常是为了响应入站活动。turn上下文提供发送、更新和删除活动响应方法。每个响应方法都在一个异步进程中运行。
重要的
处理主bot回合的线程处理上下文对象的处理。请确保等待任何活动调用,以便主线程在完成对生成的活动的处理和处理turn上下文之前等待生成的活动。否则,如果响应(包括其处理程序)花费大量时间并试图对上下文对象进行操作,则可能会出现上下文已处理错误。
Bot模板
您需要为您的应用程序选择应用层使用;然而,Bot框架有ASP的模板和示例。NET(C#)、restify(JavaScript)和aiohttp(Python)。该文档是在假设您使用其中一个平台的情况下编写的,但SDK并不需要您这样做。有关如何访问和安装模板的说明,请参阅创建机器人程序快速启动。
机器人程序是一个web应用程序,为SDK的每个语言版本提供模板。所有模板都提供了一个默认的端点实现和适配器。每个模板包括:
- 资源供应
- 一种特定于语言的HTTP端点实现,它将传入的活动路由到适配器。
- 适配器对象
- 机器人程序对象
不同模板类型之间的主要区别在于机器人程序对象。模板包括:
- 空机器人
- 包括一个活动处理程序,通过在对话的第一圈发送“你好世界”消息来欢迎用户加入对话。
- 回声机器人
- 使用活动处理程序来欢迎用户并回显用户输入。
- 核心机器人
- 汇集了SDK的许多功能,并展示了机器人程序的最佳实践。
- 使用活动处理程序来欢迎用户。
- 使用组件对话框和子对话框来管理对话。
- 对话框使用语言理解(LUIS)和QnA Maker功能。
笔记
Azure AI QnA Maker将于2025年3月31日退役。从2022年10月1日开始,您将无法创建新的QnA Maker资源或知识库。作为Azure人工智能语言的一部分,现在可以使用更新版本的问答功能。
自定义问答是Azure AI语言的一项功能,是QnA Maker服务的更新版本。有关Bot Framework SDK中问答支持的更多信息,请参阅自然语言理解。
笔记
语言理解(LUIS)将于2025年10月1日退役。从2023年4月1日开始,您将无法创建新的LUIS资源。作为Azure人工智能语言的一部分,现在提供了一个新版本的语言理解【Natural language understanding.】。
会话语言理解(CLU)是Azure人工智能语言的一个功能,是LUIS的更新版本。有关Bot Framework SDK中语言理解支持的更多信息,请参阅自然语言理解。
其他信息
管理机器人程序资源
您需要管理机器人的资源,如其应用程序ID和密码,以及任何连接服务的信息。当你部署你的机器人时,它需要安全地访问这些信息。为了避免复杂性,大多数Bot Framework SDK文章都没有描述如何管理这些信息。
有关一般安全信息,请参阅Bot Framework安全指南。
若要在Azure中管理密钥和机密,请参阅关于Azure密钥库。
通道适配器
SDK还允许您使用通道适配器,其中适配器本身还执行Bot连接器服务通常为通道执行的任务。
SDK提供了一些语言的通道适配器。更多的通道适配器可通过Botkit和Community存储库获得。有关更多信息,请参阅Bot Framework SDK存储库的通道和适配器表。
Bot连接器REST API
Bot框架SDK包装并构建在Bot连接器REST API之上。如果您想了解支持SDK的底层HTTP请求,请参阅连接器身份验证和相关文章。机器人程序发送和接收的活动符合机器人程序框架活动模式。
接下来的步骤
- To understand the role of state in bots, see managing state.
- To understand key concepts of developing bots for Microsoft Teams, see How Microsoft Teams bots work
- 登录 发表评论
- 7 次浏览
Tags
最新内容
- 1 day 13 hours ago
- 1 day 16 hours ago
- 1 day 16 hours ago
- 4 days 8 hours ago
- 4 days 15 hours ago
- 4 days 16 hours ago
- 4 days 16 hours ago
- 4 days 16 hours ago
- 1 week 2 days ago
- 1 week 2 days ago