AI Autopilot Freeze: The Danger of Relying on Timestamps
تعمل وكلاء الذكاء الاصطناعي لدينا على مدار الساعة طوال أيام الأسبوع.
فهي تحول المتطلبات إلى مهام، وتكتب الكود، وتفتح طلبات السحب (pull requests). ثم يقوم مراجع يعمل بالذكاء الاصطناعي بالموافقة على العمل، وبعد ذلك يقوم النظام بدمج الكود تلقائيًا.
في أحد الصباحات، لاحظنا عدم إنجاز أي مهمة لمدة ثلاثة أيام.
بدا النظام سليمًا؛ فكل مكون كان يعطي حالة "خضراء" (جاهز). كانت الخطط تُنشأ، والوكلاء يعملون، والمراجع يوافق. الشيء الوحيد المفقود كان عملية الدمج (merge).
كان السبب هو فحص "الحداثة" (freshness check) الذي قمنا ببنائه بأنفسنا.
أردنا منع خطأ معين؛ حيث لم نكن نريد دمج الكود إذا وافق المراجع عليه ثم طلب تغييرات لاحقًا. ولحل هذه المشكلة، أخبرنا النظام: "لا تثق إلا بالمراجعات التي تمت بعد أن بدأنا الانتظار".
فشل هذا المنطق أثناء عمليات استعادة النظام.
إذا أعيد تشغيل النظام أو نُقلت مهمة إلى خادم جديد، فإنه يعيد ضبط الطابع الزمني لـ "بدء الانتظار" إلى الوقت الحالي.
إذا وافق المراجع على الكود في الساعة 10:00 صباحًا، ولكن النظام أعيد تشغيله في الساعة 10:30 صباحًا، فسوف يتجاهل النظام موافقة الساعة 10:00 صباحًا، لأنه اعتقد أن الموافقة قديمة جدًا.
كانت الموافقة لا تزال موجودة على GitHub، لكن الكود الخاص بنا لم يتمكن من رؤيتها. دخل النظام في حالة جمود تام (deadlock).
تعلمت ثلاثة دروس قاسية من هذا:
تعامل مع الحالة الخارجية كلقطة (snapshot)، وليس كحدث. لا تسأل "هل حدث شيء جديد؟"، بل اسأل "ما هي الحالة الحالية الآن؟". إذا نظرت إلى الحالة الحالية، فلن تؤثر عمليات إعادة التشغيل.
لا تقم بإعادة ضبط الطوابع الزمنية أثناء عملية الاستعادة. إذا قمت بإعادة ضبط وقت "بدء العمل" أثناء محاولة الإعادة، فإنك تمحو جميع الحقائق التي حدثت قبل تلك اللحظة. لا تقم بإعادة ضبط الطوابع الزمنية إلا عندما يتغير العمل الفعلي.
راقب أين تتوقف المهام، وليس فقط ما إذا كانت قد اكتملت. عدد المهام "المكتملة" يخبرك بوجود مشكلة، لكن توزيع المهام حسب الخطوة يخبرك بمكان المشكلة. لقد اكتشفنا المشكلة لأننا رأينا 28 مهمة عالقة في خطوة "انتظار المراجعة".
العملية النشطة التي تتبع قاعدة خاطئة لن تظهر أبدًا في فحص الحالة (health check)؛ فهي تبدو سليمة لأنها تعمل تمامًا كما هو مبرمج لها.
إذا كنت تبني أنظمة مؤتمتة، فلا تكتفِ بمراقبة الأخطاء فقط، بل راقب الأماكن التي تتراكم فيها عملياتك.
Optional learning community: https://t.me/GyaanSetuAi
