فاز 19 · درس 85

یکپارچه‌سازی کلاسیفایرهای خروجی مدل‌های زبانی با مسیریاب خط‌مشی

نوع
ساختنی
زمان
حدود 90 دقیقه
زبان‌ها
Python
پیش‌نیاز
درس‌های ایمنی فاز 18، فاز 19 مسیر الف درس‌های 25 تا 29
یک سیستم کنترل و بازرسی شبیه گیت در خط تولید که بسته‌ها را بررسی، فیلتر و هدایت می‌کند
فهرست مطالب
  1. صورت مسئله
  2. مبانی نظری
  3. پیاده‌سازی از صفر
  4. استفاده از ابزارهای واقعی
  5. خروجی این درس
  6. تمرین‌ها
  7. اصطلاحات کلیدی
  8. برای مطالعه‌ی بیشتر

فیلتر کردن ورودی کاربر به‌تنهایی برای تضمین سلامت پاسخ‌های مدل زبانی کافی نیست. حتی اگر پرامپت کاربر کاملاً بی‌خطر باشد، مدل ممکن است در پاسخ دچار توهم شود، اطلاعات هویتی و خصوصی (PII) موجود در داده‌های آموزش را لو دهد، الفاظ نامناسب تولید کند یا پرامپت محرمانه‌ی سیستم (System Prompt) را برملا سازد. تکیه بر بررسی‌های ورودی، در برابر روش‌های دورزدن جدید آسیب‌پذیر است و داشتن یک لایه‌ی نظارت مستقل روی خروجی مدل ضرورتی جدی به شمار می‌آید.

در این درس یاد می‌گیرید چگونه سه کلاسیفایر سمت خروجی (تشخیص مسمومیت، تشخیص PII و بررسی نشت دستورالعمل) را همراه با سازوکارهای اختصاصی پاک‌سازی داده‌ها پیاده‌سازی کنید. همچنین یک مسیریاب خط‌مشی (Policy Router) واحد می‌سازید که با تجمیع احکام مختلف، شدت ریسک را ارزیابی کرده و اقدامات لازم نظیر مسدودسازی، پاک‌سازی، هشدار یا ثبت لاگ را روی خروجی نهایی مدل اعمال کند.

کلاسیفایرهای بخش خروجی به پرسش متفاوتی نسبت به قوانین بخش ورودی پاسخ می‌دهند. هر دو به یک مسیریاب خط‌مشی نیاز دارند.

صورت مسئله

ورودی‌ها تنها سطح حمله (attack surface) نیستند. مدلی که از تمام بررسی‌های ورودی با موفقیت عبور کرده، همچنان می‌تواند خروجی نامناسبی تولید کند: اطلاعات هویتی حساس (PII) را لو بدهد، توهین‌های برگرفته از توزیع داده‌های آموزش خود را تکرار کند، یا در پاسخ به یک پرسش هوشمندانه، پرامپت سیستم را عیناً به کاربر پس بدهد. کلاسیفایر سمت خروجی، پاسخ واقعی مدل را می‌بیند، نه پرامپت کاربر را؛ بنابراین پرسش متفاوتی مطرح می‌کند: فارغ از اینکه این پرامپت چطور به اینجا رسیده، آیا آنچه قصد داریم به کاربر تحویل دهیم قابل قبول است؟

تیم‌ها اغلب از کلاسیفیکیشن خروجی صرف‌نظر می‌کنند، چون تصور می‌کنند بررسی‌های ورودی کفایت می‌کند و کلاسیفایرهای خروجی تاخیر (latency) اضافه به بار می‌آورند. هر دو استدلال مردود است. نادیده گرفتن کلاسیفیکیشن خروجی، یک راه دورزدن تک‌ضرب به مهاجم می‌دهد: هر دسته‌ی جدید از حملات که پایپ‌لاین ورودی پوشش ندهد، مستقیماً به دست کاربر می‌رسد. تاخیر مسئله‌ای واقعی است اما راه‌حل دارد: کلاسیفایرها می‌توانند به موازات استریمینگ توکن‌ها اجرا شوند؛ به این ترتیب که گیت، چانک نهایی را بافر می‌کند و حکم کلاسیفایر را درست پیش از ارسال (flush) روی آن اعمال می‌کند.

