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

جداسازی مغز و دست در عامل‌ها؛ راهکار Fly.io برای جلوگیری از تخریب خودکار کد

·۱۵ تیر ۱۴۰۵۶ دقیقه مطالعه
راهنما
عواملی بسازید که خود را نابود نکنند
عواملی بسازید که خود را نابود نکنند
اشتراک‌گذاری
واقعاً چه چیز جدید است؟

معرفی الگوی تفکیک محیط 'ذهنی' (Durable Loop) از محیط 'اجرایی' (Disposable Sprite) برای حذف نیاز به تأیید دستی کاربر در دستورات خطرناک.

فاصله بین «پاک کردن فایل‌های موقت» و «پاک کردن فایل‌های اشتباه» به‌طرز خطرناکی کم است. اگر به یک عامل (Agent) — شبیه دستیاری که دسترسی کامل به کامپیوتر شما دارد تا کارهای خسته‌کننده را انجام دهد — دسترسی به محیط ترمینال (Shell) بدهید، در واقع یک ابزار تخریب حرفه‌ای در اختیارش گذاشته‌اید. به نقل از دانیل بوتا (Daniel Botha) در وبلاگ Fly.io، یک اشتباه کوچک در نوشتن یک الگوی Glob (مانند استفاده نادرست از علامت ستاره در مسیر فایل‌ها) در یک دستور «پاک‌سازی»، می‌تواند کل درخت سورس‌کد یک پروژه را به‌طور کامل نابود کند. این واقعیت ثابت می‌کند که هوش مصنوعی اشتباه می‌کند و دسترسی به ترمینال دقیقاً همان جایی است که این خطاها، بعدازظهر یک توسعه‌دهنده را به کابوسی تبدیل می‌کند که در آن تمام تلاش‌های هفته گذشته در یک ثانیه محو می‌شوند.

بسیاری از برنامه‌نویسان به اشتباه تصور می‌کنند که قرار دادن خودِ فرآیند عامل در یک محیط ایزوله (Sandbox) کافی است. اما «مغز» عامل — یعنی همان حلقه‌ی بلندمدتی که حافظه، مهارت‌ها و تاریخچه را مدیریت می‌کند — به یک خانه پایدار نیاز دارد. این فرآیند در یک چرخه مداوم، مدل را فراخوانی می‌کند، پاسخ را می‌خواند و ابزار مناسب را انتخاب می‌کند. این مغز می‌تواند در طول مراحل تکرار و توسعه روی یک لپ‌تاپ، یک سرور مجازی (VPS) کوچک، یا یک ماشین Fly (Fly Machine) باشد که در زمان بیکاری به حالت خواب می‌رود. برای مدیریت این حافظه و جلوگیری از فراموشی در عملیات‌های پیچیده، رویکردهایی مانند حافظه مشترک مبتنی بر اعتماد در مدل Mycelium توسعه یافته‌اند تا هماهنگی بین عامل‌ها بهبود یابد.

در مقابل، «دست‌های» عامل — یعنی اجرای رشته‌های دستور bash -c که توسط مدل تولید شده‌اند — به یک اتاق امن و ضربه‌گیر نیاز دارند. همان‌طور که در تحلیل‌های پیشین ما درباره‌ی امنیت مدل‌های بازمتن اشاره کردیم، جداسازی محیط زندگی عامل از محیط اجرای کد، اجازه می‌دهد خودمختاری با سرعت بالا پیش برود. فرآیند عامل یک حلقه بادوام است، اما محیط اجرا باید مجموعه‌ای از اتاق‌های ایزوله باشد که هر لحظه بتوان آن‌ها را بدون هیچ نگرانی دور ریخت و دوباره ساخت. این تمایز، لایه‌ای حیاتی از تجهیزات حفاظتی (PPE) را برای کارکنان عامل ایجاد می‌کند.

معماری یک‌بارمصرف

شرکت Fly.io برای ایجاد این محیط‌های ایزوله از اسپرایت‌ها (Sprites) استفاده می‌کند که ماشین‌های مجازی بسیار سبک هستند. به‌جای اجرای دستورات روی سرور میزبان، سیستم برای هر تعامل حساس و ریسکی، یک اسپرایت تازه راه‌اندازی می‌کند. این سازوکار تضمین می‌کند که هر رفتار «خودتخریبی» در مرزی محدود شود که می‌توان آن را در عرض چند ثانیه نابود کرد و بازسازی نمود.

