چیتشیت
گاردریلها، نظارت و پاکسازی دادههای حساس
Guardrails, Moderation and Redaction
بررسی ورودی و خروجی، مسیریابی احکام ارزیابی طبقهبندیکننده، پاکسازی اسپنها و کنترل فراخوانی ابزارها. پایتون و Rust از درسها.
فهرست مطالب
بررسیهای گاردریل
کار و کد| وظیفه | کد |
|---|---|
| یافتن الگوهای تزریق پرامپت | detect_injection(text) |
| یافتن اطلاعات هویتی حساس (PII) در ورودی | detect_pii(text) |
| تعیین سقف اندازه پرامپت | check_length(text, max_chars=5000, max_words=1000) |
| مسدودسازی خروجی سمی | filter_toxicity(text) |
| پاکسازی دادههای حساس (PII) در خروجی | scrubbed, result = scrub_pii_from_output(text) |
| بررسی پاسخدهی خروجی به ورودی | check_relevance(input_text, output_text, threshold=0.15) |
| تشخیص بازتاب پرامپت سیستم | check_system_prompt_leak(output_text, system_prompt, threshold=0.4) |
| اجرای تمام بررسیها پیرامون مدل | pipeline.process(attack) |
پشته فیلترها
گامبهگام- بررسی طولرد ورودی بالای 5000 کاراکتر. بررسی طول هزینهای ندارد.
- محدودیت نرخ درخواستمجاز بودن 10 درخواست بر دقیقه برای هر کاربر.
- طبقهبندیکننده موضوعرد ورودیهای نامرتبط پیش از رسیدن به مدل.
- شناساگر PIIپاکسازی یا رد اطلاعات شخصی.
- شناساگر تزریق پرامپتتاخیر طبقهبندیکنندهها بین 5 تا 20 میلیثانیه.
- مدل زبانی بزرگ (LLM)تاخیر فراخوانی بین 200 تا 2000 میلیثانیه.
- فیلتر سمیت محتواطبقهبندی تمامی خروجیها.
- پاککننده PII و بررسی مرتبط بودنپاکسازی دادههای حساس، سپس بررسی تناسب پاسخ با سوال.
فراخوانی API نظارت
کدpython
from openai import OpenAI
client = OpenAI()
response = client.moderations.create(
model="omni-moderation-latest", # متن و تصویر در یک فراخوانی
input="<text>",
)
result = response.results[0]
print(result.flagged) # مقدار True در صورت فعالشدن یک دسته
آستانهها در کد
پیشفرضها| تنظیم | پیشفرض | نکته |
|---|---|---|
`check_length` `max_chars` | 5000 | همچنین max_words با مقدار 1000 |
`detect_injection` block at | 0.75 | حداکثر اطمینان الگو |
`filter_toxicity` block at | 0.80 | حداکثر اطمینان دسته |
`check_relevance` `threshold` | 0.15 | قبول در مقدار یا بالاتر |
`check_system_prompt_leak` `threshold` | 0.4 | قبول در مقادیر پایینتر |
`input_moderator` `threshold` | 0.5 | یکسان برای output_moderator |
`InstructionLeakageClassifier` `threshold` | 0.55 | شباهت کسینوسی تریگرام |
_NEGATION_WINDOW | 20 | کاراکترهای بررسیشده برای not، never، no |
مقایسه سیستمهای نظارت در کنار هم
مقایسه| فاکتور | نظارت OpenAI | سیستم Llama Guard | سرویس Perspective API |
|---|---|---|---|
| مدل | omni-moderation-latest و GPT-4o | پایه Llama-3.1-8B (نسخه v3) | امتیازدهی سمیت محتوا پیش از LLM |
| دستهها | 13 مقدار بولی | S1 تا S14 در نسخه v4 | دسته TOXICITY و 5 نوع مشتق |
| ورودی | متن و تصویر | نسخه v4: تصویر و متن | متن |
| زبانها | 42٪ بهبود چندزبانه | 8 زبان (در نسخه v3) | اعلامنشده |
| هزینه | رایگان برای اغلب توسعهدهندگان | وزنهای باز | خط مبنا پژوهشی |
| موارد استفاده | نیاز به API میزبانیشده | میزبانی شخصی، سوءاستفاده از کد S14 | مقایسه با کارهای پژوهشی |
قوانین شدت تهدید
مفهومها- زیاد (high)
- مسدودسازی. حذف خروجی و بازگرداندن امتناع مدل به دلیل سیاستها.
- متوسط (medium)
- پاکسازی دادههای حساس. اعمال پاکساز هر طبقهبندیکننده.
- کم (low)
- هشدار. ثبت در لاگ و افزودن یک تذکر ملایم.
- هیچ (none)
- ثبت در لاگ. ارسال مستقیم و دستنخوردهی خروجی.
- اولویت با بالاترین شدت
- پاکسازی بعلاوه هشدار نتیجهاش پاکسازی است.
- اطلاعات هویتی (pii)
- شماره ملی (ssn) یا کارت بانکی، زیاد است. سه مورد یافتهشده یا ایمیل، متوسط است.
- نشت دستورالعمل (instruction-leakage)
- 0.85 زیاد، 0.70 متوسط، 0.55 کم.
- سمیت محتوا (toxicity)
- 3 تطابق زیاد، 2 متوسط، 1 کم.
مسیریاب خروجی
معماریعیبیابی
عیبیابیدرخواست حاوی قاچاق اموجی تایید میشود
- علت
- توکنایزر اموجیها را به شکل متفاوتی ادغام میکند
- راهحل
- افزودن مرحله نرمالسازی
حروف همشکل سیریلیک رد میشوند
- علت
- طبقهبندیکننده فقط روی زبان انگلیسی آموزش دیده است
- راهحل
normalize(text): نگاشت نویسه همشکل، NFKC
حمله انکودینگ نفوذ میکند
- علت
- فقط نظارت بر ورودی اعمال شده است
- راهحل
- افزودن نظارت بر خروجی
تمام ورودیها به مدل ارسال میشوند
- علت
- فقط نظارت بر خروجی اعمال شده است
- راهحل
- افزودن نظارت بر ورودی
عبارت «تو یک توهین نیستی» قاعده را فعال میکند
- علت
- بررسی منفیشدن وجود ندارد
- راهحل
- افزودن پنجره بررسی نفی پیش از تطابق
بقیه یک اسپن بزرگ دیده میشود
- علت
- تطابق کوچک و تودرتو حذف شده است
- راهحل
- ادغام اسپنهای دارای تقاطع در یک اسپن مشترک
فایروال فراخوانی ابزار
گامبهگام- فراخوانیتابع
call(line, max_bytes)ورودیid|role|tool|argumentرا تفکیک کرده و کاراکترهای کنترلی را رد میکند. - تصمیممقدار
readبرابرAllowاست. مقدارwriteدر نقش ویراستار برابرApprovalRequiredاست. سایر نقشهاDenyهستند. - اعتبارسنجیتاییدیه باید دقیقاً برابر کل فراخوانی و مصرفنشده باشد، وگرنه خطای
Error::Conflictمیدهد. - ارسالمقصد باید یک فایل موجود و محصور باشد. محتوا حداکثر 16384 بایت باشد.
- بازرسییک سطر تبدار به ازای هر شناسه درخواست. شناسه تکراری خطای
Error::Conflictمیدهد.
رابط API کنترل پاکسازی دادههای حساس
کار و کد| وظیفه | کد |
|---|---|
| یافتن اسپنهای EMAIL، IPV4 و LITERAL | detect(text, literals=()) |
| اتصال اسپنهای دارای همپوشانی | merge_spans(spans, text_length) |
جایگزینی با [REDACTED] | redact(text, literals=()) |
| بررسی حداکثر 10000 رکورد | process(records, literals=()) |
| رندر دفتر کل آفستها | render_html(report) |
اجرای پروژهها
دستورها| دستور | عملکرد |
|---|---|
python3 scripts/project_test.py <project> --init learning-artifacts/<project> | ساخت میز کار برای یادگیرنده |
python3 scripts/project_test.py <project> --all --solution --strict | تست کد مرجع |
python3 cli.py samples/input.jsonl --literals samples/literals.json --output demo-output | نوشتن redacted.jsonl، receipt.json و review.html |
rustc --edition=2021 <dir>/cli.rs -o <dir>/firewall | بیلد ابزار خط فرمان فایروال |
<dir>/firewall <root> reader r1 read notes.md | خواندن یک فایل از مسیر گیت |
پرسش و پاسخ
پرسش و پاسخ- چرا ورودی و خروجی هر دو بررسی شوند؟
- مهاجمان برای دور زدن تکتک لایهها راهی پیدا میکنند.
- آیا یک گارد طبقهبندیکننده کافی است؟
- خیر. حمله قاچاق اموجی روی شش سیستم گارد به 100٪ ASR رسید.
- نقش کاربر از کجا تامین میشود؟
- توسط برنامهی فراخواننده. مدل فقط عملیات را تعیین میکند.
- آیا بررسی خروجی تاخیر ایجاد میکند؟
- آن را همگام با استریمینگ توکنها اجرا کنید. چانک پایانی را بافر کنید.