این پروژه‌ی پایانی، سه کلاسیفایر مستقل سمت خروجی را پشت یک مسیریاب خط‌مشی (policy router) واحد به هم متصل می‌کند: مسمومیت کلامی یا Toxicity (تشخیص مبتنی بر قانون کلمات رکیک و آزار کلامی)، اطلاعات هویتی یا PII (رجکس برای ایمیل، شماره تلفن، رشته‌های شبیه کدملی/SSN، شماره کارت اعتباری و آدرس IP) و نشت دستورالعمل یا Instruction leakage (یک روش هیوریستیک برای بازگویی پرامپت سیستم، از طریق مقایسه‌ی همپوشانی ترای‌گرام بین خروجی و پرامپت سیستم مشخص). مسیریاب، احکام کلاسیفایرها را جمع‌آوری کرده، سطح شدت (severity) را تعیین می‌کند و خط‌مشی اقدام را پیش می‌گیرد: مسدودسازی (block)، پاک‌سازی داده‌های حساس (redact)، هشدار (warn) یا ثبت لاگ (log).

مبانی نظری

هر کلاسیفایر یک شیء قابل‌فراخوانی (callable) است که خروجی آن یک ClassifierVerdict شامل نام (name)، امتیاز (score in [0,1])، شدت (severity با مقادیر none، low، medium، high) و یافته‌ها (findings به شکل فهرستی از رشته‌های توصیف‌کننده‌ی موارد مشکوک) است. مسیریاب فهرستی از این احکام را می‌گیرد و جدول قوانین زیر را اعمال می‌کند:

شدت اقدام
high مسدودسازی (حذف کامل خروجی و بازگرداندن امتناع مدل مبتنی بر خط‌مشی)
medium پاک‌سازی داده‌های حساس (اعمال ابزار پاک‌سازیِ مربوط به هر کلاسیفایر روی خروجی)
low هشدار (ثبت لاگ و افزودن یک متن هشدار ملایم به انتهای پاسخ)
none ثبت لاگ (ذخیره‌ی حکم در ردگیری محاسبات و ارسال خروجی بدون تغییر)
حداکثر شدت = بالاحداکثر شدت = متوسطحداکثر شدت = پایینحداکثر شدت = بدون موردخروجی مدلمحتوای سمیاطلاعات هویتی PIIنشت راه‌حل دستورالعملمسیریابمسدودسازیسانسورهشدارثبت در لاگ

مسیریاب بالاترین شدت را میان تمام کلاسیفایرها در نظر می‌گیرد و اقدام متناظر با آن را اجرا می‌کند. مسدودسازی همیشه برنده است. ترکیب پاک‌سازی + هشدار، به پاک‌سازی تبدیل می‌شود. ترکیب لاگ + هشدار، خروجی هشدار خواهد داشت. مسیریاب یک شیء Action شامل موارد verb، output، severity، verdicts و metadata صادر می‌کند. در پایین‌دست، گیت ایمنی درس 87 این فراداده را در یک ردگیری محاسبات (trace) ثبت می‌کند و سپس یکی از این سه کار را انجام می‌دهد: ارسال خروجی پاک‌سازی‌شده، ارسال متن اصلی همراه با هشدار، یا جایگزینی خروجی با امتناع مدل (refusal).

هر کلاسیفایر منطق پاک‌سازی خاص خود را دارد. کلاسیفایر PII آدرس name@example.com را با [redacted-email] و ارقام مشابه کارت اعتباری را با [redacted-card] جایگزین می‌کند. کلاسیفایر نشت دستورالعمل، خطوطی را که شبیه هدر پرامپت سیستم باشند حذف می‌کند. کلاسیفایر مسمومیت کلامی نیز واژه‌های رکیکِ شناسایی‌شده را با [redacted-language] جایگزین می‌کند. این پاک‌سازی‌ها مستقل از یکدیگرند؛ بنابراین متنی که هم حاوی مسمومیت کلامی و هم PII باشد، از فیلتر هر دو پاک‌ساز عبور می‌کند.

