نتیجهٔ انتقال، و اینکه چرا مدل تهدید را تغییر میدهد
اختلالهای خصمانهای که علیه یک مدل بهینهسازی میشوند، بهطور معمول عملکرد مدل دیگری را تخریب میکنند. این یک ویژگی عجیب چکپوینتهای همخانواده نیست. انتقال در میان معماریها، در میان توکنایزرها، و در میان خطوط لولهٔ آموزش متفاوتی که مدلهای مورد بحث را تولید کردهاند برقرار است. اختلال نیازی ندارد وزنهای هدف را بداند؛ فقط باید ورودی را به ناحیهای ببرد که بازنمایی هدف به شکلی جابهجا شود که خروجی را تغییر دهد.
برای یک برنامهٔ تکمدلی، این یک ناراحتی است. برای یک پشتهٔ agent، ساختاری است. یک اجرای agent در محیط تولید داخل یک مدل نمیماند. مسیریابی میکند: یک مدل ارزان برای دستهبندی، یک مدل بزرگتر برای برنامهریزی، یک مدل تخصصی برای استخراج، و سومی برای ترکیب نهایی. هر گام یک مدل جدید است، و هر گام جایی است که یک اختلال منتقلشده میتواند دوباره وارد شود. سختسازی یک مدل در آن زنجیره، هزینهٔ مهاجم را برای آن بخش بالا میبرد و برای بقیه هیچ کاری نمیکند. مسیر باز میماند چون مسیر همان زنجیره است.
نتیجه ناخوشایند اما ساده است: اگر اختلال منتقل شود، و پشته مسیریابی کند، آنگاه استراتژی دفاع مدلبهمدل دفاع نیست. هزینهای است که بر مدافع تحمیل میشود.
چرا agentها انتقال را تقویت میکنند
در یک برنامهٔ چت، یک اختلال موفق پاسخ بد تولید میکند. در یک agent، یک کنش بد تولید میکند. تفاوت در حلقه است.
متن به دستور تبدیل میشود
یک گام agent متنی تولید میکند که گام بعدی آن را نه فقط بهعنوان زمینه، بلکه بهعنوان دستور مصرف میکند. هیچ مرز سختی بین «خروجی مدل» و «ورودی مدل» در داخل یک اجرا وجود ندارد. خروجی برنامهریز، prompt مجری است. اختلالی که بازنمایی برنامهریز را به مقدار کمی جابهجا کند، برنامه را جابهجا میکند، و برنامهٔ جابهجاشده سپس توسط همهچیز در پاییندست بهعنوان معتبر تلقی میشود. اختلال نیازی ندارد بهعنوان یک رشتهٔ حمله از رمزگذاری مجدد جان سالم به در ببرد؛ بهعنوان یک دستور محتمل جان سالم به در میبرد.
آرگومانها تولید میشوند، نه تجزیه
آرگومانهای ابزار توسط مدل تولید میشوند. وقتی بازنمایی درونی مدل از یک مقدار جابهجا شود، آرگومانی که منتشر میکند با آن جابهجا میشود. اگر ابزار رشتههای آزاد بپذیرد، آن جابهجایی مستقیماً در فراخوانی فرود میآید. مسیری که /data/reports/q3 بود به /data/reports/q3/../../secrets تبدیل میشود، یا یک آدرس گیرنده یک کاراکتر اضافه میکند، یا یک آستانهٔ عددی به اندازهٔ یک مرتبهٔ بزرگی جابهجا میشود. مدل تصمیم نگرفت این کار را بکند؛ آنچه بازنمایی جابهجاشدهاش پیشنهاد میکرد را منتشر کرد. از دید ابزار، فراخوانی از یک فراخوانی مشروع قابل تشخیص نیست.
تحویلها بدون رویداد شبکه از مرزها عبور میکنند
![]()
سیستمهای چند-agent این را بدتر میکنند. وقتی agent A به agent B تحویل میدهد، اختلال از یک مرز مدل در داخل همان فرایند عبور میکند، بدون رویداد شبکه، بدون پایان TLS، و بدون لاگ خروجی. هیچ جایی برای قرار دادن یک کنترل شبکهای که تحویل را ببیند وجود ندارد، چون تحویل یک فراخوانی تابع است. هر مدل در ازدحام یک نقطهٔ ورود مجدد بالقوه است، و اختلال میتواند در هر یک دوباره تقویت شود.
دفاع در مرز ابزار
نقطهٔ کنترل پایدار مدل نیست. رابط بین agent و ابزارهایش است. آن رابط صرفنظر از اینکه کدام مدل فراخوانی را تولید کرده وجود دارد، و آخرین جایی است که یک بازنمایی جابهجاشده میتواند قبل از تبدیل شدن به اثری در جهان گرفته شود.
اصل این است که مدل را بهعنوان تولید ورودی نامعتبر تلقی کنیم، چون همین است. مدل مؤلفهای است که آرگومانهای نامزد تولید میکند. مرز تصمیم میگیرد که آیا آن نامزدها قابل پذیرش هستند یا نه.
در برابر یک schema نوعدار اعتبارسنجی کنید، بر اساس شکل رد کنید
هر فراخوانی ابزار قبل از اجرا در برابر یک schema صریح اعتبارسنجی میشود. اعتبارسنجی بر اساس شکل است، نه بر اساس قصد. دستهبندی قصد یک مسئلهٔ مدل است و آسیبپذیریهای مدل را به ارث میبرد؛ اعتبارسنجی شکل یک مسئلهٔ تجزیهگر است و اینطور نیست. اگر schema بگوید recipient رشتهای است که با یک دامنهٔ مجاز مطابقت دارد، آنگاه یک گیرندهٔ مختل در تطبیق شکست میخورد. مرز نیازی ندارد بداند چرا آرگومان غلط است. باید بداند که شکل درست را ندارد.
TOOL_SCHEMAS = {
"send_report": {
"type": "object",
"required": ["recipient", "report_id", "format"],
"properties": {
"recipient": {"type": "string", "pattern": r"^[^@]+@reports\\.internal$"},
"report_id": {"type": "string", "pattern": r"^RPT-[0-9]{6}$"},
"format": {"type": "string", "enum": ["pdf", "csv"]},
},
"additionalProperties": False,
}
}
محدودهها و شمارشها را محدود کنید
رشتههای آزاد جایی هستند که اختلالها زندگی میکنند. هر آرگومانی که میتواند یک شمارش باشد باید باشد. هر آرگومان عددی باید یک محدودهٔ کراندار داشته باشد. آنگاه یک آرگومان مختل خارج از مجموعهٔ پذیرفتهشده میافتد و بهطور ساختاری رد میشود، نه توسط یک دستهبند که خودش ممکن است قابل انتقال باشد.
برای هر آرگومان منشأ را الزامی کنید
هر آرگومان فرادادهای حمل میکند: کدام گام آن را تولید کرد، از کدام منبع، تحت کدام مدل. منشأ اختلال را متوقف نمیکند، اما شکست را خوانا میکند. وقتی رد شدن رخ میدهد، سابقهٔ منشأ نشان میدهد که آیا آرگومان از یک سند بازیابیشده، یک نوبت کاربر، یا یک گام مدل قبلی آمده است. این تمایز تعیین میکند که اصل