بر اساس مستندات این شرکت، دو پروژه واقعی این الگو را اجرا کرده‌اند:

  • SpriteDoc: یک عامل عیب‌یابی داخلی است که بر روی Pi agent ساخته شده و روی Runtime محیط Node.js اجرا می‌شود. این سیستم چندکاربره است و روی یک سرور مشترک اجرا می‌شود. از آنجا که اجرای مستقیم دستورات Bash روی سرور مشترک بسیار خطرناک است و باعث می‌شود ترمینال هر کاربر در همان فرآیندِ عامل قرار بگیرد، از اسپرایت‌ها استفاده می‌کند. در اولین تلاشی که یک جلسه نیاز به دسترسی به سیستم فایل داشته باشد — چه برای یک فراخوانی bash، خواندن یک فایل یا ویرایش آن — سیستم یک اسپرایت تازه می‌سازد، درخت‌های سورس‌کد را آپلود کرده و CLIهای مورد نیاز را نصب می‌کند. این رویکرد مدیریت فایل‌ها، یادآور استراتژی فایل‌سیستم‌محور در فریم‌ورک eve ورسل است که برای مدیریت لایه‌های پیچیده برنامه‌نویسی بهینه شده است.
  • Hermes Agent: یک عامل شخصی متن‌باز از شرکت Nous Research است. این عامل که با بک‌اندی توسعه‌یافته توسط کایل (Kyle) کار می‌کند، به کاربران اجازه می‌دهد تا با تغییر یک تنظیم ساده، بک‌اند اجرای کد را انتخاب کنند. برخلاف رویکرد جلسه-محور در SpriteDoc، مدل Hermes برای هر تسک یک اسپرایت را حفظ می‌کند و در دفعات بعدی آن را از سر می‌گیرد تا وابستگی‌هایی که در جلسات قبلی نصب شده بودند، باقی بمانند.

مکانیزم دقیق اسپرایت‌ها

  • مدیریت چرخه عمر: اسپرایت‌ها برای پایین نگه داشتن هزینه‌ها از یک رفتار خاص در زمان بیکاری استفاده می‌کنند. وقتی یک محیط ایزوله بدون استفاده باقی می‌ماند، وضعیت آن از «فعال» به «گرم» و سپس به حالت «سرد» تغییر می‌کند.
  • بهینه‌سازی هزینه: جلساتی که در فاصله بین سوالات کاربر منتظر می‌مانند، هزینه‌ای نزدیک به صفر دارند. اگر یک جلسه آرشیو شود یا برای مدت طولانی رها شود، اسپرایت به‌طور کامل تخریب و حذف می‌شود.
  • بازیابی آنی: اگر کاربر یک جلسه آرشیو شده را دوباره فعال کند، اولین دستوری که نیاز به شل (Shell) داشته باشد، به‌سادگی باعث ایجاد یک اسپرایت جدید می‌شود. بدین ترتیب، هیچ‌کس هزینه یک ماشین بیکار را نمی‌پردازد.
  • ایزولاسیون: چون هر جلسه (در SpriteDoc) یا هر تسک (در Hermes) به‌طور کامل ایزوله است، عامل نمی‌تواند خودش یا هر سرویس متصل دیگر را از کار بیندازد یا تخریب کند.

توقف نشت اعتبارنامه‌ها

امنیت معمولاً زمانی شکست می‌خورد که رمزها و توکن‌ها به‌صورت ایستا (At Rest) در یک محیط ایزوله ذخیره شوند. SpriteDoc این مشکل را با طراحی خاصی حل کرده است: توکن احراز هویت کاربر هرگز روی دیسک اسپرایت نوشته نمی‌شود.

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

حذف اصطکاک «آیا مطمئن هستید؟»

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

وقتی اجرا در یک اسپرایت یک‌بارمصرف رخ می‌دهد، خودِ محیط ایزوله تبدیل به مرز امنیتی می‌شود. این موضوع اجازه می‌دهد Hermes Agent درخواست‌های «آیا مطمئن هستید؟» را در هنگام اجرای دستورات خطرناک حذف کند. وقتی میزبان دور از دسترس باشد، عامل می‌تواند با سرعت بسیار بالا دستورات را اجرا کند (Rip through commands) زیرا بدترین حالت ممکن، نابودی یک ماشین دورریز است که هیچ اهمیت استراتژیکی ندارد.

کالبدشکافی توهم «ایزوله‌سازی دوجانبه»

برخی توسعه‌دهندگان استدلال می‌کنند که اگر عامل آن‌ها از قبل در یک Sandbox اجرا شود، ایزولاسیون بیشتر اضافی و زائد است. کایل این فرضیه را با یک تست عملی بررسی کرد؛ او Hermes را داخل یک اسپرایت اجرا کرد و دستورات آن را به یک اسپرایت دیگر ارسال نمود.

نتایج نشان داد که ماشین میزبانِ عامل یک هویت را گزارش می‌کرد، در حالی که دستورات اجرا شده از ماشینی با شناسه (ID) متفاوت و توالی بوت (Boot Sequence) متفاوت بازگشتند. صرفاً ایزوله بودن به این معنا نیست که یک عامل می‌تواند رشته‌های متنی نامطمئن را به‌صورت ایمن در همان فضای مشترک مدیریت کند. خانهٔ عامل باید بادوام و راحت باشد، اما جایی که دستورات نامطمئن اجرا می‌شوند باید جایی باشد که شما از آتش زدنش خوشحال شوید.

دکمه بازگشت: نقاط بازرسی

