設定 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 函數同步回應的大小上限。如需詳細資訊,請參閱《AWS Lambda 開發人員指南》中的調用承載資源配額。
輸入事件格式取決於您是否使用 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 函數範例
以下是有關如何在 Python 中定義 Lambda 函數的最小範例。選取對應於您是否使用 OpenAPI 結構描述或函數詳細資訊定義動作群組的索引標籤: