
एजेंट मेमोरी पॉइज़निंग के लिए स्थानीय टेस्ट रेंज - देखें कि कैसे एक रोपित मेमोरी एजेंट को दिशा देती है, फिर मरम्मत को सिद्ध करें। सिंथेटिक लक्ष्य, स्क्रिप्टेड डिटरमिनिस्टिक एजेंट।
आपके एजेंट ने इसे याद रखा। क्या उसे रखना चाहिए था?
एजेंट मेमोरी पॉइज़निंग के लिए एक स्थानीय परीक्षण क्षेत्र: हमलावर सतह के रूप में स्थायी मेमोरी। एजेंट की मेमोरी में नियंत्रित असुरक्षित लेखन डालें, देखें कि एक रोपित मेमोरी एजेंट के व्यवहार को कैसे बदलती है, फिर इसे रोकने का प्रयास करें - और साबित करें कि मरम्मत काम आई।
दायरा, स्पष्ट रूप से। सिंथेटिक लक्ष्य, एक स्क्रिप्टेड नियतात्मक एजेंट। यह रेपो वास्तविक मेमोरी बैकएंड पर प्रकाशित शोध से मेमोरी पॉइज़निंग, रक्षा और मरम्मत की यांत्रिकी का प्रदर्शन करता है। यह किसी भी वास्तविक LLM, होस्टेड मेमोरी सेवा, या उत्पादन प्रणाली की सुरक्षा के बारे में साक्ष्य नहीं है। यहाँ किसी भी चीज़ को कभी भी ऐसी प्रणाली पर निर्देशित न करें जो आपकी न हो।
एजेंट मेमोरी परतें तेज़ी से जारी हो रही हैं, और उनके विरुद्ध हमले की श्रेणियाँ शोध में प्रलेखित हैं (स्रोत देखें)। यह रेपो उन हमलों को देखने और किसी समाधान का परीक्षण करने के लिए एक छोटी, स्थानीय जगह है। पहले चार परिदृश्य प्रकाशित वर्गीकरण से बनाए गए हैं; A5 रेंज को रैंकिंग विंडो तक बढ़ाता है, और A6 उस दूसरे निर्णय तक जिसके लिए मालिक ने कभी नीति नहीं लिखी:
| परिदृश्य | हमले की श्रेणी | परीक्षण के अधीन यांत्रिकी |
|---|---|---|
| A1 - प्रत्यक्ष इंजेक्शन | एक असुरक्षित टूल लेखन में निर्देश-आकार की सामग्री | भोली रीसेंसी नवीनतम "प्राथमिकता" को मालिक नीति पर जीतने देती है |
| A2 - सारांश लॉन्ड्रिंग | पेलोड कम्पैक्शन से बच जाता है | एक्सट्रैक्टिव सारांशीकरण लेखन को summary लेबल करता है; लेबल भरोसेमंद दिखता है, वास्तविक उत्पत्ति अभी भी असुरक्षित स्रोत है |
| A3 - पुनरावृत्ति | वही दावा, तीन बार | डुप्लिकेट मर्जिंग दावे का विश्वास मालिक की अपनी नीति से ऊपर बढ़ा देती है |
| A4 - लॉन्डर्ड आयात | ज़हर किसी अन्य सिस्टम से पहले से summary लेबल के साथ आता है | टूल लेखन तक सीमित स्क्रीनिंग इसे कभी नहीं देखती, और आयात-पूर्व की वास्तविक उत्पत्ति अपुनर्प्राप्य है; गैर-मालिक दावों पर डिफ़ॉल्ट-डिनाई ही इसे रोकती है |
| A5 - रिट्रीवल फ्लडिंग | उच्च क्वेरी-टोकन ओवरलैप वाले दस असुरक्षित लेखन | मालिक नीति एजेंट की टॉप-k रिकॉल विंडो से बाहर धकेल दी जाती है, इसलिए प्रति-लेखन का कमज़ोर दावा भी निष्कासन से जीत जाता है; स्क्रीनिंग बाढ़ को क्वारंटीन करती है, और उत्पत्ति नीति बैकस्टॉप है |
| A6 - प्राथमिकता ग्राफ्टिंग | एक असुरक्षित लेखन उस विषय पर प्राथमिकता ग्राफ्ट करता है जिसे मालिक ने कभी सेट नहीं किया (कूरियर) | स्क्रीन करने के लिए निर्देश-आकार की कोई चीज़ नहीं, और खंडन करने के लिए मालिक का कोई दावा नहीं - इसलिए उत्पत्ति डिफ़ॉल्ट-डिनाई इसे रोकती है, लेकिन केवल संघर्ष-सीमित मरम्मत इसे हटा नहीं सकती। एक बार मालिक नीति बता दे, वही मरम्मत पास ग्राफ्ट को हटा देता है |
प्रत्येक परिदृश्य ताज़ा, वास्तविक बैकएंड के विरुद्ध तीन तरीकों से चलता है - कोई मॉक नहीं:
repair() चलाएँ, और निर्णय को बेसलाइन पर लौटना चाहिए। A6 जानबूझकर अपवाद है: ग्राफ्ट किए गए विषय पर कोई मालिक दावा न होने से, संघर्ष-सीमित मरम्मत के पास एंकर करने के लिए कुछ नहीं होता और वह कुछ नहीं हटाती - परिदृश्य उस सीमा और उपचार को पिन करता है (मालिक नीति बताता है, मरम्मत ग्राफ्ट हटा देती है)।वर्तमान स्कोरबोर्ड, टेस्ट सूट द्वारा सत्यापित: 6/6 हमले बिना रक्षा वाले एजेंट को पलट देते हैं, 6/6 रक्षा चालू होने पर अवरुद्ध हो जाते हैं, 5/6 अकेली मरम्मत से बहाल हो जाते हैं - A6 मरम्मत की सीमा का दस्तावेज़ीकरण करता है और मालिक के कूरियर नीति बताने पर बहाल हो जाता है।
हमले और रक्षाएँ मेमोरी अनुबंध के गुण हैं, किसी एक कार्यान्वयन के नहीं, इसलिए पूरी रेंज तीन बैकएंड के विरुद्ध चलती है:
ReferenceMemory - बिना किसी निर्भरता वाला इन-मेमोरी स्टोर। मैकेनिक्स को समझने के लिए उपयुक्त।ChromaMemory (mpolab/adapters.py) - ChromaDB के ऊपर एक एडाप्टर, जो अपने डिफ़ॉल्ट ONNX एम्बेडिंग मॉडल के साथ एक वास्तविक लोकल वेक्टर स्टोर है। कोई सर्वर नहीं, कोई API key नहीं, कोई सशुल्क कॉल नहीं: pip install chromadb करें और वही छह हमले एम्बेडिंग्स और निकटतम-पड़ोसी रिकॉल के विरुद्ध दोबारा चलाएँ। एक खुलासा: ChromaDB का पहला रन अपना डिफ़ॉल्ट ONNX एम्बेडिंग मॉडल (लगभग 80 MB) इंटरनेट से डाउनलोड करता है; उस एक-बार के डाउनलोड के बाद यह पूरी तरह ऑफ़लाइन चलता है।SQLiteVecMemory (mpolab/adapters.py) - sqlite-vec के ऊपर एक एडाप्टर, जो SQLite के भीतर निकटतम-पड़ोसी वेक्टर रिकॉल (सटीक KNN, कोई इंडेक्स नहीं) प्रदान करता है: कोई सर्वर नहीं, कोई मॉडल डाउनलोड नहीं। यह एक नियतात्मक हैश्ड बैग-ऑफ़-वर्ड्स (केवल मानक लाइब्रेरी) से एम्बेड करता है, इसलिए यह ऑफ़लाइन वास्तविक वेक्टर-रिकॉल प्लंबिंग का अभ्यास कराता है; यह सेमांटिक एम्बेडिंग गुणवत्ता का माप नहीं है। pip install sqlite-vec.tests/test_adapters.py एक अनुरूपता अनुबंध के साथ-साथ हर इंस्टॉल किए गए बैकएंड के विरुद्ध हर पंजीकृत परिदृश्य चलाता है। अपना स्वयं का एडाप्टर जोड़ना (mem0, Zep, Letta, pgvector - retain/recall वाला कुछ भी) पूरा हमला सूट विरासत में देता है।
हर मेमोरी प्रविष्टि दो प्रोवेनेंस फ़ील्ड रखती है: trust (वह स्टोरेज लेबल जो बैकएंड रिपोर्ट करता है, जिसे कम्पैक्शन और इम्पोर्ट फिर से लिख सकते हैं) और origin (लिखने के समय दर्ज किया गया स्रोत, जिसे कभी फिर से नहीं लिखा जाता)। रक्षा-तंत्र origin के आधार पर तर्क करते हैं। यही विभाजन वह जगह है जहाँ सारांश-लॉन्ड्रिंग जीती या मरती है। एक ईमानदारी की बात: किसी इम्पोर्ट की गई प्रविष्टि का origin उतना ही ईमानदार होता है जितना वह सिस्टम जिसने उसे इम्पोर्ट किया - इम्पोर्ट-पूर्व प्रोवेनेंस पुनःप्राप्त करने योग्य नहीं है। यही कारण है कि रक्षित नीति केवल owner-origin दावों को नीति निर्धारित करने देती है (A4), बजाय किसी भी दावा किए गए origin पर भरोसा करने के।
python3 scripts/build_demo.py # regenerates demo/index.html from real runs
open demo/index.html # no server, no dependencies
मेमोरी राइट्स चलाएँ, जिस कार्ड को आप ज़हर समझते हैं उस पर क्लिक करें, फिर रिवील करें: फ़्लिप किया गया निर्णय, डिफ़ेंस रन, और रिपेयर पास। डीप-लिंकेबल स्टेट्स (#reveal=A2, #defense=A4) किसी भी परिणाम को URL के रूप में साझा करने योग्य बनाते हैं।
Python 3.10+। रेफ़रेंस सूट में शून्य डिपेंडेंसी हैं:
python3 -m unittest discover -s tests -v
ChromaDB बैकएंड शामिल करने के लिए:
स्वच्छ चेकआउट पर सत्यापित:
python3 -m venv .venv && source .venv/bin/activate
pip install '.[chroma]' # local checkout extra; pulls chromadb
pip install '.[sqlitevec]' # or the sqlite-vec backend; no model download
python3 -m unittest discover -s tests -v
पहला ChromaDB रन अपने डिफ़ॉल्ट ONNX एम्बेडिंग मॉडल (लगभग 80 MB) को एक बार डाउनलोड भी करता है, फिर ऑफ़लाइन काम करता है। किसी भी अतिरिक्त के बिना, python3 -m unittest discover -s tests -v फिर भी पास होता है: वेक्टर-स्टोर केस साफ़ तौर पर स्किप हो जाते हैं।
सूट में 32 टेस्ट मेथड हैं, जिनमें एडाप्टर कन्फ़ॉर्मेंस कॉन्ट्रैक्ट और सिनेरियो रीप्ले शामिल हैं जो हर इंस्टॉल किए गए बैकएंड पर लूप होते हैं - संदर्भ हमेशा, साथ ही ChromaDB और sqlite-vec जब इंस्टॉल हों। लेग गणनाएँ: केवल स्टैंडर्ड लाइब्रेरी पर 28 चलते हैं (4 स्किप), ChromaDB के साथ 31 चलते हैं (1 स्किप), sqlite-vec के साथ 30 चलते हैं (2 स्किप); CI तीनों लेग चलाता है।
हैंडक्राफ्टेड डिफ़ेंस के साथ तीन ज्ञात हमले 3/3 जीतना कुछ साबित नहीं करेगा, इसलिए tests/test_robustness.py रेंज की अपनी धारणाओं को तोड़ने के लिए मौजूद है: