DSK协议基本概念

定义

自定义技能接入协议(DSK)中,JSON格式的请求体主要包括三部分: requestsessioncontext
request是与当前请求相关的数据, session是与当前技能会话相关的数据, context是全局共享的数据.详细定义如下表:

对象 定义 生命周期
input 用户的一次输入, 多次输入, 经过会形成一个request, 比如U: "导航", S: "去哪?" U: "北京" 用户一次输入
request dui对话服务对外部技能服务发起的一次请求, 分为开始请求、意图请求、结束请求 发起请求到收到响应
session 用户与某一个skill交互过程的会话, session是与skill对应的, 请求不同skill的session id是不同的 用户请求被分派到某skill, 到与该skill的交互结束, 一个session期间有多个request
context 用户与dui客户端交互过程中保存的跨skill的交互上下文信息(slot-value等), 和系统级的共享信息(user id, product id, client type, device info等) 一直存在, 但因存储空间有限, 和交互历史相关的字段有过期时间


生命周期长度:context > session > request > input

示例 skill yield&re-dispatch

适用场景:交互过程中skill 1发现不能处理的用户请求, 主动yield, skill dispatcher将请求redispatchskill 2

request response skill session context
U: 打电话 StartRequest({tel, session1, 电话意图}) {你要打给谁}
tel session1 global shared context
S: 您要打给谁 N/A N/A tel session1 global shared context
U: 导航到北京 ContinueRequest({tel, session1, 空意图})
EndRequest(tel, session1}) // 发生redispatch
ContinueRequest({navi, session2, 导航意图, 北京})

{ yield: true }
{...} // session1被动结束
{为您找到如下北京地点}
navi session2 global shared context
S: 为您找到如下北京地点... N/A N/A navi session2 global shared context
U: 第一个 ContinueRequest({navi, session2, 选择意图, 1}) {准备导航到天安门, shouldEndSession:true} // session2主动结束 navi session2 global shared context
S: 准备导航到天安门 N/A N/A navi session2 global shared context

示例 skill 中断与恢复

适用场景:多轮交互中临时插入一个单轮的快捷命令, 机器在响应用户的单轮快捷命令后继续之前的多轮交互

request response skill session context
U: 打电话 StartRequest({tel, session1, 电话意图}) {你要打给谁}
tel session1 global shared context
S: 您要打给谁 N/A N/A tel session1 global shared context
U: 调大音量 ContinueRequest({cmd, session2, 调大音量}) {已为您调大音量, shouldEndSession:true} // session2主动结束 cmd session2 global shared context
S: 已为您调大音量 N/A N/A cmd session2 global shared context
S: 您要打给谁 N/A N/A tel session1 global shared context
U: 张三 EndRequest({tel, session1, 选择意图, 1}) {准备拨打张三, shouldEndSession:true} // session1主动结束 tel session1 global shared context
S: 准备拨打张三 N/A N/A tel session1 global shared context