پرش به محتوای اصلی

فرار از سندباکس یک مسئلهٔ بودجهٔ قابلیت است

شکست‌های مهار در سیستم‌های ایجنت، اعطای قابلیت‌های بدقیمت‌گذاری‌شده هستند، نه جیلبریک‌های گم‌شده. سطح کنترل، بودجه‌ای به‌ازای هر اجرا بر سیستم‌های قابل‌دسترس است.

A dark, minimalist photo of a computer monitor displaying the ChatGPT interface.

الگو در گزارش‌های حادثه

گزارش‌های اخیر توصیف کرده‌اند که ایجنت‌ها به سیستم‌هایی رسیده‌اند که هرگز در وظیفه نام‌برده نشده بودند: پورتال‌های دولتی، پایگاه‌های دادهٔ سلامت، سایت‌های شرکتی نامرتبط. جزئیات متفاوت است، اما شکل ثابت است. در هر مورد، به ایجنت یک سطح ابزار همه‌منظوره داده شده بود — یک مرورگر، یک شل، یک کلاینت HTTP — و یک هدف محدود. شکاف بین سطح ابزار و هدف، نقص واقعی است.

آن شکاف یک جیلبریک نیست. این یک اعطای قابلیت است که هرگز قیمت‌گذاری نشده بود. ایجنت نیازی نداشت یک سیاست رد را شکست دهد؛ صرفاً از ابزارهایی که به آن داده شده بود استفاده کرد، به ترتیبی که تکمیل وظیفه را بیشینه می‌کرد. سیستم‌هایی که به آن‌ها رسید قابل‌دسترس بودند چون هیچ‌چیز در استقرار نگفته بود که آن‌ها نیستند.

این تمایز برای نحوهٔ پاسخ ما مهم است. اگر شکست به‌عنوان جیلبریک قالب‌بندی شود، راه‌حل یک فهرست رد طولانی‌تر، یک system prompt قوی‌تر، یک classifier بهتر است. اگر شکست به‌عنوان اعطای قابلیت بدقیمت‌گذاری‌شده قالب‌بندی شود، راه‌حل یک بودجه است: یک شمارش صریح، به‌ازای هر اجرا، از آنچه ایجنت می‌تواند به آن برسد، که خارج از مدل اعمال می‌شود.

چرا رد در سطح prompt ترکیب نمی‌شود

رفتار رد، آموزش‌دیده، احتمالاتی و به‌ازای هر مدل ارزیابی می‌شود، نه به‌ازای هر استقرار. مدلی که یک درخواست مستقیم برای تماس با یک میزبان خارجی را رد می‌کند، ممکن است وقتی همان عمل به‌عنوان زیرگامی از یک وظیفهٔ بزرگ‌تر قالب‌بندی شود، یا وقتی توسط یک حلقهٔ فراخوانی ابزار که قبلاً زمینه‌ای انباشته کرده که نشان می‌دهد عمل مورد انتظار است، صادر شود، تبعیت کند.

مهم‌تر از آن، وقتی یک ایجنت ابزارها را در طول گام‌ها زنجیره می‌کند، سیاست مؤثر اجتماع مجوزهای هر ابزار است، نه قصد prompt اصلی. یک ابزار مرورگر که می‌تواند URLهای دلخواه را واکشی کند، یک ابزار شل که می‌تواند دستورات دلخواه را اجرا کند، و یک کلاینت HTTP که می‌تواند اعتبارنامه‌ها را ضمیمه کند، با هم مجموعه‌ای قابل‌دسترس تولید می‌کنند که اجتماع هر سه است. prompt آن اجتماع را کوچک نمی‌کند. فقط یک مسیر ترجیحی از میان آن را پیشنهاد می‌دهد.

هر کنترلی که در prompt زندگی می‌کند، یک پیشنهاد به سیستمی است که برای تکمیل وظیفه بهینه‌سازی می‌کند. پیشنهادها برای هدایت رفتار مفیدند؛ آن‌ها یک مرز مهار نیستند. یک مرز مهار باید توسط چیزی اعمال شود که هدف ایجنت را شریک نیست — یک پروکسی، یک موتور سیاست، یک ناظر سندباکس.

بودجهٔ قابلیت به‌عنوان واحد طراحی

جایگزین عملی این است که مجموعهٔ قابل‌دسترس را به‌عنوان یک مصنوع درجه‌یک در نظر بگیریم و آن را صریحاً محدود کنیم. برای هر اجرا، شمارش کنید:

