控制代理程式工作階 - Amazon Bedrock

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

控制代理程式工作階

為了更好地控制會話上下文,您可以修改 SessionState對象在你的代理。SessionState物件包含可跨圈維護的資訊 (獨立) InvokeAgent請求和響應)。您可以使用此資訊在使用者交談期間為代理程式提供交談內容。

的一般格式 SessionState對象如下。

{ "sessionAttributes": { "<attributeName1>": "<attributeValue1>", "<attributeName2>": "<attributeValue2>", ... }, "promptSessionAttributes": { "<attributeName3>": "<attributeValue3>", "<attributeName4>": "<attributeValue4>", ... }, "invocationId": "string", "returnControlInvocationResults": [ ApiResult or FunctionResult, ... ], "knowledgeBases": [ { "knowledgeBaseId": "string", "retrievalConfiguration": { "vectorSearchConfiguration": { "overrideSearchType": "HYBRID | SEMANTIC", "numberOfResults": int, "filter": RetrievalFilter object } } }, ... ] }

選取一個主題以進一步瞭解 SessionState物件。

階段作業和提示階段作業

Amazon 基岩代理程式可讓您定義以下類型的情境屬性,這些屬性會在部分工作階段中持續存在:

  • sessionAttributes— 持續存在於使用者和代理程式之間工作階段的屬性。所有 InvokeAgent只要工作階段時間限制 (aidleSessionTTLinSeconds) 尚未超過,使用相同的要求就sessionId屬於相同的工作階段。

  • promptSessionAttributes— 持續在單一身的屬性 (一個) InvokeAgent呼叫)。當您編輯協調流程基本提示範本時,您可以使用 $ 提示符號 _ 會話屬性 $ 預留位置。此預留位置會在執行階段填入您在promptSessionAttributes欄位中指定的屬性。

您可以透過兩個不同的步驟定義工作階段狀態屬性:

  • 當您設定動作群組並撰寫 Lambda 函數時,請在傳回給 Amazon 基岩的回應事件promptSessionAttributes中加入sessionAttributes或包含在回應事件中。

  • 在執行階段,當您傳送 InvokeAgentrequest,在要求主體中包含sessionState物件,以便在交談中間動態變更工作階段狀態屬性。

階段屬性範例

下列範例會使用 session 屬性來個人化傳送給使用者的訊息。

  1. 撰寫您的應用程式程式碼,要求使用者提供他們的名字和要求給代理程式,並將答案儲存為變數 <first_name> 以及 <request>.

  2. 撰寫您的應用程式程式碼以傳送 InvokeAgent請求具有以下主體:

    { "inputText": "<request>", "sessionState": { "sessionAttributes": { "firstName": "<first_name>" } } }
  3. 當用戶使用您的應用程序並提供他們的名字時,您的代碼將發送名字作為 session 屬性,並且代理將在會期間存儲他們的名字。

  4. 因為工作階段屬性是在 Lambda 輸入事件中傳送的,因此您可以在 Lambda 函數中參考動作群組的這些工作階段屬性。例如,如果動作API結構描述需要請求主體中的名字,您可以在為動作群組撰寫 Lambda 函數時使用 firstName session 屬性,以便在傳送API請求時自動填入該欄位。

提示階段屬性範例

下列一般範例會使用提示工作階段屬性來提供代理程式的暫時內容。

  1. 撰寫應用程式程式碼,將使用者要求儲存在名為的變數中 <request>.

  2. 如果使用者在中使用指示相對時間 (例如「明天」) 的字詞,請撰寫您的應用程式程式碼以擷取使用者位置的時區。<request>,並存儲在一個名為的變量中 <timezone>.

  3. 編寫您的應用程序以發送 InvokeAgent請求具有以下主體:

    { "inputText": "<request>", "sessionState": { "promptSessionAttributes": { "timeZone": "<timezone>" } } }
  4. 如果用戶使用指示相對時間的單詞,您的代碼將發送timeZone提示會話屬性,並且代理將在合期間存儲它。

  5. 例如,如果使用者詢問I need to book a hotel for tomorrow,您的程式碼會將使用者的時區傳送給代理程式,而代理程式可以判斷「明天」指的確切日期。

  6. 提示會話屬性可以在以下步驟中使用。

    • 如果您在協調流程提示範本中包含 $prompt _session_屬性$ 預留位置,則 FM 的協調流程提示會包含提示工作階段屬性。

    • 提示工作階段屬性會在 Lambda 輸入事件中傳送,並可用來協助填入API要求或在回應中傳

動作群組叫用結果

如果您將動作群組設定為傳回控制項 InvokeAgent響應,您可以通過調用後續操作組發送結果 sessionState InvokeAgent通過包括以下字段進行響應:

  • invocationId— 此 ID 必須符合的returnControl欄位中ReturnControlPayload物件中invocationId傳回的 InvokeAgent響應。

  • returnControlInvocationResults— 包含您透過呼叫動作取得的結果。您可以設定應用程式來傳遞ReturnControlPayload物件以執行API要求或呼叫您定義的函數。然後,您可以在此處提供該操作的結果。returnControlInvocationResults清單中的每個成員都是下列其中一項:

    • 包含代理預測的API操作的ApiResult對象應在以前調用 InvokeAgent序列和調用系統中操作的結果。一般格式如下:

      { "actionGroup": "string", "apiPath": "string", "httpMethod": "string", "httpStatusCode": integer, "responseBody": { "TEXT": { "body": "string" } } }
    • 包含代理預測的函數的FunctionResult對象應該在前一個調用 InvokeAgent序列和調用系統中操作的結果。一般格式如下:

      { "actionGroup": "string", "function": "string", "responseBody": { "TEXT": { "body": "string" } } }

所提供的結果可用作進一步協調的內容、傳送至後處理以供代理程式格式化回應,或直接用於代理程式對使用者的回應。

知識庫擷取組態

若要修改附加至代理程式之知識庫的擷取組態,請包含knowledgeBaseConfigurations欄位以及您要指定其組態之每個知識庫的組態清單。請指定 knowledgeBaseId。在vectorSearchConfiguration欄位中,您可以指定下列查詢組態 (如需這些組態的詳細資訊,請參閱設定和自訂查詢和回應產生):

  • 搜尋類型 — 知識庫是否只搜尋向量嵌入 (SEMANTIC),還是同時搜尋向量嵌入和原始文字 (HYBRID)。使用overrideSearchType欄位。

  • 擷取的結果數目上限 — 要在回應中使用的查詢擷取結果數目上限。

  • 繼資料和篩選 — 您可以設定以根據資料來源檔案中的中繼資料屬性篩選結果的篩選器。