預測之前或預測期間變更語句資料
重要
LUIS 將於 2025 年 10 月 1 日淘汰,而自 2023 年 4 月 1 日開始,您將無法建立新的 LUIS 資源。 建議移轉 LUIS 應用程式至交談語言理解,以享有產品持續支援和多語言功能的優點。
LUIS 提供可在預測之前或預測期間操作語句的方法。 這些包括修正拼字,以及修正預先建置 datetimeV2 的時區問題。
校正語句中的拼字錯誤
V3 執行階段
預先處理文字進行拼字校正,再將表達傳送至 LUIS。 使用具有正確拼字的範例表達,以確保您取得正確的預測。
使用 Bing 拼字檢查校正文字,再將其傳送至 LUIS。
在 V3 執行階段之前
LUIS 使用 Bing 拼字檢查 API V7 來校正語句中的拼字錯誤。 LUIS 需要與該服務相關的金鑰。 請建立金鑰,然後在端點新增該金鑰作為查詢字串參數。
端點必須有兩個參數,才能讓拼字校正運作:
Param | 值 |
---|---|
spellCheck |
boolean |
bing-spell-check-subscription-key |
Bing 拼字檢查 API V7 端點金鑰 |
當 Bing 拼字檢查 API V7 偵測到錯誤時,系統會將原始語句和校正後語句及預測一起從端點傳回。
{
"query": "Book a flite to London?",
"alteredQuery": "Book a flight to London?",
"topScoringIntent": {
"intent": "BookFlight",
"score": 0.780123
},
"entities": []
}
允許的字組清單
LUIS 中使用的 Bing 拼字檢查 API 不支援要在拼字檢查變更期間忽略的字組清單。 如果您需要允許字組或縮略字清單,請處理用戶端應用程式中的表達,再將表達傳送至 LUIS 進行意圖預測。
變更預先建置 datetimeV2 實體的時區
當 LUIS 應用程式使用預先建置的 datetimeV2 實體時,可以在預測回應中傳回日期時間值。 要求的時區會用來判斷要傳回的正確日期時間。 如果要求來自 Bot 或另一個集中式應用程式,請在其抵達 LUIS 之前,先更正 LUIS 使用的時區。
變更時區的 V3 預測 API
在 V3 中,datetimeReference
可判斷時區位移。
變更時區的 V2 預測 API
更正時區的方式是根據 API 版本使用 timezoneOffset
參數將使用者時區新增至端點。 參數的值應該是用以變更時間的正數或負數 (以分鐘為單位)。
V2 預測日光節約範例
如果您需要讓傳回的預先建置 datetimeV2 針對日光節約時間進行調整,則應該針對端點查詢,使用查詢字串參數搭配以分鐘為單位的 +/- 值。
增加 60 分鐘:
https://{region}.api.cognitive.microsoft.com/luis/v2.0/apps/{appId}?q=Turn the lights on?timezoneOffset=60&verbose={boolean}&spellCheck={boolean}&staging={boolean}&bing-spell-check-subscription-key={string}&log={boolean}
減去 60 分鐘:
https://{region}.api.cognitive.microsoft.com/luis/v2.0/apps/{appId}?q=Turn the lights on?timezoneOffset=-60&verbose={boolean}&spellCheck={boolean}&staging={boolean}&bing-spell-check-subscription-key={string}&log={boolean}
V2 預測 C# 程式碼可判斷參數的正確值
下列 C# 程式碼使用 TimeZoneInfo 類別的 FindSystemTimeZoneById 方法,根據系統時間判斷正確的位移值:
// Get CST zone id
TimeZoneInfo targetZone = TimeZoneInfo.FindSystemTimeZoneById("Central Standard Time");
// Get local machine's value of Now
DateTime utcDatetime = DateTime.UtcNow;
// Get Central Standard Time value of Now
DateTime cstDatetime = TimeZoneInfo.ConvertTimeFromUtc(utcDatetime, targetZone);
// Find timezoneOffset/datetimeReference
int offset = (int)((cstDatetime - utcDatetime).TotalMinutes);