掌桥专利:专业的专利平台
掌桥专利
首页

基于栈的通信系统和方法

文献发布时间:2023-06-19 12:11:54


基于栈的通信系统和方法

相关申请

本申请要求享有于2019年2月15日提交的题为“Systems and Methods forStack-Based Data Communications”的序列号为62/806,328美国临时申请和于2019年5月9日提交的题为“Stack-Based Communications Systems and Method”的序列号为16/407,571的美国非临时申请的优先权。这些申请中的每一个申请在此通过引用以其整体并入本文。

背景技术

虚拟助理(例如,Google Assistant和Amazon Alexa)是与用户交互以代表用户执行任务或服务的软件代理。在完成这种任务或服务时,虚拟助理对人类语音或文本命令进行解释和响应以回答问题、控制设备、播放媒体以及管理其他设备以执行基本任务。为此,使用基于事务模型的框架对虚拟助理进行编程。该模型允许虚拟助理接收用户输入并生成输出,以促进虚拟助理与用户之间的信息交换,从而完成期望的任务或服务。

发明内容

在至少一个示例中,提供了一种计算机系统。该计算机系统被配置为支持用户与虚拟助理之间的对话。该计算机系统包括:存储器;以及耦合到存储器的至少一个处理器。该至少一个处理器被配置为:从虚拟助理接收履行请求,该履行请求指定这样的意图:请求信息和/或执行来自虚拟助理的动作;将项目推送到被存储在存储器中的对话栈上,该项目包括意图的标识符;执行与意图相关联的动作处理程序以生成用于操纵对话栈的一个或多个指令;根据一个或多个指令来操纵对话栈;以及将对话栈存储在存储器中,以用于对话内的后续处理。

计算机系统的至少一些示例可以包括以下特征中的一个或多个。在计算机系统中,意图可以是第一意图,项目可以是第一项目,并且操纵对话栈可以包括将第二项目推送到对话栈上,该第二项目包括第二意图的标识符。至少一个处理器还可以被配置为:取回(peek)对话栈中的第二项目以生成对用户关于第二意图的响应;以及向虚拟助理发送履行响应,该履行响应包括对用户的响应。

在计算机系统中,动作处理程序可以是第一动作处理程序,并且取回可以包括执行与第二项目相关联的第二动作处理程序。在计算机系统中,履行请求可以包括对话栈的完整表示。履行请求可以包括会话标识符。至少一个处理器还可以被配置为在存储器中存储对话栈与会话标识符之间的关联。

在计算机系统中,其中,意图可以是第一意图,履行请求可以是第一履行请求,并且至少一个处理器还被配置为:接收包括第二意图的第二履行请求;以第二意图调用动作处理程序,以确定该动作处理程序是否可以处理第二意图;以及处理来自动作处理程序的响应消息。该响应消息可以指定对用户的响应和用于操纵对话栈的至少一个指令。至少一个处理器还可以被配置为:将对用户的响应附加到对用户的另一响应;以及根据至少一个指令来操纵对话栈。响应消息可以不指定额外动作,并且至少一个处理器还可以被配置为不采取关于响应消息的额外动作。

在计算机系统中,项目可以是第一项目,并且至少一个处理器还可以被配置为:调用动作处理程序以指示在将第二项目推送到对话栈上之前,该第二项目将被放置在项目的顶部。在计算机系统中,执行动作处理程序可以包括生成对用户的响应,并且至少一个处理器还可以被配置为向虚拟助理发送履行响应,该履行响应包括对用户的响应。在计算机系统中,执行动作处理程序可以包括执行由用户请求的程序化动作。

在至少一个示例中,提供了一种支持虚拟助理与用户之间的对话的方法。该方法包括以下动作:从虚拟助理接收指定意图的履行请求;将项目推送到被存储在存储器中的对话栈上,该项目包括意图的标识符;执行与意图相关联的动作处理程序,以生成包括对用户的响应的响应消息和用于操纵对话栈的一个或多个指令;根据一个或多个指令来操纵对话栈;将对话栈存储在存储器中,以用于对话内的后续处理;以及将履行响应发送到虚拟助理以继续对话,该履行响应包括对用户的响应。

方法的至少一些示例可以包括以下特征中的一个或多个。在方法中,意图可以是第一意图,项目可以是第一项目,并且操纵对话栈可以包括将第二项目推送到对话栈上的动作,该第二项目包括第二意图的标识符。方法还可以包括以下动作:取回对话栈中的第二项目以生成对用户关于第二意图的额外响应;以及将对用户的额外响应附加到对用户的响应。

在方法中,动作处理程序可以是第一动作处理程序,并且取回的动作可以包括执行与第二项目相关联的第二动作处理程序的动作。在方法中,意图可以是第一意图,履行请求可以是第一履行请求,并且方法还可以包括以下动作:接收包括第二意图的第二履行请求;以第二意图调用动作处理程序,以确定该动作处理程序是否可以处理第二意图;以及处理来自动作处理程序的另一响应消息。在方法中,项目可以是第一项目,并且方法还可以包括以下动作:调用动作处理程序以指示在将第二项目推送到对话栈上之前,该第二项目将被放置在第一项目的顶部。

在至少一个示例中,提供了一种非暂时性计算机可读介质。该计算机可读介质存储可执行的指令序列,以实现支持用户与虚拟助理之间的对话的对话栈。指令序列包括用于进行以下操作的指令:从虚拟助理接收指定意图的履行请求;将项目推送被到存储在存储器中的对话栈上,该项目包括意图的标识符;执行与意图相关联的动作处理程序以生成用于操纵对话栈的一个或多个指令;根据一个或多个指令来操纵对话栈;将对话栈存储在存储器中,以用于对话内的后续处理;以及将履行响应发送到虚拟助理。

计算机可读介质的至少一些示例可以包括以下特征中的一个或多个。在计算机可读介质中,意图可以是第一意图,项目可以是第一项目,并且用于操纵对话栈的指令可以包括用于将第二项目推送到对话栈上的指令,该第二项目包括第二意图的标识符。指令序列还可以包括用于进行以下操作的指令:取回对话栈中的第二项目以生成对用户关于第二意图的响应;以及将对用户的响应存储在履行响应中。在计算机可读介质中,动作处理程序可以是第一动作处理程序,并且用于取回的指令可以包括用于执行与第二项目相关联的第二动作处理程序的指令。

在至少一个示例中,提供了一种系统。该系统包括至少一个虚拟助理设备以及经由网络与该至少一个虚拟助理设备进行通信的计算设备。该计算设备包括处理器和可由处理器访问的存储器。该处理器被配置为进行以下操作:接收关于用户针对在至少一个虚拟助理设备处接收到的通信的意图的信息,该意图是可基于至少一个虚拟助理设备的一组技能识别的;在存储器的数据结构中提供至少一个数据项目,该至少一个数据项目表示用户与至少一个虚拟助理设备之间的给定对话的多个上下文中的一个上下文,并且数据结构被构造和布置为数据项目的栈;基于接收到的信息来修改数据结构,对数据结构的修改包括基于用户的意图来改变数据项目的栈中的项目的数量或位置中的至少一个;以及使用修改后的数据结构提供对用户的响应,该响应是基于数据结构中的一个项目而针对对话的多个上下文中的一个上下文的,以防止以不正确的上下文传输响应。

