本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
設定 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
– 動作群組的函數詳細資訊中定義的函數名稱。
-
-
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結構描述或函數詳細資訊定義動作群組的標籤: