View a markdown version of this page

Pengait siklus hidup - Batuan Dasar Amazon AgentCore

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Pengait siklus hidup

Hook siklus hidup mengirim peristiwa ke fungsi AWS Lambda, topik Amazon SNS, atau bus EventBridge acara Amazon pada titik yang ditentukan dalam loop agen harness. Gunakan kait untuk memvalidasi pemanggilan atau panggilan alat, merekam aktivitas di sistem lain, atau memulai alur kerja asinkron.

Anda mengkonfigurasi kait pada harness dengan CreateHarness atau. UpdateHarness Konfigurasi hook tidak tersedia sebagai InvokeHarness override. Harness mendukung hingga 20 kait, dan setiap nama kait harus unik di dalam harness.

Pilih acara siklus hidup

Jenis peristiwa menentukan kapan hook berjalan, konteks yang dikirim ke target, dan efek dari keputusan Lambdadeny.

Peristiwa Konteks Pengaruh keputusan Lambda deny

before_invocation

Pesanan messages disediakan dalam InvokeHarness permintaan saat ini, sebelum harness mengembalikan status sesi.

Menghentikan pemanggilan sebelum agen mulai. Aliran respons memancarkan messageStop peristiwa dengan stopReason disetel kehook_stopped.

before_tool_call

Nama alat, jenis alat, ID penggunaan alat, dan input alat yang dihasilkan model.

Melewatkan panggilan alat. Loop agen berlanjut.

after_tool_call

Nama alat, jenis alat, ID penggunaan alat, hasil alat, dan string kesalahan saat alat yang dijalankan oleh harness memunculkan pengecualian.

Menyimpan hasil alat yang sudah selesai, lalu menghentikan pemanggilan. Aliran respons memancarkan messageStop peristiwa dengan stopReason disetel kehook_stopped.

after_invocation

Alasan penghentian pemanggilan dan jumlah token input dan output.

Melaporkan keputusan dalam aliran respons. Pemanggilan telah selesai, sehingga hook tidak dapat menarik kembali output yang dialirkan.

Gunakan kait panggilan alat dengan fungsi inline

Tool-call kait juga dijalankan untuk inline_function alat. Harness dipanggil before_tool_call setelah model menghasilkan permintaan alat dan sebelum harness menyerahkan pemanggilan tertunda untuk eksekusi sisi klien. Gunakan aliran respons lengkap, lalu proses panggilan sebaris hanya jika messageStop acara terakhir telah stopReason disetel ketool_use. Permintaan yang dihasilkan model dapat muncul di peristiwa streaming sebelumnya sebelum keputusan hook; before_tool_call mengontrol eksekusi, bukan visibilitas di aliran.

Kembalikan pencocokan toolResult dalam InvokeHarness permintaan selanjutnya yang menggunakan yang samaruntimeSessionId. Harness melanjutkan panggilan tertunda, memanggil after_tool_call dengan hasil yang disediakan klien, dan melanjutkan loop agen jika hook memungkinkan hasilnya. Untuk alur callback lengkap, lihat Pemanggilan fungsi sebaris.

Alat dalam satu respons model mempertahankan urutan eksekusi berurutan. Untuk alat yang dieksekusi harness A, fungsi inline B, dan alat yang dieksekusi harness C, harness mengeksekusi A sebelum menyerahkan B dan menunggu hasil B sebelum mengeksekusi C. Permintaan tindak lanjut adalah pemanggilan baru, jadi kait pemanggilan berjalan lagi; untuk fungsi inline yang tertunda tidak diulang, dan berjalan sekali dengan hasil yang dikirimkan. before_tool_call after_tool_call

Anda dapat mengirimkan hasil yang tertunda dan hasil inline yang segera mengikuti dalam satu permintaan tindak lanjut. Harness memproses dan after_tool_call mengaitnya before_tool_call secara berurutan. Jika klien Anda memerlukan allow keputusan sebelum setiap tindakan eksternal, kembalikan satu hasil inline per handoff. Permintaan selanjutnya dapat muncul di aliran sebelum kaitnya berjalan.

Jika before_tool_call menyangkal B, harness melompati B dan berlanjut dengan C tanpa menyerahkan B kepada klien. Jika after_tool_call menolak B setelah klien mengembalikan hasilnya, harness mempertahankan hasil B dan berhenti sebelum C.