下面详细讨论其他方面、示例和这些方面和示例的优点。此外,应当理解,前述信息和下面的详细描述仅仅是各个方面和特征的说明性示例,并且旨在提供用于理解要求保护的方面和示例的性质和特性的概述或框架。本文公开的任何示例或特征可以与任何其他示例或特征组合。对不同示例的引用不一定是相互排斥的,并且旨在指示结合示例描述的特定特征、结构或特性可以被包括在至少一个示例中。因此,当提及本文所描述的示例时,诸如“其他”和“另一”之类的术语并不旨在传达任何种类的排他性或特征分组,而是被包括以提高可读性。

附图说明

下面参考附图讨论至少一个示例的各个方面,附图不旨在按比例绘制。附图被包括以提供对各个方面的说明和进一步理解,并且附图被并入并构成本说明书的一部分,但不旨在作为任何特定示例的限制的定义。附图与说明书的其余部分一起用于解释所描述和要求保护的方面的原理和操作。在图中,各个图中示出的每个相同或几乎相同的组件由相同的附图标记表示。为清楚起见,并非每个组件都在每幅图中标出。

图1是描绘根据本文描述的一个或多个示例的计算机系统的架构的框图。

图2是描绘根据本文描述的一个或多个示例的远程访问系统的架构的框图。

图3是示出根据本文描述的一个或多个示例的计算设备的框图。

图4是示出根据本文描述的一个或多个示例的并入对话栈架构的计算系统的示例的框图。

图5是示出根据本文描述的一个或多个示例的对话栈架构的一个示例的框图。

图6A、图6B和图6C是根据本文描述的一个或多个示例的用于向由包括对话栈架构的分布式计算机系统实现的虚拟助理的用户提供响应的方法的流程图。

图7是根据本文描述的一个或多个示例的用于向由包括对话栈架构的分布式计算机系统实现的虚拟助理的用户提供响应的另一种方法的流程图。

图8是示出根据本文描述的一个或多个示例的被配置用于在分布式计算平台内的操作的对话栈架构的示例的框图。

具体实施方式

如上面所总结的,本文描述的各种示例针对实现基于栈的对话引擎以使得基于话音或文本的虚拟助理能够以可扩展的方式创建交互式对话体验的系统和方法。这些系统和方法克服了其他虚拟助理技术中存在的实际限制。可以与本文所描述的系统和方法互操作的虚拟助理包括:可从华盛顿州西雅图市的Amazon.com公司获得的Alexa虚拟助理、可从加利福尼亚州山景城市的Google公司获得的Google Assistant虚拟助理和从加利福尼亚州旧金山市的Slack Technologies公司获得的

例如,一些框架和它们提供的软件开发工具包基于事务模型,其中用户提出问题并获得响应或进而请求虚拟助理执行的动作(例如,经由与外部系统的互操作)。将这些事务框架用于自然流动、复杂的和分层的人类对话在技术上是困难的,因为要求开发人员管理针对人机交互设计的系统内的彼此分离的对话的状态(例如,对话内的当前位置)和上下文。在这种环境内开发的代码可能是脆弱的、不灵活的且难以扩展的。

更具体地,为了自然地与用户进行通信,虚拟助理有时被编程为参与跨越多个意图的对话。这些意图中的每一个意图都可以是针对用户说出或键入的信息或动作的不同请求,虚拟助理可访问的技能或其他对话代理可以成功地处理这些请求。例如,当用户询问“我的日程安排是什么?”时,被设计为将该问题作为意图处理的技能可能要求一段时间(例如,今天、本周等)来搜索计划的事件并对用户作出响应。一些虚拟助理框架将这种上下文数据存储在上下文变量内。另外地,一些虚拟助理框架在可能影响多个意图处理的上下文变量内包括布尔标志。

上下文变量和意图在对话过程期间被设置和清除。然而,由于至少一些虚拟助理框架的事务性质和上下文变量的影响的范围,技能开发人员必须仔细管理上下文变量以防止跨意图的泄漏。这种泄漏的示例可以包括这样的情况:其中指派给被配置为处理第一意图的代码内的上下文变量的值没有在被配置为处理第二意图的代码中被正确地(由开发人员)重新指派。泄漏可能导致不正确的对话以及其他问题。因此,在利用虚拟助理框架工作时,开发人员需要额外的策略来解决上下文变量和意图的管理问题,包括涉及在代码的各个部分移除不需要的上下文变量的策略。至少出于这些原因,虚拟助理的构造和开发可能是耗时且昂贵的,因为需要额外的(或持续的)努力来确保虚拟助理的正确操作以避免生成对表达的用户意图的不正确的响应。这种错误可能会损害用户体验和/或一起禁止虚拟助理的操作。

为了克服上述限制,并克服在阅读和理解本说明书后将显而易见的其他限制,本文描述的一些示例针对构建在上下文变量的基本构建块上的计算设备、系统和方法,以提供对对话的当前状态的更高级别的抽象。这些计算设备可以与虚拟助理结合使用或以其他方式集成在其中。特别地,本文描述的一些示例提供了将多个个体话音交互组成到对话中或以其他方式集成到对话中的计算设备和方法。这些示例可以根据针对每个口语意图的个体处理程序的结果来表示栈内设备的对话状态。这些对话状态可以反映参与者在包括任何数量的意图的对话内的当前位置。栈结构允许对话的上下文是隐式的,并且由此避免对上下文变量进行复杂且容易出错的管理。另外地,栈结构可以使得能够将不同的意图任意组合为自然流动的对话。因此,本公开的计算设备、系统和过程提供了对虚拟助理的灵活性和可用性两者的改进。

例如,至少一些解决方案以类似栈的方式构造对话(例如,用于执行特定动作的请求可能导致澄清问题,或在完成原始请求的动作之前的额外对话)。在一个这样的示例中,对话可以包括用于“拨入会议”的请求。作为响应,计算设备可以被配置为在加入会议之前询问用户他们是否希望打开推荐的文档(假设生产力分析服务正在做出这样的推荐)。实际上,对话的该第二部分被推送到对话栈在原始请求的顶部。一旦计算设备解决或以其他方式完成对话的第二(或新)部分,该计算设备就返回到与加入会议相关的对话的第一(或先前)部分。因此,对话的先前部分和新部分两者的上下文被维护并正确地处理。

本文公开的示例中的至少一些促进技能之间的松散耦合,这使得能够相对独立地完成每个技能(以及未来的新技能)的设计和构造,而不必担心这些技能将如何与可以在相同对话中使用的现有或未来的技能交互。例如,本文描述的设备、系统和方法允许以灵活、易于构建和扩展的方式创建流动的对话,并且避免在对话的不同部分之间创建硬编码的交互。受益于下面更详细讨论的公开内容,将认识到这些和额外的方面。

