如果您使用的是 Amazon Lex V2,請改參閱 Amazon Lex V2 指南。
如果您使用的是 Amazon Lex V1,建議您將機器人升級至 Amazon Lex V2。我們不再將新功能新增至 V1,強烈建議所有新機器人都使用 V2。
本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
AMAZON.KendraSearchIntent
若要搜尋已使用 Amazon Kendra 編製索引的文件,請使用AMAZON.KendraSearchIntent
意圖。當 Amazon Lex 無法判斷與使用者交談中的下一個動作時,會觸發搜尋意圖。
AMAZON.KendraSearchIntent
僅在英文 (美國) (en-US) 地區以及美國東部 (維吉尼亞北部)、美國西部 (奧勒岡) 和歐洲 (愛爾蘭) 區域提供。
Amazon Kendra 是一種 machine-learning-based 搜索服務,用於索引自然語言文檔,如 PDF 文檔或 Microsoft Word 文件。它可以搜尋已編製索引的文件,並傳回下列類型的問題回覆:
-
解答
-
可能回答問題的常見問題項目
-
與問題相關的文件
如需使用 AMAZON.KendraSearchIntent
的範例,請參閱範例:為 Amazon Kendra 索引建立常見問題集機器人。
如果您為機器人設定AMAZON.KendraSearchIntent
意圖,Amazon Lex 會在無法判斷插槽或意圖的使用者說話時呼叫意圖。例如,如果您的機器人引發了一種稱為「比薩餅餡料」的插槽類型的響應,並且用戶說「什麼是比薩餅? ,」Amazon Lex 打電話AMAZON.KendraSearchIntent
來處理這個問題。如果沒有來自 Amazon Kendra 的回應,交談會依照機器人中的設定繼續進行。
當您在同一個機器人AMAZON.FallbackIntent
中同時使用AMAZON.KendraSearchIntent
和時,Amazon Lex 使用意圖如下:
-
Amazon Lex 調用
AMAZON.KendraSearchIntent
. 意圖呼叫 Amazon KendraQuery
操作。 -
如果 Amazon Kendra 傳回回應,Amazon Lex 會向使用者顯示結果。
-
如果沒有來自 Amazon Kendra 的回應,Amazon Lex 重新提示用戶。下一個動作取決於來自使用者的回應。
-
如果使用者的回應包含 Amazon Lex 可辨識的話語 (例如填入插槽值或確認意圖),則與使用者的對話會按照機器人的設定繼續進行。
-
如果使用者的回應不包含 Amazon Lex 所辨識的話語,Amazon Lex 會再次呼叫該作業。
Query
-
-
如果設定的重試次數後沒有回應,Amazon Lex 會呼叫
AMAZON.FallbackIntent
並結束與使用者的對話。
有三種方法可以使用AMAZON.KendraSearchIntent
向 Amazon Kendra 發出請求:
-
讓搜索意圖為您提出請求。Amazon Lex 調用 Amazon Kendra,並將用戶的話語作為搜索字符串。建立意圖時,您可以定義查詢篩選字串,以限制 Amazon Kendra 傳回的回應數量。Amazon Lex 在查詢請求中使用篩選器。
-
使用對話方塊 Lambda 函數,將其他查詢參數新增至請求,以縮小搜尋結果範圍。您可以將包含 Amazon Kendra 查詢參數的
kendraQueryFilterString
欄位新增至delegate
對話方塊動作。當您使用 Lambda 函數將查詢參數新增至請求時,它們的優先順序會高於您建立意圖時定義的查詢篩選器。 -
使用對話方塊 Lambda 函數建立新的查詢。您可以建立 Amazon Lex 傳送的完整亞馬遜肯德拉查詢請求。您可以在
delegate
對話方塊動作的kendraQueryRequestPayload
欄位中指定查詢。kendraQueryRequestPayload
欄位的優先順序高於kendraQueryFilterString
欄位。
若要在建立機器人時指定queryFilterString
參數,或在對話方塊 Lambda 函數中呼叫delegate
動作時指定kendraQueryFilterString
欄位,請指定用作 Amazon Kendra 查詢屬性篩選器的字串。如果字串不是有效的屬性篩選條件,則您會在執行時間取得 InvalidBotConfigException
例外狀況。如需有關屬性篩選器的詳細資訊,請參閱 Amazon Kendra 開發人員指南中的使用文件屬性篩選查詢。
若要控制 Amazon Lex 傳送至 Amazon Kendra 的查詢,您可以在對話方塊 Lambda 函數的kendraQueryRequestPayload
欄位中指定查詢。如果查詢無效,Amazon Lex 會傳回InvalidLambdaResponseException
例外狀況。如需詳細資訊,請參閱 Amazon Kendra 開發人員指南中的查詢操作。
如需使用 AMAZON.KendraSearchIntent
的範例,請參閱範例:為 Amazon Kendra 索引建立常見問題集機器人。
Amazon Kendra 搜索的 IAM 政策
若要使用AMAZON.KendraSearchIntent
意圖,您必須使用提供 AWS Identity and Access Management (IAM) 政策的角色,讓 Amazon Lex 承擔具有呼叫 Amazon Kendra Query
意圖之權限的執行時期角色。您使用的 IAM 設定取決於您是AMAZON.KendraSearchIntent
使用 Amazon Lex 主控台建立,還是使用 AWS 開發套件或 AWS Command Line Interface (AWS CLI) 來建立。使用主控台時,您可以選擇新增將 Amazon Kendra 呼叫給 Amazon Lex 服務連結角色的權限,或使用專門用於呼叫 Amazon Kendra Query
操作的角色。當您使用 AWS CLI 或開發套件建立意圖時,您必須使用專門用於呼叫 Query
操作的角色。
連接許可
您可以使用主控台連接許可,將 Amazon Kendra Query
操作存取到預設的 Amazon Lex 服務連結角色。將許可附加到服務連結角色時,您不需要建立和管理專門用於連線至 Amazon Kendra 索引的執行時期角色。
您用來存取 Amazon Lex 主控台的使用者、角色或群組必須具有管理角色政策的許可。將下列 IAM 政策附加到主控台存取角色。當您授與這些許可時,角色具有變更現有的服務連結角色政策的許可。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "iam:AttachRolePolicy", "iam:PutRolePolicy", "iam:GetRolePolicy" ], "Resource": "arn:aws:iam::*:role/aws-service-role/lex.amazonaws.com/AWSServiceRoleForLexBots" }, { "Effect": "Allow", "Action": "iam:ListRoles", "Resource": "*" } ] }
指定角色
您可以使用主控台AWS CLI、或 API 來指定呼叫 Amazon Kendra Query
作業時要使用的執行階段角色。
您用來指定執行階段角色的使用者、角色或群組必須具有iam:PassRole
權限。下列政策會定義許可。您可以使用 iam:AssociatedResourceArn
和 iam: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 用來呼叫 Amazon Kendra 所需的執行階段角色必須具有kendra:Query
許可。當您使用現有的 IAM 角色獲得呼叫 Amazon Kendra Query
操作的許可時,該角色必須附加以下政策。
您可以使用 IAM 主控台、IAM API 或建AWS CLI立政策並將其附加到角色。這些指示會使用 AWS CLI 來建立角色和政策。
注意
下列程式碼是針對 Linux 和 MacOS 格式化的。若為 Windows,請將接續字元 (\) 取代為插入符號 (^)。
將查詢操作許可新增至角色
-
在目前目錄中建立一個稱為
KendraQueryPolicy.json
的文件、將下列程式碼新增至其中,然後儲存它{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "kendra:Query" ], "Resource": [ "arn:aws:kendra:
region
:account
:index/index ID
" ] } ] } -
在中AWS CLI,執行下列命令以建立用於執行 Amazon Kendra
Query
作業的 IAM 政策。aws iam create-policy \ --policy-name
query-policy-name
\ --policy-document file://KendraQueryPolicy.json -
將政策附加到您用來呼叫
Query
作業的 IAM 角色。aws iam attach-role-policy \ --policy-arn arn:aws:iam::
account-id
:policy/query-policy-name
--role-namerole-name
您可以選擇更新 Amazon Lex 服務連結角色,或使用為機器人建立時建立AMAZON.KendraSearchIntent
的角色。下列程序顯示如何選擇要使用的 IAM 角色。
若要指定 AMAZON 的執行階段角色。 KendraSearchIntent
登錄到AWS Management Console並打開 Amazon Lex 控制台 https://console.aws.amazon.com/lex/
. -
選擇您要新增
AMAZON.KendraSearchIntent
的機器人。 -
選擇 Intents (意圖) 旁邊的加號 (+)。
-
在 Add intent (新增意圖) 中,選擇 Search existing intents (搜尋現有的意圖)。
-
在 Search intents (搜尋意圖) 中,輸入
AMAZON.KendraSearchIntent
然後選擇 Add (新增)。 -
在 Copy built-in intent (複製內建意圖) 中,輸入意圖的名稱,例如
KendraSearchIntent
,然後選擇 Add (新增)。 -
開啟 Amazon Kendra query (Amazon Kendra 查詢) 部分。
-
在 IAM role (IAM 角色) 下,選擇以下其中一個選項:
-
若要更新 Amazon Lex 服務連結角色,讓您的機器人能夠查詢 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 會在意圖conclusion
陳述式中傳回搜尋的回應。除非履行 Lambda 函數產生結論訊息,否則意圖必須有conclusion
陳述式。
Amazon Kendra 有四種類型的回應。
-
x-amz-lex:kendra-search-response-question_answer-question-<N>
— 來自與搜索匹配的常見問題解答的問題。 -
x-amz-lex:kendra-search-response-question_answer-answer-<N>
— 來自與搜索匹配的常見問題解答的答案。 -
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 開發人員指南中的回應類型。
conclusion
陳述式必須有一或多個訊息群組。每個訊息群組都包含一或多個訊息。每個訊息都可以包含一或多個預留位置變數,這些變數會在 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 會根據使用者的話語建構查詢,並使用您在設定queryFilterString
意圖時提供的查詢 (如果您提供的話)。
您可以使用對話方塊程式碼勾點回應中的兩個欄位來修改 Amazon Kendra 的請求:
-
kendraQueryFilterString
— 使用此字串可指定 Amazon Kendra 請求的屬性篩選器。您可以使用索引中定義的任何索引欄位來篩選查詢。如需篩選字串的結構,請參閱 Amazon Kendra 開發人員指南中的使用文件屬性篩選查詢。如果指定的篩選字串無效,您會取得InvalidLambdaResponseException
例外狀況。kendraQueryFilterString
字串會覆寫為意圖所設定的queryFilterString
中指定的任何查詢字串。 -
kendraQueryRequestPayload
— 使用此字串可指定 Amazon Kendra 查詢。您的查詢可以使用 Amazon Kendra 的任何功能。如果您沒有指定有效的查詢,您會取得InvalidLambdaResponseException
例外狀況。如需詳細資訊,請參閱 Amazon Kendra 開發人員指南中的查詢。
建立篩選器或查詢字串之後,您可以將回應的dialogAction
欄位設定為的 Amazon Lex 傳送回應delegate
。Amazon Lex 會將查詢傳送至 Amazon Kendra,然後將查詢回應傳回至履行代碼勾點。
針對回應使用履行程式碼掛勾
Amazon Lex 將查詢傳送至 Amazon Kendra 之後,查詢回應就會傳回至AMAZON.KendraSearchIntent
履行 Lambda 函數。代碼鉤子的輸入事件包含來自 Amazon Kendra 的完整響應。查詢資料的結構與 Amazon Kendra Query
作業傳回的資料結構相同。如需詳細資訊,請參閱 Amazon Kendra 開發人員指南中的查詢回應語法。
履行程式碼掛勾是選用的。如果不存在,或程式碼掛鉤未在回應中傳回訊息,Amazon Lex 會使用該conclusion
陳述式進行回應。