
एजेंट रक्षा में खुली विशेषाधिकार का मापन
एक एजेंट-सुरक्षा बेंचमार्क दो संख्याएँ रिपोर्ट करता है, हमले की सफलता और बिना नुकसान वाली उपयोगिता, और दोनों उन रनों से पढ़ी जाती हैं जो हुए। कोई भी यह नहीं बताता कि डिफेंस उन रास्तों पर क्या अनुमति देने के लिए तैयार खड़ा था जिन पर कोई रन नहीं गया। Ajar इसे सीधे पूछता है: प्रत्येक बिना नुकसान वाले कार्य के लिए यह ऐसे उम्मीदवार टूल कॉल बनाता है जिनकी कार्य को आवश्यकता नहीं है, प्रत्येक को उस हर बिंदु पर डिफेंस के सामने प्रस्तुत करता है जहाँ एजेंट कार्य कर सकता था, और उस हानि-भारित हिस्से को स्कोर करता है जिसे डिफेंस अनुमति देता है।
यह उस बेंचमार्क से जुड़ता है जो पहले से मौजूद है और स्वयं को ग्रेड करने के लिए उस बेंचमार्क द्वारा पहले से वहन की जा रही चीज़ों का पुनः उपयोग करता है — उसके कार्य, टूल स्कीमा, संदर्भ समाधान और लक्ष्य अवस्थाएँ — इसलिए एक नए होस्ट को एक अडैप्टर की आवश्यकता होती है और एक नए डिफेंस को एक रैपर की।
अडैप्टर वह निर्यात करता है जो होस्ट बेंचमार्क पहले से वहन करता है। जनरेटर उसे प्रत्येक निर्णय बिंदु पर उम्मीदवार कॉल में बदल देता है, ओरेकल प्रत्येक उम्मीदवार को उसका लेबल और हानि स्तर देता है, और रैपर प्रत्येक को डिफेंस के अपने प्रवर्तन पथ पर सौंप देता है। स्कोरिंग निर्णयों की तुलना लेबलों से करती है।
ajar/core/ मध्यवर्ती रूप: उम्मीदवार, प्रोब, लेबल, हानि स्तर
ajar/adapters/ होस्ट-बेंचमार्क अडैप्टर; agentdojo/ संदर्भ वाला है
ajar/generate/ वे फॉल्ट परिवार जो किसी कार्य से उम्मीदवार कॉल बनाते हैं
ajar/score/ लीकेज, पर्याप्तता, अति-प्रतिबंध, हमला प्रवेश
ajar/defenses/ Ajar के स्वयं के संदर्भ बेसलाइन, allow-all से लेकर एक सटीक ओरेकल तक
ajar/llm/ मॉडल सीम, उन डिफेंस और जनरेटर के लिए जो किसी को कॉल करते हैं
tests/
scripts/
git clone https://github.com/reSHARMA/Ajar.git
cd Ajar
pip install -e .
bash scripts/bootstrap.sh # reports what is present and what is missing
Ajar उस होस्ट बेंचमार्क के विरुद्ध स्कोर करता है जिसे यह वेंडर नहीं करता। संदर्भ अडैप्टर के लिए, इसे एक AgentDojo चेकआउट की ओर इंगित करें:
git clone https://github.com/ethz-spylab/agentdojo.git bench/agentdojo
python scripts/export_probes.py --benchmark agentdojo
यह प्रोब सूट लिखता है: कार्य, उनसे बने उम्मीदवार कॉल, और प्रत्येक उम्मीदवार का लेबल और हानि स्तर।
अति-विशेषाधिकार लीकेज अतिरिक्त कॉलों का हानि-भारित हिस्सा है जिसे एक डिफेंस अनुमति देता है। प्रत्येक अतिरिक्त कॉल एक भार वहन करती है जो इस बात के साथ बढ़ता है कि यदि वह चली तो क्या कर सकती थी, उपयोगकर्ता की अपनी स्थिति की एक प्रतिवर्ती पढ़त से लेकर किसी तीसरे पक्ष या धन पर एक अपरिवर्तनीय कार्रवाई तक।
पर्याप्तता उन कॉलों का हिस्सा है जिनकी एक कार्य को वास्तव में आवश्यकता होती है और जिन्हें डिफेंस गुजरने देता है। इसे लीकेज के साथ रिपोर्ट करना दोनों में से किसी को भी गेम करने से रोकता है: एक डिफेंस जो सब कुछ अस्वीकार करता है कुछ भी लीक नहीं करता, और एक जो सब कुछ अनुमति देता है वह कार्य की आवश्यकता वाली किसी भी चीज़ से इनकार नहीं करता।
इनके साथ दो और संख्याएँ आती हैं। अति-प्रतिबंध उन हकदार कॉलों को गिनता है जिन्हें एक डिफेंस अस्वीकार करता है, और हमला प्रवेश उन हमलों को गिनता है जिनकी प्रत्येक सिंक कॉल को वह अनुमति देता है।
एक डिफेंस एक निर्णय लागू करता है: एक प्रस्तावित कॉल और पहले से निष्पादित कॉलों को देखते हुए,
उसे अनुमति दें या अस्वीकार करें। इसे ajar.defenses.base के विरुद्ध लागू करें, इसे पंजीकृत करें, और Ajar
उन्हीं परीक्षणों पर सभी चार संख्याएँ रिपोर्ट करता है जो हर अन्य डिफेंस देखता है।
ajar/defenses/baselines.py में चार संदर्भ प्रक्रियाएँ हैं — allow-all, एक टूल-नाम
allowlist, एक तर्क-सटीक ओरेकल और deny-all — जो दोनों सिरों पर पैमाने को सीमित करती हैं और
एक नए डिफेंस को बीच में बैठने के लिए कुछ देती हैं।
MIT। देखें LICENSE।