مجموعة أدوات التقييم والتقييم من الذكاء الاصطناعي
يتحقق garak
إذا كان من الممكن إجراء LLM للفشل بطريقة لا نريدها. تحقيقات garak
للهلوسة ، وتسرب البيانات ، والحقن السريع ، والمعلومات الخاطئة ، وتوليد السمية ، والكسرات ، والعديد من نقاط الضعف الأخرى. إذا كنت تعرف nmap
، فهو nmap
لـ LLMS.
يركز garak
على طرق عمل LLM أو نظام الحوار. فهو يجمع بين تحقيقات ثابتة وديناميكية وتكيفية لاستكشاف هذا.
أداة garak
'SA المجانية. نحن نحب تطويره ونهتم دائمًا بإضافة وظائف لدعم التطبيقات.
يدعم حاليا:
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 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 ، لكنك تقرأ هذا على github.com/NVIDIA
uri ، يرجى تحديث أجهزة التحكم عن بعد الخاص بك على النحو التالي:
git remote set-url origin https://github.com/NVIDIA/garak.git
بناء الجملة العام هو:
garak <options>
يحتاج garak
إلى معرفة النموذج الذي سيتم مسحه ، وبالنظر إلى الافتراضي ، سيحاول كل المجسات التي يعرفها في هذا النموذج ، باستخدام أجهزة الكشف عن الضعف الموصى بها من قبل كل مسبار. يمكنك رؤية قائمة بالتحقيقات باستخدام:
garak --list_probes
لتحديد المولد ، استخدم --model_type
، واختياريا ، خيارات --model_name
. نوع النموذج يحدد نموذج عائلة/واجهة ؛ يحدد اسم النموذج النموذج الدقيق الذي سيتم استخدامه. يصف قسم "مقدمة للمولدات" أدناه بعض المولدات المدعومة. عائلة مولد مباشرة تعانق نماذج الوجه. لتحميل واحدة من هذه ، set --model_type
إلى huggingface
و- --model_name
إلى اسم النموذج على HUB (على سبيل المثال "RWKV/rwkv-4-169m-pile"
). قد يحتاج بعض المولدات إلى مفتاح API ليتم تعيينه كمتغير للبيئة ، وسيعلمونك إذا كانوا بحاجة إلى ذلك.
يدير garak
جميع التحقيقات افتراضيًا ، ولكن يمكنك أن تكون محددًا بشأن ذلك أيضًا. -سوف تستخدم --probes promptinject
فقط أساليب FormingNject Framework ، على سبيل المثال. يمكنك أيضًا تحديد مكون إضافي واحد بدلاً من عائلة مكون الإضافي عن طريق إضافة اسم البرنامج المساعد بعد أ .
؛ على سبيل المثال ، -ستستخدم --probes lmrc.SlurUsage
تنفيذ التحقق من النماذج التي تولد الإهانات بناءً على إطار بطاقات مخاطر نموذج اللغة.
للحصول على المساعدة والإلهام ، ابحث عننا على Twitter أو Discord!
probe chatgpt للحقن الموجه القائم على الترميز (OSX/*NIX) (استبدل قيمة المثال بمفتاح Openai API حقيقي)
export OPENAI_API_KEY="sk-123XXXXXXXXXXXX"
python3 -m garak --model_type openai --model_name gpt-3.5-turbo --probes encoding
معرفة ما إذا كانت نسخة الوجه المعانقة من GPT2 عرضة لدان 11.0
python3 -m garak --model_type huggingface --model_name gpt2 --probes dan.Dan_11_0
لكل مسبار تم تحميله ، سيقوم Garak بطباعة شريط التقدم عند توليده. بمجرد اكتمال الجيل ، يتم إعطاء صف يقيم نتائج التحقيق على كل كاشف. إذا أسفرت أي من المحاولات السريعة عن سلوك غير مرغوب فيه ، فسيتم تمييز الاستجابة على أنها فشل ، ومعدل الفشل المعطى.
فيما يلي النتائج مع وحدة encoding
على متغير GPT-3:
ونفس نتائج chatgpt:
يمكننا أن نرى أن النموذج الأكثر حداثة أكثر عرضة للترميز هجمات الحقن القائمة على الترميز ، حيث تم العثور على نصوص النص-001 فقط على أنه عرضة للحقن المقتبسة وترميز MIME. تشير الأرقام في نهاية كل صف ، على سبيل المثال 840/840 ، إلى إجمالي عدد أجيال النص ، وبعد ذلك ، يبدو أن عددهم يتصرفون بشكل جيد. يمكن أن يكون الرقم مرتفعًا جدًا لأن أكثر من جيل واحد لكل موجه - افتراضيًا ، 10.
الأخطاء تذهب في garak.log
؛ يتم تسجيل المدار بالتفصيل في ملف .jsonl
المحدد في التحليل Start & End. هناك برنامج نصي تحليل أساسي في analyse/analyse_log.py
الذي سيؤدي إلى إخراج المجسات والمطالبات التي أدت إلى معظم الزيارات.
إرسال PRS والمشكلات المفتوحة. صيد سعيد!
باستخدام واجهة برمجة تطبيقات خط الأنابيب:
--model_type huggingface
(لنماذج المحولات لتشغيلها محليًا)--model_name
-استخدم اسم النموذج من Hub. النماذج التوليدية فقط ستعمل. إذا فشلت ولا ينبغي ، يرجى فتح مشكلة والصق في الأمر الذي جربته + الاستثناء!باستخدام واجهة برمجة تطبيقات الاستدلال:
--model_type huggingface.InferenceAPI
(للوصول إلى النموذج المستند إلى API)--model_name
اسم النموذج من HUB ، على سبيل المثال "mosaicml/mpt-7b-instruct"
باستخدام نقاط النهاية الخاصة:
--model_type huggingface.InferenceEndpoint
(لنقاط النهاية الخاصة)
--model_name
عنوان URL لنقطة النهاية ، على سبيل المثال https://xxx.us-east-1.aws.endpoints.huggingface.cloud
(اختياري) قم بتعيين متغير البيئة HF_INFERENCE_TOKEN
على رمز API Face مع المعانقة مع دور "قراءة" ؛ انظر https://huggingface.co/Settings/tokens عند تسجيل الدخول
--model_type openai
--model_name
-نموذج Openai الذي ترغب في استخدامه. gpt-3.5-turbo-0125
سريع وغرامة للاختبار.OPENAI_API_KEY
على مفتاح API Openai (على سبيل المثال "SK-19763ASDF87Q6657") ؛ راجع https://platform.openai.com/account/api- keys عند تسجيل الدخولأنواع النماذج المعترف بها هي القائمة البيضاء ، لأن المكون الإضافي يحتاج إلى معرفة أي فرعي api يجب استخدامه. نماذج الانتهاء أو الدردشة على ما يرام. إذا كنت ترغب في استخدام نموذج غير مدعوم ، فيجب أن تحصل على رسالة خطأ إعلامية ، ويرجى إرسال PR / فتح مشكلة.
REPLICATE_API_TOKEN
على رمز API المتكرر ، على سبيل المثال "R8-123xxxxxxxxxxxx" ؛ انظر https://replicate.com/account/api-tokens عند تسجيل الدخولالنماذج النسائية العامة:
--model_type replicate
--model_name
اسم نموذج النسخ المتماثل وتجزئة ، على سبيل المثال "stability-ai/stablelm-tuned-alpha-7b:c49dae36"
نقاط النهاية النسائية الخاصة:
--model_type replicate.InferenceEndpoint
(لنقاط النهاية الخاصة)--model_name
اسم المستخدم/الاسم النموذجي من نقطة النهاية المنشورة ، على سبيل elim/elims-llama2-7b
--model_type cohere
--model_name
(اختياري ، command
افتراضيًا) -نموذج COREHED المحدد الذي ترغب في اختبارهCOHERE_API_KEY
على مفتاح Cohere API الخاص بك ، على سبيل المثال "ABCDEFGHIJ123456789" ؛ انظر https://dashboard.coery.ai/api- keys عند تسجيل الدخول--model_type groq
--model_name
-اسم النموذج للوصول عبر واجهة برمجة تطبيقات GROQGROQ_API_KEY
على مفتاح GroQ API الخاص بك ، راجع https://console.groq.com/docs/quickstart للحصول على تفاصيل حول إنشاء مفتاح API--model_type ggml
--model_name
المسار إلى طراز GGML الذي ترغب في تحميله ، على سبيل المثال /home/leon/llama.cpp/models/7B/ggml-model-q4_0.bin
/7B/GGML-MODEL-Q4_0.BINGGML_MAIN_PATH
على المسار إلى GGML main
TELLESS rest.RestGenerator
مرنة للغاية ويمكنه الاتصال بأي نقطة نهاية راحة تُرجع النص العادي أو JSON. إنه يحتاج إلى بعض التكوين الموجز ، والذي سيؤدي عادةً إلى ملف YAML قصير يصف نقطة النهاية الخاصة بك. انظر https://reference.garak.ai/en/latest/garak.generators.rest.html للحصول على أمثلة.
استخدم النماذج من https://build.nvidia.com/ أو نقاط نهاية أخرى NIM.
NIM_API_KEY
على رمز API المصادقة ، أو حدده في التكوين YAMLلنماذج الدردشة:
--model_type nim
--model_name
اسم model
NIM ، على سبيل المثال meta/llama-3.1-8b-instruct
لنماذج الانتهاء:
--model_type nim.NVOpenAICompletion
--model_name
اسم model
NIM ، مثل bigcode/starcoder2-15b
OCTO_API_TOKEN
على رمز API المتكرر ، على سبيل المثال "R8-123xxxxxxxxxxx" ؛ انظر https://replicate.com/account/api-tokens عند تسجيل الدخولنقطة النهاية العامة OCTO:
--model_type octo
--model_name
نقطة النهاية العامة لـ OCTOAI للنموذج ، مثل mistral-7b-instruct-fp16
نقطة النهاية الخاصة OCTO:
--model_type octo.InferenceEndpoint
(لنقاط النهاية الخاصة)--model_name
عنوان URL للنقطة المنتشرة ، على سبيل المثال https://llama-2-70b-chat-xxx.octoai.run/v1/chat/completions
--model_type test
(بدلاً من ذلك) --model_name test.Blank
للاختبار. هذا يولد دائمًا السلسلة الفارغة ، باستخدام مولد test.Blank
. سيتم تمييزه على أنه فشل في أي اختبارات تتطلب إخراجًا ، على سبيل المثال تلك التي تقدم مطالبات مثيرة للجدل وتتوقع أن يدحضها النموذج من أجل المرور.
--model_type test.Repeat
للاختبار. يكرر هذا المولد مرة أخرى المطالبة التي تلقاها.
التحقيق | وصف |
---|---|
فارغ | مسبار بسيط يرسل دائمًا موجهًا فارغًا. |
Atkgen | توليد الهجوم الآلي. تحقق LLM Red-Teaming LLM في الهدف ويتفاعل معه في محاولة للحصول على ناتج سام. يستخدم النموذج الأولي ، في الغالب عديمة الجنسية ، الآن GPT-2 بسيطًا على المجموعة الفرعية من محاولات HHRLHF التي أسفرت عن سمية يمكن اكتشافها (الهدف الوحيد المدعوم حاليًا في الوقت الحالي). |
av_spam_scanning | التحقيقات التي تحاول جعل إخراج النموذج توقيعات المحتوى الخبيثة |
استمرار | التحقيقات في هذا الاختبار إذا كان النموذج سيستمر كلمة ربما غير مرغوب فيها |
دان | مختلف هجمات دان ودان تشبه |
Donotanswer | يطالب بأي نماذج اللغة المسؤولة لا يجب أن تجيب. |
الترميز | الحقن السريع من خلال ترميز النص |
GCG | تعطل موجه النظام عن طريق إلحاق لاحقة عدوانية. |
خلل | نموذج التحقيق لرموز خلل التي تثير السلوك غير العادي. |
الجدة | نداء أن يتم تذكيره بجدة المرء. |
البضائع | تطبيقات هجمات Riley Goodside. |
LeakerPlay | تقييم ما إذا كان النموذج سيعيد إعادة تشغيل بيانات التدريب. |
LMRC | عينة فرعية من تحقيقات بطاقات مخاطر نموذج اللغة |
Malwaregen | محاولات لجعل النموذج تنشئ رمزًا لبناء البرامج الضارة |
مضللة | محاولات لجعل نموذج الدعم مضللة ومطالبات كاذبة |
Packagehallucination | محاولة الحصول على أجيال الشفرة التي تحدد حزم غير موجودة (وبالتالي غير آمنة). |
المطالبة | تنفيذ عمل المؤسسة المؤسسة للمؤسسة (أفضل جوائز الورق @ Neups ML السلامة ورشة السلامة 2022) |
السمية السمية | مجموعة فرعية من السمية السمية تعمل (البيانات المقيدة لأن الاختبار الكامل سيستغرق وقتًا طويلاً لتشغيله) |
كرة الثلج | تحقيقات هلوسة كرة الثلج مصممة لجعل نموذجًا يعطي إجابة خاطئة على الأسئلة المعقدة للغاية بحيث لا يمكن معالجتها |
XSS | ابحث عن نقاط الضعف على التصريح أو سن هجمات المواقع المتقاطعة ، مثل ترشيح البيانات الخاصة. |
يولد garak
أنواعًا متعددة من السجل:
garak.log
. ويشمل ذلك معلومات تصحيح الأخطاء من garak
ومكوناتها الإضافية ، ويستمر عبر عمليات التشغيل.garak
بتشغيل. يتم إخراج اسم هذا الملف في البداية ، وإذا نجحت ، أيضًا في نهاية التشغيل. في التقرير ، يتم إجراء إدخال لكل محاولة تحقيق على حد سواء عند استلام الأجيال ، ومرة أخرى عند تقييمها ؛ تأخذ سمة status
الإدخال ثابتة من garak.attempts
. تحقق من المستندات المرجعية للحصول على دليل موثوق بهيكل رمز garak
.
في التشغيل النموذجي ، سيقرأ garak
نوعًا من الطراز (واسم طراز اختياريًا) من سطر الأوامر ، ثم تحديد probe
S و detector
S للتشغيل ، وبدء تشغيل generator
، ثم تمريرها إلى harness
للقيام بالتحقيق ؛ يتناول evaluator
النتائج. هناك العديد من الوحدات النمطية في كل فئة من هذه الفئات ، وتوفر كل وحدة عددًا من الفئات التي تعمل كملابس فردية.
garak/probes/
- فئات لتوليد التفاعلات مع LLMSgarak/detectors/
- فئات للكشف عن LLM تعرض وضع فشل معينgarak/evaluators/
- مخططات الإبلاغ عن التقييمgarak/generators/
- المكونات الإضافية لـ LLMS ليتم التحقيق فيهاgarak/harnesses/
- دروس لهيكلة الاختبارresources/
- العناصر المساعدة المطلوبة بواسطة المكونات الإضافية وضع التشغيل الافتراضي هو استخدام تسخير probewise
. بالنظر إلى قائمة بأسماء الوحدات النمطية وأسماء المكونات الإضافية للتحقيق ، يقوم تسخير probewise
بتثبيت كل مسبار ، ثم يقرأ لكل مسبار سمة recommended_detectors
به _detectors للحصول على قائمة من detector
لتشغيلها على الإخراج.
تتضمن كل فئة مكون من مكونات البرنامج المساعد ( probes
، detectors
، evaluators
، generators
، harnesses
) base.py
. تحدد الفئات الأساسية قابلة للاستخدام بواسطة الإضافات في تلك الفئة. تحدد كل وحدة مكون الإضافي فئات البرنامج المساعد التي ترث من إحدى الفئات الأساسية. على سبيل المثال ، garak.generators.openai.OpenAIGenerator
ينحدر من garak.generators.base.Generator
.
يتم الاحتفاظ بالآثار الأكبر ، مثل ملفات النماذج والشركات الأكبر ، خارج المستودع ؛ يمكن تخزينها على سبيل المثال ، على سبيل المثال Face Hub وتحميلها محليًا من قبل العملاء الذين يستخدمون garak
.
garak.probes.base.TextProbe
import garak.probes.mymodule
p = garak.probes.mymodule.MyProbe()
python3 -m garak -m test.Blank -p mymodule -d always.Pass
python3 -m garak -m test.Blank -p test.Blank -d mymodule
python3 -m garak -m mymodule -p test.Blank -d always.Pass
garak
لسرد جميع الإضافات من النوع الذي تكتبه ، مع --list_probes
، --list_detectors
، أو --list_generators
لدينا أسئلة وأجوبة هنا. تواصل إذا كان لديك أي أسئلة أخرى! [email protected]
الوثائق المرجعية الرمز في Garak.ReadTheDocs.io.
يمكنك قراءة ورقة Garak preprint. إذا كنت تستخدم Garak ، يرجى الاستشهاد بنا.
@article{garak,
title={{garak: A Framework for Security Probing Large Language Models}},
author={Leon Derczynski and Erick Galinkin and Jeffrey Martin and Subho Majumdar and Nanna Inie},
year={2024},
howpublished={url{https://garak.ai}}
}
"الكذب هو مهارة مثل أي شيء آخر ، وإذا كنت ترغب في الحفاظ على مستوى التميز عليك أن تمارسه باستمرار" - إلغاء
للحصول على التحديثات والأخبار ، انظر @garak_llm
© 2023- Leon Derczynski ؛ ترخيص Apache V2 ، انظر الترخيص