
garak v0.16.0
ماسح ضوئي معياري لثغرات LLM يفحص الهلوسة، تسرب البيانات، حقن التعليمات، كسر الحماية، والسمية باستخدام فحوصات ثابتة وديناميكية وتكيفية عبر موفري نماذج متعددين.
garak, ماسح الثغرات في نماذج اللغة الكبيرة
مجموعة الاختبارات الهجومية والتقييم للذكاء الاصطناعي التوليدي
يتحقق garak مما إذا كان يمكن جعل LLM يفشل بطريقة لا نريدها. يفحص garak الهلوسة، تسرب البيانات، حقن الاستفسارات، المعلومات المضللة، توليد السمية، عمليات الهروب من الحماية، والعديد من نقاط الضعف الأخرى. إذا كنت تعرف nmap أو msf / Metasploit Framework، فإن garak يفعل أشياء مشابهة إلى حد ما، ولكن لنماذج LLM.
يركز garak على طرق جعل LLM أو نظام الحوار يفشل. يجمع بين الفحوصات الثابتة والديناميكية والتكيفية لاستكشاف ذلك.
garak أداة مجانية. نحن نحب تطويرها ونحن دائمًا مهتمون بإضافة وظائف لدعم التطبيقات.
ابدأ
> انظر دليل المستخدم الخاص بنا! docs.garak.ai
> انضم إلى Discord الخاص بنا!
> روابط المشروع والموقع: garak.ai
> تويتر: @garak_llm
> DEF CON شرائح!
دعم LLM
يدعم حاليًا:
- hugging face hub نماذج توليدية
- replicate نماذج نصية
- openai api نماذج الدردشة والاستمرارية
- aws bedrock نماذج أساسية
- litellm
- تقريبًا أي شيء يمكن الوصول إليه عبر REST
- نماذج gguf مثل llama.cpp الإصدار >= 1046
- .. والعديد من نماذج LLM الأخرى!
التثبيت:
garak هي أداة سطر أوامر. تم تطويرها على Linux و OSX.
التثبيت القياسي باستخدام pip
ما عليك سوى الحصول عليه من PyPI وستكون جاهزًا للانطلاق:``` python -m pip install -U garak
### تثبيت الإصدار التطويري باستخدام `pip`
يتم تحديث إصدار pip القياسي من `garak` بشكل دوري. للحصول على إصدار أحدث من GitHub، جرب:```
python -m pip install -U git+https://github.com/NVIDIA/garak.git@main
استنساخ من المصدر
garak له تبعياته الخاصة. يمكنك تثبيت garak في بيئة Conda الخاصة به:```
conda create --name garak "python>=3.10,<=3.12"
conda activate garak
gh repo clone NVIDIA/garak
cd garak
python -m pip install -e .
حسنًا، إذا كان ذلك على ما يرام، فمن المحتمل أنك جاهز للمتابعة!
**ملاحظة**: إذا قمت بالاستنساخ قبل الانتقال إلى منظمة `NVIDIA` على GitHub، ولكنك تقرأ هذا على URI `github.com/NVIDIA`، فيرجى تحديث remotes الخاصة بك على النحو التالي:```
git remote set-url origin https://github.com/NVIDIA/garak.git
البدء
الصيغة العامة هي:
garak <options>
يحتاج garak إلى معرفة النموذج الذي سيتم فحصه، وسيحاول افتراضيًا جميع الاختبارات التي يعرفها على هذا النموذج، باستخدام كاشفات الثغرات الموصى بها من قبل كل اختبار. يمكنك رؤية قائمة الاختبارات باستخدام:
garak --list_probes
لتحديد مولد، استخدم الخيارين --target_type واختياريًا --target_name. يحدد نوع النموذج عائلة النموذج/الواجهة؛ ويحدد اسم النموذج النموذج الدقيق الذي سيتم استخدامه. يصف قسم "مقدمة عن المولدات" أدناه بعض المولدات المدعومة. عائلة مولدات مباشرة هي نماذج Hugging Face؛ لتحميل أحدها، قم بتعيين --target_type إلى huggingface و--target_name إلى اسم النموذج على Hub (مثل "RWKV/rwkv-4-169m-pile"). قد تحتاج بعض المولدات إلى تعيين مفتاح API كمتغير بيئة، وسيخبرونك إذا كانوا بحاجة إلى ذلك.
يقوم garak بتشغيل جميع الاختبارات افتراضيًا، ولكن يمكنك أيضًا التحديد أكثر. على سبيل المثال، --probes promptinject سيستخدم فقط أساليب إطار PromptInject. يمكنك أيضًا تحديد إضافة محددة بدلاً من عائلة إضافات عن طريق إضافة اسم الإضافة بعد نقطة .؛ على سبيل المثال، --probes lmrc.SlurUsage سيستخدم تطبيقًا للتحقق من قيام النماذج بتوليد إهانات بناءً على إطار Language Model Risk Cards.
للمساعدة والإلهام، تجدنا على تويتر أو ديسكورد!
أمثلة
اختبر نموذجًا تجاريًا للكشف عن الحقن عن طريق التعليمات المستند إلى الترميز (OSX/*nix) (استبدل القيمة المثال بمفتاح OpenAI API حقيقي)``` export OPENAI_API_KEY="sk-123XXXXXXXXXXXX" python3 -m garak --target_type openai --target_name gpt-5-nano --probes encoding
تحقق مما إذا كان إصدار Hugging Face من GPT2 عرضة لـ DAN 11.0```
python3 -m garak --target_type huggingface --target_name gpt2 --probes dan.Dan_11_0
قراءة النتائج
لكل اختبار (probe) يتم تحميله، سيقوم garak بطباعة شريط تقدم أثناء التوليد. بمجرد اكتمال التوليد، يُعطى صف لتقييم نتائج ذلك الاختبار على كل كاشف (detector). إذا أسفرت أي من محاولات المطالبة عن سلوك غير مرغوب فيه، سيتم وضع علامة FAIL على الاستجابة، وسيتم إعطاء معدل الفشل.
فيما يلي النتائج مع وحدة encoding على متغير GPT-3:

ونفس النتائج لـ ChatGPT:

يمكننا ملاحظة أن النموذج الأحدث أكثر عرضة بكثير لهجمات الحقن المستندة إلى الترميز، حيث تبين أن text-babbage-001 ضعيف فقط تجاه حقن quoted-printable و MIME. الأرقام في نهاية كل صف، مثل 840/840، تشير إلى العدد الإجمالي للتوليدات النصية ثم عدد تلك التي بدت طبيعية. قد يكون الرقم مرتفعًا جدًا لأنه يتم إنشاء أكثر من توليدة لكل مطالبة - افتراضيًا، 10.
تذهب الأخطاء إلى garak.log؛ يتم تسجيل التشغيل بتفصيل في ملف .jsonl محدد في بداية التحليل ونهايته. يوجد سكريبت تحليل أساسي في analyse/analyse_log.py والذي سيُخرج الاختبارات والمطالبات التي أدت إلى أكبر عدد من الإصابات.
أرسل طلبات السحب (PRs) وافتح مشكلات. استمتع بالصيد!
مقدمة حول المولدات (Generators)
Hugging Face
استخدام واجهة Pipeline API:
--target_type huggingface(لنماذج transformers التي تعمل محليًا)--target_name- استخدم اسم النموذج من Hub. ستعمل فقط النماذج التوليدية. إذا فشلت ولا ينبغي ذلك، يرجى فتح مشكلة مع الأمر الذي جربته + الاستثناء!
استخدام Inference API:
--target_type huggingface.InferenceAPI(للوصول إلى النموذج عبر API)--target_name- اسم النموذج من Hub، مثل"mosaicml/mpt-7b-instruct"
استخدام نقاط النهاية الخاصة:
-
--target_type huggingface.InferenceEndpoint(لنقاط النهاية الخاصة) -
--target_name- رابط نقطة النهاية، مثلhttps://xxx.us-east-1.aws.endpoints.huggingface.cloud -
(اختياري) تعيين متغير البيئة
HF_INFERENCE_TOKENإلى رمز Hugging Face API بدور "قراءة"؛ انظر https://huggingface.co/settings/tokens عند تسجيل الدخول
OpenAI
--target_type openai--target_name- نموذج OpenAI الذي ترغب في استخدامه.gpt-5-nanoسريع ومناسب للاختبار.- تعيين متغير البيئة
OPENAI_API_KEYإلى مفتاح API الخاص بـ OpenAI (مثل "sk-19763ASDF87q6657")؛ انظر https://platform.openai.com/account/api-keys عند تسجيل الدخول