Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Hook adalah titik pemeriksaan kustom yang mencegat dan mengontrol perilaku agen pada momen-momen kunci. Gunakan kait untuk memberlakukan gerbang kualitas pada respons agen, mengaudit dan mengontrol penggunaan alat, memblokir operasi berbahaya dengan memberlakukan kebijakan, dan mencegah penyelesaian tugas awal dengan memvalidasi output agen.
Masalah yang diselesaikan oleh hook agen
Agen Anda menjalankan tugas secara otonom dengan menyelidiki insiden, menjalankan alat, dan menghasilkan respons. Tetapi otonomi tanpa pengawasan menciptakan risiko:
- Respons yang tidak lengkap: Agen mengatakan "selesai" sebelum mengatasi semua yang Anda minta.
- Penggunaan alat yang tidak diaudit: Anda tidak memiliki visibilitas ke alat mana yang dipanggil agen atau hasil apa yang didapatkannya.
- Tidak ada penegakan kebijakan: Operasi berbahaya (perintah destruktif, perubahan yang tidak sah) berjalan tanpa pengawasan.
- Kesenjangan kualitas: Respons melewatkan informasi penting karena tidak ada langkah validasi.
Anda memerlukan cara untuk mencegat perilaku agen pada saat-saat utama tanpa memperlambatnya atau menghapus otonominya sepenuhnya.
Cara kerja pengait agen
Hook adalah titik pemeriksaan kustom yang Anda lampirkan ke peristiwa agen tertentu. Ketika peristiwa terjadi, hook Anda mengevaluasi situasi dan memutuskan apakah akan mengizinkan atau memblokir tindakan.
Agent about to stop → Stop hook evaluates response → Allow or reject
Agent uses a tool → PostToolUse hook checks result → Allow, block, or inject context
Dua acara kait didukung saat ini:
| Event | Memicu ketika | Apa yang dapat Anda lakukan |
|---|---|---|
| Stop | Agen akan mengembalikan respons akhir | Memvalidasi kelengkapan, menolak, dan memaksa agen untuk melanjutkan |
| PostToolUse | Alat tersebut berhasil mengeksekusi dengan sukses | Penggunaan audit, hasil blokir, menyuntikkan konteks tambahan |
Dua tingkat kait
Kait beroperasi pada dua tingkat:
| Tingkat | Tempat untuk mengonfigurasi | Ruang lingkup |
|---|---|---|
| Tingkat agen | Builder → Hooks pada portal | Berlaku untuk seluruh agen termasuk semua utas dan semua agen kustom |
| Tingkat agen khusus | Agen Canvas → Agen Kustom → Mengelola Hooks, atau melalui REST API v2 | Hanya berlaku ketika agen kustom tertentu berjalan |
Kedua tingkat dapat berdampingan. Jika kait tingkat agen dan kait tingkat agen kustom sama-sama cocok dengan kejadian yang sama, keduanya dijalankan. Kait tingkat agen menembak terlebih dahulu.
Jenis eksekusi
Anda dapat menerapkan kait dengan menggunakan LLM atau skrip shell:
| Tipe | Cara kerjanya | Paling cocok untuk |
|---|---|---|
| Petunjuk | Model Bahasa Alamiah (LLM) mengevaluasi prompt Anda dan memberikan keputusan dalam format JSON. | Validasi mendalam ("Apakah respons ini lengkap?") |
| Perintah | Skrip bash atau Python berjalan di lingkungan terisolasi | Pemeriksaan deterministik, penegakan kebijakan, audit |
Kait prompt sangat kuat untuk evaluasi subjektif, seperti memeriksa apakah respons membahas semua masalah pengguna atau memverifikasi bahwa penyelidikan sudah cukup menyeluruh. Mereka menggunakan $ARGUMENTS tempat penampung untuk menerima konteks hook penuh. Jika $ARGUMENTS tidak ada dalam perintah, konteks ditambahkan secara otomatis. Saat transkrip percakapan tersedia, pengait prompt juga menerima alat ReadFile dan GrepSearch, yang memungkinkan LLM menalar tentang riwayat percakapan lengkap.
Kait perintah lebih baik untuk pemeriksaan deterministik, seperti memvalidasi bahwa respons berisi penanda yang diperlukan, memblokir perintah berbahaya, atau pengelogan penggunaan alat ke sistem eksternal.
Perilaku agen dengan dan tanpa kait
Tabel berikut membandingkan perilaku agen dengan dan tanpa kait.
| Tanpa kait | Dengan kait |
|---|---|
| Agen memutuskan kapan "selesai" | Anda mendefinisikan apa arti "selesai" |
| Penggunaan alat tidak terlihat | Setiap panggilan alat dapat diaudit |
| Perintah berbahaya dilanjutkan secara diam-diam | Penegakan kebijakan memblokirnya secara otomatis |
| Kualitas tergantung pada rekayasa yang cepat saja | Gerbang kualitas otomatis menangkap celah |
Hook tidak menggantikan kontrol keamanan pada mode eksekusi. Sebaliknya, keduanya saling melengkapi. Jalankan mode mengontrol apa yang dapat dilakukan agen. Pengait mengontrol seberapa baik fungsi bekerja dan apa yang terjadi dengan hasilnya.
Sebelum dan sesudah menambahkan kait agen
| Skenario | Sebelumnya | Sesudah |
|---|---|---|
| Kualitas respons | Agen berhenti ketika mengira tugasnya selesai | Stop hook Anda memvalidasi kelengkapan sebelum respons menjangkau pengguna |
| Visibilitas perangkat | Tidak ada rekam jejak audit eksekusi alat | PostToolUse menghubungkan log dan memverifikasi setiap panggilan alat |
| Penegakan kebijakan | Perintah berbahaya dijalankan tanpa pemeriksaan | Skrip memblokir rm -rf, sudo, dan pola berisiko lainnya secara otomatis |
| Jaminan kualitas | Prompt engineering adalah satu-satunya alat Anda | Kait berbasis LLM mengevaluasi nuansa; skrip memberlakukan aturan deterministik |
Mengonfigurasi kait agen
Buat kait melalui UI portal:
- Hook tingkat agen: Buka Builder → Hooks → pilih Ciptakan hook.
- Kait tingkat agen kustom: Buka Kanvas Agen → pilih agen kustom → Kelola Kait.
Untuk instruksi langkah demi langkah, lihat Membuat dan mengelola kait di portal.
Petunjuk / Saran
Anda juga dapat mengonfigurasi kait melalui REST API v2 dengan menggunakan PUT /api/v2/extendedAgent/agents/{agentName}. Format YAML di bagian berikut menunjukkan skema konfigurasi lengkap. Untuk mempelajari lebih lanjut, lihat tutorial API.
Tab YAML Kanvas Agen menampilkan format v1 dan tidak menampilkan kait. Gunakan halaman Hooks di bawah Builder untuk melihat dan mengelola hooks.
Contoh berikut menunjukkan konfigurasi kait lengkap:
api_version: azuresre.ai/v2
kind: ExtendedAgent
metadata:
name: my_hooked_agent
spec:
instructions: |
You are a helpful assistant.
handoffDescription: ""
enableVanillaMode: true
hooks:
Stop:
- type: prompt
prompt: |
Check if the response ends with "Task complete."
$ARGUMENTS
Respond with:
- {"ok": true} if it does
- {"ok": false, "reason": "End your response with 'Task complete.'"} if not
timeout: 30
PostToolUse:
- type: command
matcher: "Bash|ExecuteShellCommand"
timeout: 30
failMode: block
script: |
#!/usr/bin/env python3
import sys, json, re
context = json.load(sys.stdin)
command = context.get('tool_input', {}).get('command', '')
dangerous = [r'\brm\s+-rf\b', r'\bsudo\b', r'\bchmod\s+777\b']
for pattern in dangerous:
if re.search(pattern, command):
print(json.dumps({"decision": "block", "reason": f"Blocked: {pattern}"}))
sys.exit(0)
print(json.dumps({"decision": "allow"}))
Format respon hook
Hook harus mengeluarkan JSON. Dua format didukung:
Format sederhana (disarankan untuk kait prompt):
{"ok": true}
{"ok": false, "reason": "Please include more details."}
Format yang diperluas (disarankan untuk kait perintah):
{"decision": "allow"}
{"decision": "block", "reason": "Dangerous command detected."}
{"decision": "allow", "hookSpecificOutput": {"additionalContext": "Tool audit logged."}}
Kait perintah juga dapat menggunakan kode keluar alih-alih output JSON:
| Kode keluar | Perilaku |
|---|---|
0 tanpa output |
Izinkan (tidak ada keberatan) |
0 dengan JSON |
Mengurai JSON untuk keputusan |
2 |
Selalu blokir. stderr adalah penyebab |
| Other | Menggunakan pengaturan failMode (allow atau block) |
Perhatian
Untuk Stop hook, penolakan tanpa alasan dianggap sebagai persetujuan, dan agen berhenti beroperasi secara normal. Selalu sediakan reason kolom ketika menolak.
Nota
Anda dapat menentukan beberapa kait untuk peristiwa yang sama. Untuk PostToolUse, setiap hook dengan pola pencocokan matcher berjalan secara independen. Jika beberapa hook menyediakan additionalContext, konteks dari hook terakhir disuntikkan ke dalam percakapan.
Referensi konfigurasi
Tabel berikut ini menjelaskan semua opsi konfigurasi kait yang tersedia.
| Option | Tipe | Default | Deskripsi |
|---|---|---|---|
type |
string | prompt |
prompt atau command |
prompt |
string | (tidak ada) | Teks perintah LLM (diperlukan untuk kait perintah). Gunakan $ARGUMENTS untuk injeksi konteks. |
command |
string | (tidak ada) | Perintah shell sebaris (untuk kait perintah, saling eksklusif dengan script). |
script |
string | (tidak ada) | Skrip multibaris (untuk kait perintah, saling eksklusif dengan command). |
matcher |
string | (tidak ada) | Pola regex untuk nama alat (diperlukan untuk hook PostToolUse).
* cocok dengan semua alat. Pola diangkerkan sebagai ^(pattern)$ dan dicocokkan sesuai dengan sensitivitas huruf besar/kecil. Kosong atau null tidak cocok dengan apapun. |
timeout |
int | 30 |
Batas waktu eksekusi dalam hitungan detik (harus positif; nilai di atas 300 ditandai selama validasi CLI). |
failMode |
string | allow |
Cara menangani kesalahan kait: allow atau block. |
model |
string | ReasoningFast |
Model untuk kait permintaan (nama skenario atau nama penyebaran). |
maxRejections |
int |
3 (agen default) |
Batas penolakan maksimum sebelum menghentikan paksa. Rentang: 1 hingga 25. Berlaku untuk stop hook jenis perintah saja. Hook Stop jenis perintah tidak memiliki batas implisit. Saat beberapa hook prompt menentukan nilai yang berbeda, nilai maksimum yang digunakan. |
Skema konteks pengait
Hook menerima konteks JSON terstruktur tentang peristiwa saat ini.
Prompt hook menerima konteks melalui $ARGUMENTS tempat penampung dalam teks perintah.
Kait perintah menerima konteks sebagai JSON di stdin.
Untuk kedua jenis hook, kolom execution_summary berisi jalur file yang mengarah ke transkrip percakapan (bukan konten sebaris). Untuk prompt hooks, LLM menerima alat ReadFile dan GrepSearch untuk mengakses file ini. Untuk kait perintah, file tersedia di jalur yang ditentukan di kotak pasir.
Bidang umum
Semua hook memiliki bidang berikut:
{
"hook_event_name": "Stop",
"agent_name": "my_agent",
"current_turn": 5,
"max_turns": 50,
"execution_summary": "/path/to/transcript.txt"
}
Hentikan bidang hook
Stop hook menerima informasi tambahan tentang output akhir agen.
{
"final_output": "Here is my response...",
"stop_hook_active": false,
"stop_rejection_count": 0
}
Bidang pengait PostToolUse
Hooks PostToolUse menerima bidang tambahan selama eksekusi alat.
{
"tool_name": "ExecutePythonCode",
"tool_input": { "code": "print(2+2)" },
"tool_result": "4",
"tool_succeeded": true
}
Tingkatan model
Prompt hook menggunakan model AI untuk mengevaluasi perilaku agen. Anda dapat memilih tier model yang digunakan oleh hook, dengan menyeimbangkan kualitas evaluasi, biaya, dan latensi.
| Tier | Paling cocok untuk | Kompromi |
|---|---|---|
| Reasoning | Penegakan kebijakan yang kompleks, validasi multilangkah, pemeriksaan kepatuhan yang mendetail | Kualitas tertinggi, biaya dan latensi yang lebih tinggi |
| Penalaran Cepat (bawaan) | Sebagian besar kait, validasi respons, pemeriksaan audit, penegakan keselamatan | Penalaran yang baik dengan latensi rendah |
| Tujuan Umum | Pemeriksaan format sederhana, validasi kepatuhan dasar | Akurasi, biaya, dan kecepatan yang seimbang |
| Cepat | Pemeriksaan ringan, validasi kehadiran, verifikasi format | Biaya terendah, respons tercepat |
| Konteks Panjang | Kait yang memproses output besar, analisis dokumen lengkap, hasil alat yang luas | Menangani input yang lebih besar, biaya yang lebih tinggi |
Petunjuk / Saran
Hooks secara default menggunakan Fast Reasoning karena dijalankan pada setiap respons agen atau pemanggilan tool, sehingga latensi rendah menjadi penting. Gunakan Penalaran hanya untuk hook yang menerapkan kebijakan yang kompleks saat akurasi sangat penting.
Batasan
Batas berikut berlaku untuk pengait agen.
| Limit | Nilai |
|---|---|
| Ukuran skrip | Maksimum 64 KB |
| Jeda Waktu | 1 hingga 300 detik |
| Penolakan maks (perintah Hentikan hook) | 1 hingga 25 (default: 3) |
| Dukungan untuk shebang skrip |
#!/bin/bash, #!/usr/bin/env python3 |
| Lingkungan eksekusi skrip | Penerjemah kode berbasis sandbox |
Contoh: Mengaudit semua penggunaan alat
Hook PostToolUse berikut ini mencatat setiap panggilan alat dan menambah pesan konteks audit:
hooks:
PostToolUse:
- type: command
matcher: "*"
timeout: 30
failMode: allow
script: |
#!/usr/bin/env python3
import sys, json
context = json.load(sys.stdin)
tool_name = context.get('tool_name', 'unknown')
print(f"Tool used: {tool_name}", file=sys.stderr)
output = {
"decision": "allow",
"hookSpecificOutput": {
"additionalContext": f"[AUDIT] Tool '{tool_name}' was executed."
}
}
print(json.dumps(output))
Bidang additionalContext ditambahkan sebagai pesan pengguna dalam percakapan, memberikan agen kemampuan untuk melihat rekaman audit.
Contoh: Memerlukan penanda penyelesaian
Stop hook berikut menolak respons yang tidak diakhir dengan "Tugas selesai.":
hooks:
Stop:
- type: command
timeout: 30
failMode: allow
script: |
#!/bin/bash
CONTEXT=$(cat)
FINAL_OUTPUT=$(echo "$CONTEXT" | jq -r '.final_output // empty')
if [[ "$FINAL_OUTPUT" == *"Task complete."* ]]; then
exit 0
else
echo "Please end your response with 'Task complete.'" >&2
exit 2
fi
Praktik terbaik
Saat Anda mengonfigurasi kait agen:
- Selalu berikan alasan saat menolak. Perlakukan penolakan tanpa alasan sebagai persetujuan.
- Gunakan batas waktu yang sesuai: Kait jangka panjang memperlambat eksekusi agen.
-
Menangani kesalahan dengan anggun: Gunakan
failMode: allowkecuali penegakan ketat diperlukan. - Bersikaplah spesifik dengan pencocokan: Pencocokan PostToolUse yang terlalu luas dapat menyebabkan masalah performa.
-
Uji kait secara menyeluruh: Kait yang selalu menolak dapat menyebabkan perulangan (dimitigasi oleh
maxRejections). - Log ke stderr: Gunakan stderr untuk men-debug output. Sistem mengurai stdout sebagai hasil kait.
Coba hook agen sendiri
Cuplikan layar berikut menunjukkan sebuah "Stop hook" yang sedang beraksi. Agen awalnya merespons hanya dengan "4", tetapi mekanisme menolak respons karena penanda penyelesaian hilang. Agen kemudian melanjutkan dan menambahkan penanda.
Get started
| Sumber Daya | Yang Anda pelajari |
|---|---|
| Membuat dan mengelola kait (portal) | Buat hook secara visual di UI portal, tidak ada panggilan API yang diperlukan. |
| Mengonfigurasi pengait agen (API) | Siapkan hook menggunakan REST API v2 dan YAML. |
Konten terkait
| Kemampuan | Bagaimana hubungannya |
|---|---|
| Mode operasi | Kait melengkapi kontrol keamanan mode berjalan. Mode-mode mengontrol apa yang dijalankan, hooks mengontrol seberapa baik eksekusinya. |
| Alat Python | Buat alat kustom yang dapat diaudit dan divalidasi oleh hooks. |