一個(gè)安卓App,如何成為DuerOS 上的技能應(yīng)用呢?
我們經(jīng)常談到的移動(dòng)互聯(lián)網(wǎng)是與智能手機(jī)密不可分的,iPhone 這樣的智能手機(jī)改變了人們使用手機(jī)的交互方式——由功能機(jī)(feature phone)的按鍵式交互變成了觸控式交互。
Android 和 iOS 成為了移動(dòng)互聯(lián)網(wǎng)上的兩大主流開發(fā)環(huán)境,大多數(shù)的開發(fā)者和企業(yè)都有著自己的Android App,那么,如何讓這些安卓App 成為DuerOS 上支持語音交互的多模態(tài)技能呢?
DBP 上的 App 技能
App技能同樣是一種DBP的自定義技能,與其他自定義技能的區(qū)別在于需要開發(fā)者開發(fā)或調(diào)整自己的安卓App。DBP 平臺(tái)上 APP技能的推出使得Android App 可以很快地成為DuerOS 設(shè)備上的技能,使安卓系統(tǒng)的App生態(tài)能夠與DuerOS的技能生態(tài)水乳交融,為用戶帶來更多的價(jià)值。
正像老碼農(nóng)在以往技術(shù)大會(huì)上所講的那樣,APP技能的接入和DBP自定義技能的開發(fā)類似,同樣遵循六個(gè)步驟:
- 開發(fā)者認(rèn)證
- 技能創(chuàng)建
- 技能開發(fā)
- 技能調(diào)試
- 技能審核
- 技能上線
目前,DBP 平臺(tái)推出的App技能作為Preview feature 開放給廣大企業(yè)開發(fā)者,遵循預(yù)覽版的相關(guān)審核和流程規(guī)范。
1. 開發(fā)者認(rèn)證
開發(fā)者需要在DBP平臺(tái)上傳身份證、個(gè)人郵箱、手機(jī)號等信息,通過審核后成為認(rèn)證開發(fā)者。目前DBP 平臺(tái)采用了百度AI的證照自動(dòng)識(shí)別技術(shù),可以實(shí)現(xiàn)分鐘級的身份認(rèn)證,使開發(fā)者能夠迅速成為DuerOS 的認(rèn)證開發(fā)者。當(dāng)然,非認(rèn)證開發(fā)者同樣可以創(chuàng)建并調(diào)試自定義技能,但只有認(rèn)證開發(fā)者才能完成技能的上線。
對應(yīng)企業(yè)開發(fā)者而言,還要上傳企業(yè)的營業(yè)執(zhí)照掃描件,通過審核后成為認(rèn)證開發(fā)者。
需要注意的是,當(dāng)前,DBP平臺(tái)APP 技能的開發(fā)只對認(rèn)證的企業(yè)開發(fā)者開放。
2. APP技能創(chuàng)建
APP 技能目前作為Preview feature 開放,開發(fā)者在創(chuàng)建APP 技能的時(shí)候首先要閱讀并確認(rèn)《DBP應(yīng)用開發(fā)者協(xié)議》。
然后,填寫技能名稱等相關(guān)信息,提交后,等候Preivew 的審核。
在Preview 審核通過后,即表示APP 技能創(chuàng)建完成,可以對技能的意圖/槽位/詞典等進(jìn)行配置操作了,詳情參見《感知自然語言理解(NLU)》。
3. APP技能的開發(fā)
APP 技能開發(fā)包括兩部分:技能(bot) 服務(wù)的開發(fā)和 APP 客戶端的開發(fā)。
3.1 技能服務(wù)的開發(fā)
APP 技能的bot 服務(wù)開發(fā)與DBP 上其他自定義技能的開發(fā)類似,尤其與交互模型的建立,關(guān)于意圖、槽位、詞典、常用表達(dá)等參考《技能交互模型》。
目前,多數(shù)APP 技能都采用了DBP 平臺(tái)的代理服務(wù)AVC(App Voice Control),這樣無需獨(dú)立部署服務(wù)器即可使用語音交互的能力。簡單地說, 設(shè)計(jì)并填寫完交互模型,就可以認(rèn)為是開發(fā)完成了。AVC 將語音交互的結(jié)果以結(jié)構(gòu)化數(shù)據(jù)返回給APP 客戶端,由客戶端完成對應(yīng)的操作。
對于復(fù)雜交互的APP 技能而言,同樣可以部署自己的物理bot,在自己的技能服務(wù)中實(shí)現(xiàn)更復(fù)雜的邏輯。
3.2 APP 客戶端的開發(fā)
針對語音交互的復(fù)雜程度,APP 客戶端的開發(fā)可以分為4個(gè)等級:
- L1: 只支持打開/退出的語音指令
- L2: 支持有限的語音指令
- L3: 支持多種意圖\槽位\詞典\常用表達(dá)的語音指令
- L4: 支持用戶話術(shù)的內(nèi)容直達(dá)以及使用自己的物理bot處理更復(fù)雜的語音指令
從客戶端的維度看,可以分為集成Bot App SDK 的APP 技能和未集成Bot App SDK 的APP 技能。L1等級的APP技能沒有集成Bot APP SDK,L2/L3/L3等級的APP技能集成了Bot APP SDK。
3.2.1 L1 APP 技能的開發(fā)
在DBP 平臺(tái)的控制臺(tái),依次選擇 【創(chuàng)建技能】->【自定義技能】->【Android App 技能】, 填寫技能名稱和APP 包名,如圖所示:
一步完成,待開發(fā)者App自身完成開發(fā)后,即可進(jìn)入L1 APP 技能的調(diào)試階段。
3.2.2 L2 APP 技能的開發(fā)
L2 技能使用了本地自定義交互模型,意思就是用戶語音指令和意圖匹配關(guān)系,定義在本地代碼中。
參考示例代碼(https://github.com/dueros/AndroidBotSdkDemo)將Bot App SDK 集成到開發(fā)者的APP 技能中。
開發(fā)者只需要參考代碼組裝UIContextPayload對象,就可以完成本地自定義交互模型的構(gòu)建,示例代碼如下:
- // 1.創(chuàng)建UIContextPayload對象開始組裝
- UiContextPayload payload = new UiContextPayload();
- // 2.定義用戶語音意圖集合(盡可能豐富的收集用戶表達(dá),常用同音異字表達(dá)都加上,比如“登錄”&“登陸”)
- String[] loginWords = {"開始","點(diǎn)擊開始","開始游戲","啟動(dòng)游戲","進(jìn)行游戲"};
- // 3.可以定義支持的話術(shù)
- payload.addHyperUtterance(“sdkdemo://startGame”, Arrays.asList(loginWords), null, null);
- // 重復(fù)步驟2.3 可以添加多個(gè)交互組件。比如開始,退出,登錄,注冊......
- BotSdk.getInstance().updateUiContext(payload);
用戶的語音表達(dá),命中自定義交互組件中定義的具體話術(shù)后,云端匹配成功,并封裝url為ClickLink指令下發(fā)到設(shè)備端。設(shè)備端收到ClickLink指令,通過回調(diào)方法onClickLink,把匹配結(jié)果分發(fā)給App,示例代碼如下:
- /**
- * 云端返回的UIContext匹配結(jié)果
- * @param url 自定義交互描述中的url
- * @param paramMap 對于系統(tǒng)內(nèi)建類型,參數(shù)列表。參數(shù)就是從query中通過分詞取得的關(guān)鍵詞。這個(gè)參數(shù)配合type,params字段使用
- */
- @Override
- public void onClickLink(String url, HashMap<String, String> paramMap) {
- if ("sdkdemo://startGame".equals(url)) {
- //TODO 執(zhí)行開始游戲邏輯,比如是startGameBtn.performClick()
- }
- }
開發(fā)者完成Android App開發(fā)后,即可進(jìn)入L1 APP 技能的調(diào)試階段。
3.2.3 L3 APP 技能的開發(fā)
L3技能使用了DBP 平臺(tái)的自定義交互模型,關(guān)于如何構(gòu)建交互模型,可以參考《技能交互模型》。
參考示例代碼(https://github.com/dueros/AndroidBotSdkDemo)將Bot App SDK 集成到開發(fā)者的APP 技能中。
在客戶端APP 中, 會(huì)通過Bot App SDK的 回調(diào)方法handleIntent在App中處理意圖的內(nèi)容,示例代碼如下:
- /***
- * 云端意圖返回結(jié)果
- * @param intent 意圖內(nèi)容,參考{@link BotIntent} 包含意圖名稱和槽位參數(shù)結(jié)構(gòu)如下
- * {@link BotIntent#name} 意圖名稱,對應(yīng)于云端創(chuàng)建意圖的 意圖標(biāo)識(shí)名
- * {@link BotIntent#slots} 槽位列表 對應(yīng)于云端創(chuàng)建意圖的 槽位信息,數(shù)量(0~n)
- * 槽位信息結(jié)構(gòu)如下:
- * {@link com.baidu.duer.botsdk.BotIntent.Slot#name} 槽位名稱
- * {@link com.baidu.duer.botsdk.BotIntent.Slot#value} 槽位值
- * @param customData 自定義數(shù)據(jù),暫時(shí)不用
- */
- @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 參數(shù)查詢天氣
- }
- }
開發(fā)者完成Android App開發(fā)后,即可進(jìn)入L3 APP 技能的調(diào)試階段。
3.2.4 L4 APP 技能的開發(fā)
L4 的APP 技能還在內(nèi)測階段,需要聯(lián)系DBP 的產(chǎn)品經(jīng)理進(jìn)行完整的接入流程。
4. APP技能調(diào)試
目前,APP 技能還處于Preview feature 階段,因此只能在真機(jī)上進(jìn)行技能調(diào)試。
4.1 真機(jī)調(diào)試開發(fā)環(huán)境的安裝
創(chuàng)建好APP技能后,點(diǎn)擊【測試驗(yàn)證】 → 點(diǎn)擊【真機(jī)測試】→ 點(diǎn)擊【新增設(shè)備SN】,添加自己的小度設(shè)備SN。
開發(fā)者在配置好設(shè)備SN之后,可以對真機(jī)設(shè)備說,“小度小度,打開技能開發(fā)助手”,在技能的菜單中選擇【升級為開發(fā)版ROM】,根據(jù)語音提示進(jìn)行后續(xù)操作即可。
注意:如果以上操作都完成還是提示申請升級失敗,請確認(rèn)設(shè)備上的賬號和DBP平臺(tái)登錄的賬號是否一致,要確保使用相同的賬號。
4.2 真機(jī)調(diào)試密鑰的獲取和使用
在開發(fā)環(huán)境安裝成功之后, 需要下載開發(fā)環(huán)境的密鑰本地。
真機(jī)調(diào)試密鑰的使用方法如下:
1)替換到設(shè)備本地的 ~/.android 目錄中
2)執(zhí)行命令重啟adb:
adb kill-server
adb start-server
4.3 在真機(jī)上安裝目標(biāo)應(yīng)用
在真機(jī)的調(diào)試環(huán)境和調(diào)試密鑰都安裝成功后, 就可以使用 adb 命令安裝目標(biāo)APP了。
4.4 在技能Debug 模式下進(jìn)行調(diào)試
在保持開發(fā)者賬號和小度設(shè)備賬號一致的前提下,開啟技能調(diào)試模式的按鈕,對設(shè)備說,“開啟技能調(diào)試”。
在技能調(diào)試模式下, 開發(fā)者就可以使用語音交互來調(diào)試APP 技能了。
5. APP 技能審核
為了確保用戶體驗(yàn),APP 技能需要通過嚴(yán)格審核才能發(fā)布上線。
5.1 技能審核的一般規(guī)則
APP 技能申請上線的方式與一般的自定義技能類似,具體可以參考《技能發(fā)布》。
APP 技能與一般的自定義技能區(qū)別在于要明確客戶端APP 的版本號(形如a.b.c.d),并上傳APP 的客戶端包。
5.2 APP技能審核的特殊性
APP 技能的審核遵從DuerOS 技能審核的一般原則,包括技能元數(shù)據(jù)審核,功能性測試和技能交互信息測試等,具體可以參考《技能審核規(guī)范》。
5.3 開發(fā)者申請上線審核
APP 技能的審核還包括了客戶端的安全檢查和性能壓測等驗(yàn)證方式。
同時(shí),APP 還涉及權(quán)限申請,例如camera、錄音、手勢等,在審核的時(shí)候會(huì)分別給予確認(rèn)。
5.4 開發(fā)者對審核結(jié)果的解讀
開發(fā)者在【發(fā)布管理】->【版本管理】中可以看到審核的結(jié)果,如果沒有通過審核的話,可以查看失敗的原因。
另外,開發(fā)者也可以在【個(gè)人中心】->【消息中心】中查看審核的相關(guān)信息。
6. APP 技能上線與升級
技能審核通過后,即處于上線狀態(tài),全網(wǎng)上線在2個(gè)工作日內(nèi)完成。
6.1 首次上線
APP 技能在首次上線的時(shí)候,需要上傳客戶端的APP包,并明確APP技能的客戶端版本(形如a.b.c.d), 并明確技能交互的模型的版本,這對APP技能的后續(xù)升級至關(guān)重要。
6.2 APP 技能升級
APP 技能升級一般包括3種情況:
- 只升級APP 客戶端
- 只升級技能交互模型
- 既升級APP 客戶端又升級技能交互模型
6.2.1 只升級APP 客戶端
如果只是客戶端APP的升級,需要重新上傳APP包,更新版本號,即可申請上線審核。
6.2.2 只升級技能交互模型
如果只升級交互模型,無需重新上傳APP包,只需要更新交互模型的版本號,即可申請上線審核。
6.2.3 既升級APP 客戶端又升級技能交互模型
對于升級APP 客戶端又升級技能交互模型的情形,需要對APP客戶端的版本號和交互模型的版本號,同時(shí)上傳更新的APP包,形同初次上線。
小結(jié)
綜上所述,App 技能的接入與開發(fā)流程同樣分為6個(gè)階段,開發(fā)者認(rèn)證->技能創(chuàng)建->代碼開發(fā)->技能調(diào)試->技能審核->上線商用。如果開發(fā)者的Android App 自身沒有什么問題的話(例如,安全問題,內(nèi)測泄露等等),一般可以在3~5天內(nèi)完成App技能的上線,進(jìn)而使開發(fā)者的App迅速地使用DuerOS 的多模態(tài)交互能力, 在數(shù)千萬DuerOS 設(shè)備上為廣大用戶帶來更豐富的用戶體驗(yàn)。
【參考資料】
https://dueros.baidu.com/dbp
https://dueros.baidu.com/didp/doc/dueros-bot-platform/dbp-apk-skill/appskilldevelopment_markdown