本文讨论的方法和系统的示例在应用中不限于在以下描述中阐述或在附图中示出的构造细节和组件布置。这些方法和系统能够在其他示例中实现,并能够以各种方式实践或执行。本文提供的具体实现方式的示例仅出于说明的目的,并且不旨在进行限制。特别地,结合任何一个或多个示例讨论的动作、组件、元素和特征不旨在被排除在任何其他示例中的类似作用之外。

而且,本文使用的措辞和术语是出于描述的目的,并且不应被视为限制性的。以单数形式对本文中引用的系统和方法的示例、组件、元素或动作的任何引用也可以涵盖包括复数的示例,并且以复数形式对本文中任何示例、组件、元素或动作的任何引用也可以涵盖仅包括单数的示例。以单数或复数形式的引用不旨在限制当前公开的系统或方法、它们的组件、动作或元素。本文中对“包括”、“包含”、“具有”、“含有”及其变型的使用意在包含其后列出的项目和其等同物以及额外项目。对“或”的引用可以被解释为包括性的,使得使用“或”描述的任何项目可以指示所描述的项目中的单个、多于一个、以及所有中的任一个。另外地,在本文档与通过引用并入本文的文档之间的术语的不一致用法的情况下,在被并入的文献中的术语用法是对本文档的术语用法的补充;针对不可协调的不一致,以本文档中的术语用法为准。

可以在多种不同的系统环境(包括独立、联网、远程访问(也称为远程桌面)、虚拟化和/或基于云的环境等)中利用计算机软件、硬件和网络。图1示出了可以用于在独立和/或联网环境中实现本文所描述的一个或多个示例的系统架构和数据处理设备的一个示例。各种网络节点或设备103、105、107和109可以经由广域网(WAN)101(例如,互联网)互连。也可以或可替代地使用其他网络,包括私有内联网、公司网络、局域网(LAN)、城域网(MAN)、无线网络、个人网络(PAN)等。网络101是出于说明的目的,并且可以以更少或额外的计算机网络代替。局域网133可以具有任何已知的LAN拓扑中的一种或多种,并且可以使用多种不同协议中的一种或多种,例如,以太网。设备103、105、107和109以及其他设备(未示出)可以经由双绞线、同轴电缆、光纤、无线电波或其他通信介质连接到网络中的一个或多个。

如本文所使用的并且在附图中所描绘的术语“网络”不仅指代其中远程存储设备经由一条或多条通信路径耦合在一起的系统,而且指代可以偶尔耦合到具有存储能力的这种系统的独立设备。因此,术语“网络”不仅包括“物理网络”,而且包括“内容网络”,该内容网络由跨所有物理网络驻留的数据(其归因于单个实体)组成。

图1中示出的组件可以包括数据服务器103、web服务器105和客户端计算机107、109。数据服务器103提供对数据库和控制软件的总体访问、控制和管理,以执行本文描述的一个或多个说明性方面。数据服务器103可以连接到web服务器105,用户通过该web服务器105按请求进行交互并获得数据。可替代地,数据服务器103本身可以用作web服务器并直接连接到互联网。数据服务器103可以通过局域网133、广域网101(例如,互联网),经由直接或间接连接或经由某种其他网络连接到web服务器105。用户可以使用远程计算机107、109与数据服务器103交互,例如,使用web浏览器以经由由web服务器105托管的一个或多个外部暴露的网站连接到数据服务器103。客户端计算机107、109可以与数据服务器103协同使用,以访问存储在其中的数据或可以用于其他目的。例如,如本领域中已知的,用户可以从客户端设备107使用互联网浏览器访问web服务器105,或者通过执行通过计算机网络(例如,互联网)与web服务器105和/或数据服务器103通信的软件应用来访问web服务器105。

服务器和应用可以组合在相同的物理机器上,并保留单独的虚拟地址或逻辑地址,或者可以驻留在单独的物理机器上。图1仅示出了可以使用的网络架构的一个示例,并且本领域技术人员将认识到,所使用的特定网络架构和数据处理设备可以变化。例如,由web服务器105和数据服务器103提供的服务可以组合在单个服务器上。

每个设备103、105、107和109可以是任何类型的已知计算机、服务器或数据处理设备。数据服务器103例如可以包括控制数据服务器103的整体操作的处理器111。数据服务器103还可以包括随机存取存储器(RAM)113、只读存储器(ROM)115、网络接口117、输入/输出接口119(例如,键盘、鼠标、显示器、打印机等)和存储器121。输入/输出(I/O)119可以包括用于读取、写入、显示、播放和/或打印数据或文件的各种接口单元和驱动器。另外地,I/O设备119可以包括麦克风和扬声器以播放或以可听格式发送数据。存储器121还可以存储用于控制数据处理设备103的整体操作的操作系统软件123、用于指示数据服务器103执行本文描述的方面的控制逻辑125、以及提供次要功能、支持功能和/或其他功能的其他应用软件127,这些功能可以或可以不与本文描述的方面结合使用。控制逻辑125在本文中也可以被称为数据服务器软件125。数据服务器软件125的功能可以指代基于被编码到控制逻辑125中的规则来自动进行的操作或决定、由用户向系统提供输入而手动进行的操作或决定和/或基于用户输入(例如,查询、数据更新等)的自动处理的组合。

存储器121还可以存储在执行本文描述的一个或多个方面时使用的数据,包括第一数据库129和第二数据库131。在一些示例中,第一数据库129可以包括第二数据库131(例如,作为单独的表、报告等)。即,取决于系统设计,信息可以存储在单个数据库中,或可以分离到不同的逻辑、虚拟或物理数据库中。设备105、107和109可以具有如关于设备103所描述的类似或不同的架构。本领域技术人员将认识到的是,如本文所描述的数据处理设备103(或设备105、107或109)的功能可以跨多个数据处理设备分布,以例如跨多个计算机分布处理负载、基于地理位置、用户访问级别、服务质量(QoS)等来隔离事务。

一个或多个示例可以体现在计算机可用或可读数据和/或计算机可执行指令中,例如,体现在由一个或多个计算机或如本文所描述的其他设备执行的一个或多个程序或程序模块中。通常,程序和程序模块包括例程或代码、对象、组件、数据结构等,其在由计算机中的处理器或其他设备执行时执行特定任务或实现特定数据类型。模块可以用随后被编译以用于执行的源代码编程语言编写,或者可以用脚本语言(例如(但不限于)超文本标记语言(HTML)或可扩展标记语言(XML))编写。计算机可执行指令可以存储在诸如非易失性存储设备之类的计算机可读介质上。可以利用任何合适的计算机可读存储介质,包括硬盘、CD-ROM、光存储设备、磁存储设备和/或其任何组合。另外地,如本文所描述的表示数据或事件的各种传输(非存储)介质可以以电磁波的形式在源与目的地之间被传送,电磁波行进通过信号传导介质(例如,金属线、光纤)和/或无线传输介质(例如,空气和/或空间)。本文描述的各个方面可以体现为方法、数据处理系统或计算机程序产品。因此,各种功能可以整体或部分地体现在软件、固件和/或硬件或者硬件等价物(例如,集成电路、现场可编程门阵列(FPGA)等)中。特定数据结构可以用于更高效地实现本文所描述的一个或多个方面,并且这种数据结构预期在本文所描述的计算机可执行指令和计算机可用数据的范围内。

