一個安卓App,如何成為DuerOS 上的技能應用呢?
我們經常談到的移動互聯網是與智能手機密不可分的,iPhone 這樣的智能手機改變了人們使用手機的交互方式——由功能機(feature phone)的按鍵式交互變成了觸控式交互。
Android 和 iOS 成為了移動互聯網上的兩大主流開發環境,大多數的開發者和企業都有著自己的Android App,那么,如何讓這些安卓App 成為DuerOS 上支持語音交互的多模態技能呢?
DBP 上的 App 技能
App技能同樣是一種DBP的自定義技能,與其他自定義技能的區別在于需要開發者開發或調整自己的安卓App。DBP 平臺上 APP技能的推出使得Android App 可以很快地成為DuerOS 設備上的技能,使安卓系統的App生態能夠與DuerOS的技能生態水乳交融,為用戶帶來更多的價值。
正像老碼農在以往技術大會上所講的那樣,APP技能的接入和DBP自定義技能的開發類似,同樣遵循六個步驟:
- 開發者認證
- 技能創建
- 技能開發
- 技能調試
- 技能審核
- 技能上線
目前,DBP 平臺推出的App技能作為Preview feature 開放給廣大企業開發者,遵循預覽版的相關審核和流程規范。
1. 開發者認證
開發者需要在DBP平臺上傳身份證、個人郵箱、手機號等信息,通過審核后成為認證開發者。目前DBP 平臺采用了百度AI的證照自動識別技術,可以實現分鐘級的身份認證,使開發者能夠迅速成為DuerOS 的認證開發者。當然,非認證開發者同樣可以創建并調試自定義技能,但只有認證開發者才能完成技能的上線。
對應企業開發者而言,還要上傳企業的營業執照掃描件,通過審核后成為認證開發者。
需要注意的是,當前,DBP平臺APP 技能的開發只對認證的企業開發者開放。
2. APP技能創建
APP 技能目前作為Preview feature 開放,開發者在創建APP 技能的時候首先要閱讀并確認《DBP應用開發者協議》。
然后,填寫技能名稱等相關信息,提交后,等候Preivew 的審核。
在Preview 審核通過后,即表示APP 技能創建完成,可以對技能的意圖/槽位/詞典等進行配置操作了,詳情參見《感知自然語言理解(NLU)》。
3. APP技能的開發
APP 技能開發包括兩部分:技能(bot) 服務的開發和 APP 客戶端的開發。
3.1 技能服務的開發
APP 技能的bot 服務開發與DBP 上其他自定義技能的開發類似,尤其與交互模型的建立,關于意圖、槽位、詞典、常用表達等參考《技能交互模型》。
目前,多數APP 技能都采用了DBP 平臺的代理服務AVC(App Voice Control),這樣無需獨立部署服務器即可使用語音交互的能力。簡單地說, 設計并填寫完交互模型,就可以認為是開發完成了。AVC 將語音交互的結果以結構化數據返回給APP 客戶端,由客戶端完成對應的操作。
對于復雜交互的APP 技能而言,同樣可以部署自己的物理bot,在自己的技能服務中實現更復雜的邏輯。
3.2 APP 客戶端的開發
針對語音交互的復雜程度,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。
3.2.1 L1 APP 技能的開發
在DBP 平臺的控制臺,依次選擇 【創建技能】->【自定義技能】->【Android App 技能】, 填寫技能名稱和APP 包名,如圖所示:
一步完成,待開發者App自身完成開發后,即可進入L1 APP 技能的調試階段。
3.2.2 L2 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<String, String> paramMap) {
- if ("sdkdemo://startGame".equals(url)) {
- //TODO 執行開始游戲邏輯,比如是startGameBtn.performClick()
- }
- }
開發者完成Android App開發后,即可進入L1 APP 技能的調試階段。
3.2.3 L3 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 技能的調試階段。
3.2.4 L4 APP 技能的開發
L4 的APP 技能還在內測階段,需要聯系DBP 的產品經理進行完整的接入流程。
4. APP技能調試
目前,APP 技能還處于Preview feature 階段,因此只能在真機上進行技能調試。
4.1 真機調試開發環境的安裝
創建好APP技能后,點擊【測試驗證】 → 點擊【真機測試】→ 點擊【新增設備SN】,添加自己的小度設備SN。
開發者在配置好設備SN之后,可以對真機設備說,“小度小度,打開技能開發助手”,在技能的菜單中選擇【升級為開發版ROM】,根據語音提示進行后續操作即可。
注意:如果以上操作都完成還是提示申請升級失敗,請確認設備上的賬號和DBP平臺登錄的賬號是否一致,要確保使用相同的賬號。
4.2 真機調試密鑰的獲取和使用
在開發環境安裝成功之后, 需要下載開發環境的密鑰本地。
真機調試密鑰的使用方法如下:
1)替換到設備本地的 ~/.android 目錄中
2)執行命令重啟adb:
adb kill-server
adb start-server
4.3 在真機上安裝目標應用
在真機的調試環境和調試密鑰都安裝成功后, 就可以使用 adb 命令安裝目標APP了。
4.4 在技能Debug 模式下進行調試
在保持開發者賬號和小度設備賬號一致的前提下,開啟技能調試模式的按鈕,對設備說,“開啟技能調試”。
在技能調試模式下, 開發者就可以使用語音交互來調試APP 技能了。
5. APP 技能審核
為了確保用戶體驗,APP 技能需要通過嚴格審核才能發布上線。
5.1 技能審核的一般規則
APP 技能申請上線的方式與一般的自定義技能類似,具體可以參考《技能發布》。
APP 技能與一般的自定義技能區別在于要明確客戶端APP 的版本號(形如a.b.c.d),并上傳APP 的客戶端包。
5.2 APP技能審核的特殊性
APP 技能的審核遵從DuerOS 技能審核的一般原則,包括技能元數據審核,功能性測試和技能交互信息測試等,具體可以參考《技能審核規范》。
5.3 開發者申請上線審核
APP 技能的審核還包括了客戶端的安全檢查和性能壓測等驗證方式。
同時,APP 還涉及權限申請,例如camera、錄音、手勢等,在審核的時候會分別給予確認。
5.4 開發者對審核結果的解讀
開發者在【發布管理】->【版本管理】中可以看到審核的結果,如果沒有通過審核的話,可以查看失敗的原因。
另外,開發者也可以在【個人中心】->【消息中心】中查看審核的相關信息。
6. APP 技能上線與升級
技能審核通過后,即處于上線狀態,全網上線在2個工作日內完成。
6.1 首次上線
APP 技能在首次上線的時候,需要上傳客戶端的APP包,并明確APP技能的客戶端版本(形如a.b.c.d), 并明確技能交互的模型的版本,這對APP技能的后續升級至關重要。
6.2 APP 技能升級
APP 技能升級一般包括3種情況:
- 只升級APP 客戶端
- 只升級技能交互模型
- 既升級APP 客戶端又升級技能交互模型
6.2.1 只升級APP 客戶端
如果只是客戶端APP的升級,需要重新上傳APP包,更新版本號,即可申請上線審核。
6.2.2 只升級技能交互模型
如果只升級交互模型,無需重新上傳APP包,只需要更新交互模型的版本號,即可申請上線審核。
6.2.3 既升級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