Tools
Deteksi loop alat
OpenClaw memiliki dua guardrail yang bekerja sama untuk pola panggilan alat yang berulang:
- Deteksi loop (
tools.loopDetection.enabled) — dinonaktifkan secara default. Memantau riwayat panggilan alat berjalan untuk pola berulang dan percobaan ulang alat yang tidak dikenal. - Pengaman pasca-Compaction (
tools.loopDetection.postCompactionGuard) — diaktifkan secara default kecualitools.loopDetection.enabledsecara eksplisit bernilaifalse. Aktif setelah setiap percobaan ulang Compaction dan membatalkan run ketika agen mengeluarkan triple(tool, args, result)yang sama dalam jendela tersebut.
Keduanya dikonfigurasi di bawah blok tools.loopDetection yang sama, tetapi pengaman pasca-Compaction berjalan setiap kali sakelar utama tidak dimatikan secara eksplisit. Tetapkan tools.loopDetection.enabled: false untuk menonaktifkan kedua permukaan.
Mengapa ini ada
- Mendeteksi urutan berulang yang tidak membuat kemajuan.
- Mendeteksi loop tanpa hasil berfrekuensi tinggi (alat yang sama, input yang sama, error berulang).
- Mendeteksi pola panggilan berulang tertentu untuk alat polling yang dikenal.
- Mencegah siklus context-overflow lalu Compaction lalu loop yang sama berjalan tanpa batas.
Blok konfigurasi
Default global, dengan setiap bidang terdokumentasi ditampilkan:
{
tools: {
loopDetection: {
enabled: false, // master switch for the rolling-history detectors
historySize: 30,
warningThreshold: 10,
criticalThreshold: 20,
unknownToolThreshold: 10,
globalCircuitBreakerThreshold: 30,
detectors: {
genericRepeat: true,
knownPollNoProgress: true,
pingPong: true,
},
postCompactionGuard: {
windowSize: 3, // armed after compaction-retry; runs unless enabled is explicitly false
},
},
},
}
Override per agen (opsional):
{
agents: {
list: [
{
id: "safe-runner",
tools: {
loopDetection: {
enabled: true,
warningThreshold: 8,
criticalThreshold: 16,
},
},
},
],
},
}
Perilaku bidang
| Bidang | Default | Efek |
|---|---|---|
enabled |
false |
Sakelar utama untuk detektor riwayat berjalan. Menetapkan false juga menonaktifkan pengaman pasca-Compaction. |
historySize |
30 |
Jumlah panggilan alat terbaru yang disimpan untuk analisis. |
warningThreshold |
10 |
Ambang sebelum pola diklasifikasikan sebagai hanya peringatan. |
criticalThreshold |
20 |
Ambang untuk memblokir pola loop berulang. |
unknownToolThreshold |
10 |
Blokir panggilan berulang ke alat yang sama yang tidak tersedia setelah jumlah kegagalan ini. |
globalCircuitBreakerThreshold |
30 |
Ambang pemutus tanpa kemajuan global di semua detektor. |
detectors.genericRepeat |
true |
Mendeteksi pola alat yang sama + parameter yang sama secara berulang. |
detectors.knownPollNoProgress |
true |
Mendeteksi pola mirip polling yang dikenal tanpa perubahan status. |
detectors.pingPong |
true |
Mendeteksi pola ping-pong bergantian. |
postCompactionGuard.windowSize |
3 |
Jumlah panggilan alat pasca-Compaction saat pengaman tetap aktif dan jumlah triple identik yang membatalkan run. |
Untuk exec, pemeriksaan tanpa kemajuan membandingkan hasil perintah yang stabil dan mengabaikan metadata runtime yang volatil seperti durasi, PID, ID sesi, dan direktori kerja. Ketika ID run tersedia, riwayat panggilan alat terbaru dievaluasi hanya dalam run tersebut sehingga siklus Heartbeat terjadwal dan run baru tidak mewarisi hitungan loop usang dari run sebelumnya.
Penyiapan yang direkomendasikan
- Untuk model yang lebih kecil, tetapkan
enabled: truedan biarkan ambang pada defaultnya. Model unggulan jarang membutuhkan deteksi riwayat berjalan dan dapat membiarkan sakelar utama padafalsesambil tetap mendapat manfaat dari pengaman pasca-Compaction. - Pertahankan urutan ambang sebagai
warningThreshold < criticalThreshold < globalCircuitBreakerThreshold. - Jika positif palsu terjadi:
- Naikkan
warningThresholddan/ataucriticalThreshold. - Opsional, naikkan
globalCircuitBreakerThreshold. - Nonaktifkan hanya detektor spesifik yang menyebabkan masalah (
detectors.<name>: false). - Kurangi
historySizeuntuk konteks historis yang tidak terlalu ketat.
- Naikkan
- Untuk menonaktifkan semuanya (termasuk pengaman pasca-Compaction), tetapkan
tools.loopDetection.enabled: falsesecara eksplisit.
Pengaman pasca-Compaction
Ketika runner menyelesaikan percobaan ulang Compaction setelah context-overflow, runner mengaktifkan pengaman berjendela pendek yang memantau beberapa panggilan alat berikutnya. Jika agen mengeluarkan triple (toolName, argsHash, resultHash) yang sama beberapa kali dalam jendela tersebut, pengaman menyimpulkan bahwa Compaction tidak memutus loop dan membatalkan run dengan error compaction_loop_persisted.
Pengaman dikendalikan oleh flag utama tools.loopDetection.enabled dengan satu perbedaan: pengaman tetap aktif ketika flag tidak ditetapkan atau bernilai true dan hanya nonaktif ketika flag secara eksplisit bernilai false. Ini disengaja. Pengaman ada untuk keluar dari loop Compaction yang jika tidak akan menghabiskan token tanpa batas, sehingga pengguna tanpa konfigurasi tetap mendapatkan perlindungan.
{
tools: {
loopDetection: {
// master switch; set false to disable the guard along with the rolling detectors
enabled: true,
postCompactionGuard: {
windowSize: 3, // default
},
},
},
}
windowSizeyang lebih rendah lebih ketat (lebih sedikit upaya sebelum batal).windowSizeyang lebih tinggi memberi agen lebih banyak upaya pemulihan.- Pengaman tidak pernah membatalkan ketika hasil berubah, hanya ketika hasil identik byte di seluruh jendela.
- Pengaman sengaja dibuat sempit: hanya aktif segera setelah percobaan ulang Compaction.
Log dan perilaku yang diharapkan
Ketika loop terdeteksi, OpenClaw melaporkan peristiwa loop dan menahan atau memblokir siklus alat berikutnya bergantung pada tingkat keparahan. Ini melindungi pengguna dari pengeluaran token yang tidak terkendali dan kebuntuan sambil mempertahankan akses alat normal.
- Peringatan muncul terlebih dahulu.
- Supresi mengikuti ketika pola tetap berlanjut melewati ambang peringatan.
- Ambang kritis memblokir siklus alat berikutnya dan menampilkan alasan deteksi loop yang jelas dalam catatan run.
- Pengaman pasca-Compaction mengeluarkan error
compaction_loop_persisteddengan nama alat yang melanggar dan jumlah panggilan identik.
Terkait
Kebijakan izinkan/tolak untuk eksekusi shell.
Tingkat upaya penalaran dan interaksi kebijakan provider.
Menjalankan agen terisolasi untuk membatasi perilaku yang tidak terkendali.
Skema tools.loopDetection lengkap dan semantik penggabungan.