支援終止通知:在 2025 年 9 月 15 日, AWS 將停止對 Amazon Lex V1 的支援。2025 年 9 月 15 日之後,您將無法再存取 Amazon Lex V1 主控台或 Amazon Lex V1 資源。如果您使用的是 Amazon Lex V2,請改參閱 Amazon Lex V2 指南。
本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
程式設計模型
機器人是 Amazon Lex 中的主要資源類型。Amazon Lex 中的其他資源類型包括意圖、槽類型、別名和機器人頻道關聯。
您可以使用 Amazon Lex 主控台或模型建置 API 來建立機器人。主控台提供圖形化使用者界面,您可用來為應用程式建立生產就緒的機器人。如果您願意,可以透過 AWS CLI 或您自己的自訂程式使用模型建置 API 來建立機器人。
建立機器人之後,您將其部署在其中一個支援的平台,或將它整合到您自己的應用程式。當使用者與機器人互動時,用戶端應用程式會使用 Amazon Lex 執行時間 API 將請求傳送至機器人。例如,當使用者說「我想要訂購比薩」時,您的用戶端會使用其中一個執行時間 API 操作將此輸入傳送至 Amazon Lex。使用者可以語音或文字的形式提供輸入。
您也可以建立 Lambda 函數並將其用於意圖。使用這些 Lambda 函數程式碼勾點來執行執行期活動,例如初始化、驗證使用者輸入和意圖履行。下列各節提供了額外的資訊。
模型建置 API 操作
要透過程式設計方式建立機器人、意圖和槽類型,請使用模型建置 API 操作。您也可以使用模型建置 API 來管理、更新和刪除機器人的資源。模型建置 API 操作包括:
-
PutBot、PutBotAlias、PutIntent 和 PutSlotType 分別會建立和更新機器人、機器人別名、意圖和槽類型。
-
CreateBotVersion、CreateIntentVersion 和 CreateSlotTypeVersion 分別會建立和發佈機器人版本、意圖和槽類型。
-
GetIntent 和 GetIntents 分別會取得您已建立的特定意圖或意圖清單。
-
GetSlotType 和 GetSlotTypes 分別會取得您已建立的特定槽類型或槽類型清單。
-
GetBuiltinIntentGetBuiltinIntents、 和 GetBuiltinSlotTypes以取得 Amazon Lex 內建意圖、Amazon Lex 內建意圖清單,或您可以在機器人中分別使用的內建槽類型清單。
-
GetBotChannelAssociation 和 GetBotChannelAssociations 分別會取得機器人與簡訊平台之間的關聯,或機器人與簡訊平台之間的關聯清單。
-
DeleteBot、DeleteBotAlias、DeleteBotChannelAssociation、DeleteIntent 和 DeleteSlotType 會移除您帳戶中不需要的資源。
您可以使用模型建置 API 來建立自訂工具,以管理您的 Amazon Lex 資源。舉例來說,槽、意圖和槽類型各有 100 個版本的限制。您可以使用模型建置 API 來建置工具,在機器人接近限制時自動刪除舊版本。
為了確保一次只有一個操作更新資源,Amazon Lex 會使用檢查總和。當您使用 Put
API PutBotAlias 操作 —PutBot、 PutIntent或 PutSlotType— 來更新資源時,您必須在請求中傳遞資源的目前檢查總和。如果同時有兩個工具嘗試更新資源,兩個都會提供相同的目前檢查總和。第一個聯絡 Amazon Lex 的請求符合資源目前的檢查總和。等到第二個請求抵達時,檢查總和已不同。第二個工具會收到 PreconditionFailedException
例外狀況,並且更新會終止。
Get
操作 GetBot-GetIntent、 和 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 主控台中設定程式碼掛鉤,如下列螢幕擷取畫面所示:

您也可以在 dialogCodeHook
操作中使用 fulfillmentActivity
和 PutIntent 欄位來設定程式碼掛勾。
一個 Lambda 函數可以執行初始化、驗證和履行。Lambda 函數接收的事件資料具有 欄位,可將發起人識別為對話方塊或履行代碼掛鉤。您可以使用此資訊來執行程式碼的適當部分。
您可以使用 Lambda 函數來建置可導覽複雜對話方塊的機器人。您可以使用 Lambda 函數回應中的 dialogAction
欄位來指示 Amazon Lex 採取特定動作。例如,您可以使用ElicitSlot
對話方塊動作,指示 Amazon Lex 向使用者要求不需要的槽值。如果您已定義釐清提示,則可以在使用者完成前一個意圖時,使用 ElicitIntent
對話方塊動作來引出新的意圖。
如需詳細資訊,請參閱使用 Lambda 函數。