进一步参考图2,本文描述的一个或多个方面可以在远程访问环境中实现。图2描绘了在说明性计算环境200中的包括计算设备201的示例系统架构,其可以根据本文描述的一个或多个示例使用。计算设备201可以用作单服务器或多服务器桌面虚拟化系统(例如,远程访问或云系统)中的服务器206a,并且可以被配置为向客户端访问设备提供虚拟机。计算设备201可以具有处理器203,以控制设备201及其相关联的组件(包括RAM 205、ROM 207、输入/输出(I/O)模块209和存储器215)的整体操作。

I/O模块209可以包括计算设备201的用户可以通过其提供输入的鼠标、小键盘、触摸屏、扫描仪、光学读取器和/或手写笔(或(多个)其他输入设备),并且还可以包括用于提供音频输出的扬声器中的一个或多个以及用于提供文本、视听和/或图形输出的视频显示设备中的一个或多个。软件可以存储在存储器215和/或其他存储装置内,以向处理器203提供指令以将计算设备201配置为专用计算设备以便执行如本文所描述的各种功能。例如,存储器215可以存储由计算设备201使用的软件,例如,操作系统217、应用程序219和相关联的数据库221。

计算设备201可以在支持到一个或多个远程计算机(例如,终端240(也称为客户端设备和/或客户端机器))的连接的联网环境中操作。终端240可以是个人计算机、移动设备、膝上型计算机、平板计算机或服务器,其包括上面关于计算设备103或201描述的元件中的许多元件或全部元件。图2中描绘的网络连接包括局域网(LAN)225和广域网(WAN)229,但也可以包括其他网络。当在LAN联网环境中使用时,计算设备201可以通过网络接口或适配器223连接到LAN 225。当在WAN联网环境中使用时,计算设备201可以包括调制解调器或其他广域网接口227以建立通过WAN229的通信,例如,计算机网络230(例如,互联网)。将认识到的是,所示的网络连接是说明性的,并且可以使用在计算机之间建立通信链路的其他单元。计算设备201和/或终端240也可以是移动终端(例如,移动电话、智能电话、个人数字助理(PDA)、笔记本、智能扬声器、虚拟助理等),其包括各种其他组件,例如,电池、扬声器和天线(未示出)。

本文描述的方面也可以与许多其他通用或专用计算系统环境或配置一起操作。可以适用于本文所描述的方面的其他计算系统、环境和/或配置的示例包括但不限于虚拟助理、智能扬声器、个人计算机、服务器计算机、手持或膝上型设备、多处理器系统、基于微处理器的系统、机顶盒、可编程消费电子产品、网络个人计算机(PC)、小型计算机、大型计算机、包括上述系统或设备中的任一个的分布式计算环境等。

如图2中示出的,一个或多个客户端设备240可以与一个或多个服务器206a-206n(在此一般称为“(多个)服务器206”)进行通信。在一个示例中,计算环境200可以包括安装在(多个)服务器206与(多个)客户端机器240之间的网络装置。该网络装置可以管理客户端/服务器连接,并且在一些情况下可以对多个后端服务器206之间的客户端连接进行负载平衡。

在一些示例中,(多个)客户端机器240可以被称为单个客户端机器240或单组客户端机器240,而(多个)服务器206可以被称为单个服务器206或单组服务器206。在一个示例中,单个客户端机器240与多于一个服务器206通信,而在另一示例中,单个服务器206与多于一个客户端机器240通信。在又一示例中,单个客户端机器240与单个服务器206通信。

在一些示例中,客户端机器240可以由以下非穷尽的术语中的任何一个引用:(多个)客户端机器;(多个)客户端;(多个)客户端计算机;(多个)客户端设备;(多个)客户端计算设备;本地机器;远程机器;(多个)客户端节点;(多个)端点;或(多个)端点节点。在一些示例中,服务器206可以由以下非穷尽的术语中的任何一个引用:(多个)服务器;本地机器;远程机器;(多个)服务器场;或(多个)主机计算设备。

一些示例包括客户端设备240,其提供由在服务器206或其他远程定位的机器上远程执行的应用生成的视觉、听觉(或两者)的应用输出。在这些示例中,客户端设备240可以执行虚拟机接收机程序或应用,以经由智能扬声器、虚拟助理或其他计算设备提供输出。输出可以以文本或可听格式提供。

在一些示例中,服务器206使用远程呈现协议或其他程序以向在客户端上执行的瘦客户端或远程显示应用发送数据以呈现由在服务器206上执行的应用生成的输出。瘦客户端或远程显示协议可以是以下非穷尽的协议列表中的任何一种:由佛罗里达州劳德代尔堡市的Citrix Systems公司开发的独立计算架构(ICA)协议;或由华盛顿州雷德蒙德市的Microsoft Corporation制造的远程桌面协议(RDP)。

远程计算环境可以包括多于一个服务器206a-206n,使得服务器206a-206n在逻辑上被组合在一起以形成例如在云计算环境中的服务器场206。服务器场206可以包括地理上分散但逻辑上被分组在一起的服务器206,或位于彼此靠近且逻辑上分组在一起的服务器206。在一些示例中,在服务器场206内的地理上分散的服务器206a-206n可以使用WAN(广域)、MAN(城域)或LAN(局域)进行通信,其中不同的地理区域可以被表征为:不同的大陆;大陆的不同的区域;不同的国家;不同的州;不同的城市;不同的校园;不同的房间;或前述地理位置的任何组合。在一些示例中,服务器场206可以作为单个实体来管理,而在其他示例中,服务器场206可以包括多个服务器场。

在一些示例中,服务器场可以包括执行实质上相似类型的操作系统平台(例如,WINDOWS、UNIX、LINUX、iOS、ANDROID、SYMBIAN等)的服务器206。在其他示例中,服务器场206可以包括执行第一类型的操作系统平台的第一组一个或多个服务器,以及执行第二类型的操作系统平台的第二组一个或多个服务器。

服务器206可以根据需要被配置作为任何类型的服务器,例如,文件服务器、应用服务器、web服务器、代理服务器、装置、网络装置、网关、应用网关、网关服务器、虚拟化服务器、部署服务器、安全套接字层(SSL)VPN服务器、防火墙、web服务器、应用服务器,或作为主应用服务器、执行活动目录的服务器,或执行提供防火墙功能、应用功能或负载平衡功能的应用加速程序的服务器。也可以使用其他服务器类型。

一些示例包括第一服务器206a,其接收来自客户端机器240的请求,将请求转发到第二服务器206b(未示出),并且利用来自第二服务器206b(未示出)的响应来对由客户端机器240生成的请求作出响应。第一服务器206a可以获得对客户端机器240可用的应用的枚举以及与托管在应用的枚举内识别出的应用的应用服务器206相关联的地址信息。第一服务器206a然后可以使用web接口呈现对客户端的请求的响应,并且直接与客户端240通信以向客户端240提供对识别出的应用的访问。一个或多个客户端240和/或一个或多个服务器206可以通过网络230(例如,网络101)发送数据。

