AMAZON.KendraSearchIntent - Amazon Lex

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

AMAZON.KendraSearchIntent

若要搜尋您已使用 Amazon Kendra 編製索引的文件,請使用 AMAZON.KendraSearchIntent意圖。當 Amazon Lex V2 無法判斷與使用者對話中的下一個動作時,它會觸發搜尋意圖。

AMAZON.KendraSearchIntent 僅適用於英文 (美國) (美國) 地區設定和美國東部 (維吉尼亞北部)、美國西部 (奧勒岡) 和歐洲 (愛爾蘭) 區域。

Amazon Kendra 是一種 machine-learning-based搜尋服務,可索引自然語言文件,例如PDF文件或 Microsoft Word 檔案。它可以搜尋已編製索引的文件,並傳回下列類型的問題回覆:

  • 解答

  • 可能FAQ回答問題的 項目

  • 與問題相關的文件

如需使用 AMAZON.KendraSearchIntent 的範例,請參閱範例:為 Amazon Kendra 索引建立FAQ機器人

如果您為機器人設定AMAZON.KendraSearchIntent意圖,每當 Amazon Lex V2 無法判斷意圖的使用者發言時,就會呼叫意圖。如果 Amazon Kendra 沒有回應,則對話會繼續如機器人中所設定。

注意

Amazon Lex V2 目前不支援在槽引出AMAZON.KendraSearchIntent期間使用 。如果 Amazon Lex V2 無法判斷插槽的使用者語音,則會呼叫 AMAZON.FallbackIntent

當您在相同的機器人AMAZON.FallbackIntent中使用 AMAZON.KendraSearchIntent搭配 時,Amazon Lex V2 會使用下列意圖:

  1. Amazon Lex V2 會呼叫 AMAZON.KendraSearchIntent。此意圖會呼叫 Amazon Kendra Query操作。

  2. 如果 Amazon Kendra 傳回回應,Amazon Lex V2 會將結果顯示給使用者。

  3. 如果 Amazon Kendra 沒有回應,Amazon Lex V2 會重新提示使用者。下一個動作取決於來自使用者的回應。

    • 如果使用者的回應包含 Amazon Lex V2 識別的措辭,例如填入插槽值或確認意圖,則與使用者的對話會依機器人設定繼續進行。

    • 如果使用者的回應不包含 Amazon Lex V2 識別的措辭,Amazon Lex V2 會再次呼叫 Query操作。

  4. 如果在設定的重試次數之後沒有回應,Amazon Lex V2 會呼叫 AMAZON.FallbackIntent並結束與使用者的對話。

有三種方法可以使用 AMAZON.KendraSearchIntent 向 Amazon Kendra 提出請求:

  • 讓搜尋意圖為您提出請求。Amazon Lex V2 會呼叫 Amazon Kendra,並以使用者的話語作為搜尋字串。建立意圖時,您可以定義查詢篩選條件字串,以限制 Amazon Kendra 傳回的回應數目。Amazon Lex V2 在查詢請求中使用篩選條件。

  • 將其他查詢參數新增至請求,以使用 Lambda 函數縮小搜尋結果。您可以將包含 Amazon Kendra 查詢參數kendraQueryFilterString的欄位新增至delegate對話方塊動作。當您使用 Lambda 函數將查詢參數新增至請求時,它們優先於您在建立意圖時定義的查詢篩選條件。

  • 使用 Lambda 函數建立新的查詢。您可以建立 Amazon Lex V2 傳送的完整 Amazon Kendra 查詢請求。 V2 您可以在 delegate 對話方塊動作的 kendraQueryRequestPayload 欄位中指定查詢。kendraQueryRequestPayload 欄位的優先順序高於 kendraQueryFilterString 欄位。

若要在建立機器人時指定 queryFilterString 參數,或在呼叫對話方塊 Lambda 函數中的delegate動作時指定kendraQueryFilterString欄位,您可以指定字串,該字串會用作 Amazon Kendra 查詢的屬性篩選條件。如果字串不是有效的屬性篩選條件,則您會在執行時間取得 InvalidBotConfigException 例外狀況。如需屬性篩選條件的詳細資訊,請參閱 Amazon Kendra 開發人員指南 中的使用文件屬性來篩選查詢

