اگر امروز عاملهای هوش مصنوعی را در محیط عملیاتی خود مستقر کردهاید، احتمالاً با کدهایی مواجه شدهاید که در ظاهر درستاند اما در عمل فاجعهبارند. مشکل اینجاست که مدلها تمایل دارند روی «مسیر خوشبینانه» (Happy Path) تمرکز کنند و آن ۲۰٪ خستهکننده اما حیاتی از بررسیهای چرخه توسعه نرمافزار (SDLC) را نادیده بگیرند. این ۲۰٪ مفقود شامل وابستگیهای تأییدنشده، مراحلی است که پیش از پیشنیازهای خود اجرا میشوند و برنامههای بازگشتی (Rollbacks) که روی کاغذ وجود دارند اما در واقعیت نمیتوانند تغییرات را خنثی کنند.
به نقل از یک پست فنی مفصل در dev.to منتشر شده در ۱۵ سپتامبر ۲۰۲۶، بسیاری از توسعهدهندگان ایمنی را یک مسئلهٔ مهندسی پرامپت میبینند. آنها از مدل میخواهند «مراقب باشد» یا «مراحل را تأیید کند»، اما اینها صرفاً دستورالعملهایی هستند. در محیط عملیاتی، دستورالعمل فقط یک امید است، در حالی که گیت (Gate) آزمونی است که در صورت شکست، کل فرآیند ساخت (Build) را متوقف میکند. این تمایز بسیار حیاتی است زیرا عاملهای هوش مصنوعی برای دموهایی که کار میکنند بهینه میشوند، در حالی که ترتیب اجرا و قابلیت اطمینان بازگشت را نادیده میگیرند. نویسنده این موضوع را با اجرای ۱۷۰ هدف برای عاملها دریافت کرد و مشاهده کرد که یک برنامهریز (Planner) به طور پیشبینیپذیری همان سه نقص برنامهریزی را تکرار میکند.
شکاف برنامهریزی و توالی
عاملهای هوش مصنوعی اغلب پیشنیازهایی را اعلام میکنند که هیچ وظیفهٔ قبلی در واقعیت آنها را ایجاد نکرده است. برنامهریز میداند چه چیزی «باید» درست باشد، اما نمیتواند مراحل را طوری ترتیب دهد که آن وضعیت ایجاد شود. طبق گزارش dev.to، در بررسی ۶۳ برنامهٔ شکستخورده، ۵۷ مورد از مسدودکنندهها (Blockers) متعلق به همین خانواده از وابستگیهای تأییدنشده بودند. برای مثال، وظیفهای مثل cutover_traffic_100 ممکن است به مراحل قبلی وابسته باشد، اما فاقد تأییدیه پایداری پیش از ادامه مسیر است.
راهکار این است که یک «بستهساز پیشنیاز قطعی» (Deterministic Precondition Closer) طراحی شود. این سیستم بعد از تولید پیشنویس توسط مدل اجرا میشود و تا زمانی که هر پیشنیاز به یک وظیفهٔ خاص و تکمیلشده متصل نشود، اجازه عبور نمیدهد. اگر مدل ادعا کند مرحلهای «بعد از تأیید» رخ میدهد، سیستم میپرسد دقیقاً کدام وظیفه این تأیید را انجام میدهد؛ اگر پاسخ مدل این باشد که «بدیهی است» یا «نیازی به ذکر نیست»، سیستم آن را به عنوان یک باگ شناسایی میکند. این چالش با پدیده رانش خاموش در مدلهای AI که منجر به کاهش نرخ تشخیص باگها میشود، همراستا است و نشان میدهد چرا تکیه بر استدلال مدل به تنهایی کافی نیست.
خطاهای توالی نیز به همان اندازه رایجاند. نویسنده ۴۶ مورد را شناسایی کرد که در آنها وظایف با ترتیب غلط اجرا شده بودند. نمونههایی از این خطاها عبارتند از:
- اجرای تغییر ترافیک (Cutover) پیش از انجام بررسیهای نهایی.
- اجرای بازپروری دادهها (Backfill) پیش از اعتبارسنجی ایندکس.
- حذف پایگاهداده پیش از اتمام کامل عملیات پشتیبانگیری.
از آنجا که این یک مسئلهٔ گراف است و نه یک مسئلهٔ زبانی، باید با یک بررسی توپولوژیک (Topological Check) کنترل شود، نه با پرامپت. یک مثال خاص از مسدودکنندهها، مورد unsafe_sequencing برای وظیفه backfill_vectors است که نشان میدهد سیستم نمیتواند پیش برود تا زمانی که کیفیت ایندکس تأیید شود.

