تصور کنید ساعت ۲ بامداد است و یک کرش شدید در سیستم پرداخت رخ میدهد؛ لحظهای که شکاف عمیق میان «قصدِ مدل» و «اجرای انسانی» آشکار میشود. پیجر برای قابلیتی به صدا در میآید که همین دیروز مستقر شده است. در حالی که یک دستیار هوش مصنوعی بخش بزرگی از Diff کد را نوشته، تستها سبز بودهاند و پیشنمایش تمیز به نظر میرسید، اما حالا Job مربوط به صورتحسابها مدام کرش میکند. بسیاری از برنامهنویسان در این لحظه غریزی مدل را مقصر میدانند، اما این واکنش فقط زمان را میسوزاند. مشکل واقعی در «تحویل» (Handoff) است؛ یعنی همان لحظهای که هدف از ذهن نویسنده پرامپت به مهندس On-call منتقل میشود.
همانطور که در تحلیل قبلی ما دربارهی تأثیر کدهای تولیدشده توسط AI بر ارزیابیهای فنی اشاره کردیم، اکنون این چالش از اتاق مصاحبه به سرورهای عملیاتی منتقل شده است. تحویل زمانی رخ میدهد که قصد و هدف بین افراد جابجا شود. نویسنده پرامپت از هدف نهایی آگاه است. بازبین (Reviewer) تغییرات کد یا همان Diff را میشناسد. اما مهندس On-call در ساعت ۲ صبح هیچکدام از این دو را نمیداند. مدل زبانی بزرگ (LLM) — مثل کتابخانهداری که میلیاردها صفحه را خوانده و حالا با همان لحن کتابها جواب میدهد — حافظه گفتگو را دارد، اما انسانی که بیدار شده تا مشکل را حل کند، هیچ ایدهای از آن گفتگو ندارد. این وضعیت یک نقطه کور خطرناک ایجاد میکند؛ جایی که توسعهدهندگان به یک خط لوله CI «سبز» اعتماد میکنند که شاید بیسروصدا برخی از بررسیهای حیاتی (Assertions) را حذف کرده باشد.
به نقل از راهنمای منتشرشده در dev.to در ۲۹ اوت ۲۰۲۶، تیمها باید با هر تغییر تولیدشده توسط هوش مصنوعی به عنوان یک «تحویل بدون حافظه» برخورد کنند. متن پرامپت به معنای هدف نیست و تستهای سبز هم دلیل بر صحت نیستند. یک حادثه در واقع برخورد این سه مورد است. برای مدیریت این بحران، یک دستورالعمل سختگیرانه ۶۰ دقیقهای پیشنهاد شده است که مهار آسیب را بر بررسی علت اولویت میدهد تا «شعاع تخریب» (Blast Radius) یک شکست را فوراً متوقف کند. این چالش در واقع نسخهای فنیتر از مدیریت انتقال بیوقفه تعاملات از هوش مصنوعی به انسان است که در محیطهای سازمانی برای حفظ تجربه کاربر حیاتی است.
ساعت مهار ۶۰ دقیقهای
- دقیقه ۰ تا ۵: مهار. تنها هدف توقف خسارت است. مهندسان نباید ابتدا کد را بخوانند. آنها باید یا استقرار را با دستور
kubectl rollout undo deployment/billingبه عقب برگردانند یا قابلیت را از طریق سرویس Flag غیرفعال کنند؛ مثلاً با دستوری شبیه به:curl -X POST https://flags.example.com/api/billing-v2 -H 'Content-Type: application/json' -d '{"enabled": false}'. یک بازگشت (Revert) «خستهکننده و ساده»، سریعترین راه رسیدن به پایداری است. این ضرورت بازگشت سریع، با توجه به ضعف مدلهای زبانی در تولید اسکریپتهای بازگشتی کد، اهمیت دوچندانی مییابد زیرا نمیتوان برای عملیات Rollback نیز به AI تکیه کرد. - دقیقه ۵ تا ۱۵: ثبت شواهد. پانیک باعث پاک شدن بستر ذهنی در کمتر از یک ساعت میشود. تیمها باید از اسکریپت
incident_snapshot.shاستفاده کنند تا پرامپت اصلی، بازه Git و خروجی تستها را در یک پوشه جمع کنند. این بسته شاملgit log --oneline -10، فایلlast_diff.patch، متن اصلی پرامپت، خلاصه خروجی مدل و خروجیpytest -q --tb=shortاست. این همان تحویلی است که هرگز وجود نداشت و به پاسخدهندگان بعدی اجازه میدهد تغییرات را بازسازی کنند. - دقیقه ۱۵ تا ۴۰: بازتولید. ورودی خطا در یک مدل ساده و بدون لایههای جانبی (Scaffolding) اجرا میشود. این کار یک مورد شکست حداقلی ایجاد میکند که رفتارهای خام مدل را — که در لاگها نیست — آشکار میکند. برای این مرحله نیازی به GPU رزرو شده نیست و نسخههای رایگان مدلها کفایت میکنند. هدف در اینجا ایجاد یک بازتولید (Repro) کوچک است، نه یافتن راه حل کامل.
- دقیقه ۴۰ تا ۶۰: تصمیمگیری. تیم تصمیم میگیرد که آیا اصلاحیه به اندازه کافی واضح است که فوراً مستقر شود یا سیستم باید در حالت بازگشت باقی بماند. گام نهایی، ثبت حالت شکست در یک Runbook در یک پاراگراف است. این کار تضمین میکند که مهندس On-call بعدی به جای سکوت، با یک سرنخ مواجه شود.
دستورالعمل فشرده
از آنجا که یک مهندس خسته در ساعت ۲ صبح نمیتواند مقاله بخواند، این راهنما پیشنهاد میکند کل این چرخه در ۶ خط در یک صفحه ویکی با نام «AI-Change Incident» خلاصه شود:
۱. مهار: قبل از خواندن کد، بازگشت (Revert) یا غیرفعالسازی Flag.
۲. ثبت: اجرای incident_snapshot.sh.
۳. بازتولید: اجرای ورودی خطا روی مدل ساده.
۴. تصمیم: اصلاح فوری یا حفظ حالت بازگشت.
۵. ثبت: یک پاراگراف درباره حالت شکست.
۶. بازیابی: تأیید وضعیت و تحویل سیستم.
اعتبارسنجی و تمرین
اعتبارسنجی به چیزی بیش از تستهای سبز نیاز دارد. یک طرح کلی برای ورکشاپها هشدار میدهد که اصلاحیههای هوش مصنوعی میتوانند فریبنده باشند؛ مثلاً یک وصله ممکن است تست را با حذف همان بررسی (Assertion) که باگ را شناسایی کرده بود، «سبز» کند. هر اصلاحیه AI باید به عنوان یک فرضیه تلقی شود که پیش از ادغام، نیاز به یک ریتوال سه مرحلهای (Three-pass ritual) برای بررسی دارد.
برای جلوگیری از قدیمی شدن این دستورالعملها، استفاده از MonkeyCode پیشنهاد شده است. این پروژه متنباز، محیطی رایگان برای تمرین حوادث فراهم میکند که شامل ۱۰ میلیون توکن مدل و یک سرور رایگان است. (افشا: این مطلب بخشی از معرفی محصول MonkeyCode است، اما منابع ذکر شده برای اجرای تمرینها بدون هزینه زیرساختی کاربردی هستند).
یک تمرین معمولی شامل فعال کردن یک حادثه شبیهسازی شده با استفاده از اسکریپت drill.sh است که یک شاخه (Branch) را باز میکند، یک تغییر معیوب شناخته شده (مثلاً broken_billing.py) را کپی کرده و آن را به شاخه تمرینی میفرستد. سپس یک پاسخدهنده «کور» — کسی که هرگز تغییرات را ندیده — مسئول اجرای دستورالعمل ۶ خطی است. اولین تمرین معمولاً شکافهای زشتی را برملا میکند و تمرین سوم به یک عادت تبدیل میشود.
محدودیتهای عملیاتی
این چارچوب جهانی نیست و پیشفرض آن وجود قابلیت Rollback و Feature Flag است. سیستمهای فاقد این ابزارها به زمان مهار طولانیتری نیاز دارند. تیمهایی که لاگ ندارند، نمیتوانند شواهد را ثبت (Snapshot) کنند. علاوه بر این، در سیستمهای حساس (Safety-critical)، هیچ تمرینی جایگزین مسئولیت حرفهای و نیاز به یک تاییدکننده انسانی با اختیار واقعی نمیشود.
برای تیمهایی که هشدارهای آنها نویز زیادی دارد، یک مرحله تریاژ (Triage) پیش از دقیقه صفر لازم است. برای تیمهایی که هر خط کد AI توسط انسان پیش از ادغام بررسی میشود، این دستورالعمل مکمل است نه جایگزین. این تیمها نقطه شکست را به مراحل ابتدایی چرخه منتقل کردهاند و بیشتر به یک گردشکار بررسی نیاز دارند تا یک پروتکل بازیابی.
این رویکرد، ذهنیت مهندسی را از «چرا هوش مصنوعی شکست خورد» به «چگونه از این تحویل بازیابی کنیم» تغییر میدهد. با تلقی تغییرات AI به عنوان تحویلهای بدون حافظه، استرس چرخشهای On-call و مدت زمان قطعی سیستمها کاهش مییابد. برای پیادهسازی این روش، تیمها باید با قرار دادن دستورالعمل ۶ خطی فشرده در ویکی داخلی خود به عنوان منبع واحد حقیقت برای حوادث AI شروع کنند.
گام بعدی شما
- دستورالعمل ۶ خطی فشرده را همین امروز در ویکی داخلی تیم خود به عنوان منبع واحد حقیقت برای حوادث AI قرار دهید.
- یک تمرین «کور» با استفاده از MonkeyCode یا محیط Staging خود ترتیب دهید تا نقاط ضعف در دسترسی به لاگها و پرامپتها را شناسایی کنید.
- اسکریپتی مشابه
incident_snapshot.shبنویسید که تمام متغیرهای محیطی و پرامپتهای مرتبط با یک تغییر را در لحظه کرش ذخیره کند.
اما داستان سختافزاری این تحول حتی شگفتانگیزتر است — به تحلیل ما دربارهی تراشههای Blackwell مراجعه کنید.




گفتگو