luis.ai api 價格說明
我們使用 luis.ai 的 api 後,很多人都於它的價格都不清楚,在這裡說明一下,
- LUIS API - 免費: 每月最多可以 Call 10,000 次
- LUIS API - 基本: 每月最多可以 Call 10,000 次,超過後,每 Call 1,000 次約台幣 45.09 元
詳細請參考 認知服務定價 - Language Understanding (LUIS)
Call luis.ai predictions api 的 3 種方式
在 LUIS predictions GET api 中有各語言的使用範例,以C#來看,使用非常方便,只要設定一些參數就可以取回 LUIS 解析的資料,本文將跟大家分享 Call 正式 api 的 GET/POST 方式,及 Call 測試 api 的方式,共 3 透方式。
call 正式 api 使用 GET,如下,
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27static async Task<string> GetLuisResult(string reqString)
{
//最多是 500 個 ascii chars,中文我先取 230 個
if (reqString.Length > 230)
{
reqString = reqString.Substring(0, 230);
}
var client = new HttpClient();
var queryString = HttpUtility.ParseQueryString(string.Empty);
const string appId = "你的appid";
const string subscriptionKey = "你的訂閱key";
// Request headers
client.DefaultRequestHeaders.Add("Ocp-Apim-Subscription-Key", subscriptionKey);
// Request parameters
//如果回傳的內容中需要各 Intent 的話,請將 verbose 設定為 true
queryString["verbose"] = "true";
//queryString["spellCheck"] = "{boolean}";
//queryString["staging"] = "{boolean}";
//queryString["bing-spell-check-subscription-key"] = "bing key";
//queryString["log"] = "{boolean}";
var uri = $"https://eastasia.api.cognitive.microsoft.com/luis/v2.0/apps/{appId}?q=" + HttpUtility.UrlEncode(reqString)+ "&" + queryString;;
var response = await client.GetAsync(uri);
var result = await response.Content.ReadAsStringAsync();
return result;
}call 正式 api 使用 POST (筆者試了老半天都試不出來,後來詢問 MS Herman 大大才知道,POST 的 body 前後要加 雙引號),如下,
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34static async Task<string> GetLuisResultPost(string reqString)
{
//最多是 500 個 ascii chars,中文我先取 230 個
if (reqString.Length > 230)
{
reqString = reqString.Substring(0, 230);
}
var client = new HttpClient();
var queryString = HttpUtility.ParseQueryString(string.Empty);
const string appId = "你的appid";
const string subscriptionKey = "你的訂閱key";
// Request headers
client.DefaultRequestHeaders.Add("Ocp-Apim-Subscription-Key", subscriptionKey);
// Request parameters
//如果回傳的內容中需要各 Intent 的話,請將 verbose 設定為 true
queryString["verbose"] = "true";
//queryString["spellCheck"] = "{boolean}";
//queryString["staging"] = "{boolean}";
//queryString["bing-spell-check-subscription-key"] = "bing key";
//queryString["log"] = "{boolean}";
var uri = $"https://westus.api.cognitive.microsoft.com/luis/v2.0/apps/{appId}?" + queryString;
HttpResponseMessage response;
// Request body,前後要加上 雙引號 哦!
byte[] byteData = Encoding.UTF8.GetBytes("\"" + reqString + "\"");
using (var content = new ByteArrayContent(byteData))
{
response = await client.PostAsync(uri, content);
var result = await response.Content.ReadAsStringAsync();
return result;
}
}註: 在 LUIS 設定好,按下 Train 後,請記得要到 PUBLISH , 按下 「Publish to production slot」,這樣才會部到各區域去哦!
知道如何 Call Production 的 api 之後,如果我們想要像 線上客服 + BOT 之路 一文中,先用個 Excel 檔去試看看的話(目前 luis.ai 上 support 上傳 json , 整批測試),多試個幾次,免費的 quota 應該一下子就沒了吧! 如下所示,
那怎麼辦呢?
1.到 Azure 那買個服務,然後再將訂閱的 Key 加到 luis.ai 之中,如下,
2.使用 luis.ai 測試的 api ,您可以在測試時,錄一下 network ,如下,
所以 Call luis.ai 測試 api 的方式如下,
1 | static async Task<string> GetLuisResultTest(string reqString) |
這個測試的 api 跟正式機的差別除了內容不太相同,它取出的 Entity 中間會有空白,所以再使用上需要將空白清掉哦! 因為它是測試用的,所以在整批 Call 的時候,有時會 block 一段時間,我的做法是如果出錯就停個 15 秒,讓它再重試一次,後來就可以正常再 Call 了哦!
正式 api 的結果如下 ( verbose 參數為 true, 內容才會有 intents ),
1 | { |
測試 api 的結果如下( entityPredictions 中的 phrase 字之間會有空白哦!!! ),
1 | { |
預設 call 正式 api 時,會 log 查詢的資料,最近幾筆資料可以從 「 Review endpoint utterances 」 看到,如下
那如果我需要的是全部的 Log 呢? 可以到「 My apps 」,在那個 app 右邊的 … ,選取「 Export Endpoint Log 」,就可以了哦,如下,