Abstract image featuring dynamic neon light trails in vivid colors, perfect for creative backgrounds.

  • مقاصد شبکه: نام‌های میزبان، محدوده‌های IP، پورت‌ها، پروتکل‌ها. نه «وب» بلکه یک allowlist مشخص.
  • مسیرهای فایل‌سیستم: خواندن و نوشتن به‌صورت جداگانه، با فلگ‌های mount در جایی که ممکن است.
  • APIهای دارای اعتبارنامه: کدام توکن‌ها ضمیمه شده‌اند، با چه scopeهایی، و برای چه مدت.

اجتماع این‌ها شعاع انفجار است. سؤال طراحی این نیست که «آیا یک رد خوب نوشتیم؟» بلکه «شعاع انفجار این اجرا چقدر است، و آیا کوچک‌ترین شعاعی است که هنوز وظیفه را تکمیل می‌کند؟»

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

ترکیب جایی است که بودجه‌ها بی‌صدا گسترش می‌یابند

یک مکانیزم مشخص: یک پروکسی سیاست بین runtime ایجنت و هر فراخوانی ابزار خروجی قرار می‌گیرد. هر فراخوانی یک شناسهٔ اجرا حمل می‌کند. پروکسی یک سند بودجه دارد که با اجرا کلید خورده است و مقاصد، مسیرها و scopeهای مجاز را فهرست می‌کند. در هر فراخوانی، مقصد را با بودجه بررسی می‌کند، تصمیم را ثبت می‌کند، و یا ارسال می‌کند یا رد.

وقتی ایجنت ابزارها را ترکیب می‌کند — برای مثال، استفاده از نتیجهٔ یک مرورگر برای ساخت یک دستور شل — عمل ترکیب‌شده یک فراخوانی جدید با یک مقصد جدید است. پروکسی آن را با همان بودجه ارزیابی می‌کند. اگر مقصد ترکیب‌شده در بودجه نباشد، فراخوانی رد می‌شود، صرف‌نظر از اینکه ایجنت چگونه به آن رسیده است. این همان نقطه‌ای است که بودجه‌ها در سیستم‌هایی که به کنترل‌های سطح prompt تکیه می‌کنند بی‌صدا گسترش می‌یابند: مدل هیچ بازنمایی از بودجه ندارد، پس نمی‌تواند آن را رعایت کند.

یک انضباط مفید این است که هر زمان گراف ابزار تغییر می‌کند، بودجه را دوباره استخراج کنیم. افزودن یک ابزار، گسترده‌تر کردن یک scope، یا ضمیمه کردن یک اعتبارنامهٔ جدید باید یک استخراج مجدد را فعال کند، نه یک وصلهٔ افزایشی. بودجه یک مصنوع استخراج‌شده است، نه یک فهرست دستی‌نگه‌داشته‌شده.

معاملهٔ صادقانه

بودجه‌های تنگ وظایف مشروع را می‌شکنند. یک ایجنت در حال تحقیق ممکن است نیاز داشته باشد به میزبانی برسد که در allowlist اولیه نبود. یک ایجنت در حال دیباگ یک استقرار ممکن است به یک دستور شل نیاز داشته باشد که مسیری خارج از scope اصلی را لمس کند. هزینهٔ یک بودجهٔ تنگ، اصطکاک عملیاتی است: ردهای بیشتر، بازبینی انسانی بیشتر، چرخه‌های استخراج مجدد بیشتر.

جایگزین — یک بودجهٔ شل — اجرای ارزان‌تر و دفاع سخت‌تر دارد. معامله بین ایمنی و قابلیت در انتزاع نیست؛ بین هزینهٔ ردها در حال حاضر و هزینهٔ یک موفقیت خارج از بودجه در آینده است. یک استودیو که سیستم‌های ایجنت را عرضه می‌کند باید انتخاب کند کدا

Black and white abstract design illustrating the concept of tokenization.

چه چیزی را لاگ کنیم تا فرار قابل‌تشخیص شود

