View a markdown version of this page

文法槽類型 - Amazon Lex

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

文法槽類型

重要

Amazon Lex V2 會授予每個 AWS 帳戶的文法槽類型存取權。如果您的帳戶沒有存取權,Amazon Lex V2 會拒絕嘗試將文法槽類型新增至機器人。Amazon Lex V2 也會拒絕包含文法槽類型的地區設定建置。若要請求存取您的帳戶,請聯絡 AWS Support。如果您不需要編寫自己的文法,則可以改用自訂插槽類型。

使用文法槽類型,您可以根據 SRGS 規格以 XML 格式編寫自己的文法,以在對話中收集資訊。Amazon Lex V2 會辨識文法中指定規則相符的表達用語。您也可以在文法檔案中使用 ECMAScript 標籤提供語意解釋規則。然後,Amazon Lex 會在配對發生時,將標籤中設定的屬性傳回為解析值。

您只能在英文 (澳洲)、英文 (英國) 和英文 (美國) 地區設定中建立文法槽類型。

文法槽類型有兩個部分。第一個是使用 SRGS 規格格式撰寫的文法本身。文法會解譯使用者的表達用語。如果文法接受表達用語,則會相符,否則會遭到拒絕。如果表達用語相符,如果有的話,則會傳遞至指令碼。

第二個是文法槽類型的一部分,是以 ECMAScript 撰寫的選用指令碼,可將輸入轉換為槽類型傳回的解析值。例如,您可以使用指令碼將口語號碼轉換為數字。ECMAScript 陳述式會括在 <tag> 元素中。

下列範例是根據 SRGS 規格的 XML 格式,顯示 Amazon Lex V2 接受的有效文法。它定義了一個文法槽類型,接受卡號,並確定它們是用於一般還是高級帳戶。如需可接受語法的詳細資訊,請參閱 文法定義和 指令碼格式主題。

<grammar version="1.0" xmlns="http://www.w3.org/2001/06/grammar" xml:lang="en-US" tag-format="semantics/1.0" root="card_number"> <rule id="card_number" scope="public"> <item repeat="0-1"> card number </item> <item> seven <tag>out.value = "7";</tag> </item> <item> <one-of> <item> two four one <tag> out.value = out.value + "241"; out.card_type = "premium"; </tag> </item> <item> zero zero one <tag> out.value = out.value + "001"; out.card_type = "regular";</tag> </item> </one-of> </item> </rule> </grammar>

上述文法只接受兩種類型的卡號:7241 或 7001。這兩者都可以選擇性地加上 “card number” 字首。它還包含可用於語意解譯的 ECMAScript 標籤。透過語意解釋,表達用語「卡片編號七二四一」會傳回下列物件:

{ "value": "7241", "card_type": "premium" }

在 RecognizeText、RecognizeUtterance 和 StartConversation 操作傳回的物件中,會以 JSON 序列化字串傳回此resolvedValues物件。

新增文法槽類型

新增文法槽類型
  1. 將插槽類型的 XML 定義上傳至 S3 儲存貯體。記下儲存貯體名稱和檔案的路徑。

    注意

    檔案大小上限為 100 KB。

  2. 登入 AWS 管理主控台,並在 https://https://console.aws.amazon.com/lex/ 開啟 Amazon Lex 主控台。

  3. 從左側功能表中,選擇機器人,然後選擇要新增文法槽類型的機器人。

  4. 選擇檢視語言,然後選擇要新增文法槽類型的語言。

  5. 選擇檢視插槽類型。

  6. 選擇新增插槽類型,然後選擇新增文法插槽類型。

  7. 為插槽類型命名,然後選擇新增。

  8. 選擇包含定義檔案的 S3 儲存貯體,然後輸入檔案的路徑。選擇儲存插槽類型。