图3是计算设备的示例的框图。如图3中示出的,计算机301可以包括一个或多个处理器303、易失性存储器322(例如,RAM)、非易失性存储器328(例如,一个或多个硬盘驱动器(HDD)或其他磁或光存储介质、一个或多个固态驱动器(SSD)(例如,闪存驱动器或其他固态存储介质)、一个或多个混合磁性和固态驱动器和/或一个或多个虚拟存储卷(例如,云存储装置),或这种物理存储卷和虚拟存储卷或其阵列的组合)、用户接口(UI)323、一个或多个通信接口318和通信总线350。用户接口323可以包括图形用户接口(GUI)(例如,触摸屏、显示器等)以及一个或多个输入/输出(I/O)设备326(例如,鼠标、键盘、扬声器、麦克风等)。非易失性存储器328存储操作系统315、一个或多个应用316和数据317,使得例如操作系统315和/或应用316的计算机指令由(多个)处理器303在易失性存储器322之外执行。可以使用GUI 324的输入设备键入数据或从(多个)I/O设备326接收数据。计算机301的各种元件可以经由通信总线350进行通信。在图3中示出的计算机301仅作为示例示出,因为客户端103、105、107、109、201和服务器206可以通过任何计算或处理环境并利用可以具有能够执行本文所描述的操作的合适的硬件和/或软件的任何类型的机器或机器集合来实现。

(多个)处理器303可以由执行一个或多个计算机程序以执行系统的功能的一个或多个可编程处理器实现。如本文所使用的,术语“处理器”描述了执行功能、操作或操作序列的电子电路。功能、操作或操作序列可以硬编码到电子电路中或通过保存在存储器设备中的指令的方式软编码。“处理器”可以使用数字值或使用模拟信号来执行功能、操作或操作序列。在一些示例中,“处理器”可以体现在一个或多个专用集成电路(ASIC)、微处理器、数字信号处理器、微控制器、现场可编程门阵列(FPGA)、可编程逻辑阵列(PLA)、多核心处理器或具有关联存储器的通用计算机中。“处理器”可以是模拟的、数字的或混合信号的。在一些示例中,“处理器”可以是一个或多个物理处理器或一个或多个“虚拟”(例如,远程定位的或“云”)处理器。

通信接口318可以包括一个或多个接口以使得计算机101能够通过各种有线和/或无线或蜂窝连接来访问计算机网络(例如,LAN、WAN或互联网)。

在所描述的示例中,计算设备301可以进行以下操作:代表客户端计算设备的用户执行应用;执行提供执行会话(例如,托管的桌面会话)的虚拟机,在该执行会话内,应用代表用户或客户端计算执行;执行终端服务会话以提供托管的桌面环境;或者提供对计算环境的访问,该计算环境包括以下各项中的一个或多个:一个或多个应用、一个或多个桌面应用以及在其中可以执行一个或多个应用的一个或多个桌面会话。

在一些示例中,本文描述的系统和方法被配置为实现对话栈架构,该对话栈架构包括用于将用户发起的意图组织为对话的隐式上下文的栈。在这些示例中,意图在栈内相对于其他意图的位置指示了该意图在对话内的位置和新近度(recency)。栈数据结构的使用为技能开发人员当前遭遇的上下文变量的显式维护的问题提供了优雅的解决方案。此外,栈的使用使得每个技能能够使用对该技能在本地的且由其在栈内的位置定义的信息进行操作。这些属性促进了对松散耦合的技能的开发,这些技能关于对话内存在的多个意图是鲁棒的。

在一些示例中,栈被封装在栈引擎内,该栈引擎被配置为维护栈并暴露接口以允许其他过程操纵栈。在这些示例中,每个新的用户发起的意图(例如“拨入会议”)都会导致一个或多个项目被推送到栈上。这些项目可以包括意图的标识符和与意图相关联的参数。进而,栈引擎被配置为将意图分派到动作处理程序以供执行。这些动作处理程序被配置为处理意图,并且可以选择将更多项目推送到栈上在存储分派的意图的项目上方或下方。以这种方式,栈引擎被配置为维护作为每个对话的隐式上下文的栈结构。

图4示出了并入了对话栈架构的一个示例的计算系统400。在本公开的一个示例中,系统400可以包括经由网络408与计算设备412进行通信的多个虚拟助理设备404a、404b和404n(统称为虚拟助理设备404)。网络408可以是局域网或广域网(例如,互联网或校园网)。

虚拟助理设备404可以是任何类型的虚拟助理平台。使设备404能够与用户交互或以其他方式与用户接合的技能与每个设备404相关联。特定于服务/设备的技能定义了用户可能说出的用于与虚拟助理交互的短语。虚拟助理设备404可以与一种或多种技能相关联,这些技能进而与用多个示例短语定义的用户意图相关联。例如,在一个示例中,“ScheduleQuery(日程安排查询)”意图被定义为允许用户询问设备404她的日程安排中的接下来的内容是什么。在一些示例中,这被定义为名称为“ScheduleQuery”的意图,具有“我的日程安排中的内容是什么”、“我的日历上的接下来的内容是什么”等简单话语。意图使用履行来向用户提供响应。该履行过程可以包括例如技能基础设施调用提供的webhook或具有关于匹配的意图的信息的某个其他应用程序接口(API)端点,并且webhook返回包括要提供给用户的响应的细节。注意,无法在技能本身内定义硬编码的文本响应。

计算设备412实现被配置为从虚拟助理设备404接收信息(例如,调用/请求和响应)和向虚拟助理设备404提供信息的栈架构。计算设备412可以是本文先前描述的设备中的任一个,例如,设备103、105、107、109、计算设备201、服务器206、终端240或计算设备301。计算设备包括一个或多个处理器414、存储器415、适配器416a、416b和416n(统称为适配器416)和架构。处理器414和存储器415类似于先前关于图1-3所描述的那些。

适配器416被配置为接收用于技能履行的调用,并且将特定意图请求和响应格式以及会话管理机制/信息映射到架构。可以看出,适配器416可以集成在计算设备412内。在其他示例中,适配器416可以集成在另一设备内,并经由网络408通信地耦合到设备412。因为每个虚拟助理可以使用不同的格式用于其请求的履行和响应,并且可以不同地管理对话会话(这里的会话被定义为例如形成相同逻辑对话交换的一部分的一系列用户输入),因此适配器416被配置为创建抽象层以将履行请求和响应映射到供计算设备412使用的通用格式。适配器416被配置为确保栈本身被保留在属于同一对话会话的个体履行调用之间。例如,在一些示例中,适配器416a被配置为通过在履行响应中返回栈的完整JSON表示作为会话属性来确保栈的保留。在这些示例中,第一技能及其支持基础设施被配置为存储/维护和发送会话属性(在这种情况下包括栈的JSON表示)作为履行请求的一部分;因此,在这些示例中,同一对话中的下一履行请求包括与前一履行响应一起返回的栈。可替代地或另外地,在一些示例中,适配器416b被配置为将栈存储在分配给适配器的存储器中。在这些示例中,第二技能及其支持基础设施被配置为使用唯一的会话标识符,该会话标识符可以作为履行请求的一部分被发送。在至少一个示例中,适配器416b被配置为经由例如将会话标识符映射到栈标识符和/或地址的交叉引用来针对每个后续履行请求定位正确的栈。

