हमने एक वीकेंड में एक ऑटोनॉमस कोड गार्डियन बनाया
हमने एक बड़े लक्ष्य के साथ JacHacks में हिस्सा लिया।
एक ऐसा टूल बनाएं जो रिपॉजिटरी पर नज़र रखे। इसे संदिग्ध डिपेंडेंसी बदलावों को पहचानना चाहिए। इसे यह साबित करने के लिए कि वे दुर्भावनापूर्ण (malicious) हैं, उन डिपेंडेंसीज़ को एक सैंडबॉक्स में चलाना चाहिए। फिर, इसे एक फिक्स लिखना चाहिए और एक पुल रिक्वेस्ट (pull request) खोलनी चाहिए। अंत तक इसमें किसी इंसान की ज़रूरत नहीं होनी चाहिए।
हमने इसका नाम GhostWatch रखा। इसने एजेंटिक ट्रैक में दूसरा स्थान प्राप्त किया।
यहाँ बताया गया है कि हमने इसे कैसे बनाया और हमने क्या सीखा।
समस्या
स्टैंडर्ड कोड रिव्यूज में दो बड़ी कमियां हैं:
- टूल्स 'ब्लास्ट रेडियस' (blast radius) नहीं देख सकते। एक फंक्शन में बदलाव दूर स्थित फाइलों को खराब कर सकता है। अधिकांश टूल्स कनेक्शन को नहीं देखते हैं।
- सप्लाई चेन अटैक रिव्यूज को बायपास कर देते हैं। एक हमलावर सीधे रजिस्ट्री में एक ज़हरीला (poisoned) वर्शन पुश कर सकता है। रिव्यू करने के लिए कोई पुल रिक्वेस्ट नहीं होती। आपको नुकसान होने के बाद ही इसका पता चलता है।
हमारा समाधान
हमने स्थानिक जागरूकता (spatial awareness) वाला एक सिस्टम बनाया। हमने कोडबेस को एक ग्राफ के रूप में मॉडल करने के लिए Jac का उपयोग किया।
इस ग्राफ में:
- फाइलें नोड्स (nodes) हैं।
- इम्पोर्ट्स (imports) एजेस (edges) हैं।
ब्लास्ट रेडियस खोजने के लिए, हम अंदाज़ा नहीं लगाते। हम एक ग्राफ वॉक (graph walk) करते हैं। यह सुरक्षा लॉजिक को डिटरमिनिस्टिक (deterministic) और समझाने योग्य (explainable) बनाता है।
टेक स्टैक
हमने रॉ Python और मैन्युअल LLM कॉल्स के बजाय Jac का उपयोग किया। इसने हमारे काम करने के तरीके को बदल दिया:
- कोडबेस ही डेटा स्ट्रक्चर है।
- पर्सिस्टेंस (Persistence) इन-बिल्ट है। हमारा रेपो ग्राफ बिना किसी अलग डेटाबेस के रीस्टार्ट के बाद भी बना रहता है।
- LLM इंटीग्रेशन निर्बाध (seamless) है। हम एक फंक्शन को LLM कॉल में बदलने के लिए एक सिंगल कीवर्ड का उपयोग करते हैं जो टाइप किए गए ऑब्जेक्ट्स (typed objects) लौटाता है।
कठिन हिस्से
यह आसान नहीं था। हमें कई बाधाओं का सामना करना पड़ा:
- नया सिंटैक्स: Jac में Python के "self" के बजाय सेमीकोलन, ब्रेसेस और "has" जैसे विशिष्ट कीवर्ड्स का उपयोग होता है। हमने पहले कुछ घंटे पार्स एरर्स (parse errors) को ठीक करने में बिताए।
- React की कमियां: मैंने लिस्ट को इन-प्लेस (in place) बदलने की कोशिश की। इससे फ्रंटएंड अपडेट नहीं हो पा रहा था। मुझे री-रेंडर (re-renders) ट्रिगर करने के लिए लिस्ट को री-असाइन (reassign) करने का तरीका अपनाना पड़ा।
- डॉक्यूमेंटेशन की कमी: एनवायरनमेंट सेटअप करने में उम्मीद से ज़्यादा समय लगा क्योंकि कुछ डॉक्यूमेंटेशन बहुत कम थी।
यह क्यों मायने रखता है
अधिकांश एजेंट सिस्टम में आपको स्टेट (state), ऑर्केस्ट्रेशन (orchestration) और सीरियलाइजेशन (serialization) को मैन्युअल रूप से मैनेज करना पड़ता है। Jac के साथ, ग्राफ एक लैंग्वेज कंस्ट्रक्ट (language construct) है। सिस्टम आर्किटेक्चर उस समस्या से मेल खाता है जिसे हम हल कर रहे थे।
प्रोजेक्ट परफेक्ट नहीं है। सैंडबॉक्स क्लाउड microVMs के बजाय लोकल सबप्रोसेस (subprocesses) का उपयोग करता है। हमने इन कमियों को स्पष्ट रखा क्योंकि हैकाथॉन की चमक (polish) झूठ नहीं होनी चाहिए।
डेमो देखें: https://www.youtube.com/watch?v=ZN0UVnNUpRs
कोड देखें: https://github.com/ayushmk7/GhostWatch
स्रोत: https://dev.to/ayushmk/we-built-an-autonomous-code-guardian-in-a-weekend-heres-what-happened-4982
वैकल्पिक लर्निंग कम्युनिटी: https://t.me/GyaanSetuAi
