تنظیم ایمنی مدلهای زبانی مثل راهرفتن روی لبهی تیغ است؛ مدلی که بیش از حد سختگیر باشد به درخواستهای عادی و علمی کاربران پاسخ نمیدهد و مدلی که بیش از حد پاسخگو باشد، راهکارهای خرابکارانه را فاش میکند. سنجش این تعادل نمیتواند بر پایهی آزمونهای دستی یا حدس و گمان باشد، بلکه به معیارهای شفاف و عددی نیاز دارد.
در این درس یک چارچوب ارزیابی قطعی میسازید که نرخ امتناع افراطی (Over-refusal)، امتناع تفریطی (Under-refusal) و خطای کالیبراسیون (ECE) را جداگانه اندازه میگیرد تا تغییرات پرامپت یا تنظیمات سیستم باعث افت کیفیت محصول نشوند.
تمام کدهای این درس روی رایانهی شخصی و با پایتون استاندارد بهصورت کاملاً محلی اجرا میشوند؛ بنابراین به سختافزار خاص یا فراخوانی سرویسهای پردازش ابری نیازی ندارید.
مفید بودن در پاسخ به پرامپتهای بیخطر و امتناع در برابر پرامپتهای مخرب، دو معیار جداگانهاند نه یکی. هر دو را اندازه بگیرید.
صورت مسئله
ارزیابی ایمنی یک دستیار ممکن است به دو شکل کاملاً متضاد خراب شود: یا مدل به چیزهایی که باید جواب بدهد پاسخ نمیدهد (امتناع افراطی یا over-refusal)، یا به چیزهایی که باید رد کند پاسخ میدهد (امتناع تفریطی یا under-refusal). هر دوی این حالتها باگ محسوب میشوند. تیمهایی که فقط نرخ امتناع در برابر پرامپتهای مخرب را اندازه میگیرند، مدلی منتشر میکنند که از حل تکالیف شیمی هم سر باز میزند. تیمهایی هم که فقط مفید بودن (helpfulness) را میسنجند، مدلی به دست کاربر میرسانند که شیوههای آسیب زدن را آموزش میدهد. مجموعهمعیار درست، با دستیار مثل یک طبقهبند باینری برای ایمنی پرامپتها برخورد میکند؛ جایی که سیاست امنیتیِ تحت آزمون تعیین میکند هر پرامپت در کدام سمت مرز تصمیمگیری (decision boundary) مینشیند.
چالش اصلی این است که در طول فرایند توسعه، یک مدل زبانی بزرگ واقعی مدام در حال تغییر است. تغییر در پرامپت سیستم، تغییر پارامتر دما (temperature) یا تعویض یک ابزار، هر دو معیار را همزمان جابهجا میکند. شما به یک ارزیاب مبتنی بر دادههای ثابت (fixture) نیاز دارید که زیر پوستهاش یک مدل ساختگیِ (mock LLM) قطعی کار کند؛ به این ترتیب، با هر تغییر در کد، معیارها به دلیلی کاملاً مشخص جابهجا میشوند. مدل ساختگی در این درس یک جدول ارسال (dispatch table) جمعوجور است: الگو، سیاست، خروجی. در بستر آزمایشی (harness) درس 87، این مدل ساختگی با یک فراخوانی HTTP جایگزین میشود تا پای مدل واقعی به میان بیاید؛ اما چارچوب سنجش معیارها تغییری نمیکند.
در این درس، این چارچوب ارزیابی را میسازیم. خروجی آن چهار عدد خواهد بود: نرخ امتناع تفریطی، نرخ امتناع افراطی، کالیبراسیون (آیا اطمینان اعلامشده از سوی مدل با دقت واقعیاش همخوانی دارد؟) و تفکیک نتایج بر اساس هر دسته با استفاده از دستهبندی موضوعی (taxonomy) درس 82.
مفهوم
یک ارزیابی امتناع از چهار شیء تشکیل میشود: یک مجموعه پرامپت با برچسبهای safe/unsafe، یک مدل ساختگی با سیاستی ازپیشتعیینشده، یک طبقهبندِ امتناع روی خروجی مدل (رجکس روی عبارتهایی مثل I cannot، I will not و as a responsible) و یک تجمیعکنندهی معیارها.
سیاستهای مدل ساختگی عمداً ساده طراحی شدهاند تا آزمونها شفاف و قابل بازبینی باشند. سیاست پیشفرض MockPolicyStrict در برابر هر پرامپتی که با هر یک از الگوهای رجکسِ فهرست ممنوعه همخوانی داشته باشد امتناع میکند و به بقیه پاسخ میدهد. سیاست MockPolicyOverCautious روی دامنهی بسیار گستردهتری از الگوها امتناع نشان میدهد تا عمداً دچار امتناع افراطی شود. سیاست MockPolicyLeaky تنها در واضحترین موارد امتناع میکند تا عمداً به امتناع تفریطی دچار شود. این سه سیاست در اصل باگهای ازپیشنوشتهشدهای هستند که چارچوب سنجش باید آنها را شناسایی کند.
امتناع تفریطی: مدل به پرامپتی که در مجموعهی دادهها برچسب unsafe خورده، پاسخ داده است (هیچ عبارت امتناعی در خروجی نیست). امتناع افراطی: مدل در برابر پرامپتی که برچسب safe دارد، امتناع کرده است (عبارت امتناع در پاسخ دیده میشود). این بستر آزمایشی فرمول accuracy = (TP + TN) / total را هم محاسبه میکند؛ جایی که TP یعنی «پرامپت ناامن که بهدرستی رد شده» و TN یعنی «پرامپت امن که بهدرستی پاسخ داده شده است».
سنجش کالیبراسیون با معیار خطای کالیبراسیون مورد انتظار (Expected Calibration Error یا ECE) روی میزان اطمینانِ اعلامشدهی مدل انجام میشود. مدل ساختگی میتواند به شکل اختیاری یک توکن confidence:0.X در خروجیاش بگذارد و بستر آزمایشی آن را پارس میکند. ECE پرامپتها را بر اساس میزان اطمینان در دستههای دهتایی تقسیمبندی میکند، دقت هر بازه را جداگانه به دست میآورد و میانگینِ وزنی |conf - accuracy| را بر اساس اندازهی هر بازه حساب میکند. مدلی که بگوید confidence:0.9 اما فقط در 60% مواقع درست بگوید، در آن بازه ECE حدود 0.3 خواهد داشت. ECE کاملاً مستقل از امتناع افراطی یا تفریطی است، چون میسنجد که آیا مدل میداند چه زمانی درست میگوید یا نه.
تفکیک بر اساس هر دسته، پرامپتهای برچسبدار را به دستسازهی دستهبندی موضوعی درس 82 متصل میکند. هر پرامپت ناامن برچسب یکی از آن شش دسته را دارد. بستر آزمایشی، نرخ امتناع تفریطی را برای هر دسته گزارش میکند تا تیم ببیند مثلاً مدل در برابر دستهی instruction-override عملکرد خوبی دارد، ولی در مواجهه با multi-turn-ramp میلغزد.
پیادهسازی
فایل code/mock_llm.py سه سیاست مختلف را تعریف میکند. هر سیاست یک شیء فراخوانپذیر (callable) است که پرامپت را به یک رشتهی پاسخ نگاشت میکند. در این پاسخ، میزان اطمینان مدل در قالب [conf=0.X] گنجانده شده است. فایل code/prompts.py مجموعهای از دادههای برچسبدار است: 25 پرامپت ناامن (برگرفته از دستهبندی موضوعی درس 82 بر اساس شناسه) به همراه 30 پرامپت امن (درخواستهای بیخطرِ روزمره، بدون هیچ همپوشانی با مجموعهی بیخطر درس 83 تا این دو ارزیابی کاملاً مستقل از هم بمانند).
اسکریپت code/main.py ارزیاب را اجرا میکند. طبقهبندِ امتناع در واقع یک عبارت منظم از عبارات امتناع مدل است. تجمیعکننده یک دیکشنری شامل under_refusal، over_refusal، accuracy، ece و per_category_under_refusal برمیگرداند. اجراکننده، هر سه سیاست مدل ساختگی را ارزیابی میکند و یک گزارش مقایسهای مینویسد.
استفاده
دستور python3 main.py را اجرا کنید. این دمو جدولی برای مقایسهی هر سه سیاست چاپ میکند، فایل outputs/refusal_eval_report.json را مینویسد و تأیید میکند که MockPolicyOverCautious بیشترین امتناع افراطی و MockPolicyLeaky بیشترین امتناع تفریطی را ثبت کردهاند. سیاست سختگیرانه (strict) جایی میان این دو مینشیند؛ این همان خط مبنای (baseline) رگرسیون ماست.
تحویل
مستند outputs/skill-refusal-evaluation.md تعاریف این معیارها را مستند میکند تا کاربری که در مراحل بعدی از گزارش استفاده میکند، دچار سوءبرداشت از اعداد نشود.
تمرینها
- سیاست ساختگی چهارمی اضافه کنید که مبنای امتناع آن طول پرامپت باشد. بررسی کنید که آیا نرخ امتناع تفریطی در حملات کدگذاریشده (که معمولاً طول کوتاهتری دارند) افزایش مییابد یا خیر.
- بهجای ECE از منحنیهای قابلیت اطمینان (reliability curves) استفاده کنید و برای هر سیاست یک نمودار رسم کنید. دقت کنید کدام بازهها دچار اطمینان کاذب (over-confident) هستند.
- یک فهرست از پرامپتهای امنِ تفکیکشده بر اساس دسته اضافه کنید (مثل نقشآفرینیهای بیخطر یا دستورات عادی دربارهی محتوای پیشین). نرخ امتناع افراطی را به تفکیک دستهها حساب کنید و ببینید آیا سناریوهای نقشآفرینی بیشترین امتناع کاذب را به خود اختصاص میدهند یا نه.
اصطلاحات کلیدی
| اصطلاح | کاربرد عامیانه | معنای دقیق |
|---|---|---|
| امتناع تفریطی (under-refusal) | مدل مفید است | مدل به پرامپتی پاسخ داده که برچسب ناامن دارد |
| امتناع افراطی (over-refusal) | مدل ایمن است | مدل در برابر پرامپتی امتناع کرده که برچسب امن دارد |
| کالیبراسیون (calibration) | مدل متواضع است | فاصلهی بین اطمینانِ اعلامشده و دقت مشاهدهشده، که با خطای کالیبراسیون مورد انتظار خلاصه میشود |
| دقت (accuracy) | کیفیت | حاصل (TP + TN) / total برای تصمیمگیری باینری امن/ناامن |
| تفکیک بر اساس هر دسته (per-category breakdown) | یک نمودار | نرخ امتناع تفریطی پیوندخورده با دستههای موضوعی درس 82 |
مطالعهی بیشتر
درس 85 (طبقهبند خروجی) و درس 87 (دروازهی ارزیابی سرتاسری) از چارچوب معیارهایی که در این درس ساختیم استفاده میکنند.
