Alan Tsai 的學習筆記


學而不思則罔,思而不學則殆,不思不學則“網貸” 為現任微軟最有價值專家 (MVP)、微軟認證講師 (MCT) 、Blogger、Youtuber:記錄軟體開發的點點滴滴 著重於微軟技術、C#、ASP .NET、Azure、DevOps、Docker、AI、Chatbot、Data Science

[chatbot + AI = 下一代操作模式][23]LUIS管理工具 - luis-api和LUDown介紹

[chatbot + AI = 下一代操作模式][23]LUIS管理工具 - luis-api和LUDown介紹.jpg
圖片來源:https://pixabay.com/en/books-spine-colors-pastel-1099067/ 

在上一篇([22]LUIS管理及維護 - 持續加强app、多人維護、備份以及加入別的region key)看了一些luis.ai的portal裡面提供維護LUIS app的功能,透過web界面這個讓一般使用者可以很容易的進行一些微調。

不過如果從開發者的角度,如果我想要透過script的方式去維護可不可以?然後在定義intent、utterance以及entities的時候是否可以不直接透過web界面就做到?

這篇,將來看看luis-apis以及LUDown這兩個小工具。

luis-apis是什麽?

luis.ai的那個web界面其實和Azure portal是一樣的概念,兩個都是呼叫REST api來控制對應資源,一個是用來控制LUIS的app,另外一個則是控制Azure的資源。

由於使用的是REST Api,因此理論上誰都可以寫工具call apli來控制資源。微軟為Azure提供了Powershell和CLI版本可以控制,而LUIS也有一樣的CLI工具,叫做luis-apis

怎麽安裝luis-apis

這是一隻用node js寫的CLI工具,因此安裝方式就是透過npm來裝:npm install -g luis-apis

powershell_2018-08-01_18-54-23.png
透過npm安裝

設定luis-apis

裝好了之後,需要做一些設定告知用的key等等,因此可以輸入:luis init

這個時候會用問答的方式建立出一個.luisrc檔案

powershell_2018-08-01_18-55-11.png
輸入内容建立出設定檔案
一開始詢問的Authorization key,可以從右上角,點名字之後裡面的settings看到:
chrome_2018-08-01_18-56-36.png
找到Authoring Key

使用luis-apis

所有的指令結構都是:luis {動作} {功能}

  1. {動作} 指的是 新增(add)、刪除(delete)、修改(update)和列表(list) - 這邊列的是幾個常見的,還有其他可以用
  2. {功能} 指的是這個動作對什麽resource有起作用,例如 app、intent、entity等

舉例來説,如果要列出所有的apps可以透過輸入:luis list apps

powershell_2018-08-01_19-02-02.png
json格式顯示所有的app

指令太多了,我這邊不會在往更深入的介紹,如果有興趣直接參考官方文件比較快:https://github.com/Microsoft/Bot Builder SDK-tools/tree/master/LUIS

LUDown是什麽?

上面介紹的luis-apis是在CLI控制LUIS的一些設定,不過如果想要管控實際intent裡面定義的utterance以及entity的内容怎麽辦?例如說假設我想要版控我的這些設定怎麽做?

這就是LUDown進來的地方,LUDown的功能就是把一個類似 markdown 語法的檔案(副檔名一般是.lu)轉換成爲LUIS裡面的JSON model檔案(還記得上篇備份出來的json檔案嗎?就是這個), 讓開發者可以用容易的方式定義出intent,并且好版控管理。

如果已經有現有的JSON model檔案也可以透過LUDown把他轉換成爲.lu檔案。

安裝LUDown

LUDown也是用node js寫的,因此安裝透過npm:npm i -g ludown

安裝好了之後可以直接輸入ludown試試看有沒有找到。

建立.lu檔案

假設今天要建立一個從無到有的Model,那麽會從定義.lu檔案開始

如果有寫過markdown的話,那麽非常容易上手,舉例來説,假設今天要定義一個查找的intent,那麽可能定義如下:

# SearchHotel
- 查 {place=飯店}
- 找 {place=郵局}

上面這些内容總共定義出了 1個intent 叫做 SearchHotel2個 Utterance,并且在這兩個 utterance各定義了entity place

所以:

  1. # 定義的是intent
  2. - 定義的是每一個intent裡面的utterance
  3. {entityName=value} - 這個則是定義entity名稱以及在這段utterance裡面的值

透過建立出這麽一個.lu檔案,在維護大一點的model變得很容易。web界面好操作,但是那個是對於一般使用者來説,今天如果要key好多intent以及utterance,用web界面都會需要等畫面load好 ,無形中浪費掉很多時間。如果可以在檔案定義好,然後一次更新上去不是很方便?更別説有版控這個利器。

.lu檔案變成JSON model

.lu檔案是給人看的,而LUIS要看的是JSON model檔案,因此這個時候LUDown就出來了。

透過ludown的parse指令即可,整個參數是:ludown parse toluis -l <folder with .lu files> [-s -o <outputfolder> -n <luisAppName> --verbose -c <luisAppCulture>]

舉例來説:ludown parse toluis -l .\

會把目前資料夾下面 *.lu 轉換成爲 1 個 JSON Model。因此如果model很大,可以拆成1個intent對應1個檔案,這樣既好管理,在發佈又不會有問題。

預設建立的Model是英文,所以如果是要給中文的Model使用的JSON檔案,需要設定參數-c

把JSON Model發佈到luis.ai

有了JSON Model之後,下一步就是把這個Model部署到luis.ai上面。

部署上去有兩種做法:

  1. 透過web 界面(上篇有介紹過)
  2. 透過 luis-apis的CLI工具

使用luis-apis非常的簡單,只需要透過指令:luis import application --in LUISApp.json即可。

把JSON Model轉換回.lu檔案

當把.lu檔案轉換成爲JSON Model并且部署上去了之後,很有可能一般使用者會直接透過luis.ai來更新model,那這樣兩邊不就不一致了嗎?

LUDown有考慮到這個問題,因此可以透過上一篇提到的把現行JSON Model匯出來之後,透過refresh指令把JSON Model變成.lu檔案。

指令很簡單:ludown refresh -i export.json

這個時候變成了.lu檔案之後,直接commit就更新了最新的設定到版控。

匯出除了從web界面執行,也可以用luis-apis來達到。

結語

當管理的LUIS Model變大的時候,只透過web界面來操作有時候是不夠快速,并且沒辦法批次建立或者修改Model。

透過今天介紹的兩個工具:luis-apis能夠把在web任意操作透過CLI方式控制,達到可撰寫常用scripts快速重複類似的動作。透過LUDown讓JSON Model變成人可以容易看并且好修改的類似markdown語法的檔案, 讓調整LUIS Model變的非常的輕鬆。

到目前爲止,LUIS的整個基本功能介紹,以及他的周邊配套工具基本都介紹完了。雖然還有非常多的細節還可以往下看,不過有了目前這些知識之後,在往下的内容在需要的時候再去看也能夠很容易理解。

透過LUIS賦予chatbot處理文字上面的AI話之後,接下來看看另外一個很好的輸入方式,圖片,并且Cognitive Service怎麽幫助這一塊。

下一篇([24]圖像識別的服務 - Computer Vision概觀介紹),來看看Cognitive Service裡面的Computer Visiion。


如果文章對您有幫助,就請我喝杯飲料吧
街口支付QR Code
街口支付QR Code
台灣 Pay QR Code
台灣 Pay QR Code
Line Pay 一卡通 QR Code
Line Pay 一卡通 QR Code
街口支付QR Code
支付寶QR Code
街口支付QR Code
微信支付QR Code
comments powered by Disqus