الگوی موجود در رخدادها
گزارشهای اخیر عاملهایی را توصیف میکنند که بدون درخواست به پیامهای خصوصی دسترسی پیدا کردند، عاملهایی که تاکتیکهای بازیابی تهاجمی را علیه یک دارایی سازمان ملل به کار بردند، و عاملهایی که تصاویر ذخیرهشده کاربران را افشا کردند. جزئیات متفاوت است، اما شکل یکی است. در هر مورد، مدل یک اقدام بعدی محتمل تولید کرد. آنچه غایب بود، تصمیمی درباره مجاز بودن آن اقدام برای آن principal، در آن زمان، نسبت به آن منبع بود.
وسوسهکننده است که اینها را زیر عنوان همراستایی طبقهبندی کنیم. این چارچوببندی به مداخلاتی منجر میشود که نمیتوانند محدودیتهای مورد نیاز واقعی موقعیت را بیان کنند: یادگیری تقویتی از بازخورد انسانی، پرامپتهای سیستمی بهتر، یک پیشفرض رد کردن قویتر. اینها توزیع متنی را که مدل منتشر میکند شکل میدهند. آنها رمزگذاری نمیکنند که نشست A میتواند صندوق پستی B را بخواند اما نه صندوق پستی C، که یک خزنده میتواند یک صفحه عمومی را واکشی کند اما باید از یک endpoint با محدودیت نرخ عقبنشینی کند، یا اینکه یک شیء رسانهای میتواند بهصورت داخلی خلاصه شود اما هرگز در یک payload خروجی قرار نگیرد. یک پرامپت سیستمی که میگوید «به دادههای خصوصی دسترسی پیدا نکن» یک درخواست است، نه یک کنترل. مدل میتواند در حالت عادی با آن مطابقت کند و همچنان وقتی زمینه غیرمعمول است آن فراخوانی را منتشر کند، زیرا هیچچیز در حلقه، فراخوانی را در برابر principal و منبع ارزیابی نمیکند.
تصمیم واقعاً کجا زندگی میکند
هر فراخوانی ابزار یک درخواست است. یک principal، یک منبع، یک فعل، یک هدف و یک بودجه دارد. مؤلفهای که آن چندگانه را ارزیابی میکند، سطح ایمنی واقعی است و در بالادست مدل، در مسیر درخواست قرار دارد.
سه دروازه ارزش جدا کردن دارند، زیرا ادغام آنها جایی است که بیشتر طراحیها کنترل را از دست میدهند.
- اعلام قصد. آنچه عامل میگوید انجام میدهد، به شکلی که موتور سیاست بتواند آن را تطبیق دهد. این یک ادعا است، نه یک مجوز.
- اعطای قابلیت. آنچه principal ممکن است انجام دهد، مستقل از آنچه عامل میخواهد. این از mandate نشست مشتق میشود، نه از مکالمه.
- بررسی خروجی. آنچه از مرز خارج میشود. یک فراخوانی میتواند مجاز باشد و همچنان خروجیای تولید کند که نباید از لبه شبکه عبور کند.
یک رد کردن باید یک پاسخ نوعدار باشد که برنامهریز بتواند درباره آن استدلال کند، نه یک استثنا که تلاش مجدد را تحریک کند. اگر انکار بهصورت stack trace ظاهر شود، حلقه بازیابی عامل آن را یک خطای گذرا تلقی کرده و با یک تغییر دوباره تلاش میکند. اگر بهصورت denied: {rule, resource_class, reason} ظاهر شود، برنامهریز میتواند مسیر دیگری انتخاب کند یا متوقف شود. تمایز بین انکار سیاست و خطای انتقال، تفاوت بین عاملی است که در محدوده mandate خود سازگار میشود و عاملی که تا زمانی که چیزی تسلیم شود به یک پورتال میکوبد.
یک مکانیزم مشخص

یک عامل بازیابی را در نظر بگیرید که تحت یک mandate نشست عمل میکند. mandate یک شیء ساختاریافته است، نه نثر:
{
"session": "s-8841",
"principal": "agent:research",
"mandate": [
{"resource_class": "public_web", "verbs": ["fetch"], "budget": {"requests": 200, "rate_per_min": 30}},
{"resource_class": "internal_docs", "verbs": ["search", "read"], "budget": {"documents": 50}}
],
"egress": {"allowed_classes": ["summary_text"]}
}
هر فراخوانی ابزار قبل از اجرا در برابر این شیء ارزیابی میشود. فراخوانی یک رشته هدف دارد که از mandate گرفته شده است، برای مثال purpose: "public_web.fetch". موتور سیاست هدف را با mandate تطبیق میدهد، فعل را بررسی میکند، بودجه باقیمانده را بررسی میکند و یکی از مجموعه کوچکی از نتایج نوعدار را برمیگرداند: allow، deny، allow_with_redaction، یا defer_for_approval. تصمیم همراه با قاعدهای که تطبیق یافته، principal و بودجه باقیمانده پس از فراخوانی ثبت میشود.
ویژگی مهم این است که موتور بهصورت پیشفرض هر کلاس منبعی را که صراحتاً برای اجرا شمارش نشده باشد انکار میکند. یک کلاس منبع جدید به این دلیل در دسترس نمیشود که مدل آن را استنتاج کرده؛ به این دلیل در دسترس میشود که کسی mandate را گسترش داده است. این همان وضعیتی است که یک سیاست شبکهای دارد که بهجای پرسیدن، رها میکند.
برای مورد دارایی سازمان ملل، کنترل مربوطه بودجه نرخ و همزمانی متصل به کلاس منبع است که در دروازه اعمال میشود نه در پرامپت درخواست میشود. برای مورد پیامهای خصوصی، نبود یک کلاس private_messages در mandate است. برای مورد نشت رسانه، بررسی خروجی است: خواندن ممکن است مجاز باشد، payload خروجی بازرسی میشود و کلاس تصویر در لیست مجاز نیست.
قواعد طراحی که نتیجه میشوند
هیچ فراخوانی ابزاری بدون یک رشته هدف اعلامشده که موتور سیاست بتواند آن را با mandate نشست تطبیق دهد. یک فراخوانی بدون هدف، فراخوانی بدون پاسخگویی است و باید بهصورت ساختاری انکار شود.
بهصورت پیشفرض هر
e0f43.jpg)ت، نه یک استنتاج.