کلاسیفایر مسمومیت کلامی عمداً مبتنی بر قانون طراحی شده است: فهرستی گلچین‌شده از کلیدواژه‌های آزاردهنده با تطبیق مرز فاصله (whitespace-bounded) و یک بررسی پنجره‌ی نفی کوتاه، تا عبارتی مانند «you are not a slur» به اشتباه این قاعده را فعال نکند. این فهرست آگاهانه کوتاه نگه داشته شده است (هدف این درس ساخت لوله‌کشی و زیرساخت اتصالات است، نه فرهنگ واژگان جامع). کلاسیفایر PII از رجکس‌های استاندارد برای الگوهای رایج استفاده می‌کند. کلاسیفایر نشت دستورالعمل، هنگام ساخت یک پارامتر system_prompt دریافت می‌کند و میزان همپوشانی ترای‌گرام (trigram) آن را با خروجی می‌سنجد؛ همپوشانی بالا نشانه‌ی نشت است.

مسیریاب خط‌مشی خروجیطبقه‌بندها ← شدت ← اقدام
OUTPUT POLICY ROUTERInput checks are not enough; an output-side classifier sees the actual response and asks if it is safe to ship. Three independent classifiers (toxicity, PII, leakage) return a severity, and the router picks the action by the worst finding: log, warn, redact, or block. Classifiers run in parallel with streaming so the latency hides behind the final flush.خروجی مدل ← اجرای موازی سه طبقه‌بندخط‌مشیمسیریابسمیتتوهین / آزارPIIایمیل · کدملی · کارتنشت راه‌حلبازگویی پرامپت سیستمثبتهشدارسانسورمسدودسازیشدت ← اقدام
بررسی‌های ورودی کافی نیستند؛ یک طبقه‌بند در سمت خروجی، پاسخ واقعی را می‌بیند و امکان ارسال امن آن را ارزیابی می‌کند. سه طبقه‌بند مستقل (سمیت، PII و نشت راه‌حل) میزان شدت را برمی‌گردانند و مسیریاب بر اساس بدترین نتیجه، اقدام لازم را انتخاب می‌کند: ثبت، هشدار، سانسور یا مسدودسازی. طبقه‌بندها به صورت موازی با استریمینگ اجرا می‌شوند تا تاخیر پشت ارسال نهایی پنهان شود.

پیاده‌سازی از صفر

فایل code/classifiers.py هر سه کلاسیفایر را تعریف می‌کند. هر کدام متدی به صورت classify(text) -> ClassifierVerdict و متد دیگری با امضای redact(text) -> str دارند. فایل code/main.py کلاس Router را همراه با متد decide(text, verdicts) -> Action و میان‌بر run(text) -> Action پیاده‌سازی می‌کند. کد نمایشی، این سه کلاسیفایر را پشت یک مسیریاب واحد قرار می‌دهد و مجموعه‌ای از خروجی‌های آزمایشی را روی آن اجرا می‌کند تا تمام سطوح شدت را به چالش بکشد.

استفاده از ابزارهای واقعی

دستور python3 main.py را اجرا کنید. برنامه، نوع اقدام (verb) را برای هر خروجی تستی چاپ می‌کند، گزارش را در outputs/classifier_report.json می‌نویسد و تأیید می‌کند که هر یک از حالت‌های block، redact، warn و log حداقل روی یکی از سناریوهای تستی اجرا شده باشند. در اینجا تاخیر به‌طور ساختگی صفر است، چون تمام کلاسیفایرها بر پایه‌ی قوانین نوشته شده‌اند؛ اما برای یک مدل واقعی با کلاسیفایرهای عصبی، پس از بالا رفتن تاخیر هر کلاسیفایر نیز دقیقاً همین ساختار اتصالات به کار می‌رود.

خروجی این درس

مستند outputs/skill-content-classifier-integration.md ساختارهای داده‌ای مربوط به حکم (verdict) و اقدام (action) را ثبت می‌کند تا گیت ایمنی درس 87 بتواند از آن‌ها استفاده کند.