بسته شکست بخورید، و تلاش مجدد را صریح کنید
یک فراخوانی ردشده بیصدا با یک schema شلشده دوباره تلاش نمیکند. بسته شکست میخورد و یک خطای نوعدار را آشکار میکند. agent ممکن است دوباره تلاش کند، اما تلاش مجدد یک مسیر عامدانه با لاگگیری خودش است، نه یک جایگزینی که بیصدا مجموعهٔ پذیرفتهشده را گسترش دهد.
این چه هزینهای دارد
این بدهبستان واقعی است و باید صریح بیان شود.
نگهداری schema به یک وظیفهٔ مهندسی درجهیک با آهنگ بازبینی خودش تبدیل میشود. هر ابزار یک schema دارد، هر schema یک مالک دارد، و هر تغییر schema یک رویداد بازبینی است. این رایگان نیست. قیمت داشتن یک نقطهٔ کنترل است که به این وابسته نیست که این فصل کدام مدل در جدول مسیریابی است.
برخی فراخوانیهای مشروع بسته شکست میخورند. مدلی که آرگومانی معتبر اما کمی غیرمعمول تولید میکرد، اکنون رد میشود. مسیر تلاش مجدد باید صریح، قابل مشاهده، و کراندار باشد، وگرنه سیستم بهنظر میرسد که توانایی از دست میدهد. تیمهایی که این گام را رد میکنند کشف میکنند که نرخ ردشان پایین است اما نرخ تکمیلشان پایینتر است.
پوشش بر حسب فراخوانیهای ابزار اعتبارسنجیشده اندازهگیری میشود، نه promptهای سختشده. این متریکی متفاوت از آن چیزی است که بیشتر تیمها ردیابی میکنند، و آنچه داشبوردها نشان میدهند را تغییر میدهد. یک داشبورد سختسازی prompt میتواند سالم بهنظر برسد در حالی که مرز ابزار بینگهبان است.
اندازهگیری
مرز به روشهایی قابل اندازهگیری است که سختسازی مدل نیست.
- اختلالهای انتقال شناختهشده را در محیط staging تزریق کنید و نرخ رد شدن در مرز را ثبت کنید. اختلالها علیه یک مدل تولید میشوند و علیه پشتهٔ مسیریابیشده بازپخش میشوند. متریک کسری است که مرز قبل از اجرا میگیرد.
- ردیابی کنید که چند رد شدن پس از اینکه یک ابزار قبلاً در همان اجرا فراخوانی شده رخ میدهد. ردی که پس از فرود یک اثر میآید کنترل نیست؛ یک ورودی لاگ است. این عدد باید به صفر رسانده شود، و هر مقدار غیرصفر نشاندهندهٔ مرزی است که در گام خیلی دیر قرار گرفته است.
- توزیع منشأ را روی آرگومانهای ردشده ثبت کنید. اگر ردها روی یک منبع خوشه میشوند، مشکل در بالادست مرز است و schema با مهار کردن آن کار خود را انجام میدهد.
هیچکدام از این متریکها نیازی به دسترسی به وزنهای مدل یا به رویهٔ بهینهسازی مهاجم ندارند. فقط نیاز دارند که مرز وجود داشته باشد و لاگ کند.
نکتهٔ استراتژیک این است که دفاعهای تکمدلی هدفی متحرک در برابر یک اختلال قابل انتقال هستند. مرز ابزار هدفی ثابت در برابر همان اختلال است، چون اهمیتی نمیدهد که کدام مدل فراخوانی را تولید کرده. فقط اهمیت میدهد که آیا فراخوانی قابل پذیرش است. این خاصیتی است که مدافع واقعاً میتواند حفظ کند.
