跳到内容 跳到主导航 跳到页脚

对话管理器模式

接入方式

对话管理器模式,需要在对话管理器页面中开发F节点功能。

登陆OB对话平台:https://console.orionbase.cn/login

进入“NLP配置——场景对话——对话流管理“。

对话流基本构成

  • 1个开始单元
  • N个触发、功能、回复单元
  • 各单元间的连线

F节点开发,即对应对话流中的“功能单元“。

1. 开始单元

  • 开始单元是每个对话流都有且只有一个的,标志着对话流的开始。
  • 开始单元支持配置对话超时时间,指在等待用户语音指令时的最长时长,超过这个时长后,系统认为用户已经无需进行对话,对话流的状态会直接结束。
    • 超时时长默认15秒,可以根据需要自行调整。
    • 超时时长设置为0时,即表示无超时时长,会一直等待用户输入。
    • 开始单元中的超时时间不会影响对话流中的意图的填槽过程。
image.png

2. 触发单元

  • 触发单元用于接收用户的语音/文字,并对用户输入的信息进行一些条件判断,来决定后续如何回应用户
  • 触发单元的触发条件判断包括intent、slot、query和other四种:
    • intent:意图,用于判断用户的语音/文字指令是否能命中已配置的意图
      • intent条件中可选择的意图,是当前账号所属组织下的打开状态下的全部意图,均需要在文法预先配置
      • 已经配置到对话流中的意图,如果在文法配置模块被关闭,会导致对话流在进行到该意图时舞蹈响应
    • slot:槽位,用于判断用户指令中是否包含指定的槽位值
      • 需要先在当前触发单元配置了intent条件,才可以选择slot条件进行配置;
      • slot条件配置时,需要先选择是哪一个意图下,选择范围是当前触发单元配置的全部意图;选择完意图后,可以指定槽位和预期的槽位值。
    • query:即用户指令的原文,可以配置query完全等于某段文本,或query包含某些特定的关键词
      • 配置query = ‘xxxx’时,表示用户输入要和预置的条件完全一致才可以触发;
      • 配置query 包含 ‘xxx,yyy,zzz’时,表示用户输入包含xxx、yyy、zzz三个关键词才可以触发,多个关键词之间用英文逗号隔开。
      • 配置query 不包含 ‘xxx,yyy,zzz’时,表示用户输入不包含xxx、yyy、zzz三个关键词才可以触发,多个关键词之间用英文逗号隔开。
    • other:其他,主要用于存在对话分支的部分,当用户的输入无法命中其他的预设条件时,就会命中other条
      • other条件一定是单独存在的,配置了other条件的触发单元无法添加其他条件,已存在其他条件的触发单元也不能添加other条件。
  • 多条件触发时:可以通过点击“且”、“或”的按钮来添加多个条件逻辑判断用于多条件触发
    • 计算逻辑:先计算或再计算且,PS:(条件1 或 条件2)且(条件3 或 条件4)
    • 存在一些异常的情况,在配置过程中应当尽量避免:
      • 在触发单元中,应当避免配置类似‘intent = aaa’ 且 ‘intent = bbb’的条件;
      • 开始单元后连接的那一层触发单元,应当避免配置‘other’条件,否则可能会导致用户的语音输入全部进入了‘other’的对话流。
image.png
image.png

3. 功能单元

  • 当部分复杂的功能无法通过配置满足时,可通过功能节点编写代码完成,在代码中可以调用第三方API完成特殊的技能
  • 能实现的功能举例:
    • 功能节点可以根据NLP给出的解析结果
      • 直接代码内部配置不同的answer
      • 调用第三方API获得结果并返回
      • 拼接某些URL的scheme,支持吊起某些OPK/APK的特殊页面
      • 实现意图缺省的多轮
image.png
image.png

详细对话流配置流程,参见“对话流管理“。

配置平台快速测试

登陆对话平台,在快速测试中,即可实际测试多轮效果。

image.png

F节点开发文档

对话管理器工作原理概述

用户输入的Query首先被NLU引擎解析为实体词和意图,意图本身又可能包含抽取出的槽位。通常意图识别结果中的槽位值是来自于某一个解析出的实体词。即可以认为实体词是用来填槽的素材,文法规则是填槽的模板。

用户可以定义多个对话流程图,每个对话流程图里有若干个节点。对话流程图可以认为是一种规则,或者说是一种程序,对话管理器的核心工作,就是按照对话流程图所指定的规则和程序完成对话。而对话的核心是槽位的填充,即通过一系列的话术规则、反问,引导用户表达自己的诉求,将用户的诉求转换为意图和槽位。

image.png

如上图所示,用户定义的对话流程图是模板,对话管理器会在内存中维护一组与对话模板一一对应的对话状态,我们称之为对话状态帧(Frame)。通常一个用户可能会关联多个对话流程图,因此也就会有多个Frame与之对应。Frame是有顺序的,排在最前面的Frame称为当前活跃Frame,活跃Frame对应的对话流程图模板也就是当前活跃的对话流程图模板。

