程式設計模型 - Amazon Lex

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

程式設計模型

機器人 是 Amazon Lex 中的主要資源類型。Amazon Lex 中的其他資源類型有意圖槽類型別名機器人管道關聯

您使用 Amazon Lex 主控台或模型建置 API 來建立機器人。主控台提供圖形化使用者界面,您可用來為應用程式建立生產就緒的機器人。如果您偏好,也可以透過 AWS CLI 使用模型建置 API 或您自己的自訂程式來建立機器人。

建立機器人之後,您將其部署在其中一個支援的平台,或將它整合到您自己的應用程式。當使用者與機器人互動時,用戶端應用程式會使用 Amazon Lex 執行時間 API 傳送請求給機器人。例如,當使用者說:「我要訂購比薩。」時,用戶端會使用其中一個執行時間 API 操作,將此輸入傳送給 Amazon Lex。使用者可以語音或文字的形式提供輸入。

您也可以建立 Lambda 函數,並將它們用在意圖中。使用這些 Lambda 函數程式碼掛勾來執行時間活動,例如初始化、驗證使用者輸入和意圖履行。下列各節提供了額外的資訊。

模型建置 API 操作

要透過程式設計方式建立機器人、意圖和槽類型,請使用模型建置 API 操作。您也可以使用模型建置 API 來管理、更新和刪除機器人的資源。模型建置 API 操作包括:

您可以使用模型建置 API 來建立自訂工具,以管理 Amazon Lex 資源。舉例來說,槽、意圖和槽類型各有 100 個版本的限制。您可以使用模型建置 API 來建置工具,在機器人接近限制時自動刪除舊版本。

Amazon Lex 使用檢查總和來確保一次只有一個操作可以更新資源。當使用 Put API 操作— PutBotPutBotAliasPutIntentPutSlotType— 來更新資源時,您必須在請求中傳遞資源目前的檢查總和。如果同時有兩個工具嘗試更新資源,兩個都會提供相同的目前檢查總和。第一個到達 Amazon Lex 的請求會符合資源目前的檢查總和。等到第二個請求抵達時,檢查總和已不同。第二個工具會收到 PreconditionFailedException 例外狀況,並且更新會終止。

Get 操作—GetBotGetIntentGetSlotType—最終會保持一致。如果您在使用其中一個 Get 操作建立或修改資源之後立即使用 Put 操作,可能不會傳回變更。在 Get 操作傳回最新的更新之後,在資源再度經過修改之前,它一律會傳回更新過的資源。您可以查看檢查總和來判斷傳回的是否為更新的資源。

執行時間 API 操作

用戶端應用程式使用以下執行時間 API 操作與 Amazon Lex 通訊:

  • PostContent – 接受語音或文字輸入並傳回意圖資訊和文字或語音訊息,以傳達給使用者。Amazon Lex 目前支援以下音訊格式:

     

    輸入音訊格式 – LPCM 和 Opus

    輸出音訊格式 – MPEG、OGG 和 PCM

     

    操作支援 8 PostContent 和 16 kHz 的音訊輸入。kHz 最終使用者與 Amazon Lex 透過電話交談的應用程式,例如自動電話語音中心,可以直接傳遞 8 個 kHz 音訊。

     

  • PostText– 接受文字輸入並傳回意圖資訊和文字訊息,以傳達給使用者。

您的用戶端應用程式使用執行時間 API 呼叫特定的 Amazon Lex 機器人,來處理表達用語 — 使用者文字或語音輸入。例如,假設使用者說「我要訂購比薩」。用戶端會使用其中一個 Amazon Lex 執行時間 API 操作,將此使用者輸入傳送給機器人。從使用者輸入,Amazon Lex 辨識使用者請求是針對機器人中的 OrderPizza 意圖。Amazon Lex 與使用者展開對談,以收集所需的資訊或槽資料,例如比薩大小、配料和比薩數量。在使用者提供所有必要的槽資料後,Amazon Lex 呼叫 Lambda 函數程式碼掛勾來滿足意圖,或將意圖資料傳回用戶端,端視意圖的設定方式而訂。

當機器人使用語音輸入時,使用 PostContent 操作。例如,自動電話語音中心應用程式可以傳送語音給 Amazon Lex 機器人,而非服務人員,來解決客戶問題。您可以使用 8 kHz 音訊格式,直接從電話傳送音訊到 Amazon Lex。

Amazon Lex 主控台中測試視窗會使用 PostContent API 將文字和語音請求傳送給 Amazon Lex。您可以在Amazon Lex 入門 練習中使用此測試視窗。

Lambda 函數做為程式碼掛勾

您可以設定 Amazon Lex 機器人來呼叫 Lambda 函數做為程式碼掛勾。程式碼掛勾有多個用途:

  • 自訂使用者互動 — 例如,當 Joe 詢問可以加的比薩配料,您可以使用在知道 Joe 的選擇之前顯示配料的子集。

  • 驗證使用者的輸入 — 假設 Jen 想要在營業時間後取花。您可以驗證 Jen 輸入的時間並傳送適當的回應。

  • 滿足使用者的意圖—在 Joe 在為比薩訂單提供所有資訊後,Amazon Lex 可以呼叫 Lambda 函數,向當地的比薩店下單。

當設定意圖時,您在下列位置將 Lambda 函數設定為程式碼掛勾:

  • 用於初始化和驗證的對話方塊程式碼掛勾—每次使用者輸入都會呼叫這個 Lambda 函數,假設 Amazon Lex 了解使用者的意圖。

  • 履行程式碼掛勾—在使用者提供滿足意圖所需的所有槽資料後,會呼叫此 Lambda 函數。

您可以選擇意圖並在 Amazon Lex 主控台中設定程式碼掛勾,如下列螢幕擷取畫面所示:


                    顯示 Amazon Lex 函數程式碼勾點的 Lambda 主控台。

您也可以在 dialogCodeHook 操作中使用 fulfillmentActivityPutIntent 欄位來設定程式碼掛勾。

一個 Lambda 函數可以執行初始化、驗證和履行。Lambda 函數收到的事件資料具有一個欄位可識別發起人,做為對話方塊或履行程式碼掛勾。您可以使用此資訊來執行程式碼的適當部分。

您可以使用 Lambda 函數來建立可導覽複雜對話方塊的機器人。您在 Lambda 函數回應中使用 dialogAction 欄位來引導 Amazon Lex 採取特定動作。例如,您可以使用 ElicitSlot 對話方塊動作告訴 Amazon Lex 向使用者要求非必要的槽值。如果您已定義釐清提示,則可以在使用者完成前一個意圖時,使用 ElicitIntent 對話方塊動作來引出新的意圖。

如需更多詳細資訊,請參閱 使用 Lambda 函數