本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
使用自訂協同運作自訂 Amazon Bedrock 代理程式的行為
Amazon Bedrock 為您提供自訂代理程式協同運作策略的選項。自訂協同運作可讓您完全控制代理程式處理多步驟任務、做出決策和執行工作流程的方式。
透過自訂協同運作,您可以建置 Amazon Bedrock 代理程式,以實作特定於使用案例的協同運作邏輯。這包括複雜的協同運作工作流程、驗證步驟或多步驟流程,其中代理程式必須先執行數個動作,才能找到最終答案。
若要為您的代理程式使用自訂協同運作,請建立概述協同運作邏輯的 AWS Lambda 函數。該函式可控制代理程式回應輸入的方式,方法是提供指示給 Bedrock 的執行時期程序,以說明何時及如何調用模型、何時調用動作工具,然後決定最終回應。
自訂協同運作選項可在 Amazon Bedrock 代理程式可用的所有 AWS 區域 中使用。
您可以在 中或透過 AWS 管理主控台 API 設定自訂協同運作。在繼續之前,請確定您的 AWS Lambda 函數已準備好進行測試。
- Console
-
在 主控台中,您可以在建立代理程式之後設定自訂協同運作。您可以在編輯代理程式時進行設定。
檢視或編輯代理程式的自訂協同運作
-
AWS 管理主控台 使用具有使用 Amazon Bedrock 主控台之許可的 IAM 身分登入 。然後,開啟位於 https://https://console.aws.amazon.com/bedrock
的 Amazon Bedrock 主控台。 -
在左側導覽窗格中,選擇客服人員。然後在客服人員區段中選擇客服人員。
-
在客服人員詳細資訊頁面的工作草稿區段中,選取工作草稿。
-
在工作草稿頁面的協調策略區段中,選擇編輯。
-
在協調策略頁面上,於協調策略詳細資訊區段中,選擇自訂協調。
-
對於自訂協同運作 Lambda 函數,請從下拉式功能表中選擇 Lambda 函數,對於函數版本,請選擇版本。
-
若要允許代理程式在產生回應時使用範本,請開啟啟用範本。如果關閉此組態,代理程式不會使用該範本。
-
頁面頂端會出現綠色橫幅,指出已成功儲存變更。
-
若要儲存設定,請選擇下列其中一個選項:
-
若要保持在相同的視窗中,以便在測試更新的代理程式時動態變更 AWS Lambda 函數,請選擇儲存。
-
若要儲存設定並返回工作草稿頁面,請選擇儲存並結束。
-
-
若要測試代理程式的自訂協同運作,請在測試視窗中選擇準備。
-
- API
-
若要使用 API 操作設定自訂協同運作,請使用 Amazon Bedrock 建置時間端點的代理程式傳送 UpdateAgent 請求 (請參閱請求和回應格式和欄位詳細資訊的連結)。將
orchestrationType物件指定為CUSTOM_ORCHESTRATION。React 中的協調承載範例
以下是顯示思維協同運作鏈的反應範例。在此範例中,在每個步驟之後,Amazon Bedrock 代理程式會要求模型預測下一個動作。請注意,任何對話的第一個狀態一律為
START。事件是 函數傳送的回應,做為對 Amazon Bedrock 代理程式的回應。function react_chain_of_thought_orchestration(event) { const incomingState = event.state; let payloadData = ''; let responseEvent = ''; let responseTrace = ''; let responseAttribution = ''; if (incomingState == 'START') { // 1. Invoke model in start responseEvent = 'INVOKE_MODEL'; payloadData = JSON.stringify(intermediatePayload(event)); } else if (incomingState == 'MODEL_INVOKED') { const stopReason = modelInvocationStopReason(event); if (stopReason == "tool_use") { // 2.a. If invoke model predicts tool call, then we send INVOKE_TOOL event responseEvent = 'INVOKE_TOOL'; payloadData = toolUsePayload(event); } else if (stopReason == "end_turn") { // 2.b. If invoke model predicts an end turn, then we send FINISH event responseEvent = 'FINISH'; payloadData = getEndTurnPayload(event); } } else if (incomingState == 'TOOL_INVOKED') { // 3. After a tool invocation, we again ask LLM to predict what should be the next step responseEvent = 'INVOKE_MODEL'; payloadData = intermediatePayload(event); } else { // Invalid incoming state throw new Error('Invalid state provided!'); } // 4. Create the final payload to send back to BedrockAgent const payload = createPayload(payloadData, responseEvent, responseTrace, ...); return JSON.stringify(payload); }Lambda 中的協調承載範例
下列範例顯示思維協同運作的鏈結。在此範例中,在每個步驟之後,Amazon Bedrock 代理程式會要求模型預測下一個動作。請注意,任何對話的第一個狀態一律為
START。事件是 函數傳送的回應,做為對 Amazon Bedrock 代理程式的回應。協調 Lambda 的承載結構
{ "version": "1.0", "state": "START | MODEL_INVOKED | TOOL_INVOKED | APPLY_GUARDRAIL_INVOKED |user-defined", "input": { "text": "user-provided text or tool results in converse format" }, "context": { "requestId": "invoke agent request id", "sessionId": "invoke agent session id", "agentConfiguration": { "instruction": "agent instruction>, "defaultModelId": "agent default model id", "tools": [{ "toolSpec": {...} } ... ], "guardrails": { "version": "guardrail version", "identifier": "guardrail identifier" } }, "session": [{ "agentInput": "input utterance provided in invokeAgent", "agentOutput": "output response from invokeAgent", "intermediarySteps": [{ "orchestrationInput": { "state": "START | MODEL_INVOKED | TOOL_INVOKED | APPLY_GUARDRAIL_INVOKED |user defined", "text": "..." }, "orchestrationOutput": { "event": "INVOKE_MODEL | INVOKE_TOOL | APPLY_GUARDRAIL | FINISH |user defined", "text": "Converse API request or text" } }] }], "sessionAttributes": {key value pairs}, "promptSessionAttributes": {key value pairs} } }來自協同運作 lambda 的承載結構
{ "version": "1.0", "actionEvent": "INVOKE_MODEL | INVOKE_TOOL | APPLY_GUARDRAIL | FINISH |user defined", "output": { "text": "Converse API request for INVOKE_MODEL, INVOKE_TOOL, APPLY_GUARDRAIL or text for FINISH", "trace": { "event": { "text": "Trace message to emit as event in InvokeAgent response" } } }, "context": { "sessionAttributes": {key value pairs}, "promptSessionAttributes": {key value pairs} } }從 Amazon Bedrock 代理程式傳送至協調器 Lambda 的 START_STATE 範例
{ "version": "1.0", "state": "START", "input": { "text": "{\"text\":\"invoke agent input text\"}" }, "context": { ... } }為了回應協同運作 Lambda 決定傳送 INVOKE_MODEL EVENT 回應,它看起來可能會類似以下內容:
{ "version": "1.0", "actionEvent": "INVOKE_MODEL", "output": { "text": "converse API request", "trace": { "event": { "text": "debug trace text" } } }, "context": {} }使用 Converse API 的 INVOKE_TOOL_EVENT 範例
{ "version": "1.0", "actionEvent": "INVOKE_TOOL", "output": { "text": "{\"toolUse\":{\"toolUseId\":\"unique id\",\"name\":\"tool name\",\"input\":{}}}" } }