在一些示例中,栈引擎420被配置或以其他方式被编程为进行以下操作:从适配器416接收意图和栈;操纵栈中的数据;将用户输入意图/回复路由到相关的处理程序;将项目推送到栈/从栈弹出;生成对用户的响应;以及向适配器416提供用户响应和新栈。下面参考图5提供对架构的一个示例实现方式的进一步描述。

图5示出了根据本文描述的一个或多个示例的示例对话栈架构。通常,对话栈架构被配置为取以下各项或以其他方式接收以下各项作为输入:(1)针对对话的当前栈(或栈数据集)(其针对新对话可能为空);以及(2)来自用户且由技能识别并传递给适配器的意图。对话栈架构被配置为在栈数据集的上下文中操作或以其他方式处理该意图,并输出修改后的栈数据集、对用户的响应以及可选的外部副作用(例如,执行某些动作)。对话栈架构被配置为经由网络(例如,图4的网络408)向虚拟助理设备(例如,虚拟助理设备404)提供文本(或其他数据)作为对用户的响应。

在一个示例中,对话栈架构可以包括栈引擎420。引擎420被配置为操纵栈数据集并生成响应以发送到用户。栈引擎420可以包括栈数据库504(也称为“栈”)、分派引擎508和动作处理程序512A、512B和512N(下文统称为动作处理程序512)。

在某些示例中,分派引擎508被配置为从适配器(例如,适配器416中的一个)接收输入,并在栈引擎420已经完成对输入的处理之后将输出发送到适配器。该输入可以包括意图和栈的表示。输出可以包括用户响应和栈的表示,以支持正在进行的对话。在一些示例中,分派引擎508被配置为生成栈的输出表示,从而使栈序列化和/或字符串化以创建栈的可发送表示。

在一些示例中,根据下面参考图6A-7描述的过程,分派引擎508还被配置为将API调用发送到动作处理程序,以在处理输入期间调用其执行。这些API调用可以包括“handleIntent(处理意图)”调用、“peek(取回)”调用和“informNewIntentAbove(通知上方的新意图)”调用,下面将进一步描述这些调用中的每一个。在一些示例中,分派引擎508还被配置为从动作处理程序512接收指令和用户响应,并基于接收到的指令来操纵栈数据库504。

在一些示例中,动作处理程序512被配置为接收和处理确定的意图以提供用于操纵栈数据库504内的数据项目的栈的指导或指令。动作处理程序512可以以“插件”的方式被实现或以其他方式被注册。在一个示例中,栈引擎420被配置为将特定意图分派到相关的、相关联的、被注册为接收该意图的动作处理程序512。每个动作处理程序512可以指定它可以处理哪个(哪些)意图。这些意图可以包括强制性的主要意图(例如,“ScheduleQuery”,继续上面开始的示例),该意图可以描述该动作处理程序做了什么(例如,处理程序可以执行日程安排查询)。动作处理程序512还可以注册以接收其他意图,例如,诸如“是”、“否”和“数字”之类的通用的用户回复/意图(这些意图在技能中以与主要意图相同的方式定义并且可以具有与其相关联的可选变量/参数,例如,用户输入“两个”可以匹配意图“数字”并且将变量/参数“值”设置为2)。利用接收到的意图,动作处理程序512可以处理意图以向分派引擎508提供指导以使得栈引擎420能够生成响应以发送到用户。

在一些示例中,动作处理程序512中的每一个被配置为暴露API,动作处理程序512通过该API接收并处理来自分派引擎508的API调用。由特定动作处理程序512响应于这些API调用而执行的特定动作将取决于动作处理程序的设计目标而变化,但被设计为充分利用对话栈架构的优势的动作处理程序实现API调用中的每一个。

例如,在一个示例中,动作处理程序512可以被配置为接收指定要由动作处理程序处理的特定意图的“handleIntent”调用。为了处理handleIntent调用,动作处理程序被配置为基于意图利用外部服务执行一个或多个程序化动作(例如,将请求消息发送到日程安排服务、活动目录服务、购买服务等),并准备对意图的用户响应和由先前执行的动作生成的任何结果。为了处理handleIntent调用,动作处理程序还可以被配置为准备用于基于意图来操纵栈的指令,并向调用返回包括用户响应和/或指令的响应。在另一示例中,动作处理程序512可以被配置为接收指示与处理程序相关联的栈项目现在位于栈的顶部的“取回”调用。为了处理取回调用,动作处理程序可以被配置为利用外部服务执行一个或多个程序化动作、准备用户响应、并且将包括用户响应的响应返回给调用。在另一示例中,动作处理程序512可以被配置为接收“informNewIntentAbove”调用,该调用指定了要被推送到在栈项目内在与动作处理程序相关联的栈项目上方的栈的顶部的意图。为了处理informNewIntentAbove调用,动作处理程序可以被配置为利用外部服务执行一个或多个程序化动作、准备用户响应、准备用于操纵栈的指令、以及将包括用户响应的响应返回给调用。

在某些示例中,栈数据库504由包含主要意图(其实际上是对话的焦点)和可选的参数(如下文进一步描述)的数据项目组成。例如,在一个与计划相关的示例中,栈可以保存三个项目。第一项目可以包括存储“ScheduleQuery”的值的意图字段和存储(无)或NULL的值的参数字段。第二项目可以包括存储“JoinAConferenceCall(加入电话会议)”的值的意图字段和存储一组值(例如,{“tel”:“1800 555-4567”,“pin”:4936})的参数字段。第三项目可以包括存储“AnythingElseYouNeed(你需要的其他事项)”的值的意图字段和存储(无)或NULL的值的参数字段。在该示例中,由栈组织的对话的隐式结构指定了首先解析ScheduleQuery意图,其次解析JoinAConferenceCall意图,然后解析AnythingElseYouNeed意图,但是该解析的次序可以基于用户与对话代理之间的后续交互而改变。

上面参考图4和图5描述的对话栈架构的组件共同提供了用于开发对话代理的框架,该框架对于涉及具有多个意图的对话是鲁棒的,同时提供与用户的自然流动的对话。由图4和图5中描述的组件执行的过程的一些示例在下面参考图6A-7进一步描述。

图8示出了被配置用于在分布式计算平台(例如,如上面参考图1和图2所描述的)内操作的对话栈架构(例如,图4的对话栈架构)。如图8中示出的,配置800包括图4的虚拟助理设备404a和计算设备412。配置800还包括云计算基础设施802。基础设施802托管语音识别和自然语言处理服务804以及技能/对话代理基础设施806。基础设施806托管技能/对话代理808。在配置800内,设备404a、412和云基础设施802经由网络接口彼此交换(即,发送和/或接收)数据。

