設定 Lambda 函數以傳送 Amazon Bedrock 代理程式從使用者引出的資訊 - Amazon Bedrock

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

設定 Lambda 函數以傳送 Amazon Bedrock 代理程式從使用者引出的資訊

您可以定義 Lambda 函數來為動作群組編寫商業邏輯。Amazon Bedrock 代理程式決定在動作群組中呼叫所需的 API 操作後,會將來自 API 結構描述的資訊與相關中繼資料一起傳送至 Lambda 函數做為輸入事件。若要撰寫函數,您必須了解 Lambda 函數的下列元件:

  • 輸入事件 – 包含來自 API 操作請求內文的相關中繼資料和填入欄位,或代理程式判斷必須呼叫之動作的函數參數。

  • 回應 – 包含 API 操作或函數傳回的回應內文的相關中繼資料和填入欄位。

您可以撰寫 Lambda 函數,以定義如何處理動作群組,並自訂您希望傳回 API 回應的方式。您可以使用輸入事件中的變數來定義函數,並將回應傳回給代理。

注意

動作群組最多可包含 11 個 API 操作,但您只能寫入一個 Lambda 函數。由於 Lambda 函數一次只能接收一個輸入事件並傳回一個 API 操作的回應,因此您應該考慮可能叫用的不同 API 操作來撰寫函數。

若要讓代理程式使用 Lambda 函數,您必須將資源型政策連接至該函數,以提供代理程式的許可。如需詳細資訊,請遵循 中的步驟以資源為基礎的政策,以允許 Amazon Bedrock 叫用動作群組 Lambda 函數。如需 Lambda 中資源型政策的詳細資訊,請參閱《 AWS Lambda 開發人員指南》中的使用資源型 Lambda 政策

若要了解如何在建立動作群組時定義函數,請參閱 在 Amazon Bedrock 中將動作群組新增至您的代理程式

來自 Amazon Bedrock 的 Lambda 輸入事件

調用使用 Lambda 函數的動作群組時,Amazon Bedrock 會傳送下列一般格式的 Lambda 輸入事件。您可以定義 Lambda 函數,以使用任何輸入事件欄位來操作函數內的商業邏輯,以成功執行動作。如需 Lambda 函數的詳細資訊,請參閱《 AWS Lambda 開發人員指南》中的事件驅動調用

輸入事件格式取決於您是否使用 API 結構描述或函數詳細資訊定義動作群組:

  • 如果您使用 API 結構描述定義動作群組,則輸入事件格式如下:

    { "messageVersion": "1.0", "agent": { "name": "string", "id": "string", "alias": "string", "version": "string" }, "inputText": "string", "sessionId": "string", "actionGroup": "string", "apiPath": "string", "httpMethod": "string", "parameters": [ { "name": "string", "type": "string", "value": "string" }, ... ], "requestBody": { "content": { "<content_type>": { "properties": [ { "name": "string", "type": "string", "value": "string" }, ... ] } } }, "sessionAttributes": { "string": "string", }, "promptSessionAttributes": { "string": "string" } }
  • 如果您使用函數詳細資訊定義動作群組,則輸入事件格式如下:

    { "messageVersion": "1.0", "agent": { "name": "string", "id": "string", "alias": "string", "version": "string" }, "inputText": "string", "sessionId": "string", "actionGroup": "string", "function": "string", "parameters": [ { "name": "string", "type": "string", "value": "string" }, ... ], "sessionAttributes": { "string": "string", }, "promptSessionAttributes": { "string": "string" } }

以下清單說明輸入事件欄位;

  • messageVersion – 訊息版本,用於識別進入 Lambda 函數的事件資料的格式,以及來自 Lambda 函數的回應的預期格式。Amazon Bedrock 僅支援 1.0 版。

  • agent— 包含動作群組所屬代理程式的名稱、ID、別名和版本的相關資訊。

  • inputText— 用於對話回合的使用者輸入。

  • sessionId – 代理程式工作階段的唯一識別碼。

  • actionGroup— 動作群組的名稱。

  • parameters— 包含物件清單。每個物件都包含 API OpenAPI 操作中參數的名稱、類型和值,如結構描述或函數中所定義。

  • 如果您使用 API 結構描述定義動作群組,則輸入事件會包含下列欄位:

    • apiPath – API 操作的路徑,如OpenAPI結構描述中所定義。

    • httpMethod – API 操作的方法,如OpenAPI結構描述中所定義。

    • requestBody – 包含請求內文及其屬性,如動作群組的OpenAPI結構描述中所定義。

  • 如果您使用函數詳細資訊定義動作群組,則輸入事件會包含下列欄位:

    • function – 動作群組的函數詳細資訊中定義的函數名稱。

  • sessionAttributes – 包含工作階段屬性及其值。這些屬性會存放在工作階段中,並提供代理程式的內容。

  • promptSessionAttributes – 包含提示工作階段屬性及其值。這些屬性會輪流存放,並提供代理程式的內容。

Amazon Bedrock 的 Lambda 回應事件