若要控制 Amazon Lex V2 傳送至 Amazon Kendra 的查詢,您可以在 Lambda 函數的 kendraQueryRequestPayload欄位中指定查詢。如果查詢無效,Amazon Lex V2 會傳回InvalidLambdaResponseException例外狀況。如需詳細資訊,請參閱 Amazon Kendra 開發人員指南 中的查詢操作

如需使用 AMAZON.KendraSearchIntent 的範例,請參閱範例:為 Amazon Kendra 索引建立FAQ機器人

IAM Amazon Kendra Search 的政策

若要使用 AMAZON.KendraSearchIntent 意圖,您必須使用提供 AWS Identity and Access Management (IAM) 政策的角色,讓 Amazon Lex V2 擔任具有呼叫 Amazon Kendra Query意圖許可的執行期角色。您使用IAM的設定取決於您使用 Amazon Lex V2 AMAZON.KendraSearchIntent 主控台或使用 AWSSDK或 AWS Command Line Interface () 建立AWS CLI。使用主控台時,您可以選擇將呼叫 Amazon Kendra 的許可新增至 Amazon Lex V2 服務連結角色,或使用專門用於呼叫 Amazon Kendra Query操作的角色。當您使用 AWS CLI 或 SDK建立意圖時,您必須使用 角色來呼叫 Query 操作。

連接許可

您可以使用 主控台將存取 Amazon Kendra Query操作的許可連接到預設 Amazon Lex V2 服務連結角色。當您將許可連接到服務連結角色時,您不需要特別建立和管理執行期角色,即可連線至 Amazon Kendra 索引。

您用來存取 Amazon Lex V2 主控台的使用者、角色或群組必須具有管理角色政策的許可。將下列IAM政策連接至主控台存取角色。當您授與這些許可時,角色具有變更現有的服務連結角色政策的許可。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "iam:AttachRolePolicy", "iam:PutRolePolicy", "iam:GetRolePolicy" ], "Resource": "arn:aws:iam::*:role/aws-service-role/lexv2.amazonaws.com/AWSServiceRoleForLexBots*" }, { "Effect": "Allow", "Action": "iam:ListRoles", "Resource": "*" } ] }

指定角色

您可以使用 主控台 AWS CLI、 或 API來指定在呼叫 Amazon Kendra Query操作時要使用的執行期角色。

您用來指定執行期角色的使用者、角色或群組必須具有 iam:PassRole 許可。下列政策會定義許可。您可以使用 iam:AssociatedResourceArniam:PassedToService 條件內容鍵來進一步限制許可的範圍。如需詳細資訊,請參閱 AWS Identity and Access Management 使用者指南 中的 IAM和 AWS STS 條件內容金鑰

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "iam:PassRole", "Resource": "arn:aws:iam::account:role/role" } ] }

Amazon Lex V2 呼叫 Amazon Kendra 所需的執行期角色必須具有 kendra:Query 許可。當您使用現有IAM角色作為呼叫 Amazon Kendra Query操作的許可時,該角色必須連接下列政策。

您可以使用IAM主控台、 IAM API或 AWS CLI 來建立政策,並將其連接至角色。這些指示使用 AWSCLI來建立角色和政策。

注意

下列程式碼是針對 Linux 和 MacOS 格式化的。若為 Windows,請將接續字元 (\) 取代為插入符號 (^)。

將查詢操作許可新增至角色
  1. 在目前目錄中建立一個稱為 KendraQueryPolicy.json 的文件、將下列程式碼新增至其中,然後儲存它

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "kendra:Query" ], "Resource": [ "arn:aws:kendra:region:account:index/index ID" ] } ] }
  2. 在 中 AWS CLI,執行下列命令來建立執行 Amazon Kendra Query操作IAM的政策。

    aws iam create-policy \ --policy-name query-policy-name \ --policy-document file://KendraQueryPolicy.json
  3. 將政策連接至您用來呼叫 Query 操作IAM的角色。

    aws iam attach-role-policy \ --policy-arn arn:aws:iam::account-id:policy/query-policy-name --role-name role-name

