
حواجز حماية قابلة للبرمجة لتطبيقات الدردشة المعتمدة على نماذج اللغة الكبيرة (LLM): فرض قيود على الإدخال/الإخراج، حظر عمليات كسر الحماية (jailbreaks) وحقن الأوامر (prompt injections)، اكتشاف الهلوسة، وإخفاء البيانات الحساسة.
أحدث إصدار / إصدار التطوير: يتتبع فرع develop أحدث تطوير في أعلى الشجرة. أحدث إصدار تم إصداره هو 0.24.1.
✨✨✨
📌 التوثيق الرسمي لمكتبة NeMo Guardrails متاح على docs.nvidia.com/nemo/guardrails.
✨✨✨
مكتبة NVIDIA NeMo Guardrails هي مجموعة أدوات مفتوحة المصدر لإضافة حواجز أمان قابلة للبرمجة بسهولة إلى التطبيقات الحوارية القائمة على نماذج اللغة الكبيرة (LLM). الحواجز (أو "rails" للاختصار) هي طرق محددة للتحكم في مخرجات نموذج اللغة الكبير، مثل عدم التحدث عن السياسة، أو الرد بطريقة معينة على طلبات مستخدم محددة، أو اتباع مسار حوار محدد مسبقًا، أو استخدام نمط لغوي معين، أو استخراج بيانات منظمة، والمزيد.
هذه الورقة البحثية تقدم مكتبة NeMo Guardrails وتحتوي على نظرة تقنية عامة للنظام والتقييم الحالي.
Python 3.10 أو 3.11 أو 3.12 أو 3.13.
للتثبيت باستخدام pip:```bash
pip install nemoguardrails
لمزيد من التعليمات التفصيلية، راجع [دليل التثبيت](https://docs.nvidia.com/nemo/guardrails/get-started/installation-guide).
## نظرة عامة
<!-- start-documentation-reuse -->
تُمكّن مكتبة NeMo Guardrails المطورين الذين يبنون تطبيقات قائمة على LLM من إضافة **حواجز قابلة للبرمجة** بين كود التطبيق وLLM.
<div align="center">
<img src="https://raw.githubusercontent.com/NVIDIA-NeMo/Guardrails/develop/docs/_static/images/programmable_guardrails.png" width="75%" alt="Programmable Guardrails">
</div>
تشمل الفوائد الرئيسية لإضافة *حواجز قابلة للبرمجة* ما يلي:
- **بناء تطبيقات LLM موثوقة وآمنة ومحمية:** يمكنك تعريف حواجز لتوجيه المحادثات وحمايتها؛ يمكنك اختيار تعريف سلوك تطبيقك القائم على LLM في موضوعات محددة ومنعه من الانخراط في مناقشات حول موضوعات غير مرغوب فيها.
- **ربط النماذج والسلاسل والخدمات الأخرى بشكل آمن:** يمكنك ربط LLM بخدمات أخرى (المعروفة أيضًا بالأدوات) بسلاسة وأمان.
- **حوار قابل للتحكم**: يمكنك توجيه LLM لاتباع مسارات محادثة محددة مسبقًا، مما يتيح لك تصميم التفاعل وفقًا لأفضل ممارسات تصميم المحادثات وتطبيق إجراءات التشغيل القياسية (مثل المصادقة والدعم).
<!-- end-documentation-reuse -->
### الحماية من ثغرات LLM
توفر مكتبة NeMo Guardrails عدة آليات لحماية تطبيق محادثة مدعوم بـ LLM من ثغرات LLM الشائعة، مثل كسر الحماية وحقن الأوامر. فيما يلي نظرة عامة نموذجية على الحماية التي توفرها تكوينات الحواجز المختلفة للمثال [ABC Bot](https://github.com/nvidia-nemo/guardrails/blob/develop/examples/bots/abc) المضمّن في هذا المستودع. لمزيد من التفاصيل، يُرجى الرجوع إلى صفحة [فحص ثغرات LLM](https://docs.nvidia.com/nemo/guardrails/evaluation/llm-vulnerability-scanning.html).
<div align="center">
<img src="https://raw.githubusercontent.com/NVIDIA-NeMo/Guardrails/develop/docs/_static/images/abc-llm-vulnerability-scan-results.png" width="500">
</div>
### حالات الاستخدام
يمكنك استخدام الحواجز القابلة للبرمجة في أنواع مختلفة من حالات الاستخدام:
1. **الإجابة على الأسئلة** عبر مجموعة من المستندات (المعروفة أيضًا بالتوليد المعزز بالاسترجاع): فرض التحقق من الحقائق ومراقبة المخرجات.
2. **المساعدون المتخصصون في مجال معين** (المعروفون أيضًا بروبوتات المحادثة): ضمان بقاء المساعد في صلب الموضوع واتباعه لمسارات المحادثة المصممة.
3. **نقاط نهاية LLM**: إضافة حواجز إلى LLM المخصص الخاص بك لتفاعل أكثر أمانًا مع العملاء.
4. **سلاسل LangChain** (اختياري): إذا كنت تستخدم LangChain لأي حالة استخدام، يمكنك إضافة طبقة حواجز حول سلاسلك. لتمكين هذا التكامل، اضبط متغير البيئة `NEMOGUARDRAILS_LLM_FRAMEWORK=langchain` أو استدعِ `set_default_framework("langchain")`.
### الاستخدام
لإضافة حواجز قابلة للبرمجة إلى تطبيقك، يمكنك استخدام واجهة برمجة تطبيقات Python أو خادم الحواجز (راجع [دليل الخادم](https://docs.nvidia.com/nemo/guardrails/get-started/integrate-into-application) لمزيد من التفاصيل). استخدام واجهة برمجة تطبيقات Python مشابه لاستخدام LLM مباشرةً. يتطلب استدعاء طبقة الحواجز بدلاً من LLM تغييرات بسيطة فقط في قاعدة الكود، ويتضمن خطوتين بسيطتين:
1. تحميل تكوين الحواجز وإنشاء نسخة `LLMRails`.
2. إجراء الاستدعاءات إلى LLM باستخدام طريقتي `generate`/`generate_async`.```python
from nemoguardrails import LLMRails, RailsConfig
# Load a guardrails configuration from the specified path.
config = RailsConfig.from_path("PATH/TO/CONFIG")
rails = LLMRails(config)
completion = rails.generate(
messages=[{"role": "user", "content": "Hello world!"}]
)
نموذج الإخراج:```json {"role": "assistant", "content": "Hi! How can I help you?"}
تنسيق الإدخال والإخراج لطريقة `generate` مشابه لـ [Chat Completions API](https://platform.openai.com/docs/guides/gpt/chat-completions-api) من OpenAI.
#### واجهة API غير المتزامنة
مكتبة NeMo Guardrails هي مجموعة أدوات غير متزامنة أولاً حيث يتم تنفيذ الآليات الأساسية باستخدام نموذج Python غير المتزامن. تحتوي الطرق العامة على نسختين متزامنة وغير متزامنة. على سبيل المثال: `LLMRails.generate` و `LLMRails.generate_async`.
### نماذج LLM المدعومة
يمكنك استخدام NeMo Guardrails مع نماذج LLM متعددة مثل OpenAI GPT-3.5 و GPT-4 و LLaMa-2 و Falcon و Vicuna أو Mosaic. لمزيد من التفاصيل، راجع قسم [نماذج LLM المدعومة](https://docs.nvidia.com/nemo/guardrails/about-nemo-guardrails-library/supported-llms) في دليل التكوين.
### أنواع Guardrails
تدعم مكتبة NeMo Guardrails خمسة أنواع رئيسية من guardrails:
<div align="center">
<img src="https://raw.githubusercontent.com/NVIDIA-NeMo/Guardrails/develop/docs/_static/images/programmable_guardrails_flow.png" width="75%" alt="Programmable Guardrails Flow">
</div>
1. **Input rails**: تُطبَّق على الإدخال من المستخدم؛ يمكن لـ input rail رفض الإدخال، مما يوقف أي معالجة إضافية، أو تعديل الإدخال (على سبيل المثال، لإخفاء بيانات قد تكون حساسة، أو لإعادة الصياغة).
2. **Dialog rails**: تؤثر على كيفية توجيه LLM؛ تعمل dialog rails على رسائل الشكل الأساسي (canonical form) للتفاصيل راجع [دليل Colang](https://docs.nvidia.com/nemo/guardrails/configure-guardrails/colang)) وتحدد ما إذا كان يجب تنفيذ إجراء، وما إذا كان يجب استدعاء LLM لتوليد الخطوة التالية أو استجابة، وما إذا كان يجب استخدام استجابة محددة مسبقًا بدلاً من ذلك، إلخ.
3. **Retrieval rails**: تُطبَّق على الأجزاء المسترجعة في حالة سيناريو RAG (Retrieval Augmented Generation)؛ يمكن لـ retrieval rail رفض جزء، مما يمنعه من استخدامه لتوجيه LLM، أو تعديل الأجزاء ذات الصلة (على سبيل المثال، لإخفاء بيانات قد تكون حساسة).