我们经常谈到的移动互联网是与智能手机密不可分的,iPhone 这样的智能手机改变了人们使用手机的交互方式——由功能机(feature phone)的按键式交互变成了触控式交互。对于开发者而言, 意味着嵌入式应用框架的转变,详情可以参考《探索嵌入式应用框架(EAF)》。
Android 和 iOS 成为了移动互联网上的两大主流开发环境,大多数的开发者和企业都有着自己的Android App,那么,如何让这些安卓App 成为DuerOS 上支持语音交互的多模态技能呢?
App技能同样是一种DBP的自定义技能,与其他自定义技能的区别在于需要开发者开发或调整自己的安卓App。DBP 平台上 APP技能的推出使得Android App 可以很快地成为DuerOS 设备上的技能,使安卓系统的App生态能够与DuerOS的技能生态水乳交融,为用户带来更多的价值。
正像老码农在以往技术大会上所讲的那样,APP技能的接入和DBP自定义技能的开发类似,同样遵循六个步骤:
开发者认证
技能创建
技能开发
技能调试
技能审核
技能上线
目前,DBP 平台推出的App技能作为Preview feature 开放给广大企业开发者,遵循预览版的相关审核和流程规范。
开发者需要在DBP平台上传身份证、个人邮箱、手机号等信息,通过审核后成为认证开发者。目前DBP 平台采用了百度AI的证照自动识别技术,可以实现分钟级的身份认证,使开发者能够迅速成为DuerOS 的认证开发者。当然,非认证开发者同样可以创建并调试自定义技能,但只有认证开发者才能完成技能的上线。
对应企业开发者而言,还要上传企业的营业执照扫描件,通过审核后成为认证开发者。
需要注意的是,当前,DBP平台APP 技能的开发只对认证的企业开发者开放。
APP 技能目前作为Preview feature 开放,开发者在创建APP 技能的时候首先要阅读并确认《DBP应用开发者协议》。
然后,填写技能名称等相关信息,提交后,等候Preivew 的审核。
在Preview 审核通过后,即表示APP 技能创建完成,可以对技能的意图/槽位/词典等进行配置操作了,详情参见《感知自然语言理解(NLU)》。
APP 技能开发包括两部分:技能(bot) 服务的开发和 APP 客户端的开发。
APP 技能的bot 服务开发与DBP 上其他自定义技能的开发类似,尤其与交互模型的建立,关于意图、槽位、词典、常用表达等参考《技能交互模型》。
目前,多数APP 技能都采用了DBP 平台的代理服务AVC(App Voice Control),这样无需独立部署服务器即可使用语音交互的能力。简单地说, 设计并填写完交互模型,就可以认为是开发完成了。AVC 将语音交互的结果以结构化数据返回给APP 客户端,由客户端完成对应的操作。
对于复杂交互的APP 技能而言,同样可以部署自己的物理bot,在自己的技能服务中实现更复杂的逻辑。
针对语音交互的复杂程度,APP 客户端的开发可以分为4个等级:
L1: 只支持打开/退出的语音指令
L2: 支持有限的语音指令
L3: 支持多种意图\槽位\词典\常用表达的语音指令
L4: 支持用户话术的内容直达以及使用自己的物理bot处理更复杂的语音指令
从客户端的维度看,可以分为集成Bot App SDK 的APP 技能和未集成Bot App SDK 的APP 技能。L1等级的APP技能没有集成Bot APP SDK,L2/L3/L3等级的APP技能集成了Bot APP SDK。
在DBP 平台的控制台,依次选择 【创建技能】->【自定义技能】->【Android App 技能】, 填写技能名称和APP 包名,如图所示:
一步完成,待开发者App自身完成开发后,即可进入L1 APP 技能的调试阶段。
L2 技能使用了本地自定义交互模型,意思就是用户语音指令和意图匹配关系,定义在本地代码中。
参考示例代码(https://github.com/dueros/AndroidBotSdkDemo)将Bot App SDK 集成到开发者的APP 技能中。
开发者只需要参考代码组装UIContextPayload对象,就可以完成本地自定义交互模型的构建,示例代码如下:
// 1.创建UIContextPayload对象开始组装
UiContextPayload payload = new UiContextPayload();
// 2.定义用户语音意图集合(尽可能丰富的收集用户表达,常用同音异字表达都加上,比如“登录”&“登陆”)
String[] loginWords = {"开始","点击开始","开始游戏","启动游戏","进行游戏"};
// 3.可以定义支持的话术
payload.addHyperUtterance(“sdkdemo://startGame”, Arrays.asList(loginWords), null, null);
// 重复步骤2.3 可以添加多个交互组件。比如开始,退出,登录,注册......
BotSdk.getInstance().updateUiContext(payload);
用户的语音表达,命中自定义交互组件中定义的具体话术后,云端匹配成功,并封装url为ClickLink指令下发到设备端。设备端收到ClickLink指令,通过回调方法onClickLink,把匹配结果分发给App,示例代码如下:
/**
* 云端返回的UIContext匹配结果
* @param url 自定义交互描述中的url
* @param paramMap 对于系统内建类型,参数列表。参数就是从query中通过分词取得的关键词。这个参数配合type,params字段使用
*/
@Override
public void onClickLink(String url, HashMap paramMap) {
if ("sdkdemo://startGame".equals(url)) {
//TODO 执行开始游戏逻辑,比如是startGameBtn.performClick()
}
}
开发者完成Android App开发后,即可进入L1 APP 技能的调试阶段。
L3技能使用了DBP 平台的自定义交互模型,关于如何构建交互模型,可以参考《技能交互模型》。
参考示例代码(https://github.com/dueros/AndroidBotSdkDemo)将Bot App SDK 集成到开发者的APP 技能中。
在客户端APP 中, 会通过Bot App SDK的 回调方法handleIntent在App中处理意图的内容,示例代码如下:
/***
* 云端意图返回结果
* @param intent 意图内容,参考{@link BotIntent} 包含意图名称和槽位参数结构如下
* {@link BotIntent#name} 意图名称,对应于云端创建意图的 意图标识名
* {@link BotIntent#slots} 槽位列表 对应于云端创建意图的 槽位信息,数量(0~n)
* 槽位信息结构如下:
* {@link com.baidu.duer.botsdk.BotIntent.Slot#name} 槽位名称
* {@link com.baidu.duer.botsdk.BotIntent.Slot#value} 槽位值
* @param customData 自定义数据,暂时不用
*/
@Override
public void handleIntent(BotIntent intent, String customData) {
String intentResult = "\n指令名称:%s\n槽位信息:%s";
Log.i("HandleIntentTAG", "intent result:" + intentResult);
if ("queryWeather".equals(intent.name)) {
String loactionOfWeather;
if (intent.slots != null) {
for (BotIntent.Slot slot : intent.slots) {
// 遍历槽位列表,找到需要的槽位值
if ("sys.city".equals(slot.name)) {
loactionOfWeather = slot.value;
}
}
}
// TODO 使用localtionOfWeather 参数查询天气
}
}
开发者完成Android App开发后,即可进入L3 APP 技能的调试阶段。
L4 的APP 技能还在内测阶段,需要联系DBP 的产品经理进行完整的接入流程。
目前,APP 技能还处于Preview feature 阶段,因此只能在真机上进行技能调试。
创建好APP技能后,点击【测试验证】 → 点击【真机测试】→ 点击【新增设备SN】,添加自己的小度设备SN。
开发者在配置好设备SN之后,可以对真机设备说,“小度小度,打开技能开发助手”,在技能的菜单中选择【升级为开发版ROM】,根据语音提示进行后续操作即可。
注意:如果以上操作都完成还是提示申请升级失败,请确认设备上的账号和DBP平台登录的账号是否一致,要确保使用相同的账号。
在开发环境安装成功之后, 需要下载开发环境的密钥本地。
真机调试密钥的使用方法如下:
1)替换到设备本地的 ~/.android 目录中
2)执行命令重启adb:
adb kill-server
adb start-server
在真机的调试环境和调试密钥都安装成功后, 就可以使用 adb 命令安装目标APP了。
在保持开发者账号和小度设备账号一致的前提下,开启技能调试模式的按钮,对设备说,“开启技能调试”。
在技能调试模式下, 开发者就可以使用语音交互来调试APP 技能了。
为了确保用户体验,APP 技能需要通过严格审核才能发布上线。
APP 技能申请上线的方式与一般的自定义技能类似,具体可以参考《技能发布》。
APP 技能与一般的自定义技能区别在于要明确客户端APP 的版本号(形如a.b.c.d),并上传APP 的客户端包。
APP 技能的审核遵从DuerOS 技能审核的一般原则,包括技能元数据审核,功能性测试和技能交互信息测试等,具体可以参考《技能审核规范》。
APP 技能的审核还包括了客户端的安全检查和性能压测等验证方式。
同时,APP 还涉及权限申请,例如camera、录音、手势等,在审核的时候会分别给予确认。
开发者在【发布管理】->【版本管理】中可以看到审核的结果,如果没有通过审核的话,可以查看失败的原因。
另外,开发者也可以在【个人中心】->【消息中心】中查看审核的相关信息。
技能审核通过后,即处于上线状态,全网上线在2个工作日内完成。
APP 技能在首次上线的时候,需要上传客户端的APP包,并明确APP技能的客户端版本(形如a.b.c.d), 并明确技能交互的模型的版本,这对APP技能的后续升级至关重要。
APP 技能升级一般包括3种情况:
只升级APP 客户端
只升级技能交互模型
既升级APP 客户端又升级技能交互模型
如果只是客户端APP的升级,需要重新上传APP包,更新版本号,即可申请上线审核。
如果只升级交互模型,无需重新上传APP包,只需要更新交互模型的版本号,即可申请上线审核。
对于升级APP 客户端又升级技能交互模型的情形,需要对APP客户端的版本号和交互模型的版本号,同时上传更新的APP包,形同初次上线。
综上所述,App 技能的接入与开发流程同样分为6个阶段,开发者认证->技能创建->代码开发->技能调试->技能审核->上线商用。如果开发者的Android App 自身没有什么问题的话(例如,安全问题,内测泄露等等),一般可以在3~5天内完成App技能的上线,进而使开发者的App迅速地使用DuerOS 的多模态交互能力, 在数千万DuerOS 设备上为广大用户带来更丰富的用户体验。
【参考资料】
https://dueros.baidu.com/dbp
https://dueros.baidu.com/didp/doc/dueros-bot-platform/dbp-apk-skill/appskilldevelopment_markdown
多模态交互之DPL 2.0
聊聊“全双工”
调试DuerOS的智能语音技能
DuerOS的零编程技能实现
揭秘“语音交互”背后的AI硬核黑科技!
《智能语音时代》的读书笔记
再看语音交互设计
语音交互设计的一点认知
百度AI开发者大会之DuerOS 回顾
AI开发者大会中的公开课解读——DuerOS技能开发与CFC编程
AI开发者大会中的公开课解读——如何在DuerOS技能中实现用户支付购买
DPL 来了——百度2019AI开发者大会DuerOS公开课解读之三
故事工厂在DuerOS技能开发中的应用——百度2019AI开发者大会DuerOS公开课解读之四
企业赋能 AI 服务生活
DuerOS 走进初夏的成都
放心用吧!浅谈DuerOS的安全性
智能音箱场景下的性能优化
在校大学生能成为DuerOS 的独立开发者吗?
生动化你的表达——DuerOS中的SSML应用
用JavaScript打造AI应用-从Nodejs SDK 看DuerOS的技能开发
从Java SDK看DuerOS的技能开发
面向接口/协议?看DuerOS的技能开发
感知自然语言理解(NLU)
感知人工智能操作系统