参考上面的图4描述了图8中示出的组件中的许多组件。为简洁起见,这里将不再重复那些描述,而是图8中包括的图4的组件中的每一个被配置为在图8中如在图4中描述的那样起作用。然而,对这些组件中的任一个组件的描述都可以在下面进行扩充或完善。

如图8中示出的,设备404a被配置为从用户获取口头话语并将表示话语的音频数据发送到语音处理服务804。语音处理服务804被配置为与技能基础设施806互操作以识别技能(例如,技能808)和在音频数据中表达的意图。技能基础设施806被配置为从语音处理服务804接收识别出的技能和意图,以识别与技能808相关联的API端点(例如,存储在其配置信息内),并将履行请求发送到API端点。在该示例中,向其发送履行请求的API端点由对话栈架构的适配器416a暴露。

在一些示例中,对话栈架构被配置为处理如本文所描述的履行请求并且向技能808及其支持基础设施806发送履行响应。技能808及其支持基础设施806被配置为解析履行响应、识别被包括在履行响应中的任何用户响应、并且将识别出的用户响应发送到语音服务804。语音服务804进而被配置为将用户响应呈现为音频数据并将音频数据发送到设备404a以由虚拟助理提供给用户。

配置800仅仅是可以用于实现对话栈架构的许多潜在配置中的一个示例。例如,在一些示例中,适配器416各自被托管在彼此不同且与托管栈引擎420的计算设备不同的计算设备上。在这些和其他示例中,栈引擎420可以是不同的云服务,其暴露API以使适配器416能够向栈引擎420注册它们自己。另外地或可替代地,当被实现为云服务时,栈引擎420可以暴露API以使动作处理程序(例如,图5的动作处理程序512)向栈引擎420注册它们自己。因此,本文公开的示例不限于特定配置800,并且其他配置被认为落入本公开的范围内。

图6A、6B和6C是用于基于对话栈架构向虚拟助理的用户提供响应的示例方法/过程600的流程图。如图6A中示出的,过程600开始于对话栈架构(例如,图4的栈引擎420和适配器416)从技能或其他对话代理接收602意图。对话栈架构确定604接收到的意图是否是通用的用户回复意图(例如“是”或“否”)。如果对话栈架构确定604接收到的意图是通用的意图,则对话栈架构进行到图6C中示出的子过程。如果对话栈架构确定604接收到的意图不是通用的意图,则对话栈架构(例如,栈引擎420)确定606接收到的意图是否与注册的动作处理程序(例如,图5的动作处理程序512中的一个)的主要意图匹配。在对话栈架构确定接收到的意图与注册的动作处理程序的主要意图不匹配的情况下,对话栈架构在履行响应内向支持虚拟助理的对话代理发送/传输608错误消息。

当对话栈架构接收到与注册的动作处理程序的主要意图匹配的意图时,栈引擎(例如,栈引擎420)检查栈数据库(例如,图5的栈数据库504)以确定610接收到的意图是否与存储在支持与用户的当前对话的栈的最顶部的项目中的意图相匹配。在一些实例中,如果栈的最顶部的项目包括相同的主要意图,则经由例如分派引擎(例如,图5的分派引擎508)调用616针对该意图的动作处理程序。否则,如果栈的顶部存在现有意图(例如,它不是空栈),则(例如,经由分派引擎)调用612针对该意图的注册的动作处理程序,并提供通知以通知注册的动作处理程序:除了其主要意图之外的新意图要被添加到与注册的动作处理程序相关联的栈项目(即,存储其主要意图的栈项目)的顶部的栈。

在一些示例中,响应于通知的接收,注册的动作处理程序确定614是否处理新意图。在许多情况下,注册的动作处理程序将通知作为纯粹的信息处理,并且除了例如确认之外不采取动作。然而,在一些示例中,注册的动作处理程序会自行处理/操纵新意图。下面参考图6B进一步描述在该子过程中由注册的动作处理程序执行的动作。可选地,在注册的动作处理程序确定本身不处理新意图的情况下,注册的动作处理程序可以通过例如从栈中移除其相关联的栈项目来从栈中驱逐622自己。如果注册的动作处理程序不支持新意图,则栈引擎将新项目推送620到包含新意图(并且,在至少一些示例中,没有参数)的栈数据库上,然后(例如,经由分派引擎)调用618针对新意图的动作处理程序。

由分派引擎在动作612、616或618中调用的动作处理程序处理接收到的意图。该过程可以包括执行由用户请求的任何程序化动作(例如,打开文档、计划会议、点咖啡等)、生成用户响应(例如,以要在视觉上或听觉上呈现的文本字符串的形式)和/或生成用于操纵栈(例如,添加或删除项目)的指令。动作处理程序将响应消息返回给分派引擎,该分派引擎包括用户响应和/或指令。换言之,当动作处理程序被调用时,它可以向分派引擎返回响应,该响应指示要执行什么栈操纵以及向用户提供什么用户响应。经由指令,处理程序可以指示分派引擎将(多个)新意图和(多个)参数添加到栈数据集(例如,紧接在其相关联的项目的下方或上方)。

例如,ScheduleQuery动作处理程序可以请求将新的JoinAConferenceCall意图添加到栈中在其相关联的项目之后,从而将参数设置为针对电话会议的拨入号码和PIN码(假设ScheduleQuery动作处理程序已经在用户的日历中找到了这些内容)。ScheduleQuery处理程序还可以指示分派引擎从栈中移除自己(例如,通过从栈中移除与ScheduleQuery动作处理程序相关联的项目)。典型地,这将在对话栈架构(例如,处理程序512或栈引擎420)确定意图被完全处理或以其他方式解决时完成。例如,在与JoinAConferenceCall意图相关联的动作处理程序已经成功地将用户连接到电话会议的情况下,与JoinAConferenceCall意图相关联的动作处理程序可以从栈中移除自己(例如,通过指示分派引擎从栈中移除包括JoinAConferenceCall意图的项目)。

在其他实例中,为了完全处理或以其他方式解决意图,处理程序可以保留在栈上(例如,通过不指示分派引擎从栈中移除其相关联的项目)。例如,当处理程序询问后续问题(例如,我们的JoinAConferenceCall)时,处理程序可以询问“您想加入呼叫吗”,然后等待“是”或“否”意图。在这种情况下,处理程序可以保留在栈上(例如,经由其相关联的项目),直到基于接收到的意图(例如,通用的“是”或“否”意图)解决了后续问题为止。处理程序也可以被配置为终止对话。

在一些示例中,分派引擎接收并处理来自被调用的动作处理程序的响应消息。在响应消息包括用于操纵栈的指令的情况下,分派引擎根据指令操纵624栈。分派引擎确定626栈的顶部的项目是否改变。如果在该操纵之后,栈的顶部的项目已经改变,则分派引擎调用628现在位于栈的顶部的意图的动作处理程序,以请求额外响应以提供给用户。这在本文中可以称为“取回”。取回不会导致任何栈操纵,但为接下来可能被调用的处理程序提供机会提示用户它需要处理其意图的输入。由取回生成的任何用户响应被附加630到原始处理程序的用户响应。这种取回的一个原因是允许在栈上任意组合意图,其中每个意图的处理程序只需要担心自己的响应和问题,但是用户期望体验流动的对话,其中一个意图的结束流入下一个意图的开始。