تمرین‌ها

  1. یک کلاسیفایر چهارم برای تزریق کد (code injection) اضافه کنید (خروجی‌هایی که شامل <script>، eval( و موارد مشابه باشند). خط‌مشی شدت آن را مشخص کرده و در پایپ‌لاین ادغام کنید.
  2. مسیریاب را به شکلی تغییر دهید که وزن شدت را به تفکیک کلاسیفایرها اعمال کند؛ طوری که PII اولویت بالاتری نسبت به مسمومیت کلامی داشته باشد. اثر این تغییر را روی همان داده‌های آزمایشی نشان دهید.
  3. یک آستانه (threshold) اطمینان اضافه کنید تا احکامی که امتیاز پایینی دارند، یک درجه در سطح شدت تنزل پیدا کنند. این آستانه را تغییر دهید و بررسی کنید که نرخ مسدودسازی (block rate) چه تغییری می‌کند.

اصطلاحات کلیدی

اصطلاح کاربرد رایج معنای دقیق
output classifier (کلاسیفایر خروجی) مدلی که خروجی‌های نامناسب را تشخیص می‌دهد شیئی قابل‌فراخوانی که یک حکم ساختاریافته (شامل شدت، امتیاز و یافته‌ها) همراه با ابزار پاک‌سازی برمی‌گرداند
severity (شدت) میزان نامناسب بودن محتوا یکی از مقادیر none، low، medium یا high
router (مسیریاب) یک سوییچ یا انشعاب‌دهنده تابعی که فهرستی از احکام را گرفته و اقدام مناسب (block، redact، warn، log) را برمی‌گرداند
redact (پاک‌سازی داده‌های حساس) پنهان کردن بخش‌های نامناسب جایگزینی اسپن‌های منطبق‌شده با برچسب‌هایی نظیر [redacted-pii] به ازای هر کلاسیفایر
instruction leakage (نشت دستورالعمل) مدل پرامپت سیستم را لو می‌دهد یک روش هیوریستیک که خروجی مدل را بر اساس همپوشانی ترای‌گرام با پرامپت سیستم مشخص مقایسه می‌کند

برای مطالعه‌ی بیشتر

درس 86 یک موتور قوانین بیانی (declarative rules engine) برای محدودیت‌هایی اضافه می‌کند که ذاتاً در قالب کلاسیفایر نمی‌گنجند. در درس 87، هر دوی این ابزارها با دتکتور بخش ورودی ترکیب خواهند شد.

خودآزمایی

به سؤال‌ها جواب بدهید تا ببینید چقدر از درس در ذهنتان مانده است.

  1. پیش از درساگر ورودی از قبل بررسی شده باشد، چرا باید طبقه‌بندهای سمت خروجی را اجرا کنیم؟
  2. پیش از درسکدام سه طبقه‌بند در این درس پیاده‌سازی و متصل شده‌اند؟
  3. حین درسوقتی یک خروجی شدت بالا و دیگری شدت متوسط دارد، مسیریاب چه کار می‌کند؟
  4. حین درسچرا در طبقه‌بند PII از بررسی الگوریتم لون (Luhn) استفاده می‌شود؟
  5. حین درسطبقه‌بند نشت دستورالعمل چگونه تصمیم‌گیری می‌کند؟
  6. پس از درسچرا طبقه‌بند سمیت وجود کلمات منفی‌کننده را در یک پنجره کوچک در سمت چپ بررسی می‌کند؟

سؤالات متداول

چرا فیلتر کردن ورودی کاربر برای جلوگیری از پاسخ‌های مخرب کافی نیست؟

چون مدلی که از تمام بررسی‌های ورودی عبور کرده نیز ممکن است تحت‌تأثیر پرامپت‌های ترکیبی یا داده‌های آموزشی خود، اطلاعات حساس (PII)، کلمات نامناسب یا پرامپت سیستم را در خروجی پس بدهد.

چگونه می‌توان تاخیر اضافه ناشی از بررسی خروجی مدل را مدیریت کرد؟

می‌توان کلاسیفایرها را به‌صورت موازی با استریم توکن‌ها اجرا کرد و صرفاً چانک نهایی را پیش از ارسال به کاربر بافر کرد تا حکم نهایی کلاسیفایر روی آن اعمال شود.

مسیریاب خط‌مشی (Policy Router) هنگام دریافت چند حکم متفاوت چه تصمیمی می‌گیرد؟

مسیریاب بالاترین شدت (Severity) را انتخاب می‌کند؛ به این معنا که مسدودسازی (Block) بر تمام موارد اولویت دارد و ترکیب پاک‌سازی با هشدار نیز به پاک‌سازی خروجی ختم می‌شود.

ما رو توی گوگل بیشتر ببین

با افزودن نکست ادمین به «منابع ترجیحی» گوگل، درس‌ها و مطالب ما را در بخش اخبار برتر جستجو بیشتر می‌بینید.