如何控制对话流程?

对话模板中的每一个节点都可以返回几种不同的指令,用于控制对话引擎如何继续执行对话流程图。这些指令包括:

  • 返回用户,携带TTS信息和其他资源返回用户
    • 当某个节点认为需要向用户返回结果时,可以告诉对话管理引擎不要继续执行对话图中的其他节点了。返回用户又可以细分为两种返回:
      • 1、本次返回给用户结果后,还期待处理用户输入的下一个Query。这将导致对话管理器在遇到下一个Query时优先将Query重新发送到本次离开的对话节点。为了实现这一目的,当前对话流对应的Frame会被移动到Frame列表的最前面,使之成为当前激活对话。
        • 例如,当执行到C节点时,可以告诉对话引擎,现在返回给用户一个响应,并且下一轮对话继续承接用户的输入。这样,当下一轮对话来临时,对话引擎会首先再次执行C节点。
      • 2、本次返回用户后,终止对话。这将导致对话管理器清除当前对话流程图对应的Frame中的所有信息。
  • 尝试其他兄弟节点
  • 例如在上述示例中,对话引擎执行到B节点,B节点认为自己无法处理当前请求,但认为其他节点有可能可以处理该请求。当对话管理引擎收到这个指示时,其将继续访问C节点,看C节点是否可以响应。若C节点也不能响应,则认为当前绘画流程图不能处理本次Query,对话引擎会尝试其他对话流程图是否可以响应该请求
  • 尝试其他对话图
  • 例如在上述示例中,对话引擎执行到B节点,B节点认为自己无法处理当前请求,且当前对话流中的其他节点也不能、或者不应该处理当前请求,则B节点可以指示对话引擎放弃尝试C节点,直接去尝试其他的对话流程图是否可以响应。
  • 继续执行子节点
  • 例如在上述示例中,对话引擎执行到C节点,C节点认为对话可以继续,故其可以指示对话管理引擎继续访问D节点

如何产生用户响应?

NLU解析结果可能包含对一个用户输入Query的多种理解方式,故一个Query对应的NLU解析结果是一个列表,里面可能包含多个意图。其中,排在列表第一位的,是NLU引擎经过排序算法认为最优的结果。但这个最优的结果,不一定是用户想要的结果。另外,用户单次Query所提供的槽位信息可能会有缺失,需要通过多轮对话反问才能获取用户想要的全部信息。因此:

  • 对话管理器返回的意图、槽位等信息,并不是NLU解析的原始结果,而是存放在Frame中,经过对话管理器加工的结果。
  • 编写F节点LUA脚本的终极目的,就是按照用户的业务需求,在Frame中拼装领域、意图、槽位、第三方资源等信息。

基本对象类型

NLU解析结果(NluParsedResult)

成员类型说明备注
querystring用户输入的文本 
entities[]NluParsedEntity从query中解析出的实体词列表 
intents[]NluParsedIntent从query中解析出的意图列表 

实体词解析结果(NluParsedEntity)

成员类型说明备注
textstring实体词的原始值,与用户输入保持一致 
valueString或LuaTable归一化后的实体词,可以是文本,也可以是一个结构体。具体类型可以由type字段决定。当type=Normal时,该字段为字符串,其内容为text归一化后的同义词,无同义词时text与value相同。当type=TODO
dict_nameString该实体词所属的词典名称 
typeString实体词类型,目前可能取值为:Normal 
exLuaTable一个str到str类型的map,用于存储和实体词关联的其他信息暂未启用

意图解析结果(NluParsedIntent)

成员类型说明备注
domain_namestring  
intent_idnumber意图ID意图判断应尽量以意图名称为准。不要使用意图ID,它是对话系统内部的信息,并且有可能会在未来移除对Lua引擎的暴露,除非你是系统开发者,清楚地知道自己在做什么,否则不要使用。
intent_namestring意图名称 
slots[]NluParsedSlot意图抽取出的槽位列表 
source_namestring产生该意图的模块名称 

槽位解析结果(NluParsedSlot)

成员类型说明备注
slot_namestring槽位名称 
slot_typestring槽位包含实体词类型,参考实体词解析结果(NluParsedEntity)类型说明 
textstring参考实体词解析结果(NluParsedEntity)类型说明意图名称 
dict_namestring参考实体词解析结果(NluParsedEntity)类型说明 
valueString或LuaTable参考实体词解析结果(NluParsedEntity)类型说明 
exLuaTable参考实体词解析结果(NluParsedEntity)类型说明 

对话管理器返回条目(DMResponseItem)

成员类型说明备注
  应避免直接操作该对象的内部字段。请通过系统提供的API来操作该对象 

系统环境全局常量

DM_API_VERSION

字符串,获取当前LUA脚本执行环境API接口的版本号,目前为1.0.0

您可以在代码中根据此值来写出兼容不同运行环境的代码

API详情

文档详情

这篇文章是否有帮助?

0