View a markdown version of this page

Hook del ciclo di vita - Amazon Bedrock AgentCore

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à.

Hook del ciclo di vita

Gli hook del ciclo di vita inviano un evento a una funzione AWS Lambda, a un argomento Amazon SNS o a un bus di EventBridge eventi Amazon in un punto definito del ciclo dell'agente harness. Usa gli hook per convalidare una chiamata o una chiamata allo strumento, registrare l'attività in un altro sistema o avviare un flusso di lavoro asincrono.

È possibile configurare i ganci su un cablaggio con o. CreateHarness UpdateHarness La configurazione dei ganci non è disponibile come alternativaInvokeHarness. Un'imbracatura supporta fino a 20 ganci e il nome di ogni gancio deve essere univoco all'interno dell'imbracatura.

Scegli un evento del ciclo di vita

Il tipo di evento determina quando viene eseguito l'hook, il contesto inviato alla destinazione e l'effetto di una decisione Lambdadeny.

Event Contesto Effetto di una decisione Lambda deny

before_invocation

L'ordine messages viene fornito nella InvokeHarness richiesta corrente, prima che il cablaggio ripristini lo stato della sessione.

Interrompe l'invocazione prima dell'avvio dell'agente. Il flusso di risposta emette un messageStop evento impostato su. stopReason hook_stopped

before_tool_call

Il nome dello strumento, il tipo di utensile, l'ID di utilizzo dello strumento e l'input dell'utensile generato dal modello.

Salta la chiamata allo strumento. Il ciclo degli agenti continua.

after_tool_call

Il nome dello strumento, il tipo di utensile, l'ID di utilizzo dell'utensile, il risultato dell'utensile e una stringa di errore quando uno strumento eseguito dal cablaggio generava un'eccezione.

Mantiene il risultato completo dello strumento, quindi interrompe la chiamata. Il flusso di risposta emette un messageStop evento impostato su. stopReason hook_stopped

after_invocation

Il motivo dell'interruzione dell'invocazione e i token di input e output contano.

Riporta la decisione nel flusso di risposta. L'invocazione è già stata completata, quindi l'hook non può ritirare l'output in streaming.

Usa gli hook tool-call con funzioni in linea

Tool-call i ganci funzionano anche per gli strumenti. inline_function Il cablaggio viene richiamato before_tool_call dopo che il modello ha generato la richiesta dell'utensile e prima che il cablaggio invii la chiamata in sospeso per l'esecuzione sul lato client. Consuma il flusso di risposta completo, quindi elabora la chiamata in linea solo se l'ultimo evento è impostato su. messageStop stopReason tool_use La richiesta generata dal modello può comparire negli eventi di stream precedenti alla decisione sull'hook; before_tool_call controlla l'esecuzione, non la visibilità nel flusso.

Restituisce la corrispondenza toolResult in una InvokeHarness richiesta successiva che utilizza la stessa. runtimeSessionId L'harness riprende la chiamata in sospeso, la richiama after_tool_call con il risultato fornito dal client e continua il ciclo dell'agente se l'hook consente il risultato. Per il flusso di callback completo, vedete Inline function calls.

Gli strumenti in una risposta del modello mantengono l'ordine di esecuzione sequenziale. Per lo strumento A eseguito tramite cablaggio, la funzione in linea B e lo strumento C eseguito tramite cablaggio, l'harness esegue A prima di consegnare B e attende il risultato di B prima di eseguire C. La richiesta di follow-up è una nuova chiamata, quindi gli hook di invocazione vengono eseguiti nuovamente, poiché la funzione inline in sospeso non viene ripetuta e viene eseguita una sola volta con il risultato inviato. before_tool_call after_tool_call

Puoi inviare il risultato in sospeso e tutti i risultati in linea immediatamente successivi in un'unica richiesta di follow-up. L'imbracatura elabora i ganci e i ganci in sequenzabefore_tool_call. after_tool_call Se il cliente richiede una allow decisione prima di ogni azione esterna, restituisci un risultato in linea per passaggio. Una richiesta successiva può apparire nello stream prima che venga eseguito l'hook.

Se before_tool_call nega B, l'harness salta B e continua con C senza consegnare B al client. Se after_tool_call nega B dopo che il client ha restituito il risultato, l'harness mantiene il risultato di B e si ferma prima di C.

Convalida i risultati forniti dal cliente

Un after_tool_call evento per una funzione in linea conferma che l'harness ha elaborato un risultato fornito dal client. Non attesta che il client abbia eseguito l'azione esterna rappresentata da quel risultato. Autenticate il chiamante e convalidate il risultato prima di utilizzare l'evento come segnale di autorizzazione o controllo.

Scegli un obiettivo

Gli hook supportano i seguenti tipi di bersagli.

Target Delivery Comportamento decisionale

