LLM Guard - مجموعة أدوات أمان LLM
LLM Guard (من قبل Protect AI) هي مجموعة أدوات أمان مفتوحة المصدر لتطبيقات LLM. توفر مكتبة من ماسحات الإدخال (المطبقة على مطالبة المستخدم قبل وصولها إلى النموذج) وماسحات الإخراج (المطبقة على استجابة النموذج قبل وصولها إلى المستخدم) التي تكتشف وتخفف حقن المطالبات والتحايل والسمية وتسرب البيانات الشخصية والأسرار والموضوعات المحظورة والمزيد. يمكن للماسحات أن تعقّم المحتوى أو تسجل المخاطر أو تحجب الطلبات غير الآمنة، مما يجعلها طبقة حماية عملية لتطبيقات LLM الإنتاجية.
التثبيت
| الطريقة | الأمر |
|---|
| pip | pip install llm-guard |
| مع ONNX (أسرع) | pip install "llm-guard[onnxruntime]" |
| خادم API (Docker) | قم بتشغيل صورة llm-guard-api الرسمية |
| التشغيل الأول | تنزيل نماذج الماسح (transformers) |
| التحقق | python -c "import llm_guard; print('ok')" |
مرحلتا المسح
| المرحلة | المطبقة على | الغرض |
|---|
| ماسحات الإدخال | مطالبة المستخدم | منع الإدخال الخبيث/غير الآمن من الوصول إلى النموذج |
| ماسحات الإخراج | استجابة النموذج | منع الإخراج غير الآمن/المتسرب من الوصول إلى المستخدم |
مسح الإدخال
from llm_guard import scan_prompt
from llm_guard.input_scanners import PromptInjection, Toxicity, Secrets
scanners = [PromptInjection(), Toxicity(), Secrets()]
sanitized, results, risk = scan_prompt(scanners, user_prompt)
if any(not ok for ok in results.values()):
raise ValueError("طلب غير آمن محجوب")
| العائد | المعنى |
|---|
sanitized | المطالبة (ربما معدلة) |
results | نجاح/فشل لكل ماسح |
risk | درجات مخاطر لكل ماسح (0–1) |
ماسحات الإدخال
| الماسح | يكتشف |
|---|
PromptInjection | محاولات الحقن/التحايل |
Toxicity | اللغة السامة/المسيئة |
Secrets | مفاتيح API والرموز في المطالبة |
Anonymize | البيانات الشخصية (تحذف، مع إلغاء الحذف لاحقًا) |
BanTopics | الموضوعات المحظورة |
BanSubstrings / BanCompetitors | قوائم حظر |
Code | وجود الكود / لغات محددة |
TokenLimit | المطالبات الكبيرة جدًا |
Language | اللغات غير المتوقعة |
مسح الإخراج
from llm_guard import scan_output
from llm_guard.output_scanners import NoRefusal, Sensitive, Relevance
scanners = [NoRefusal(), Sensitive(), Relevance()]
sanitized_resp, results, risk = scan_output(scanners, prompt, model_response)
ماسحات الإخراج
| الماسح | الفحوصات |
|---|
Sensitive | تسرب البيانات الشخصية/الأسرار في الاستجابة |
NoRefusal | يكتشف الرفوضات (إشارة الجودة/الحماية) |
Relevance | الاستجابة تجيب فعلاً على المطالبة |
Toxicity | إخراج سام |
Bias | محتوى متحيز |
MaliciousURLs | روابط خطيرة في الإخراج |
Deanonymize | استعيد البيانات الشخصية المحذوفة للعرض الموثوق |
FactualConsistency | الاستجابة متسقة مع السياق |
تدفق إخفاء الهوية / إزالة إخفاء الهوية للبيانات الشخصية
from llm_guard.input_scanners import Anonymize
from llm_guard.output_scanners import Deanonymize
from llm_guard.vault import Vault
vault = Vault()
safe_prompt, _, _ = scan_prompt([Anonymize(vault)], user_prompt)
# ... استدعِ النموذج مع safe_prompt ...
final, _, _ = scan_output([Deanonymize(vault)], safe_prompt, model_response)
يحتفظ Vault بالتعيين حتى يمكن استعادة الكيانات المحذوفة في الإجابة النهائية.
النشر
| الخيار | ملحوظة |
|---|
| مكتبة في العملية | استورد واستدعِ scan_prompt/scan_output |
| خادم API | llm-guard-api لبوابة محايدة اللغة |
| وقت تشغيل ONNX | استدلال CPU أسرع لنماذج الماسح |
| Config | فشل سريع والحدود ومتغيرات المطابقة لكل ماسح |
سير العمل الشائع
# غلاف حماية حول أي استدعاء LLM
def guarded_chat(user_input):
prompt, r_in, _ = scan_prompt(input_scanners, user_input)
if not all(r_in.values()):
return "الطلب محجوب بموجب سياسة الأمان."
resp = call_llm(prompt)
out, r_out, _ = scan_output(output_scanners, prompt, resp)
return out if all(r_out.values()) else "الاستجابة محتجزة بموجب سياسة الأمان."
LLM Guard مقابل الأدوات المرتبطة
| الجانب | LLM Guard | NeMo Guardrails | Garak |
|---|
| الدور | ماسحات الإدخال/الإخراج (وقت التشغيل) | قضبان الحوار البرمجية | ماسح ثغرات LLM (الاختبار) |
| التركيز | حقن وPII وسمية وأسرار | التحكم في تدفق الحوار | اختبار Red-teaming/probing |
| متى | في مسار الطلب | في مسار الطلب | اختبار ما قبل النشر |
| الأفضل لـ | حماية Drop-in | تدفقات قائمة على القواعد المعقدة | العثور على نقاط الضعف |
الموارد