Personalizzazione del comportamento di Agent per Amazon Bedrock con un’orchestrazione personalizzata - Amazon Bedrock

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Personalizzazione del comportamento di Agent per Amazon Bedrock con un’orchestrazione personalizzata

Amazon Bedrock ti offre la possibilità di personalizzare la strategia di orchestrazione dell’agente. L’orchestrazione personalizzata ti offre il pieno controllo sul modo in cui i tuoi agenti gestiscono le attività in più fasi, prendono decisioni ed eseguono flussi di lavoro.

L’orchestrazione personalizzata consente di creare agenti di Amazon Bedrock in grado di implementare una logica di orchestrazione specifica per il tuo caso d’uso. Questo include flussi di lavoro di orchestrazione complessi, fasi di verifica o processi in più fasi che richiedono agli agenti di eseguire diverse azioni prima di arrivare a una risposta definitiva.

Per utilizzare l’orchestrazione personalizzata per il tuo agente, crea una funzione AWS Lambda che delinei la tua logica di orchestrazione. La funzione controlla come l’agente risponde all’input fornendo al processo di runtime di Bedrock istruzioni su quando e come invocare il modello e quando invocare gli strumenti di azione, determinando quindi la risposta finale.

L’opzione di orchestrazione personalizzata è disponibile in tutte le Regioni AWS in cui è presente Agent per Amazon Bedrock.

Puoi configurare l’orchestrazione personalizzata nella Console di gestione AWS o tramite l’API. Prima di procedere, assicurati che la funzione AWS Lambda sia pronta per il test.

Console

Una volta creato l’agente, nella console è possibile configurare l’orchestrazione personalizzata. La configurazione avviene durante la modifica dell'agente.

Per visualizzare o modificare l’orchestrazione personalizzata per l’agente
  1. Accedi alla Console di gestione AWS con un’identità IAM che disponga delle autorizzazioni per utilizzare la console Amazon Bedrock. Quindi, apri la console Amazon Bedrock all’indirizzo https://console.aws.amazon.com/bedrock.

  2. Nel riquadro di navigazione a sinistra, seleziona Agenti. Quindi, scegli un agente nella sezione Agenti.

  3. Nella sezione Bozza di lavoro della pagina dei dettagli dell’agente, seleziona Bozza di lavoro.

  4. Nella pagina Bozza di lavoro, nella sezione Strategia di orchestrazione, scegli Modifica.

  5. Nella pagina Strategia di orchestrazione della sezione Dettagli della strategia di orchestrazione, scegli Orchestrazione personalizzata.

  6. Per Funzione Lambda di orchestrazione personalizzata, scegli la funzione Lambda dal menu a discesa e per Versione della funzione, scegli la versione.

  7. Abilita Attiva modello per consentirne l’utilizzo da parte dell’agente durante la generazione delle risposte. Se questa configurazione è disattivata, l’agente non lo utilizza.

  8. Nella parte superiore della pagina viene visualizzato un banner verde per informarti che le modifiche sono state salvate correttamente.

  9. Per salvare le impostazioni, scegli una delle seguenti opzioni:

    1. Per rimanere nella stessa finestra in modo da poter modificare dinamicamente la funzione AWS Lambda durante il test dell’agente aggiornato, scegli Salva.

    2. Per salvare le impostazioni e tornare alla pagina Bozza di lavoro, scegli Salva ed esci.

  10. Per testare l’orchestrazione personalizzata dell’agente, scegli Prepara nella finestra Test.

API

Per configurare l’orchestrazione personalizzata utilizzando le operazioni API, invia una richiesta UpdateAgent (consulta il link per i formati di richiesta e risposta e i dettagli sui campi) con un endpoint in fase di compilazione di Agent per Amazon Bedrock. Specifica l’oggetto orchestrationType come CUSTOM_ORCHESTRATION.

Esempio di payload di orchestrazione in React

Di seguito è riportato un esempio di reazione che mostra la catena di orchestrazione del pensiero. In questo esempio, dopo ogni passaggio, l’agente di Amazon Bedrock chiede al modello di prevedere l’azione successiva. Tieni presente che il primo stato di ogni conversazione è sempre START. Gli eventi sono le risposte che la funzione invia in risposta ad Agent per 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); }

Esempio di payload di orchestrazione in Lambda

Di seguito è riportato un esempio che mostra la catena di orchestrazione del pensiero. In questo esempio, dopo ogni passaggio, l’agente di Amazon Bedrock chiede al modello di prevedere l’azione successiva. Tieni presente che il primo stato di ogni conversazione è sempre START. Gli eventi sono le risposte che la funzione invia in risposta ad Agent per Amazon Bedrock.

Dalla struttura del payload all’orchestrazione 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 } } }

Dalla struttura del payload all’orchestrazione 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 } } }

Esempio di START_STATE inviato da Agent per Amazon Bedrock all’orchestratore Lambda

{ "version": "1.0", "state": "START", "input": { "text": "{\"text\":\"invoke agent input text\"}" }, "context": { ... } }

Se l’orchestrazione Lambda decide di inviare una risposta INVOKE_MODEL EVENT, potrebbe essere simile alla seguente:

{ "version": "1.0", "actionEvent": "INVOKE_MODEL", "output": { "text": "converse API request", "trace": { "event": { "text": "debug trace text" } } }, "context": {} }

Esempio di INVOKE_TOOL_EVENT utilizza l’API Converse

{ "version": "1.0", "actionEvent": "INVOKE_TOOL", "output": { "text": "{\"toolUse\":{\"toolUseId\":\"unique id\",\"name\":\"tool name\",\"input\":{}}}" } }