开发自定义技能

一.概述

1.1 什么是自定义技能

目前DUI平台上共有三种技能类型:任务型、知识型及自定义。
DUI平台上的自定义技能是指对话类型为自定义(包括任务型、检索问答、知识图谱、自定义)的技能,可定制识别或者语义,通过代理服务接管对话,适用于有代码能力,有部署自有对话服务能力的开发者和第三方平台的技能接入。开发者可按照DSK协议中的约定接管对话流程。

1.2 自定义技能的定位

自定义技能使得开发者可以更加灵活的应用DUI的语音交互能力。
自定义技能可以满足以下两类开发者的需求:
1、需要使用DUI的ASR及NLU,希望自己完成对话管理。如,需要实现类似成语接龙等更为复杂的对话流程
2、仅需要用到DUI的ASR,希望自己完成语义解析及对话管理。如,第三方平台技能接入DUI平台

二.自定义技能的定制

2.1 创建技能

点击【创建我的技能】,选择【自定义】技能类型,输入技能名称、选择技能类型后,即创建了一个自定义技能。
Minion

2.2 添加说法

自定义技能依然可以在DUI平台应用添加说法、语义标注、指代消歧、语义模型训练等功能,操作步骤可参考任务型技能。
需要注意的是:
1.自定义技能的对话输出部分仅能通过【设置服务地址】的方式完成;
2.错误处理_语音识别为空 可在平台上完成配置,错误处理_语义理解为空 需要在开发者自己的服务上完成;
Minion
自定义技能的语义解析除了能通过在DUI平台完成外外,还可以在自己的服务上完成语义解析。

2.3 多轮对话

自定义技能的对话流程可由开发者自行接管,其中需要重点区分的是以下三个字段。

字段 定义 生命周期
request DUI对话服务对开发者自由服务发起的一次请求 发起请求到收到响应
session 用户与某一个skill交互过程的会话, session是与skill对应的, 请求不同skill的session id是不同的 用户请求被分派到某skill, 到与该skill的交互结束, 一个session期间有多个request
context 跨skill的交互上下文信息和系统级的共享信息 一直存在, 但因存储空间有限, 和交互历史相关的字段有过期时间

具体内容及相关约定请参考DSK接入协议

2.4 配置代理服务

2.4.1 相关概念

服务地址:即开发者部署的服务器地址。
调用名:即进入该技能的口令,通过调用名可直接调用本技能。每个技能只能有一个调用名,且调用名不能重复。
智能调度: 产品中可能有多个技能,类似的说法可能会在不止一个技能中出现。在这种情况下,开启智能调度后,命中另一个技能的强说法时,会直接进入另一个技能。
Minion

2.4.2 配置步骤

自定义技能的对话输出采用“接入服务代理“模式,具体步骤如下:
1)开发者DSK协议根据完成本地服务开发工作。
2)服务端开发完毕,在服务机中启动该服务(选用空闲的端口)。
3)点击左侧导航栏的设置,会展示自定义技能的设置页面。
4) 在设置页面配置服务地址。服务地址目前仅支持填写Web服务地址,需要填写开发者自己服务的公网IP地址、端口和路径,例如:http://220.181.57.216:8001/demo。支持配置自定义key及value。
4)填写调用名,用来唤醒自己的服务.
5)保存配置,点击左侧测试按钮,可进行在线测试.
Minion

2.5 进入技能

自定义技能支持调用名和强说法进入。

1、调用名是指进入该技能的口令,本质上是可命中该技能的一句强说法。调用名要求全平台唯一,未提交至技能商店的技能不限制调用名修改次数,提交至技能商店的技能仅可修改两次。
进入说法:

  • a. 支持仅说调用名进入,如说“成语接龙”即可进入对应技能;除此以外,平台也针对调用名做了说法扩展,用户说“打开成语接龙”也可以进入对应技能;
  • b. 支持说调用名+说法进入,如说“高德导航我要去苏州中心”也可以进入对应技能;

回复:

  • 点击调用名后的配置按钮,可以为调用名配置回复内容
    Minion
  • a. 当配置为sys.task和sys.intent时,平台会将调用名内容传给服务地址,开发者可以自行完成回复语句;若配置其他任务、意图,将通过选定意图中设定来回复;
  • b. 如果输入“调用名+说法”,将根据语义解析结果,输出对应意图的回复;

2. 强说法:自定义技能支持强说法进入,根据命中的意图及对话条件输出对应的回复内容,相关逻辑同任务型对话。
3. 调度
  • a. 同时命中两个技能,技能A是通过调用名命中的,技能B是通过强说法命中的,优先进入技能A。
  • b. 同时命中两个技能,技能A是通过“调用名+说法”命中的,技能B是通过强说法命中的,优先进入技能A。

2.6 退出技能

1、自定义技能同任务型技能一样,有 智能调度 的属性:开启服从智能调度后,如果用户说法命中了其他技能的调用名或强说法,则跳转到对应技能;未开启服从智能调度,则即使命中其他技能的调用名或强说法也不跳转到对应技能。
需注意的是,将技能提交技能商店时,平台会针对是否服从调度进行审核,如果被认定为恶意占用session,则不予审核通过。
2、自定义技能集成到产品中,依然遵从产品中设置的错误重试次数。超过产品设置中错误次数,将主动退出。
3、自定义技能集成到产品中后,对话交互的退出将优先产品级退出的设定,如果命中产品中配置的退出说法,即结束当前的语音交互。
4、完成自定义技能的交互设定后,技能将主动结束session。
5、对话在一段时间内,强制释放此次session。

2.7 发布与提交

完成自定义技能服务地址的配置后,可以在DUI控制台实时测试。具体的操作同任务型技能一样,可以仅针对此自定义技能做技能级的测试,也可以集成到产品中,做产品级的测试。
自定义技能的发布/提交与任务型技能一样,完成开发后可以发布技能,发布后仍可以修改技能;发布的技能可以提交到技能商店,其他开发者从技能商店中可以获取和使用该技能,但不支持继承此技能。

三. 开发示例

DUI提供了可用于下载的Java和Python格式的示例资源包,以及和资源包配套的自定义技能实例的任务文件。

3.1 导入任务文件

前往DUI控制台,创建自定义技能后,将下载的任务文件模板导入技能中。
Minion

  • 点此下载Java 示例对应的任务文件


  • 点此下载python 示例对应的任务文件
  • 3.2 下载Python示例**

    Python 代码下载:
    Minion

    3.3 下载Java示例**

    Java demo下载:
    Minion

    3.4 在线测试

    在线测试效果如下图:
    Minion

    四 注意事项

    1)服务地址必须填写服务的公网IP地址,否则DUI网站请求将无法到达开发者的服务地址。
    2)调用名用来唤醒开发者的自有服务,第一次发送调用名本质上就是平台向开发者自有服务发送请求开始客户端与服务端的交互。
    3)对于提交到技能商店的技能,调用名是唯一的,不可重复。如果重名,需要开发者在本地服务和控制台上同时更改调用名,在线测试时需要用更改后的调用名来唤醒服务。
    4)在线测试时如果有返回报错,可以通过查看json代码,查找问题。