例如,我们的ScheduleQuery处理程序可能已经返回响应“您将在3分钟内召开员工会议”,并且对栈中在其之后的JoinAConferenceCall处理程序的“取回”返回“您希望我为您拨入电话会议吗?”。这两个响应被级联并作为单个响应回复给用户。然后用户可以回答“是”意图,该意图将由将立即能够执行所请求的动作的JoinAConferenceCall意图处理。

分派引擎确定632栈是否为空。当栈为空时,(例如,由对话栈架构提供给对话代理的)履行响应指示634与用户的对话应终止。对话栈架构向用户发送636响应(例如,通过向对话代理发送履行响应)。

返回图6C,当对话栈架构接收到通用的用户回复意图(例如,“是”或“否”)时,检查638针对栈的顶部的项目中的意图的动作处理程序以查看其是否可以处理该通用的意图。如果该动作处理程序可以处理通用的意图,则以通用的意图调用642处理程序,并且分派引擎基于来自被调用的处理程序的响应消息继续操纵624栈。如果处理程序不能处理通用的意图,则创建错误条件,这导致用户被告知640虚拟助理(例如,虚拟助理设备404)不知道如何处理用户给出的请求/回复。

根据过程600的过程实现针对对话代理的执行框架,该执行框架促进对针对本地信息进行操作的松散耦合的代理的开发。这样的代理更适合参与与用户进行的自然流动的对话。

图7是用于基于对话栈架构(例如,图4和图5中示出的对话栈架构)向虚拟助理的用户提供响应的另一示例方法/过程700的流程图。

如图7中示出的,过程700开始于对话栈架构接收702用户通信的意图。例如,对话栈架构可以从对话代理接收履行请求,例如,技能。

对话栈架构在栈布置中提供704对话数据。例如,对话栈架构(例如,图4的适配器416中的一个或多个)可以解析履行请求,并使用在履行请求中包含的信息来识别和/或构造栈数据结构,该栈数据结构包括具有存储意图的标识符和与其相关联的参数的字段的项目。如上面所描述的,对话栈架构使用的过程可以基于对话代理及其支持基础设施的约定和操作而变化。

对话栈架构基于接收到的意图来操纵706对话数据的栈布置。例如,对话栈架构(例如,图4的栈引擎420)可以识别接收到的意图和栈的当前版本,并分派接收到的意图以由注册的动作处理程序(例如,图5的动作处理程序512中的一个)进行处理。注册的动作处理程序可以处理意图,并向分派引擎返回响应消息,该响应消息指定用户响应和用于栈操纵的指令。这种栈操纵可以包括添加项目和/或从栈中移除项目。分派引擎可以进而根据指令来操纵栈。当顶部栈项目因操纵而改变时,分派引擎可以提供对与顶部栈项目处的栈项目相关联的动作处理程序的取回,并将由取回生成的用户响应附加到由注册的动作处理程序返回的用户响应。

对话栈架构基于对话数据的被操纵的栈布置而向用户提供708响应。例如,分派引擎可以将由动作处理程序或它自己生成的用户响应发送到适配器(例如,图4的适配器416),该适配器进而可以将包括用户响应的履行响应发送到与虚拟助理互操作的对话代理。

根据过程700的过程使对话栈架构能够支持能够参与用户交互的对话代理,其中用户在自然分层的对话内说出多个意图。

本文公开的过程各自描绘了特定示例中的一个特定动作序列。一些动作是可选的,并且因此可以根据一个或多个示例省略这些动作。另外地,在不脱离本文讨论的装置和方法的范围的情况下,可以改变动作的次序,或者可以添加其他动作。

现在将参考包括在对话内的各个点处的对话栈的表示的表序列,来描述对话栈架构的操作及其执行的过程。换言之,下表提供了表示使用本公开的对话栈架构的用户与虚拟助理之间的对话的示例。表1表示用户与虚拟助理之间对话开始时的栈。可以看出,栈(或以其他方式称为数据集)最初为空。在开始对话时,新项目被键入(推送)到具有相关联的意图(例如,“DefaultWelcomeIntent(默认欢迎意图)”)的数据集中。作为响应,该架构生成或以其他方式提供指令(例如,“DefaultWelcomeIntent”、“移除自己”、“推送AnythingElse(其他事项)”和“响应:您好,我能帮些什么?”。可以进而执行这些指令中的每一个以开始经由虚拟助理设备与用户的对话流。

表2表示用户与虚拟助理设备之间的对话流的后续部分。可以看出,栈(或栈数据集)包括来自先前表的意图。在操纵栈期间,已经在先前的意图(“AnythingElse”)上方添加了另一意图(“ScheduleQuery”),并基于在数据结构中添加的数据项目(或意图)生成新指令以供架构使用。可以看出,在执行与“ScheduleQuery”相关的处理程序指令时,该意图从数据结构(也称为栈)中移除,并且另外两个意图“GetStuffDone(完成事项)”和“JoinAConferenceCall(加入电话会议)”被推送到栈上。注意,对话流的上下文由数据结构(或栈)内的数据项目(或意图)的位置维护,如保留在栈底部的意图“AnythingElse”所示。

表3示出了对表2中示出的初始用户请求的响应。另外地,本公开的架构可以基于先前接收到的用户的意图来提供额外的任务或服务。在该示例中,基于意图“GetStuffDone”,架构还会询问用户是否愿意在等待会议开始时执行任务。基于用户的响应,意图“GetStuffDone”从栈中移除并在栈的顶部替换为新意图“ApproveItem(批准项目)”。

表4表示对话的下一部分,其中指令由架构生成以用于数据结构(或栈)的最顶部的项目“ApproveItem”。注意,在这种情况下,指令的执行会导致副作用或其他动作响应。在该示例中,架构向服务或设备提供信息或数据(例如,更新/消息)以修改由服务或设备使用的信息。服务和设备可以在本文描述的架构框架的内部或外部。在执行这些指令时,意图“ApproveItem”从栈中移除。可以看出,没有在数据结构上放置新项目,因此数据栈流中的下一项目“JoinAConferenceCall”位于栈的顶部。

表5示出了对话的另一部分,其中在“ApproveItem”的项目(或意图)已经被清除或以其他方式从栈中移除之后,架构执行栈的下一部分“JoinAConferenceCall”。

表6表示对话的一部分,其中架构执行栈(也称为栈数据集)的最后部分并终止对话。

已经这样描述了至少一个示例的若干方面,应当认识到的是,本领域技术人员将容易想到各种改变、修改和改进。例如,本文公开的示例也可用于其他上下文。这种改变、修改和改进旨在成为本公开的一部分并且旨在落入本文讨论的示例的范围内。因此,前述描述和附图仅作为示例。

相关技术
  • 基于栈的通信系统和方法
  • 通信系统中基于组件的协议栈优化方法和装置
技术分类

06120113206151