मॉड्यूलर LLM भेद्यता स्कैनर जो hallucination, data leakage, prompt injection, jailbreaks, और toxicity के लिए static, dynamic, और adaptive probes का उपयोग करके अनेक मॉडल प्रदाताओं पर जाँच करता है।
Generative AI Red-teaming & Assessment Kit
garak जाँचता है कि क्या किसी LLM-आधारित एप्लिकेशन को ऐसे तरीके से विफल कराया जा सकता है जो हम नहीं चाहते। garak hallucination, data leakage, prompt injection, misinformation, toxicity generation, jailbreaks, और कई अन्य कमज़ोरियों की जाँच करता है। यदि आप nmap या msf / Metasploit Framework जानते हैं, तो garak उनके लिए कुछ हद तक समान कार्य करता है, लेकिन LLMs के लिए।
garak किसी LLM या dialog system को विफल कराने के तरीकों पर केंद्रित है। यह इसका पता लगाने के लिए static, dynamic, और adaptive probes को संयोजित करता है।
garak एक मुफ़्त टूल है। हमें इसे विकसित करना पसंद है और हम एप्लिकेशन का समर्थन करने के लिए कार्यक्षमता जोड़ने में हमेशा रुचि रखते हैं।
वर्तमान में समर्थित:
garak एक कमांड-लाइन टूल है। इसे Linux और OSX में विकसित किया गया है।
pip के साथ मानक इंस्टॉलबस इसे PyPI से प्राप्त करें और आप तैयार हैं:
python -m pip install -U garak
pip के साथ डेवलपमेंट संस्करण इंस्टॉल करेंgarak का मानक pip संस्करण समय-समय पर अपडेट किया जाता है। GitHub से नया संस्करण प्राप्त करने के लिए, यह आज़माएँ:
python -m pip install -U git+https://github.com/NVIDIA/garak.git@main
garak की अपनी निर्भरताएँ हैं। आप garak को इसके अपने Conda वातावरण में स्थापित कर सकते हैं:
conda create --name garak "python>=3.11,<=3.14"
conda activate garak
gh repo clone NVIDIA/garak
cd garak
python -m pip install -e .
ठीक है, अगर यह ठीक से हो गया, तो आप संभवतः आगे बढ़ने के लिए तैयार हैं!
नोट: यदि आपने NVIDIA GitHub संगठन में स्थानांतरण से पहले क्लोन किया था, लेकिन आप इसे github.com/NVIDIA URI पर पढ़ रहे हैं, तो कृपया अपने रिमोट को निम्नानुसार अपडेट करें:
git remote set-url origin https://github.com/NVIDIA/garak.git
सामान्य सिंटैक्स है:
garak <options>
garak को यह जानना आवश्यक है कि किस मॉडल को स्कैन करना है, और डिफ़ॉल्ट रूप से, यह उस मॉडल पर अपने सभी ज्ञात प्रोब्स को आज़माएगा, प्रत्येक प्रोब द्वारा अनुशंसित भेद्यता डिटेक्टरों का उपयोग करते हुए। आप इसका उपयोग करके प्रोब्स की सूची देख सकते हैं:
garak --list_probes
किसी जनरेटर को निर्दिष्ट करने के लिए, --target_type और, वैकल्पिक रूप से, --target_name विकल्पों का उपयोग करें। मॉडल प्रकार एक मॉडल परिवार/इंटरफ़ेस निर्दिष्ट करता है; मॉडल नाम उपयोग किए जाने वाले सटीक मॉडल को निर्दिष्ट करता है। नीचे दिया गया "Intro to generators" अनुभाग समर्थित कुछ जनरेटरों का वर्णन करता है। एक सीधा जनरेटर परिवार Hugging Face मॉडल हैं; इनमें से किसी एक को लोड करने के लिए, --target_type को huggingface पर और --target_name को Hub पर मॉडल के नाम पर सेट करें (जैसे "RWKV/rwkv-4-169m-pile")। कुछ जनरेटरों को पर्यावरण चर के रूप में सेट की गई API कुंजी की आवश्यकता हो सकती है, और यदि उन्हें इसकी आवश्यकता होगी तो वे आपको बता देंगे।
garak डिफ़ॉल्ट रूप से सभी प्रोब्स चलाता है, लेकिन आप इस बारे में भी विशिष्ट हो सकते हैं। उदाहरण के लिए, --spec probes.promptinject केवल PromptInject फ्रेमवर्क की विधियों का उपयोग करेगा। आप किसी प्लगइन परिवार के बजाय एक विशिष्ट प्लगइन भी निर्दिष्ट कर सकते हैं, बस . के बाद प्लगइन का नाम जोड़कर; उदाहरण के लिए, --spec probes.lmrc.SlurUsage Language Model Risk Cards फ्रेमवर्क के आधार पर अपशब्द उत्पन्न करने वाले मॉडलों की जाँच के कार्यान्वयन का उपयोग करेगा।
सहायता और प्रेरणा के लिए, हमें Twitter या discord पर खोजें!
एन्कोडिंग-आधारित प्रॉम्प्ट इंजेक्शन के लिए एक वाणिज्यिक मॉडल की जाँच करें (OSX/*nix) (उदाहरण मान को वास्तविक OpenAI API कुंजी से बदलें)
export OPENAI_API_KEY="sk-123XXXXXXXXXXXX"
python3 -m garak --target_type openai --target_name gpt-5-nano --spec probes.encoding
देखें कि GPT2 का Hugging Face संस्करण DAN 11.0 के प्रति संवेदनशील है या नहीं
python3 -m garak --target_type huggingface --target_name gpt2 --spec probes.dan.Dan_11_0
प्रत्येक लोड किए गए प्रोब के लिए, garak जनरेट करते समय एक प्रगति बार प्रिंट करेगा। जनरेशन पूरा होने के बाद, प्रत्येक डिटेक्टर पर उस प्रोब के परिणामों का मूल्यांकन करने वाली एक पंक्ति दी जाती है। यदि किसी भी प्रॉम्प्ट प्रयास से कोई अवांछनीय व्यवहार प्राप्त हुआ, तो प्रतिक्रिया को FAIL के रूप में चिह्नित किया जाएगा, और विफलता दर दी जाएगी।
यहाँ GPT-3 वेरिएंट पर encoding मॉड्यूल के साथ परिणाम दिए गए हैं:

और ChatGPT के लिए वही परिणाम:

हम देख सकते हैं कि अधिक नया मॉडल एन्कोडिंग-आधारित इंजेक्शन हमलों के प्रति कहीं अधिक संवेदनशील है, जबकि text-babbage-001 केवल quoted-printable और MIME एन्कोडिंग इंजेक्शन के प्रति असुरक्षित पाया गया। प्रत्येक पंक्ति के अंत में दिए गए आंकड़े, जैसे 840/840, कुल टेक्स्ट जनरेशन की संख्या और फिर इनमें से कितने ठीक व्यवहार करते प्रतीत हुए, को दर्शाते हैं। यह आंकड़ा काफी अधिक हो सकता है क्योंकि प्रति प्रॉम्प्ट एक से अधिक जनरेशन किए जाते हैं - डिफ़ॉल्ट रूप से, 10।
त्रुटियाँ garak.log में जाती हैं; रन को विश्लेषण के आरंभ और अंत में निर्दिष्ट एक .jsonl फ़ाइल में विस्तार से लॉग किया जाता है। analyse/analyse_log.py में एक बुनियादी विश्लेषण स्क्रिप्ट है जो उन प्रोब्स और प्रॉम्प्ट्स को आउटपुट करेगी जिनसे सबसे अधिक हिट्स हुए।
PRs भेजें और issues खोलें। शुभ खोज!