AWS Lambda

L'imbracatura richiama la funzione in modo sincrono e attende fino aRequestResponse. timeoutSeconds

La funzione deve restituire o. allow deny Lambda è l'unico tipo di destinazione in grado di modificare il comportamento del ciclo degli agenti.

Amazon SNS

L'harness pubblica il payload dell'hook come SNS. Message La pubblicazione non blocca il loop dell'agente.

Solo notifica. SNS non restituisce una decisione urgente.

Amazon EventBridge

L'imbracatura invia il carico utile del ganciodetail, con la fonte bedrock-agentcore.harness e il tipo di dettaglio. Harness Lifecycle Hook L'invio non blocca il loop dell'agente.

Solo notifiche. EventBridge non restituisce una decisione unilaterale.

Il cablaggio pianifica l'SNS e EventBridge la consegna senza attendere una risposta. Un errore di consegna non interrompe la chiamata. Per un argomento FIFO SNS, l'harness ricava l'ID del gruppo di messaggi dall'ARN del cablaggio e dall'ID della sessione. Ciò mantiene l'ordine di pubblicazione all'interno di quella sessione. Argomenti SNS standard e EventBridge non garantiscono l'ordine degli eventi del ciclo di vita.

Concedi al ruolo di esecuzione dell'harness l'autorizzazione a chiamare ogni destinazione. Per un esempio di policy, vedi Lifecycle hook targets.

Configura gli hook

L'esempio seguente configura un hook decisionale Lambda prima di ogni chiamata, una notifica SNS dopo ogni chiamata allo strumento e EventBridge una notifica dopo ogni chiamata. hooks.jsonDefinisci gli hook in:

[ { "beforeInvocation": { "name": "validate_request", "target": { "lambda": { "arn": "arn:aws:lambda:us-west-2:123456789012:function:validate-harness-request", "timeoutSeconds": 5, "failureMode": "deny" } } } }, { "afterToolCall": { "name": "record_tool_result", "target": { "sns": { "arn": "arn:aws:sns:us-west-2:123456789012:harness-tool-events" } } } }, { "afterInvocation": { "name": "record_invocation", "target": { "eventBridge": { "arn": "arn:aws:events:us-west-2:123456789012:event-bus/harness-events" } } } } ]
Esempio
AWS CLI

Applica i ganci:

aws bedrock-agentcore-control update-harness \ --harness-id "MyHarness-UuFdkQoXSL" \ --hooks file://hooks.json
Boto3

Carica e applica la stessa configurazione:

import json import boto3 client = boto3.client("bedrock-agentcore-control") with open("hooks.json", encoding="utf-8") as hooks_file: hooks = json.load(hooks_file) client.update_harness( harnessId="MyHarness-UuFdkQoXSL", hooks=hooks, )

Quando si passa hooks aUpdateHarness, l'elenco fornito sostituisce la configurazione hook esistente. Passa una lista vuota per rimuovere tutti gli hook. Ometti hooks per mantenere la configurazione esistente.

Restituire una decisione Lambda

Un target Lambda riceve direttamente il payload dell'hook. Deve restituire un oggetto JSON con il decision valore o. allow deny Può anche restituire unreason. L'harness include questo motivo nell'evento del flusso di hookEvent risposta e lo limita a 1.024 caratteri.

Il seguente gestore nega un before_invocation evento quando il target non è in grado di valutare il contesto dell'hook completo. Sostituisci questa logica con le regole per la tua applicazione.

def lambda_handler(event, _context): hook_context = event["context"] if event["event"] == "before_invocation" and hook_context.get("truncated"): return { "decision": "deny", "reason": "The request context exceeded the evaluation limit.", } return {"decision": "allow"}

Per i target Lambda, il timeoutSeconds valore predefinito è 60 secondi e accetta valori da 1 a 900 secondi. failureModedetermina la decisione quando la funzione scade, restituisce un errore o restituisce una risposta non valida:

  • deny— Applicare una decisione di rifiuto. Questa è l’impostazione predefinita.

  • allow— Applicare una decisione di autorizzazione.

Configura connessioni hook a lunga durata

Un hook sincrono può mantenere inattivo un InvokeHarness flusso fino a quando l'hook non ritorna o raggiunge. timeoutSeconds Configura il timeout di lettura dell'SDK per superare il periodo di inattività più lungo previsto. Per un hook configurato per 900 secondi, l'esempio seguente utilizza un timeout di lettura di 1.000 secondi per fornire un margine aggiuntivo:

import boto3 from botocore.config import Config client = boto3.client( "bedrock-agentcore", config=Config( read_timeout=1000, tcp_keepalive=True, ), )

