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