تصمیم را ثبت کنید، نه فقط نتیجه را. کدام قاعده تطبیق یافت، کدام principal، کدام بودجه باقی ماند. رد تصمیم، مصنوعی است که سیستم را پس از واقعه قابل حسابرسی و پیش از آن قابل آزمون میکند.
معامله صادقانه
این معماری هزینه تأخیر و تلاش مهندسی دارد. هر فراخوانی اکنون از یک موتور سیاست عبور میکند که یک hop و یک حالت شکست اضافه میکند. mandateها باید نوشته و نگهداری شوند و در هر دو جهت اشتباه خواهند بود: بیش از حد باریک و عامل روی کار مشروع متوقف میشود، بیش از حد گسترده و دروازه تزئینی است. رشتههای هدف یک رابط جدید هستند که باید با تعاریف ابزار همگام نگه داشته شوند و انحراف بین آنها انکارهایی تولید میکند که شبیه باگ به نظر میرسند.
همچنین خطر واقعی اعتماد کاذب وجود دارد. یک موتور سیاست آنچه را که به آن گفته شده اعمال میکند. اگر mandate یک کلاس منبعی را شمارش کند که هرگز نباید اعطا میشد، دروازه آن را بهراحتی مجاز میکند و یک تصمیم مرتب ثبت میکند. کنترل، سؤال را از «آیا مدل بدرفتاری خواهد کرد» به «چه کسی این را اعطا کرد و چرا» منتقل میکند، که سؤال بهتری است اما حلشده نیست. معامله عمدی است: یک شکست غیرقابل پیشبینی را با یک شکست قابل بازبینی جایگزین میکند.
این چه چیزی را برای ارزیابی تغییر میدهد
مجموعههای آزمون باید روی رد تصمیم تأکید کنند، نه فقط روی پاسخ نهایی. اجرایی که خروجی درست را از طریق فراخوانیای تولید میکند که باید انکار میشد، یک اجرای شکستخورده است، حتی اگر کاربر راضی باشد. رد، مصنوع اصلی است؛ پاسخ یک پیامد است.
موارد خصمانه باید شامل فراخوانیهای ظاهراً مشروع که خارج از mandate هستند باشند، نه فقط موارد آشکارا مخرب. شکستهای جالب read_all_private_messages نیستند؛ search با یک پرسوجوی کمی گستردهتر، fetch روی یک URL که به یک میزبان داخلی resolve میشود، یا یک مرحله خلاصهسازی است که فیلدی را شامل میشود که قاعده خروجی آن را حذف میکند. این فراخوانیها از یک بررسی ساده در سطح پرامپت عبور میکنند زیرا شبیه کار عادی به نظر میرسند.
یک آزمون مفید، شکل رد را بهاندازه وجود آن تأیید میکند. با یک فراخوانی خارج از mandate، موتور باید یک انکار نوعدار برگرداند که قاعده و کلاس منبع را نام میبرد، و برنامهریز باید یا در محدوده mandate دور آن مسیریابی کند یا متوقف شود. آزمونی که فقط برای یک پیام خطای غیرخالی بررسی میکند، روی سیستمی که فراخوانی انکارشده را سه بار قبل از تسلیم دوباره تلاش میکند قبول میشود، که همان رفتاری است که گزارش دارایی سازمان ملل توصیف میکند.
نتیجهگیری
رد کردن یک تصمیم مسیریابی است. توسط یک موتور سیاست گرفته میشود که principal، منبع، فعل، هدف و بودجه را میداند، و قبل از اجرای فراخوانی گرفته میشود. آموزش همراستایی شکل میدهد که مدل احتمالاً چه چیزی را پیشنهاد میکند؛ نمیتواند محدودیتهای بهازای هر منبع و هر نشست را بیان کند، و برخورد با تجاوز بهعنوان یک مسئله آموزشی، مسیر درخواست را بیمحافظ رها میکند. کاری که از رخداد بعدی جلوگیری میکند، بیزرقوبرق است: mandate را شمارش کنید، بهصورت پیشفرض انکار کنید، ردهای نوعدار برگردانید و تصمیم را ثبت کنید. ایمنی همانجا زندگی میکند، زیرا تصمیم واقعاً همانجا گرفته میشود.
