小度技术支持文档

小度技术支持文档


APP 技能的开发

<p>[TOC]</p> <p>APP 技能开发包括两部分: bot 服务的开发和 APP 客户端的开发。</p> <h3>1 Bot 服务的开发</h3> <ol> <li>APP 技能的 bot 服务开发与 DBP 上其他自定义技能的开发类似,尤其与交互模型的建立,关于意图、槽位、词典、常用表达等参考《技能交互模型》。</li> <li>目前,多数 APP 技能都采用了 DBP 平台的代理服务 AVC(App Voice Control),这样无需独立部署服务器即可使用语音交互的能力。简单地说, 设计并填写完交互模型,就可以认为是开发完成了。AVC 将语音交互的结果以结构化数据返回给 APP 客户端,由客户端完成对应的操作。</li> <li>对于复杂交互的 APP 技能而言,同样可以部署自己的物理 bot,接入流程联系<code>dueros-bd@baidu.com</code></li> </ol> <h3>2 APP 客户端的开发</h3> <p>针对语音交互的复杂程度,APP 客户端的开发可以分为 4 个等级:</p> <ul> <li>L1: 只支持打开/退出的语音指令</li> <li>L2: 支持有限的语音指令</li> <li>L3: 支持多种意图\槽位\词典\常用表达的语音指令</li> <li>L4: 支持用户话术的内容直达以及使用自己的物理 bot 处理更复杂的语音指令</li> </ul> <p>从客户端的维度看,可以分为集成 Bot App SDK 的 APP 技能和未集成 Bot APP SDK 的 APP 技能。L1 等级的 APP 技能没有集成了 Bot APP SDK,L2/L3/L4 等级的 APP 技能集成了 Bot APP SDK。</p> <h4>2.1 L1 APP 技能的开发</h4> <p>在 DBP 平台的控制台,依次选择 【创建技能】-&gt;【自定义技能】-&gt;【Android App 技能】, 填写技能名称和 APP 包名,待开发者 App 自身完成开发后,即可进入 L1 APP 技能的调试阶段。 [<code>详细见:APP技能创建文档</code>](<a href="https://www.showdoc.com.cn/2104324603939229/9459790437553728">https://www.showdoc.com.cn/2104324603939229/9459790437553728</a> &quot;<code>详细见:APP技能创建文档</code>&quot;)</p> <h4>2.2 L2 APP 技能的开发</h4> <p>L2 技能使用了本地自定义交互模型,意思就是用户语音指令和意图匹配关系,定义在本地代码中。</p> <ul> <li> <p>参考示例代码 <a href="https://github.com/dueros/AndroidBotSdkDemo">https://github.com/dueros/AndroidBotSdkDemo</a> 将 Bot App SDK 集成到开发者的 APP 技能中。</p> </li> <li> <p>开发者只需要参考代码组装 UIContextPayload 对象,就可以完成本地自定义交互模型的构建,示例代码如下:</p> <pre><code>// 1.创建UIContextPayload对象开始组装 UiContextPayload payload = new UiContextPayload(); // 2.定义用户语音意图集合(尽可能丰富的收集用户表达,常用同音异字表达都加上,比如“登录”&amp;amp;“登陆”) String[] loginWords = {&amp;quot;开始&amp;quot;,&amp;quot;点击开始&amp;quot;,&amp;quot;开始游戏&amp;quot;,&amp;quot;启动游戏&amp;quot;,&amp;quot;进行游戏&amp;quot;}; // 3.可以定义支持的话术 payload.addHyperUtterance(“sdkdemo://startGame”, Arrays.asList(loginWords), null, null); // 重复步骤2.3 可以添加多个交互组件。比如开始,退出,登录,注册...... BotSdk.getInstance().updateUiContext(payload);</code></pre> </li> <li>用户语音表达,命中自定义交互组件后,云端匹配匹配成功,并封装 url 为 ClickLink 指令下发到设备端。设备端收到 ClickLink 指令,通过回调方法 onClickLink,把匹配结果分发给 App,示例代码如下:</li> </ul> <pre><code class="language-java">/** * 云端返回的UIContext匹配结果 * @param url 自定义交互描述中的url * @param paramMap 对于系统内建类型,参数列表。参数就是从query中通过分词取得的关键词。这个参数配合type,params字段使用 */ @Override public void onClickLink(String url, HashMap&amp;lt;String, String&amp;gt; paramMap) { if (&amp;quot;sdkdemo://startGame&amp;quot;.equals(url)) { //TODO 执行开始游戏逻辑,比如是startGameBtn.performClick() } }</code></pre> <p>待开发者 app 自身完成开发后,即可进入 L2 APP 技能的调试阶段。</p> <h4>2.3 L3 APP 技能的开发</h4> <p>L3 技能使用了 DBP 平台的自定义交互模型,关于如何构建交互模型,可以参考《技能交互模型》。</p> <ul> <li> <p>参考示例代码 <a href="https://github.com/dueros/AndroidBotSdkDemo">https://github.com/dueros/AndroidBotSdkDemo</a> 将 Bot client SDK 集成到开发者的 APP 技能中。</p> </li> <li>在客户端 APP 中, 会通过 Bot APP SDK 的 回调方法 handleIntent 在 App 中处理意图内容,示例代码如下:</li> </ul> <pre><code class="language-java">/*** * 云端意图返回结果 * @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 = &amp;quot;\n指令名称:%s\n槽位信息:%s&amp;quot;; Log.i(&amp;quot;HandleIntentTAG&amp;quot;, &amp;quot;intent result:&amp;quot; + intentResult); if (&amp;quot;queryWeather&amp;quot;.equals(intent.name)) { String loactionOfWeather; if (intent.slots != null) { for (BotIntent.Slot slot : intent.slots) { // 遍历槽位列表,找到需要的槽位值 if (&amp;quot;sys.city&amp;quot;.equals(slot.name)) { loactionOfWeather = slot.value; } } } // TODO 使用localtionOfWeather 参数查询天气 } } </code></pre> <ul> <li>待开发者 App 自身完成开发后,即可进入 L3 APP 技能的调试阶段。</li> </ul> <h4>2.4 L4 APP 技能的开发</h4> <p>L4 的 APP 技能与自定义技能类似,可以挂接开发者自己的 bot 服务,如下所示: <img src="http://dumi-dueros-bj-tob.cdn.bcebos.com/amis/2022-10/1666244242374/apk_L4.png" alt="" /></p> <ul> <li>L4 的 APP 技能使用开发者自己的 bot 服务,通过 DuerOS 开放平台与 App 的客户端进行通信,可以充分利用 DuerOS 的各种能力,为用户提供更好的用户体验。</li> </ul>

页面列表

ITEM_HTML