در پروژههای واقعی هوش مصنوعی، تکیه بر یک فیلتر ورودی ساده یا اعتماد محض به امتناع درونی مدل زبانی کافی نیست. حملات تزریق پرامپت، دور زدن محدودیتها با ترفندهای انکودینگ و تولید پاسخهای ناامن نیازمند رویکردی چندلایهاند. اگر لایههای مختلف امنیتی در زمان مناسب از چرخهی حیات درخواست اجرا نشوند یا منطق مشخصی برای زمان اختلاف نظر آنها وجود نداشته باشد، کل سامانه آسیبپذیر خواهد شد.
در این درس نهایی، تمام اجزای مستقلی را که در درسهای پیشین طراحی کردیم (شناساگر ورودی، دستهبند خروجی و موتور قوانین) در قالب یک «گیت ایمنی» (Safety Gate) سرتاسری و یکپارچه در سه چکپوینت پیش از تولید، حین تولید و پس از تولید سازماندهی میکنیم تا به یک تصمیم قاطع، قابلاتکا و قابلردگیری برای هر درخواست برسیم.
پیش از تولید، حین تولید، پس از تولید. سه چکپوینت، یک حکم نهایی، و یک ردگیری محاسبات (audit trail) به ازای هر درخواست.
صورتمسئله
درسهای 82 تا 86 این سرفصل هر کدام یک قطعهی مجزا تحویل دادند: یک ردهبندی، یک شناساگر ورودی، یک چارچوب ارزیابی، یک دستهبند خروجی، و یک موتور قوانین. اما یک گیت ایمنی (safety gate) واقعی باید قطعات محیط اجرا (شناساگر درس 83، دستهبند درس 85، و موتور قوانین درس 86) را با هم ترکیب کند، آنها را در زمان درست از چرخهی حیات درخواست اجرا کند، هنگام تناقض آرا تصمیم بگیرد چه اقدامی انجام شود، و در نهایت ردی تحویل دهد که بازبین بتواند صبح شنبه آن را بخواند. اصل درس در همین ترکیببندی است.
این گیت در سه چکپوینت مستقر میشود. پیش از تولید (pre-gen) قبل از فراخوانی مدل اجرا میشود: شناساگر درس 83 پرامپت را بررسی میکند و یا اجازهی عبور میدهد، یا بهطور کامل آن را مسدود میکند (در حملاتی با قطعیت بالا)، یا پرچمی روی آن میگذارد تا لایههای بعدی وزن آن را بسنجند. حین تولید (during-gen) همزمان با تولید توکنها توسط مدل اجرا میشود: یک فیلتر استریمینگ تکهها (chunks) را بافر میکند و اگر عبارت ممنوعهای پیدا شود، استریم را پیش از موعد متوقف میکند (اگر گیت فقط خروجی نهایی را بررسی کند، تزریق پیشوند از این فیلتر قسر درمیرود). پس از تولید (post-gen) بعد از پایان کار مدل اجرا میشود: مسیریاب دستهبند درس 85 و موتور قوانین درس 86 کل خروجی را بازرسی میکنند، گیت نظر نهایی آنها را با سیگنال مرحلهی پیش از تولید ترکیب میکند، و اقدام نهایی را اعمال مینماید.
گیت بهصورت خودپایانیافته طراحی شده است: همهی نمونههای آزمایشی ردهبندیِ درس 82 بهصورت سرتاسری اجرا میشوند، گیت به ازای هر درخواست یک ردگیری محاسبات ثبت میکند، و اجرای دمو با کد خروج صفر به پایان میرسد؛ چه همهی حملات را مسدود کرده باشد و چه نه. هدف اصلی، قابلیت مشاهدهپذیری (observability) و صحت ساختاری است، نه ثبت یک امتیاز بینقص.
مفهوم
سه چکپوینت، یک درخت تصمیم.
تجمیعکننده چهار سیگنال شدت خطر را با هم ترکیب میکند: اطمینان شناساگر (درس 83)، تریگر فیلتر توکن (یک مقدار بولی)، بیشینهی شدت خطر دستهبند (درس 85)، و بیشینهی شدت خطر موتور قوانین (درس 86). تابع تجمیع یک جدول قطعی (deterministic) است.
| وضعیت سیگنال | اقدام |
|---|---|
| اطمینان شناساگر >= 0.85 در دستهبندی غیربیخطر | مسدودسازی پیش از تولید |
| هر سیگنال با شدت خطر بالا (high) | مسدودسازی |
| هر سیگنال با شدت خطر متوسط (اطمینان شناساگر بین 0.5 تا 0.85، یا توقف زودهنگام استریم) | پالایش متن (redact) |
| هر سیگنال با شدت خطر پایین (اطمینان شناساگر زیر 0.5 در دستهبندی غیربیخطر) | هشدار |
| اعلام بیخطر بودن توسط شناساگر و نبود هیچ سیگنال دیگر | مجاز |
مسدودسازی (block) منجر به امتناع مدل (refusal) میشود. پالایش متن (redact) متن سانسورشده توسط دستهبند را ارسال میکند و اصلاحکنندهی موتور قوانین را به کار میگیرد. هشدار (warn) متن اصلی را همراه با یک پیام ملایم میفرستد. در حالت مجاز (allow) متن اصلی بدون دستکاری ارسال میشود. هر درخواست یک RequestTrace با این فیلدها ثبت میکند: request_id، prompt، pre_gen (حکم شناساگر)، during_gen (تریگر فیلتر توکن)، post_gen (اقدام دستهبند + گزارش قوانین)، final_action، final_output و latency_ms.
فیلتر حین تولید یک لایهی انتزاعی استریمینگ است. مدل زبانی ماکت (mock LLM) خروجی را در قالب تکهها تولید میکند (بهطور پیشفرض هر تکه 4 توکن). فیلتر حداکثر دو تکه را بافر میکند و عبارات باقاعده (regex) را برای توکنهای ادامهی شناختهشده جستجو مینماید (مانند Sure, here is the procedure، step 1: take و غیره). در صورت تطابق، پیمایشگر را متوقف میکند و خروجی ناقص را با برچسب terminated_early=True برمیگرداند. تجمیعکنندهی بعدی این توقف زودهنگام را بهعنوان سیگنالی با شدت خطر متوسط در نظر میگیرد.
مدل زبانی ماکت بر اساس پرامپت دو نوع رفتار نشان میدهد: حملات قابلتشخیص را رد میکند (عبارت ... I cannot را برمیگرداند) و به پرامپتهای بیخطر پاسخ میدهد (یک رشتهی مفید عمومی تولید میکند). برای دستهی کوچکی از حملات (بهویژه ترفندهای کدگذاری که در پایپلاین ورودی کشف نشدهاند)، ادامهای ناقص و مخرب تولید میکند که قرار است فیلتر حین تولید مچ آن را بگیرد. این طراحی تعمدی است. ارزش گیت به لایههای دفاعی تودرتوی آن است؛ این دمو نشان میدهد که لایهها چطور بهدرستی با یکدیگر تعامل دارند.
پیادهسازی از صفر
فایل code/safety_gate.py کلاس SafetyGate را تعریف میکند. این کلاس شناساگر، مسیریاب دستهبند و موتور قوانین درسهای پیشین را با مسیرهای نسبی فایلها وارد میکند. فایل code/mock_llm_stream.py یک مدل زبانی ماکتِ استریمینگ با سه پرسوناژ برنامهریزیشده (clean، attacker-honest، attacker-lazy) تعریف میکند. فایل code/main.py پیکرهی متنی درس 82 را بهصورت سرتاسری از گیت عبور میدهد و خروجی را در outputs/gate_trace.json مینویسد.
این دمو تمام 50 نمونهی آزمایشی ردهبندی به اضافهی 10 پرامپت بیخطر را اجرا میکند. خلاصهی ردگیری محاسبات شامل این موارد است: مسدودسازیها، پالایشها، هشدارها، اجازهی عبورها، توقفهای زودهنگام، تفکیک نتایج به ازای هر دسته، و میانگین تاخیر. اعداد هدف اصلی نیستند؛ اصل ماجرا ثبت ردگیری محاسبات به ازای تکتک درخواستهاست.
استفاده از ابزارهای واقعی
دستور python3 main.py را اجرا کنید. دمو همهچیز را بارگذاری میکند، پایپلاین را بهصورت سرتاسری اجرا مینماید، جدول خلاصه را چاپ میکند و دستسازهی ردگیری را مینویسد. کد خروج صفر خواهد بود. دمو به معنای واقعی کلمه خودپایانیافته است: هر درخواست یا تا انتها پیش میرود یا زود متوقف میشود و گیت بلافاصله به سراغ درخواست بعدی میرود.
خروجی این درس
مستند outputs/skill-end-to-end-safety-gate.md چرخهی حیات درخواست، جدول تجمیع، و فرمت ردگیری را مستند میکند. خروجی اصلی این گیت، فرمت ردگیری محاسبات و منطق ترکیببندی آن است؛ هر دو را میتوانید مستقیماً بردارید و در بکاند سیستم خود پیاده کنید.
تمرینها
- یک چکپوینت پنجم اضافه کنید: یک
policy-checkکه قبل از مرحلهی پیش از تولید روی پرامپت سیستم اصلی اجرا شود. این بررسی باید پرامپتهایی را که نام یک ابزار داخلیِ شناختهشده را هدف گرفتهاند رد کند. - تجمیعکنندهی قطعی را با یک امتیاز وزنی جایگزین کنید: هر سیگنال یک اطمینان بین 0 تا 1 تولید کند و گیت در یک آستانهی مشخص فعال شود. آستانه را تغییر دهید و موازنهی بین دقت و بازخوانی (precision-recall trade-off) را روی پیکرهی درس 82 گزارش کنید.
- یک نسخهی استریمینگ ناهمگام (async) بسازید که مرحلهی حین تولید در یک ترد (thread) اجرا شود؛ مطمئن شوید اثر منفی بر تاخیر در محدودهی بودجهی 50 میلیثانیهای باقی میماند.
اصطلاحات کلیدی
| اصطلاح | کاربرد عام | مفهوم دقیق |
|---|---|---|
| گیت ایمنی (safety gate) | یک فیلتر ساده | ترکیبی سهچکپوینتی از شناساگر، فیلتر استریمینگ، دستهبند، و قوانین همراه با یک جدول تجمیع |
| پیش از تولید (pre-gen) | بررسی ورودی | لایهی شناساگر که قبل از فراخوانی مدل روی پرامپت اجرا میشود |
| حین تولید (during-gen) | فیلتر استریمینگ | پایش بافرشده روی تکههای تولیدشده که میتواند استریم را زود متوقف کند |
| پس از تولید (post-gen) | بررسی خروجی | اجرای مسیریاب دستهبند و موتور قوانین روی پاسخ کاملشدهی مدل |
| ردگیری محاسبات (trace) | یک خط لاگ | رکورد ساختاریافته به ازای هر درخواست شامل حکم هر چکپوینت، اقدام نهایی، و تاخیر |
برای مطالعهی بیشتر
پنج درس پیشین همین سرفصل. گیت، آنها را با هم ترکیب میکند؛ جزء سازندهی جدیدی به سیستم ایمنی اضافه نمیکند.