Validasi hasil yang disediakan klien

after_tool_callPeristiwa untuk fungsi inline menegaskan bahwa harness memproses hasil yang disediakan oleh klien. Itu tidak membuktikan bahwa klien melakukan tindakan eksternal yang diwakili oleh hasil itu. Otentikasi penelepon dan validasi hasilnya sebelum menggunakan acara sebagai otorisasi atau sinyal audit.

Pilih target

Hooks mendukung jenis target berikut.

Target Pengiriman Perilaku keputusan

AWS Lambda

Harness memanggil fungsi secara serempak RequestResponse dan menunggu hingga. timeoutSeconds

Fungsi harus kembali allow ataudeny. Lambda adalah satu-satunya tipe target yang dapat mengubah perilaku agent-loop.

Amazon SNS

Harness menerbitkan muatan kait sebagai SNS. Message Penerbitan tidak memblokir loop agen.

Pemberitahuan saja. SNS tidak mengembalikan keputusan hook.

Amazon EventBridge

Harness mengirimkan muatan kaitdetail, dengan tipe sumber bedrock-agentcore.harness dan detail. Harness Lifecycle Hook Mengirim tidak memblokir loop agen.

Pemberitahuan saja. EventBridge tidak mengembalikan keputusan hook.

Harness menjadwalkan SNS dan EventBridge pengiriman tanpa menunggu tanggapan. Kesalahan pengiriman tidak menghentikan pemanggilan. Untuk topik SNS FIFO, harness memperoleh ID grup pesan dari ARN harness dan ID sesi. Ini mempertahankan urutan publikasi dalam sesi itu. Topik SNS standar dan EventBridge tidak menjamin urutan acara siklus hidup.

Berikan izin peran eksekusi harness untuk memanggil setiap target. Untuk kebijakan contoh, lihat Target hook siklus hidup.

Konfigurasikan kait

Contoh berikut mengonfigurasi hook keputusan Lambda sebelum setiap pemanggilan, pemberitahuan SNS setelah setiap panggilan alat, dan EventBridge pemberitahuan setelah setiap pemanggilan. Tentukan kait dihooks.json:

[ { "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" } } } } ]
contoh
AWS CLI

Terapkan kait:

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

Muat dan terapkan konfigurasi yang sama:

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, )

Saat Anda hooks UpdateHarness meneruskannya, daftar yang disediakan menggantikan konfigurasi hook yang ada. Lewati daftar kosong untuk menghapus semua kait. Abaikan hooks untuk mempertahankan konfigurasi yang ada.

Kembalikan keputusan Lambda

Target Lambda menerima muatan kait secara langsung. Ini harus mengembalikan objek JSON dengan decision nilai allow ataudeny. Itu juga dapat mengembalikan areason. Harness menyertakan alasan ini dalam acara aliran hookEvent respons dan membatasi hingga 1.024 karakter.

Handler berikut menyangkal before_invocation peristiwa ketika target tidak dapat mengevaluasi konteks hook lengkap. Ganti logika ini dengan aturan untuk aplikasi Anda.

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"}

Untuk target Lambda, timeoutSeconds defaultnya 60 detik dan menerima nilai dari 1 hingga 900 detik. failureModemenentukan keputusan saat fungsi habis, mengembalikan kesalahan, atau mengembalikan respons yang tidak valid:

  • deny— Terapkan keputusan penolakan. Ini adalah opsi default.

  • allow— Terapkan keputusan izinkan.

Konfigurasikan koneksi hook yang berjalan lama

Hook sinkron dapat membuat InvokeHarness aliran menganggur sampai hook kembali atau mencapai. timeoutSeconds Konfigurasikan batas waktu baca SDK untuk melebihi periode idle terpanjang yang diharapkan. Untuk hook yang dikonfigurasi selama 900 detik, contoh berikut menggunakan batas waktu baca 1.000 detik untuk memberikan margin tambahan:

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

