AMAZON.KendraSearchIntent - Amazon Lex

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

AMAZON.KendraSearchIntent

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

AMAZON.KendraSearchIntent僅在英文 (美國) (en-US) 地區以及美國東部 (維吉尼亞北部)、美國西部 (奧勒岡) 和歐洲 (愛爾蘭) 區域提供。

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

  • 解答

  • 可能回答問題的常見問題項目

  • 與問題相關的文件

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

如果您設定機器人的AMAZON.KendraSearchIntent意圖,Amazon Lex V2 會在無法判斷使用者意圖的話語時呼叫意圖。如果沒有來自 Amazon Kendra 的回應,交談會依照機器人中的設定繼續進行。

注意

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

當您在相同的機器人AMAZON.FallbackIntentAMAZON.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 傳送的完整亞馬遜肯德拉查詢請求。您可以在 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 索引建立常見問題集機器人

Amazon Kendra 搜索的 IAM 政策

若要使用AMAZON.KendraSearchIntent意圖,您必須使用提供 AWS Identity and Access Management (IAM) 政策的角色,讓 Amazon Lex V2 承擔具有呼叫 Amazon Kendra Query 意圖之權限的執行階段角色。您使用的 IAM 設定取決於您是AMAZON.KendraSearchIntent使用 Amazon Lex V2 主控台建立,還是使用 AWS 開發套件或 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 立政策並將其附加到角色。這些指示會使用 AWS CLI 來建立角色和政策。

注意

下列程式碼是針對 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 role (IAM 角色) 下,選擇以下其中一個選項:

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

    • 若要使用具有呼叫 Amazon Kendra Query 作業之權限的角色,請選擇「使用現有角色」。

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

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

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

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

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

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

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

"{"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 索引設定常見問題集。如需詳細資訊,請參閱將問題和答案直接新增至索引

    • x-amz-lex:kendra-search-response-question_answer-question-<N>— 來自與搜索匹配的常見問題解答的問題。

    • x-amz-lex:kendra-search-response-question_answer-answer-<N>— 來自與搜索匹配的常見問題解答的答案。

  • 下列三個回應需要為 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 的任何回應:

  • 「我為您找到了一個常見問題解答問題x-amz-lex:(((:kendra-search-response-question_ 答案-問題 -1)),答案是((x-amz-lex:答案 -1))」kendra-search-response-question

  • 「我從一個有用的文檔中找到了摘錄 :((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陳述式進行回應。