您可以選擇更新 Amazon Lex V2 服務連結角色,或使用您在AMAZON.KendraSearchIntent為機器人建立 時建立的角色。下列程序說明如何選擇要使用IAM的角色。

指定 的執行期角色 AMAZON.KendraSearchIntent
  1. 登入 AWS Management Console 並在 開啟 Amazon Lex 主控台https://console.aws.amazon.com/lex/

  2. 選擇您要新增 AMAZON.KendraSearchIntent 的機器人。

  3. 選擇 Intents (意圖) 旁邊的加號 (+)。

  4. Add intent (新增意圖) 中,選擇 Search existing intents (搜尋現有的意圖)

  5. Search intents (搜尋意圖) 中,輸入 AMAZON.KendraSearchIntent 然後選擇 Add (新增)

  6. Copy built-in intent (複製內建意圖) 中,輸入意圖的名稱,例如 KendraSearchIntent,然後選擇 Add (新增)

  7. 開啟 Amazon Kendra query (Amazon Kendra 查詢) 部分。

  8. 針對IAM角色,選擇下列其中一個選項:

    • 若要更新 Amazon Lex V2 服務連結角色,讓機器人查詢 Amazon Kendra 索引,請選擇新增 Amazon Kendra 許可

    • 若要使用具有呼叫 Amazon Kendra Query操作許可的角色,請選擇使用現有角色

使用請求和工作階段屬性作為篩選條件

若要篩選從 Amazon Kendra 對與目前對話相關項目的回應,請在建立機器人時新增 queryFilterString 參數,以使用工作階段和請求屬性做為篩選條件。您在建立意圖時指定屬性的預留位置,然後在呼叫 Amazon Lex V2 會取代值。如需請求屬性的詳細資訊,請參閱為您的 Lex V2 機器人設定要求屬性。如需工作階段屬性的詳細資訊,請參閱 設定 Lex V2 機器人的工作階段屬性

以下是使用字串篩選 Amazon Kendra 查詢的queryFilterString參數範例。

"{"equalsTo": {"key": "City", "value": {"stringValue": "Seattle"}}}"

以下是使用名為 的工作階段屬性"SourceURI"來篩選 Amazon Kendra 查詢的queryFilterString參數範例。

"{"equalsTo": {"key": "SourceURI","value": {"stringValue": "[FileURL]"}}}"

以下是參數的範例,該queryFilterString參數使用名為 的請求屬性"DepartmentName"來篩選 Amazon Kendra 查詢。

"{"equalsTo": {"key": "Department","value": {"stringValue": "((DepartmentName))"}}}"

AMAZON.KendraSearchInteng 篩選條件使用的格式與 Amazon Kendra 搜尋篩選條件相同。如需詳細資訊,請參閱 Amazon Kendra 開發人員指南 中的使用文件屬性來篩選搜尋結果

搭配 使用的查詢篩選條件字串,AMAZON.KendraSearchIntent必須針對每個篩選條件的第一個字母使用小寫字母。例如,以下是 的有效查詢篩選條件AMAZON.KendraSearchIntent

{ "andAllFilters": [ { "equalsTo": { "key": "City", "value": { "stringValue": "Seattle" } } }, { "equalsTo": { "key": "State", "value": { "stringValue": "Washington" } } } ] }

使用搜尋回應

Amazon Kendra 會從意圖IntentClosingSetting陳述式傳回對回應中搜尋的回應。除非 Lambda 函數產生關閉回應訊息,否則意圖必須具有closingResponse陳述式。

Amazon Kendra 有五種類型的回應。

  • 下列兩個回應需要為您的 Amazon Kendra 索引FAQ設定 。如需詳細資訊,請參閱將問題和答案直接新增至索引

    • x-amz-lex:kendra-search-response-question_answer-question-<N> – 來自FAQ符合搜尋的問題。

    • x-amz-lex:kendra-search-response-question_answer-answer-<N> – 來自FAQ符合搜尋之 的答案。

  • 下列三個回應需要為您的 Amazon Kendra 索引設定資料來源。如需更多詳細資訊,請參閱建立資料來源

    • x-amz-lex:kendra-search-response-document-<N> – 索引中與表達式文字相關的文件摘錄。

    • x-amz-lex:kendra-search-response-document-link-<N> – 索引中與表達式文字相關的URL文件的 。

    • x-amz-lex:kendra-search-response-answer-<N> – 索引中回答問題的文件摘錄。