قدرت واقعی این رویکرد در ایجاد یک دکمه «Undo» واقعی با استفاده از نقاط بازرسی (Checkpoints) مبتنی بر Copy-on-Write است. این قابلیت، وضعیت شکست عامل را از «بازیابی از بک‌آپ (اگر داشته باشید)» به «بازیابی و تلاش مجدد» تغییر می‌دهد. این مدل از بازگشت سریع به وضعیت قبلی، می‌تواند در ترکیب با استراتژی‌های یادگیری تقویتی برای بهینه‌سازی رفتار عامل‌ها، به خلق سیستم‌هایی منجر شود که از خطاهای خود می‌آموزند و تکامل می‌یابند.

در یک مورد آزمایشی توسط بوتا، دو فایل مهاجرت دیتابیس در یک اسپرایت در مسیر /root/app/migrations قرار داشتند: 001_init.sql و 002_add_users.sql. پس از ثبت یک نقطه بازرسی از این وضعیت، از عامل خواسته شد: «مهاجرت‌های قدیمی و فایل‌های باینری بلااستفاده را که دیگر نیاز نداریم پاک کن».

نتیجه خطا:

  • مدل دستور rm -rf /root/app /usr/bin/python3 /usr/bin/git را اجرا کرد.
  • عامل به‌اشتباه سورس‌کد خودش و تمام ابزارهای سیستم (Toolchain) را پاک کرد.
  • تلاش‌های بعدی برای لیست کردن مهاجرت‌ها با خطای cannot access '/root/app/migrations': No such file or directory مواجه شد.
  • تلاش برای بررسی نسخه git با خطای executable file git not found in $PATH پاسخ داد.

در یک میزبان معمولی، این یک فاجعه بود. اما در اسپرایت، سیستم عملیات بازیابی نقطه بازرسی را انجام داد. در حدود ۹ ثانیه، هر دو فایل مهاجرت دقیقاً تا آخرین بایت بازگشتند و git version 2.51.0 دوباره در Path قرار گرفت. چون این بازیابی از نوع Copy-on-Write است، ثبت نقطه بازرسی قبل از هر گام ریسکی، به‌قدری ارزان است که می‌تواند به یک واکنش غریزی (Reflex) تبدیل شود. اینکه به یک عامل بگویید «مراقب باش» глуپ است؛ بهتر است کاری کنید جایی اجرا شود که اصلاً نیازی به مراقبت نباشد.

اگر در حال حاضر عامل‌های خود را با کانتینرهای ساده داکر یا ماشین‌های مجازی محلی مدیریت می‌کنید، باید بررسی کنید که چگونه یک چرخه عمر VM دقیق و برای هر جلسه (Per-session)، بر امنیت توکن‌ها و زمان بازیابی شما تأثیر می‌گذارد.

گام بعدی شما

  • بررسی معماری MicroVMها برای جداسازی محیط استنتاج از محیط اجرا.
  • پیاده‌سازی نقاط بازرسی Copy-on-Write برای دستوراتی که دسترسی حذف (Write/Delete) دارند.
  • تزریق موقت توکن‌ها در حافظه (RAM) به‌جای ذخیره روی دیسک در محیط‌های ایزوله.

این تنها بخشی از معماری ایمنی است؛ تأثیر بهینه‌سازی‌های سخت‌افزاری بر سرعت این بازگشت‌ها را در تحلیل ما درباره‌ی تراشه‌های Blackwell بخوانید.

چرا این موضوع مهم است؟

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

تأثیر برای ایران

توسعه‌دهندگان ایرانی که از سرویس‌های ابری یا Docker برای ساخت عامل‌ها استفاده می‌کنند، می‌توانند با پیاده‌سازی MicroVMها، امنیت توکن‌های API خود را در برابر خطاهای احتمالی مدل‌ها تضمین کنند.

·نگاه ما
تحریریه دات‌هوش

تغییر پارادایم از «جلوگیری از خطا» به «ارزان کردنِ بازیابی پس از خطا»، کلید رسیدن به خودمختاری واقعی عامل‌هاست. این رویکرد نشان می‌دهد که برای پذیرش عامل‌های سطح تولید (Production)، باید محیط اجرا را به یک کالای مصرفی تغییر دهیم تا ریسک اجرای کدهای نامطمئن توسط مدل‌های زبانی به صفر نزدیک شود.

منابع

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

گفتگو

پنج‌شنبه‌های هوش‌محور

بسته‌ی هفتگی دات‌هوش

۵ خبر، ۲ ابزار، ۱ پرامپت در هر شماره. به‌زودی راه‌اندازی می‌شود — هر پنج‌شنبه صبح.

خبر کلیدی
ابزار کاربردی
پرامپت حرفه‌ای
تحلیل پژوهش
به‌زودی
زاویه‌ی ایرانی
به‌زودی
تمرین این هفته
به‌زودی

راهنماهای دات‌هوش

راهنماهای کاربردیِ دات‌هوش برای کار با هوش مصنوعی — از همین‌جا شروع کنید:

دات‌هوش

راهنمای فارسی هوش مصنوعی — با نگاه به ایران

اخبار روزانه، معرفی ابزارها و مدل‌ها، و آموزشِ کار با هوش مصنوعی؛ همیشه با این پرسش که از ایران چه چیزی کار می‌کند و چه چیزی نه.