設定 Lambda 函數以傳送 Amazon 基岩代理程式從使用者取得的資訊 - Amazon Bedrock

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

設定 Lambda 函數以傳送 Amazon 基岩代理程式從使用者取得的資訊

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

  • 輸入事件 — 包含來自API作業要求主體的相關中繼資料和已填入欄位,或必須呼叫代理程式確定之動作的函數參數。

  • — 包含從API作業或函數傳回之回應主體的相關中繼資料和已填入欄位。

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

注意

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

若要讓您的代理程式使用 Lambda 函數,您必須將以資源為基礎的原則附加至函數,以便為代理程式提供權限。如需詳細資訊,請遵循中的步驟資源型政策,允許 Amazon Bedrock 叫用動作群組 Lambda 函數。如需 Lambda 中以資源為基礎的政策的詳細資訊,請參閱中的〈使用 Lambda 的資源型政策〉 AWS 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— 從作業傳回的HTTPAPI狀態碼。

      • responseBody— 包含回應主體,如 OpenAPI 結構描述。

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

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

        • FAILURE— 代理程式會針對目前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