1、功能介绍
多结果选择,是多轮交互中的一种常见形式,即根据用户输入,得到多个满足条件的候选资源,无法判断到底哪个是用户真正想要的,于是再进行一轮交互,让用户进行二次选择,从而得到唯一的结果,下图所示:
整个过程的交互流程如下图:
第一轮交互,用户输入query,UNIT返回意图槽位及对应的action等,开发者根据“user_to:百度”执行查库操作,得到多个与『百度』相关的候选结果列表,并展示给用户。
第二轮交互,用户看到开发者展示的候选列表后,进行选择,开发者将用户输入的选择话术及候选结果列表一并发送给UNIT(方式建接口参数说明), UNIT将解析用户的选择结果,并将其加入到理解结果中,返回给开发者。
如果记忆开关(见接口参数说明)是开启状态,那么UNIT会记住该用户的偏好。下次该用户再说『我要去百度』(仅限同一user_id输入的相同query)时,直接将目的地解析为上次选择的结果,即百度大厦,如下图所示:
整个过程的交互流程如下图:
2、使用说明
为了实现多结果选择,开发者需要在对话API传入 本轮用户的输入+上一轮的候选列表。request.client_session字段可以传入上一轮的候选列表,它必须包含两个key,它们是client_results和candidate_options(值可以分别设为空串和空list),然后在request.client_session.candidate_options[]加入自己的候选列表,格式如下:
{
"client_results":"",
"candidate_options":[
{
"attributes":{
"name":"百度大厦",
"addr":"上地十街",
"distance":"2.3km"
},
"slot_updates":{
"user_to":"百度大厦"
},
"remember":true
},
{
"attributes":{
"name":"百度科技园",
"addr":"西北旺10号",
"distance":"164m"
},
"slot_updates":{
"user_to":"百度科技园"
},
"remember":true
}
]
}
candidate_options[i]. attributes表示第i个候选项的属性信息,用以同用户的选择话术进行匹配(其中的属性名由开发者自行设定,可以复用底层知识库中的属性名,也可以另起名字);这里传入的属性信息,最好同C端向用户展示的信息一致,如图2中每个候选项向用户展示了名称、地址、距离等属性,每个属性都可能被用户用来进行选择,所以最好都传入。
candidate_options[i]. slot_updates表示第i个候选项对应的词槽信息,即假如用户选中该选项后,什么样的词槽将会被添加进对话状态中。如图2中用户选择了百度大厦后,UNIT结果中出现了『user_to:百度大厦』这个词槽。该字段由开发者自行根据候选项对应的词槽及属性确定
candidate_options[i]. remember记忆开关,为true时,选择该选项将会被UNIT记住用户的偏好。False时,选择遗忘,下次该用户输入相同query,仍会解析为原结果。