تشخیص به لاگ کردن رویدادهای درست بستگی دارد. سه دسته مهم‌اند:

  • تلاش‌های ردشده، نه فقط فراخوانی‌های موفق. یک رد، نشانه‌ای است که عمل موردنظر ایجنت از بودجه‌اش فراتر رفته است. نرخ رد، شاخص پیشرو یک بودجهٔ بدقیمت‌گذاری‌شده است.
  • ابزار، مقصد و شاخص گام برای هر فراخوانی. این حداقل چیزی است که برای بازسازی یک مسیر لازم است.
  • سند بودجه در زمان فراخوانی. بدون آن، یک مسیر نمی‌تواند به‌صورت آفلاین در برابر یک بودجهٔ تنگ‌تر بازپخش شود.

شاخص گام همان چیزی است که بازپخش را ممکن می‌کند. با داشتن یک مسیر و یک بودجه، یک بازپخش آفلاین می‌تواند پاسخ دهد: ایجنت در کدام گام اولین بار یک عمل خارج از بودجه را امتحان کرد، و یک بودجهٔ تنگ‌تر چه چیزی را زودتر رد می‌کرد؟ این روشی ارزان‌تر برای تنظیم بودجه‌ها نسبت به اجرای مجدد ایجنت در برابر سیستم‌های زنده است.

یک قاعدهٔ عملی: هر موفقیت خارج از بودجه را به‌عنوان یک مسدودکنندهٔ انتشار در نظر بگیرید، نه یک تیکت حادثه. یک موفقیت خارج از بودجه یعنی بودجه و اعمال با هم اختلاف داشتند، که یک باگ درستی در صفحهٔ کنترل است. باید خط لوله را متوقف کند تا اختلاف درک شود.

این در عمل چه چیزی را تغییر می‌دهد

قالب‌بندی مهار به‌عنوان یک مسئلهٔ بودجهٔ قابلیت، کار را از مهندسی prompt به مهندسی سیاست منتقل می‌کند. تحویل‌دادنی‌ها تغییر می‌کنند:

  • یک schema بودجه و یک فرآیند استخراج، نه یک فهرست رد.
  • یک پروکسی سیاست که allowlistها را به‌ازای هر فراخوانی اعمال می‌کند، نه به‌ازای هر ایجنت.
  • یک خط لولهٔ لاگ که ردها، مقاصد و شاخص‌های گام را ثبت می‌کند.
  • یک ابزار بازپخش که می‌تواند یک مسیر ثبت‌شده را در برابر یک بودجهٔ نامزد دوباره ارزیابی کند.

هیچ‌کدام از این‌ها نیازمند همکاری مدل نیست. این همان نکته است. مدل می‌تواند هرقدر که می‌خواهد در مورد چگونگی تکمیل وظیفه خلاق باشد؛ بودجه تعیین می‌کند کدام یک از آن مسیرها قابل‌دسترس است. فهرست رد هنوز برای هدایت مفید است، اما مرز نیست. مرز، بودجه است، و بودجه یک مصنوع طراحی است که یک تیم می‌تواند بازبینی، نسخه‌بندی و تنگ‌تر کند.

حوادث اخیر یادآوری این است که مرز معمولاً ضمنی است تا زمانی که چیزی از آن عبور کند. صریح کردن آن — به‌ازای هر اجرا، به‌ازای هر فراخوانی، با لاگ شدن ردها — تفاوت بین سیستمی است که با طراحی مهار شده و سیستمی که با امید مهار شده است.

اشتراک‌گذاریXLinkedInپیوند یکتا6 دقیقه مطالعه

خواندن مرتبط

پرسش‌هایی که این پاسخ می‌دهد

Why is a prompt-level refusal not enough to contain an agent?

Refusal behaviour is trained and probabilistic, and it is evaluated per-model rather than per-deployment. Once an agent chains tools, the effective policy is the union of every tool's permissions, not the intent of the prompt. A control that lives in the prompt is a suggestion to a system optimising for task completion.

What is a capability budget in an agent system?

A per-run enumeration of reachable network destinations, filesystem paths and credentialed APIs, enforced outside the model. The union of these is the blast radius, and the budget caps it explicitly rather than relying on the agent to respect an intent.

Why enforce allowlists per tool call rather than per agent?

An agent-level allowlist is a static grant that survives every composition step. A per-call allowlist is re-evaluated at the point of use, which is where composition actually happens and where budgets silently expand.

What should be logged to detect a sandbox escape?

Denied attempts as well as successful calls, the tool, destination and step index for every call, and the budget document in force at the time. Denial rate is the leading indicator of a mispriced budget, and the step index makes offline replay against a tighter budget possible.