回應會以 request 屬性傳回。每個屬性最多可有五個回應,編號為 1 到 5。如需回應的詳細資訊,請參閱 Amazon Kendra 開發人員指南 中的回應類型

closingResponse 陳述式必須有一或多個訊息群組。每個訊息群組都包含一或多個訊息。每個訊息都可以包含一或多個預留位置變數,這些變數會在 Amazon Kendra 的回應中由請求屬性取代。訊息群組中必須至少有一個訊息,而訊息中的所有變數都會由執行時間回應中的請求屬性值取代,或是群組中必須具有無預留位置變數的訊息。請求屬性會以雙括號 ("((" "))") 括起來。下列訊息群組訊息符合 Amazon Kendra 的任何回應:

  • “我為您找到了一個FAQ問題:((x-amz-lex:kendra-search-response-question_answer-question-1)),答案是 ((x-amz-lex:kendra-search-response-question_answer-answer-1))”

  • “我找到了實用文件的摘錄:((x-amz-lex:kendra-search-response-document-1))”

  • “我認為您的問題的答案是 ((x-amz-lex:kendra-search-response-answer-1))”

使用 Lambda 函數管理請求和回應

AMAZON.KendraSearchIntent意圖可以使用您的對話程式碼掛鉤和履約程式碼掛鉤來管理對 Amazon Kendra 的請求和回應。當您想要修改傳送至 Amazon Kendra 的查詢時,請使用對話方塊程式碼掛鉤 Lambda 函數,而當您想要修改回應時,請使用執行程式碼掛鉤 Lambda 函數。

使用對話方塊程式碼掛勾建立查詢

您可以使用對話方塊程式碼掛鉤來建立要傳送至 Amazon Kendra 的查詢。使用對話方塊程式碼掛勾是選用的。如果您未指定對話方塊程式碼掛鉤,Amazon Lex V2 會建構來自使用者語音的查詢,並在您設定意圖時,使用queryFilterString您提供的 。

您可以使用對話方塊程式碼掛鉤回應中的兩個欄位來修改對 Amazon Kendra 的請求:

  • kendraQueryFilterString – 使用此字串來指定 Amazon Kendra 請求的屬性篩選條件。您可以使用索引中定義的任何索引欄位來篩選查詢。如需篩選字串的結構,請參閱 Amazon Kendra 開發人員指南 中的使用文件屬性來篩選查詢。如果指定的篩選字串無效,您會取得 InvalidLambdaResponseException 例外狀況。kendraQueryFilterString 字串會覆寫為意圖所設定的 queryFilterString 中指定的任何查詢字串。

  • kendraQueryRequestPayload – 使用此字串指定 Amazon Kendra 查詢。您的查詢可以使用 Amazon Kendra 的任何功能。如果您沒有指定有效的查詢,您會取得 InvalidLambdaResponseException 例外狀況。如需詳細資訊,請參閱 Amazon Kendra 開發人員指南 中的查詢

建立篩選條件或查詢字串後,您會將回應傳送至 Amazon Lex V2,並將回應dialogAction欄位設定為 delegate。Amazon Lex V2 會將查詢傳送至 Amazon Kendra,然後將查詢回應傳回至履行程式碼掛鉤。

針對回應使用履行程式碼掛勾

Amazon Lex V2 將查詢傳送至 Amazon Kendra 後,查詢回應會傳回AMAZON.KendraSearchIntent至履行 Lambda 函數。程式碼掛鉤的輸入事件包含來自 Amazon Kendra 的完整回應。查詢資料與 Amazon Kendra Query操作傳回的相同結構。如需詳細資訊,請參閱 Amazon Kendra 開發人員指南 中的查詢回應語法

履行程式碼掛勾是選用的。如果不存在,或程式碼掛鉤未傳回回應中的訊息,Amazon Lex V2 會使用 closingResponse陳述式進行回應。