使用自訂協同運作來自訂 Amazon Bedrock 代理程式的行為 - Amazon Bedrock

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

使用自訂協同運作來自訂 Amazon Bedrock 代理程式的行為

Amazon Bedrock 為您提供自訂代理程式協同運作策略的選項。自訂協同運作可讓您完全控制代理程式處理多步驟任務、做出決策和執行工作流程的方式。

使用自訂協同運作,您可以建置可實作使用案例專屬協同運作邏輯的 Amazon Bedrock 代理程式。這包括複雜的協同運作工作流程、驗證步驟或多步驟流程,其中代理程式必須先執行數個動作,才能找到最終答案。

若要針對代理程式使用自訂協同運作,請建立概述您的協同運作邏輯的 AWS Lambda 函數。該函數可控制代理程式回應輸入的方式,方法是提供指示給 Bedrock 的執行時期程序,以說明何時及如何調用模型、何時調用動作工具,然後決定最終回應。

自訂協同運作選項適用於提供 Amazon Bedrock 代理程式的所有 AWS 區域。

您可以在AWS 管理主控台中或透過 API 設定自訂協同運作。在繼續之前,請確定您的 AWS Lambda 函數已準備好進行測試。

Console

在主控台,您可以在建立代理程式之後設定自訂協同運作。您可以在編輯代理程式時進行設定。

檢視或編輯代理程式的自訂協同運作
  1. 使用具有 Amazon Bedrock 主控台使用許可的 IAM 身分登入AWS 管理主控台。接著,開啟位於 https://console.aws.amazon.com/bedrock 的 Amazon Bedrock 主控台。

  2. 在左側導覽窗格中,選擇代理程式。接著在代理程式區段中選擇代理程式。

  3. 在代理程式詳細資訊頁面的工作草稿區段中,選取工作草稿

  4. 工作草稿頁面的協同運作策略區段中,選擇編輯

  5. 協同運作策略頁面上,於協同運作策略詳細資訊區段中,選擇自訂協同運作

  6. 對於自訂協同運作 Lambda 函數,請從下拉式功能表中選擇 Lambda 函數,對於函數版本,請選擇版本。

  7. 若要允許代理程式在產生回應時使用該範本,請開啟啟用範本。如果關閉此組態,代理程式就不會使用範本。

  8. 頁面頂端會出現綠色橫幅,指出已成功儲存變更。

  9. 若要儲存設定,請選擇下列其中一個選項:

    1. 若要保持在相同的視窗中,以便在測試更新的代理程式時動態變更 AWS Lambda 函數,請選擇儲存

    2. 若要儲存設定並返回工作草稿頁面,請選擇儲存並結束

  10. 若要測試代理程式的自訂協同運作,請在測試視窗中選擇準備

API

若要使用 API 操作設定自訂協同運作,請使用 Amazon Bedrock 代理程式建置時期端點傳送 UpdateAgent 請求 (請參閱連結以了解請求和回應格式及欄位詳細資訊)。將 orchestrationType 物件指定為 CUSTOM_ORCHESTRATION

React 中的協同運作承載範例

以下是一個 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\":{}}}" } }