Amazon Bedrock 預期 Lambda 函數符合以下列格式的回應。回應包含從 API 操作傳回的參數。代理可以使用 Lambda 函數的回應進行進一步協同運作,或協助將回應傳回給客戶。

注意

Lambda 承載回應大小上限為 25 KB。

輸入事件格式取決於您是否使用 API 結構描述或函數詳細資訊定義動作群組:

  • 如果您使用 API 結構描述定義動作群組,回應格式如下:

    { "messageVersion": "1.0", "response": { "actionGroup": "string", "apiPath": "string", "httpMethod": "string", "httpStatusCode": number, "responseBody": { "<contentType>": { "body": "JSON-formatted string" } } }, "sessionAttributes": { "string": "string", ... }, "promptSessionAttributes": { "string": "string", ... }, "knowledgeBasesConfiguration": [ { "knowledgeBaseId": "string", "retrievalConfiguration": { "vectorSearchConfiguration": { "numberOfResults": int, "overrideSearchType": "HYBRID | SEMANTIC", "filter": RetrievalFilter object } } }, ... ] }
  • 如果您使用函數詳細資訊定義動作群組,回應格式如下:

    { "messageVersion": "1.0", "response": { "actionGroup": "string", "function": "string", "functionResponse": { "responseState": "FAILURE | REPROMPT", "responseBody": { "<functionContentType>": { "body": "JSON-formatted string" } } } }, "sessionAttributes": { "string": "string", }, "promptSessionAttributes": { "string": "string" }, "knowledgeBasesConfiguration": [ { "knowledgeBaseId": "string", "retrievalConfiguration": { "vectorSearchConfiguration": { "numberOfResults": int, "filter": { RetrievalFilter object } } } }, ... ] }

下列清單說明回應欄位:

  • messageVersion – 訊息版本,用於識別進入 Lambda 函數的事件資料的格式,以及來自 Lambda 函數的回應的預期格式。Amazon Bedrock 僅支援 1.0 版。

  • response— 包含 API 回應的下列資訊。

    • actionGroup— 動作群組的名稱。

    • 如果您使用 API 結構描述定義動作群組,則下列欄位可在回應中:

      • apiPath – API 操作的路徑,如OpenAPI結構描述中所定義。

      • httpMethod – API 操作的方法,如OpenAPI結構描述中所定義。

      • httpStatusCode – 從 API 操作傳回的 HTTP 狀態碼。

      • responseBody – 包含回應內文,如OpenAPI結構描述中所定義。

    • 如果您使用函數詳細資訊定義動作群組,則下列欄位可以在回應中:

      • responseState (選用) – 設定為下列其中一種狀態,以在處理動作之後定義代理程式的行為:

        • 失敗 – 代理程式會擲回目前工作階段DependencyFailedException的 。當函數因相依性失敗而執行失敗時適用。

        • REPROMPT - 代理程式會將回應字串傳遞給模型以將其取代。當函數執行因輸入無效而失敗時適用。

      • responseBody – 包含一個物件,定義從執行函數的回應。金鑰是內容類型 (目前僅TEXT支援 ),而值是包含 回應body的 物件。

  • (選用) sessionAttributes — 包含階段作業屬性及其值。如需詳細資訊,請參閱工作階段和提示工作階段屬性

  • (選用) promptSessionAttributes — 包含提示屬性及其值。如需詳細資訊,請參閱工作階段和提示工作階段屬性

  • (選用) knowledgeBasesConfiguration – 包含連接至代理程式之知識庫的查詢組態清單。如需詳細資訊,請參閱知識庫擷取組態

動作群組 Lambda 函數範例

以下是如何在 中定義 Lambda 函數的最小範例Python。選取對應於您是否使用OpenAPI結構描述或函數詳細資訊定義動作群組的標籤:

OpenAPI schema
def lambda_handler(event, context): agent = event['agent'] actionGroup = event['actionGroup'] api_path = event['apiPath'] # get parameters get_parameters = event.get('parameters', []) # post parameters post_parameters = event['requestBody']['content']['application/json']['properties'] response_body = { 'application/json': { 'body': "sample response" } } action_response = { 'actionGroup': event['actionGroup'], 'apiPath': event['apiPath'], 'httpMethod': event['httpMethod'], 'httpStatusCode': 200, 'responseBody': response_body } session_attributes = event['sessionAttributes'] prompt_session_attributes = event['promptSessionAttributes'] api_response = { 'messageVersion': '1.0', 'response': action_response, 'sessionAttributes': session_attributes, 'promptSessionAttributes': prompt_session_attributes } return api_response
Function details
def lambda_handler(event, context): agent = event['agent'] actionGroup = event['actionGroup'] function = event['function'] parameters = event.get('parameters', []) response_body = { 'TEXT': { 'body': "sample response" } } function_response = { 'actionGroup': event['actionGroup'], 'function': event['function'], 'functionResponse': { 'responseBody': response_body } } session_attributes = event['sessionAttributes'] prompt_session_attributes = event['promptSessionAttributes'] action_response = { 'messageVersion': '1.0', 'response': function_response, 'sessionAttributes': session_attributes, 'promptSessionAttributes': prompt_session_attributes } return action_response