Tools

टूल-लूप का पता लगाना

OpenClaw में दो सहयोगी सुरक्षा-उपाय हैं, जो बार-बार दोहराए जाने वाले टूल-कॉल पैटर्न से बचाते हैं, और दोनों को tools.loopDetection के अंतर्गत कॉन्फ़िगर किया जाता है:

  1. लूप पहचान (enabled) - डिफ़ॉल्ट रूप से अक्षम। दोहराए गए पैटर्न और अज्ञात-टूल पुनः प्रयासों के लिए हालिया टूल-कॉल इतिहास पर नज़र रखती है।
  2. Compaction के बाद का सुरक्षा-उपाय - जब भी enabled को स्पष्ट रूप से false नहीं किया गया हो, तब सक्षम रहता है। प्रत्येक Compaction-पुनः प्रयास के बाद सक्रिय होता है और यदि एजेंट समय-सीमा के भीतर उसी (tool, args, result) त्रिक को दोहराता है, तो रन को निरस्त कर देता है।

दोनों सुरक्षा-उपायों को निष्क्रिय करने के लिए tools.loopDetection.enabled: false सेट करें।

यह क्यों मौजूद है

  • ऐसे दोहराव वाले अनुक्रमों का पता लगाना, जिनसे कोई प्रगति नहीं होती।
  • उच्च-आवृत्ति वाले परिणाम-विहीन लूप का पता लगाना (वही टूल, वही इनपुट, बार-बार होने वाली त्रुटियाँ)।
  • ज्ञात पोलिंग टूल के लिए विशिष्ट दोहराए गए कॉल पैटर्न का पता लगाना।
  • कॉन्टेक्स्ट ओवरफ़्लो -> Compaction -> वही लूप चक्रों को अनिश्चित काल तक चलने देने के बजाय तोड़ना।

कॉन्फ़िगरेशन ब्लॉक

वैश्विक सेटिंग:

json5
{  tools: {    loopDetection: {      enabled: false, // हालिया-इतिहास डिटेक्टरों का मुख्य स्विच    },  },}

प्रति-एजेंट ओवरराइड (वैकल्पिक, agents.entries.*.tools.loopDetection पर):

json5
{  agents: {    list: [      {        id: "safe-runner",        tools: {          loopDetection: {            enabled: true,          },        },      },    ],  },}

प्रति-एजेंट सेटिंग वैश्विक सेटिंग को ओवरराइड करती है।

फ़ील्ड का व्यवहार

फ़ील्ड डिफ़ॉल्ट प्रभाव
enabled false हालिया-इतिहास डिटेक्टरों का मुख्य स्विच। false Compaction के बाद के सुरक्षा-उपाय को भी अक्षम करता है।

exec के लिए, प्रगति-रहित हैशिंग स्थिर कमांड परिणामों (स्थिति, निकास कोड, समय-समाप्ति फ़्लैग, आउटपुट) की तुलना करती है और अवधि, PID, सत्र ID और कार्यशील निर्देशिका जैसे परिवर्तनशील रनटाइम मेटाडेटा को अनदेखा करती है। आउटबाउंड संदेश-प्रेषण परिणामों को प्रत्येक कॉल के परिवर्तनशील ID (संदेश ID, फ़ाइल ID, टाइमस्टैम्प) हटाकर हैश किया जाता है, ताकि एक "भेजा गया" परिणाम किसी दूसरे "भेजा गया" परिणाम के समान न दिखे। जब रन ID उपलब्ध हो, तो इतिहास का मूल्यांकन केवल उसी रन के भीतर किया जाता है, ताकि निर्धारित Heartbeat चक्र और नए रन पहले के रन से पुराने लूप की संख्या प्राप्त न करें।

अनुशंसित सेटअप

  • छोटे मॉडलों के लिए, enabled: true सेट करें। प्रमुख मॉडलों को हालिया-इतिहास पहचान की शायद ही कभी आवश्यकता होती है और वे मुख्य स्विच को false पर छोड़कर भी Compaction के बाद के सुरक्षा-उपाय का लाभ उठा सकते हैं।
  • Compaction के बाद के सुरक्षा-उपाय सहित सब कुछ अक्षम करने के लिए, tools.loopDetection.enabled: false को स्पष्ट रूप से सेट करें।

Compaction के बाद का सुरक्षा-उपाय

कॉन्टेक्स्ट ओवरफ़्लो के बाद Compaction-पुनः प्रयास होने पर, रनर अगले कुछ टूल कॉल के लिए एक छोटी समय-सीमा वाला सुरक्षा-उपाय सक्रिय करता है। यदि एजेंट उस समय-सीमा के भीतर एक ही (toolName, argsHash, resultHash) त्रिक को पर्याप्त बार उत्पन्न करता है, तो सुरक्षा-उपाय यह निष्कर्ष निकालता है कि Compaction ने लूप को नहीं तोड़ा और compaction_loop_persisted त्रुटि के साथ रन को निरस्त कर देता है।

सुरक्षा-उपाय मुख्य tools.loopDetection.enabled फ़्लैग द्वारा नियंत्रित होता है, लेकिन इसमें एक विशेषता है: फ़्लैग सेट न होने या true होने पर यह सक्षम रहता है, और केवल तब बंद होता है, जब फ़्लैग को स्पष्ट रूप से false किया गया हो। यह जानबूझकर किया गया है - यह सुरक्षा-उपाय उन Compaction लूप से बाहर निकलने के लिए मौजूद है, जो अन्यथा असीमित टोकन खर्च करते रहते, इसलिए बिना कॉन्फ़िगरेशन वाले उपयोगकर्ता को भी सुरक्षा मिलती है।

json5
{  tools: {    loopDetection: {      // मुख्य स्विच; हालिया डिटेक्टरों के साथ सुरक्षा-उपाय को भी अक्षम करने के लिए false सेट करें      enabled: true,    },  },}
  • परिणाम बदलते रहने पर सुरक्षा-उपाय कभी रन निरस्त नहीं करता; समय-सीमा में केवल बाइट-दर-बाइट समान परिणाम ही इसे ट्रिगर करते हैं।
  • यह केवल Compaction-पुनः प्रयास के तुरंत बाद सक्रिय होता है, रन के अन्य बिंदुओं पर नहीं।

लॉग और अपेक्षित व्यवहार

जब किसी लूप का पता चलता है, तो OpenClaw एक लूप घटना लॉग करता है और गंभीरता के आधार पर अगले टूल चक्र के लिए चेतावनी देता है या उसे अवरुद्ध करता है, जिससे सामान्य टूल पहुँच बनाए रखते हुए टोकन के अनियंत्रित खर्च और अवरोधों से सुरक्षा मिलती है।

  • चेतावनियाँ पहले आती हैं।
  • जब कोई पैटर्न चेतावनी सीमा के बाद भी बना रहता है, तो अवरोधन होता है।
  • गंभीर सीमाएँ अगले टूल चक्र को अवरुद्ध करती हैं और रन रिकॉर्ड में लूप पहचान का स्पष्ट कारण दिखाती हैं।
  • Compaction के बाद का सुरक्षा-उपाय आपत्तिजनक टूल और समान कॉल की संख्या बताते हुए compaction_loop_persisted त्रुटियाँ उत्पन्न करता है।

संबंधित

Was this useful?
On this page

On this page