在預測之前或期間改變語句數據

重要

LUIS 將於 2025 年 10 月 1 日淘汰,從 2023 年 4 月 1 日起,您將無法建立新的 LUIS 資源。 建議您 將 LUIS 應用程式 移轉至 對話式語言理解 ,以受益於持續的產品支援和多語系功能。

LUIS 提供在預測之前或期間操作語句的方法。 其中包括修正拼字,以及修正預先建置 datetimeV2 的時區問題。

更正語句中的拼字錯誤

V3 運行時間

將語句傳送至 LUIS 之前,先處理拼字更正的文字。 使用具有正確拼字的範例語句,以確保您取得正確的預測。

使用 Bing 拼字檢查 來更正文字,再將文字傳送至 LUIS。

V3 運行時間之前

LUIS 使用 Bing 拼字檢查 API V7 來更正語句中的拼字錯誤。 LUIS 需要與該服務相關聯的密鑰。 建立密鑰,然後將金鑰新增為端點querystring 參數。

端點需要兩個參數才能進行拼字更正才能運作:

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 實體時,可以在預測回應中傳回 datetime 值。 要求的時區可用來判斷要傳回的正確日期時間。 如果在進入 LUIS 之前,要求來自 Bot 或其他集中式應用程式,請更正 LUIS 使用的時區。

要改變時區的 V3 預測 API

在 V3 中,會 datetimeReference 決定時區位移。

V2 預測 API 以改變時區

使用以 timezoneOffset API 版本為基礎的 參數,將使用者的時區新增至端點,以更正時區。 參數的值應該是正數或負數,以分鐘為單位來改變時間。

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);

下一步

使用本教學課程更正拼字錯誤