Jika koneksi melewati gateway NAT, antarmuka VPC endpoint, atau Network Load Balancer, konfigurasikan juga sistem operasi TCP keepalive waktu idle menjadi kurang dari 350 detik. Di Linux, iniTCP_KEEPIDLE, dikonfigurasi olehnet.ipv4.tcp_keepalive_time. Pengaturan tcp_keepalive=True saja memungkinkan TCP keepalive tetapi tidak mempersingkat waktu idle default sistem operasi. Untuk informasi selengkapnya, lihat Batas waktu koneksi atau reset pada koneksi yang berjalan lama atau tidak aktif.

Pemotongan konteks tidak diaktifkan. failureMode Fungsi Lambda menerima konteks terpotong dan harus mengembalikan keputusan.

Ketika beberapa kait Lambda menggunakan jenis peristiwa yang sama, harness memanggilnya secara bersamaan. denyKeputusan apa pun menerapkan perilaku penolakan acara. Jika lebih dari satu hook menyangkal peristiwa tersebut, hook penyangkalan pertama dalam daftar yang dikonfigurasi memberikan alasannya.

Memproses muatan kait

Setiap target menerima bidang umum berikut:

{ "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."}] } ] } }

contextBidang tergantung pada jenis acara.

Peristiwa Bidang Deskripsi

before_invocation

messageCount

Jumlah pesan dalam InvokeHarness permintaan saat ini sebelum pemotongan konteks kait.

messages

Pesan yang dipesan dari InvokeHarness permintaan saat ini.

truncated

Hadir dan atur ke true saat konteksnya melebihi 64 KiB.

before_tool_call

toolName

Model-facing nama alat.

toolType

Jenis alat harness, sepertibuiltin,, remote_mcpagentcore_gateway, atauinline_function.

toolInput

Model-generated masukan untuk alat.

toolUseId

ID yang menghubungkan permintaan alat dengan hasilnya.

after_tool_call

toolName

Model-facing nama alat.

toolType

Jenis alat harness.

toolResult

Hasil diamati oleh harness. Untuk fungsi inline, ini adalah hasil yang disediakan klien.

toolUseId

ID yang menghubungkan permintaan alat dengan hasilnya.

error

Teks kesalahan saat alat yang dijalankan oleh harness memunculkan pengecualian. Dihilangkan ketika tidak ada pengecualian seperti itu terjadi.

after_invocation

stopReason

Alasan penghentian doa terakhir.

usage

Objek yang mengandung inputTokens danoutputTokens.

before_invocationKonteksnya tidak menyertakan pesan yang dikembalikan harness dari status sesi setelah hook berjalan. Keputusan after_tool_call penolakan Lambda tidak menghapus hasil alat yang sudah selesai.

Tangani pemotongan konteks

Harness membatasi setiap context objek kait hingga 64 KiB.

Untukbefore_invocation, harness menyimpan urutan pesan lengkap terbaru yang bersebelahan yang sesuai dengan batas. Muatan disimpan messageCount dan disimpan messages sebagai daftar. Ini juga menambah "truncated": true konteksnya. Jika pesan terbaru saja melebihi batas, messages adalah daftar kosong.

Untuk jenis acara lainnya, harness menggantikan bidang konteks terbesar hingga konteksnya cocok. Setiap bidang diganti menggunakan formulir berikut:

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

Periksa penanda pemotongan sebelum menggunakan bidang. Target Lambda yang membutuhkan konteks lengkap dapat kembali deny saat menerima penanda pemotongan. SNS atau EventBridge konsumen dapat merekam acara dan mendapatkan data tambahan dari sistem catatannya sendiri.

Baca peristiwa hook dari aliran respons

InvokeHarnessmemancarkan a hookEvent untuk setiap kait yang dikonfigurasi yang menyala. Acara Lambda mencakup keputusan yang diterapkan dan alasan opsional:

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

Untuk SNS dan EventBridge target, decision dan tidak reason ada. Mereka hookEvent menegaskan bahwa harness menjadwalkan pengiriman. Itu tidak mengkonfirmasi bahwa target menerima acara tersebut.

Lanjutkan membaca sampai aliran acara ditutup. Ketika aliran menyertakan terminalmessageStop, apa pun hookEvent dengan type set untuk after_invocation mengikutinya. Beberapa jalur kesalahan dipancarkan after_invocation tanpa file. messageStop