Se la connessione passa attraverso un gateway NAT, un endpoint VPC di interfaccia o un Network Load Balancer, configura anche il tempo di inattività TCP keepalive del sistema operativo su meno di 350 secondi. Su Linux, questo è configurato da. TCP_KEEPIDLE net.ipv4.tcp_keepalive_time La tcp_keepalive=True sola impostazione abilita TCP keepalive ma non riduce il tempo di inattività predefinito del sistema operativo. Per ulteriori informazioni, consulta Timeout o ripristino della connessione in caso di connessioni a lunga durata o inattive.

Il troncamento del contesto non si attiva. failureMode La funzione Lambda riceve il contesto troncato e deve restituire una decisione.

Quando più hook Lambda utilizzano lo stesso tipo di evento, l'harness li richiama contemporaneamente. Qualsiasi deny decisione si applica al comportamento di negazione dell'evento. Se più di un hook nega l'evento, il motivo viene fornito dal primo hook di negazione nell'elenco configurato.

Elabora il payload dell'hook

Ogni destinazione riceve i seguenti campi comuni:

{ "hookEventId": "1234abcd-12ab-34cd-56ef-1234567890ab", "name": "validate_request", "event": "before_invocation", "harnessArn": "arn:aws:bedrock-agentcore:us-west-2:123456789012:harness/MyHarness-UuFdkQoXSL", "sessionId": "12345678-1234-5678-9abc-123456789012", "context": { "messageCount": 1, "messages": [ { "role": "user", "content": [{"text": "Summarize this report."}] } ] } }

I context campi dipendono dal tipo di evento.

Event Campo Description

before_invocation

messageCount

Numero di messaggi nella InvokeHarness richiesta corrente prima del troncamento del contesto hook.

messages

Messaggi ordinati dalla richiesta corrente. InvokeHarness

truncated

Presente e impostato su true quando il contesto supera i 64 KB.

before_tool_call

toolName

Model-facing nome dello strumento.

toolType

Tipo di utensile di cablaggio, ad esempio builtinremote_mcp,agentcore_gateway, oinline_function.

toolInput

Model-generated input per lo strumento.

toolUseId

ID che mette in correlazione la richiesta dello strumento con il relativo risultato.

after_tool_call

toolName

Model-facing nome dello strumento.

toolType

Tipo di utensile di cablaggio.

toolResult

Risultato osservato dall'imbracatura. Per una funzione in linea, questo è il risultato fornito dal client.

toolUseId

ID che mette in correlazione la richiesta dello strumento con il relativo risultato.

error

Testo di errore quando uno strumento eseguito dal cablaggio generava un'eccezione. Omesso quando non si è verificata alcuna eccezione di questo tipo.

after_invocation

stopReason

Motivo dell'interruzione dell'ultima invocazione.

usage

Oggetto contenente inputTokens e. outputTokens

Il before_invocation contesto non include i messaggi che l'harness ripristina dallo stato della sessione dopo l'esecuzione dell'hook. Una decisione di rifiuto after_tool_call Lambda non rimuove il risultato completo dello strumento.

Gestisci il troncamento del contesto

L'imbracatura limita ogni context oggetto hook a 64 KiB.

Infattibefore_invocation, il cablaggio mantiene la sequenza contigua più recente di messaggi completi che rientra nel limite. Il payload viene conservato e conservato come elenco. messageCount messages Inoltre si aggiunge "truncated": true al contesto. Se solo il messaggio più recente supera il limite, messages è un elenco vuoto.

Per altri tipi di eventi, l'harness sostituisce i campi di contesto più grandi finché il contesto non si adatta. Ogni campo sostituito utilizza il seguente modulo:

{ "truncated": true, "preview": "<prefix of the serialized field>" }

Controlla gli indicatori di troncamento prima di utilizzare un campo. Un target Lambda che richiede un contesto completo può tornare deny quando riceve un indicatore di troncamento. Un SNS o un EventBridge consumatore può registrare l'evento e ottenere dati aggiuntivi dal proprio sistema di registrazione.

Leggi gli eventi hook dal flusso di risposta

InvokeHarnessemette un hookEvent per ogni hook configurato che si attiva. Un evento Lambda include la decisione applicata e il motivo facoltativo:

{ "hookEvent": { "hookEventId": "1234abcd-12ab-34cd-56ef-1234567890ab", "name": "validate_request", "type": "before_invocation", "decision": "allow", "reason": "Request accepted." } }

Per SNS e EventBridge target, decision e reason sono assenti. hookEventConfermano che l'imbracatura ha programmato l'invio. Non conferma che l'obiettivo abbia ricevuto l'evento.

Continua a leggere fino alla chiusura dello stream dell'evento. Quando lo stream include un terminalemessageStop, qualsiasi hookEvent con type set to lo after_invocation segue. Alcuni percorsi di errore vengono emessi after_invocation senza unmessageStop.