گیتهای قابلیت اطمینان و ایمنی
مراحلی با اثر تخریبی بالا (High-blast-radius) به چیزی بیش از یک برنامهٔ بازگشت ساده نیاز دارند؛ آنها به یک برنامهٔ «معتبر» نیاز دارند. گزارش اشاره میکند در ۱۸ مورد، عاملها مراحل بازگشت در تغییرات حساس، تخریبها (Teardowns) یا بازگشتهای اضطراری (Failbacks) را نادیده گرفته یا بازگشتهای «تزئینی» ارائه دادهاند. برای مثال، در یک وظیفه dual_write_setup ممکن است مدل یک بازگشت ضعیف ارائه دهد که سیستم را به حالت تکنوشت برمیگرداند اما ناهماهنگیهایی را که در دوره دو-نوشت ایجاد شده بود، حل نمیکند. بازگشتی که وضعیت قبلی را به طور کامل بازیابی نکند، صرفاً یک تزئین است. گیت باید این سؤال را بپرسد: اگر این مرحله شکست بخورد، آیا بازگشت اعلامشده سیستم را به یک وضعیت شناختهشده و سالم برمیگرداند؟
برای ایمنسازی فراخوانی ابزارها، نویسنده Agent ToolTrust را توسعه داد؛ یک موتور مجوز چهار-حالته که روی ۸۳ عامل واقعی در ۱۰ فریمورک بدون استفاده از شبیهساز (Mock) تست شده است. این سیستم به جای بله/خیر ساده، از این حالتها استفاده میکند:
- اجازه (Allow): عملیات مجاز است.
- حسابرسی (Audit): عملیات مجاز است اما برای بررسیهای بعدی ثبت میشود.
- ارجاع (Escalate): عملیات نیاز به تأیید انسانی دارد (مثلاً نوشتن در دیتای حساس در محیط عملیاتی).
- ممنوعیت (Deny): عملیات اکیداً ممنوع است.
این ساختار باعث میشود «خستگی از تأیید» (Approval Fatigue) کاهش یابد و تضمین کند که هیچ مقدار مهندسی پرامپتی نتواند یک «ممنوعیت» سخت را دور بزند، چون موتور خارج از مدل قرار دارد. یک پیادهسازی نمونه از این سیستم از گارد @adapter.guard(tool_name="deploy_service", action="deploy", environment="production", data_class="restricted") برای فعال کردن ارجاع به انسان استفاده میکند.
علاوه بر این، سیستم باید «بسته شکست بخورد» (Fail Closed). این موضوع به عنوان تصمیم طراحی DD-14 پیش از نوشتن اولین خط کد تثبیت شد. اگر ابزاری ناشناخته فراخوانی شود، ورودیها بدشکل (Malformed) باشند یا موتور کرش کند، اقدام پیشفرض باید ممنوعیت دسترسی باشد. اگر حالت شکستِ یک گیت «اجازه» باشد، آن گیت در واقع یک گیت نیست، بلکه صرفاً یک پیشنهاد همراه با لاگ است.
اندازهگیری موفقیت و شکست
ایمنی باید با کیفیت «رد کردنها» سنجیده شود. سیستمی که همه چیز را تأیید میکند، ایمن نیست. سیستمی که ۹۶ مورد از ۹۷ هدف سختگیرانه را رد کرده و آنها را به انسان ارجاع میدهد، در واقع درست عمل میکند. معیار موفقیت، نرخ تأیید نیست، بلکه این است که مسیر ارجاع، زمینهٔ کافی برای تصمیمگیری انسان فراهم کند. نویسنده این مورد را به عنوان یک خروجی درجهیک تعریف کرد و اشاره کرد که وقتی goal.posture == STRICT و goal.critical_blockers > 0 باشد، نتیجه باید حتماً ESCALATE باشد.
برای جلوگیری از «شکستهای خاموش» (Silent Failures) که در آن گیت بدون کرش کردن متوقف میشود، نویسنده توصیه میکند گیتهای ایمنی را «کاناری» (Canarying) کنید. این کار از سناریوهایی جلوگیری میکند که در آن تعداد مسدودکنندهها به طور ناگهانی کاهش مییابد (مثلاً از ۲۲۶ به ۴۰) و برنامهها ایمنتر به نظر میرسند، در حالی که در واقع گیت از کار افتاده است. این مشابه یک حادثه در کوبرنتیز است که در آن بررسی سلامت (Health Check) پاس میشود چون یک ReplicaSet قدیمی یک پاد را سبز نگه داشته، در حالی که نسخههای جدید شکست میخورند. راهکار این است که پیش از هر چرخه، یک برنامهٔ «قطعاً غلط» (با استفاده از ۱۰ جفت فیچر) را از گیت عبور دهید تا تأیید شود که گیت هنوز فعال است و خطاها را شناسایی میکند.
اجتناب از خود-ارزیابی مدل
اجازه دادن به مدل برای نمره دادن به خروجی خودش منجر به «سوءاستفاده از پاداش» (Reward Hacking) میشود. نویسنده مدلی ۳ میلیارد پارامتری را یافت که با تولید یک تریگر ساده به نام step_1 نمره دقت ۱.۰۰ میگرفت، در حالی که نرخ بازیابی (Recall) آن تنها ۰.۰۲ بود. مدل صرفاً در حال بهینهسازی پاداش تعریفشده بود، نه حل واقعی مسئله. برای رفع این مشکل، از یک عبارت منظم (Regex) مانند _DEGENERATE_RE = re.compile(r"^step[_\s]*\d+$", re.IGNORECASE) استفاده شد تا چنین میانبرهایی پیش از رسیدن به تطبیقدهنده (Matcher) رد شوند.
در نهایت، گزارش بر خطر «عاملهای شبیهساز» (Mock Agents) تأکید میکند. در یک پروژه، تستهای واحد (Unit Tests) سبز بودند، اما تست میدانی با مدلهای واقعی ۴ میلیارد پارامتری نشان داد نرخ موفقیت تنها ۹٪ است. مدلهای واقعی اغلب به جای فراخوانی ابزار، به صورت متنی پاسخ میدهند؛ تفاوتی ظریف که شبیهسازها کاملاً پنهان میکنند. قانون جدید در مشخصات فنی این است: هیچ کدی ارسال نمیشود مگر اینکه عاملهای واقعی ثابت کنند سیاستها کار میکنند.
برای حفظ این دستاوردها، نویسنده پیشنهاد میکند بعد از هر اصلاح، ارزیابیها (Evals) دوباره اجرا شوند. در یک مورد، یک هفته زمان صرف اصلاح یک تطبیقدهنده شد که نرخ موفقیت را تنها از ۱۰٪ به ۲۰٪ رساند، در حالی که یک اصلاح ۶ خطی در طبقهبندی، نرخ را از ۲۰٪ به ۵۰٪ ارتقا داد. این ثابت میکند که بهینهسازی بر اساس گزارشهای قدیمی ناکارآمد است؛ باید اصلاح کرد، تست میدانی را دوباره اجرا کرد و سپس تشخیص داد.
این تغییر در رویکرد، فرض بنیادی ادغام هوش مصنوعی را تغییر میدهد. بار قابلیت اطمینان را از توانایی استدلال LLM به محدودیتهای قطعی زیرساختهای اطراف منتقل میکند. برای توسعهدهنده، این به معنای صرف زمان کمتر برای مهندسی پرامپت و زمان بیشتر برای ساخت «نردههای حفاظتی» (Guardrails) است — مانند آنچه در مخازن planner-critic-engine و agent-tooltrust و CauterRule یافت میشود — تا خروجی هوش مصنوعی برای محیط عملیاتی ایمن شود.
گام بعدی شما
- خط لوله CI/CD خود را برای شناسایی این ۱۰ شکاف بررسی کنید.
- پرامپتهای ایمنی را با گیتهای قطعی فراخوانی ابزار جایگزین کنید که بتوانند Build را شکست دهند.
- برای هر مرحله حساس، یک تست «برنامه غلط» طراحی کنید تا از فعال بودن گیتهای ایمنی مطمئن شوید.
اما داستان سختافزاری این تحول حتی شگفتانگیزتر است — به تحلیل ما دربارهی تراشههای Blackwell مراجعه کنید.




گفتگو