程式設計模型 - Amazon Lex V1

如果您使用的是 Amazon Lex V2,請參閱 Amazon Lex V2 指南

 

如果您使用的是 Amazon Lex V1,我們建議您將機器人升級到 Amazon Lex V2。我們不再向 V1 添加新功能,強烈建議所有新機器人使用 V2。

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

程式設計模型

機器人是 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 作業 —PutBotPutBotAliasPutIntent、或PutSlotType — 來更新資源時,您必須在要求中傳遞資源的目前總和檢查碼。如果同時有兩個工具嘗試更新資源,兩個都會提供相同的目前檢查總和。第一個到達 Amazon Lex 的請求與資源目前的總和檢查碼相符。等到第二個請求抵達時,檢查總和已不同。第二個工具會收到 PreconditionFailedException 例外狀況,並且更新會終止。

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

執行時間 API 操作

用戶端應用程式會使用下列執行階段 API 操作與 Amazon Lex 進行通訊:

  • PostContent— 進行語音或文字輸入,並傳回意圖資訊以及要傳達給使用者的文字或語音訊息。Amazon Lex 目前支援以下音訊格式:

     

    輸入音訊格式 – LPCM 和 Opus

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

     

    PostContent 操作支援 8 kHz 和 16 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 函數指定為程式碼掛接:

  • 初始化和驗證的對話方塊程式碼掛鉤 — 假設 Amazon Lex 瞭解使用者意圖,則會在每個使用者輸入時叫用此 Lambda 函數。

  • 履行代碼掛鉤-在使用者提供完成意圖所需的所有插槽資料之後,便會叫用此 Lambda 函數。

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


                    Amazon Lex 主控台顯示 Lambda 函數程式碼掛鉤。

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

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

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

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