
LangGraph أم CrewAI؟ التعافي من الانقطاع يكشف فرق التحكم

إذا كانت الأولوية معرفة ما سيُعاد تنفيذه بعد انقطاع سير طويل، يمنح LangGraph المطوّر حدوداً أوضح للتحكم: تحفظ نقاط تحقق LangGraph حالة كل خيط عند خطوات الرسم البياني، وتحتفظ بكتابات العقد التي اكتملت إذا فشلت عقدة أخرى في الخطوة نفسها. لكن العقدة التي انقطع تنفيذها لا تستأنف من التعليمة التي توقفت عندها.
يدعم CrewAI الاستئناف أيضاً، لكن موضع الحفظ يعتمد على الآلية المستخدمة. تحفظ نقاط تحقق CrewAI تقدم التشغيل عند أحداث يختارها المطوّر؛ والإعداد الافتراضي ينشئ نقطة بعد اكتمال مهمة، بحيث يمكن تجاوز المهمة المكتملة عند الاستعادة. أما حفظ حالة Flow فيخدم غرضاً مختلفاً. لذلك يتحدد الاختيار بما تريد استعادته: حالة التدفق، أم تقدم المهام، أم حدود تنفيذ أدق حول أداة قد يتكرر أثرها.
انقطاع بعد إرسال الإشعار
لنفترض سيراً افتراضياً يقرأ طلب عميل، ويعد مسودة رد، وينتظر موافقة بشرية، ثم يستدعي خدمة ترسل إشعاراً. تقبل الخدمة طلب الإرسال، لكن عملية الوكيل تتوقف قبل أن تحفظ نتيجة الاستدعاء. عند الاستئناف، لا تتضمن آخر حالة محفوظة دليلاً حاسماً على وصول الطلب إلى الخدمة؛ وقد تؤدي إعادة استدعاء الأداة إلى إشعار مكرر.
يكشف المثال حدود ثلاثة أشياء متمايزة: البيانات التي يتذكرها الوكيل، والتقدم الذي يستطيع إطار التنفيذ استعادته، والأثر الذي وقع في نظام خارجي. يمكن لنقطة التحقق أن تحفظ المسودة أو مخرجات مهمة مكتملة، لكنها لا تجعل إرسال الإشعار وحفظ نتيجة الإرسال معاملة واحدة. وتزداد كلفة الإعادة إذا جُمعت قراءة الطلب والصياغة والإرسال في وحدة تنفيذ طويلة، لأن فشلها قرب النهاية قد يعيد عملاً سبق إنجازه.
حدود العقد في LangGraph
تقرأ عقد LangGraph الحالة وتعيد تحديثات إليها، ثم تُحفظ لقطة كاملة عند نهاية خطوة الرسم البياني. يوضح شرح تصميم العقد أن التنفيذ بعد الانقطاع يبدأ من بداية العقدة التي توقف داخلها. لهذا يستطيع المطوّر وضع استخراج البيانات وصياغة الرد وإرسال الإشعار في عقد منفصلة: نجاح الصياغة قبل بدء عقدة الإرسال يجعل مسودتها جزءاً من الحالة التي ينطلق منها الاستئناف.
تظهر فائدة أخرى إذا عملت عقدتان في الخطوة نفسها، فأكملت إحداهما وفشلت الأخرى. يحتفظ LangGraph بكتابة العقدة الناجحة بوصفها كتابة معلقة مرتبطة بالخطوة الجارية، فلا يعيد تشغيلها عند استئناف تلك الخطوة. هذه الكتابة ليست لقطة حالة كاملة يمكن اختيارها كموضع مستقل لإعادة التشغيل؛ اللقطة الكاملة تتكون عند اكتمال الخطوة. بذلك يمكن تجنب إعادة عمل فرع ناجح، مع بقاء أثر أي أداة داخل العقدة الفاشلة موضع فحص.
تؤثر طريقة تثبيت النقاط في مقدار ما يمكن استعادته بعد انهيار العملية. في وضع الحفظ المتزامن ينتظر التنفيذ كتابة نقطة التحقق قبل الانتقال إلى الخطوة التالية. وفي الوضع غير المتزامن قد يبدأ العمل التالي بينما لا تزال الكتابة جارية، فتوجد نافذة قد تضيع فيها النقطة عند انهيار العملية. أما حفظ الحالة عند الخروج فقط فلا يحمي تقدم السير الوسيط من انهيار مفاجئ. اختيار الوضع هنا قرار مرتبط بكلفة إعادة العمل وبأثر الأدوات، وليس مجرد إعداد للأداء.
حالة Flow وتقدم التشغيل في CrewAI
يفصل CrewAI بين حفظ بيانات Flow وبين نقاط تحقق التشغيل. يتيح حفظ حالة Flow باستخدام @persist تطبيق الحفظ على الفئة كلها أو على طرق محددة، ويستخدم SQLite افتراضياً. ويمكن تحميل آخر حالة محفوظة بمعرّف التدفق نفسه. إذا توقفت طريقة أثناء عملها، فإن استعادة قيم الحالة السابقة لا تعني استعادة موضع التعليمة داخل تلك الطريقة أو إثبات نتيجة استدعاء خارجي لم تُحفظ.
أما نقاط تحقق التشغيل فتسجل سياق Crew أو Flow أو Agent وفق أحداث يحددها إعداد الحفظ. عندما تُنشأ نقطة بعد اكتمال مهمة، تُستعاد مخرجاتها ويستمر العمل اللاحق من دون إعادة المهمة المكتملة. ويمكن اختيار حدث انتهاء طريقة Flow أو أحداث أكثر تفصيلاً لتقريب موضع الحفظ من العمل المراد حمايته، مقابل زيادة الكتابات إلى التخزين. لهذا لا يكفي القول إن المهمة انتهت في الذاكرة؛ المهم أن حدث الحفظ المناسب قد وقع وأن كتابة النقطة نجحت.
هناك فرق تشغيلي مؤثر عند فشل التخزين: كتابة نقطة التحقق التلقائية المرتبطة بحدث تبذل أفضل جهد؛ إذا فشلت، يُسجل الخطأ ويستمر التشغيل. أما طلب كتابة نقطة يدوياً فيُظهر فشلها للبرنامج. ويساعد هذا التفريق فريقاً يعتمد على استعادة تقدم المهام في تحديد ما إذا كان السماح للسير بالمتابعة بعد تعذر الحفظ مقبولاً في حالته.
الموافقة البشرية والفعل الذي قد يتكرر
في السيناريو الافتراضي، تُحفظ المسودة ومعرّف الطلب قبل انتظار قرار المراجع، ويبدأ الإرسال بعد الموافقة في وحدة تنفيذ مستقلة. يسمح ذلك بالعودة إلى سياق القرار إذا توقف العامل أثناء الانتظار. لكنه لا يحل الغموض إذا توقف بعد قبول خدمة الإشعارات للطلب وقبل تسجيل النتيجة: آخر لقطة لدى الإطارين تصف ما عرفه الوكيل، لا كل ما وقع خارج عملية الوكيل.
يعالج التكامل هذا الغموض بمفتاح ثابت للعملية إذا كانت الخدمة الخارجية تدعم منع التكرار. ويمكن، بحسب واجهة الخدمة، الاستعلام عن حالة الطلب بذلك المفتاح قبل محاولة جديدة. وللأفعال الحساسة، يفيد تسجيل نية الإرسال ومعرّفها قبل الاستدعاء ثم تسجيل النتيجة بعده؛ فإذا بقيت نية بلا نتيجة، تُحال إلى مصالحة مع النظام الخارجي. هذا تصميم لحدود التعامل مع الأداة، ويظل مطلوباً سواء كانت نقطة الاستئناف عقدة في LangGraph أو مهمة في CrewAI.
قاعدة البيانات وسجل ما حدث
ينبغي أن يبقى مخزن الحالة متاحاً للعامل الذي يستأنف السير بعد إعادة التشغيل. تبيّن وثائق استمرارية LangGraph أن الحافظ الموجود في الذاكرة يفقد نقاطه عند توقف العملية، وتعرض PostgreSQL للتخزين المستمر وSQLite للعمل المحلي. وفي CrewAI لا ينبغي الخلط بين قاعدة SQLite الافتراضية لحالة @persist وبين مخزن نقاط تحقق التشغيل: يمكن للأخير استخدام ملفات JSON أو قاعدة SQLite بحسب الإعداد.
لقطة الحالة تجيب عما عرفه السير عند حد حفظ معين، وقد تتضمن نقاط تحقق التشغيل سياق المهام والأحداث اللازمة للاستعادة. لكن سجل التدقيق للأفعال الخارجية يحتاج بيانات أخرى: معرّف الطلب لدى الخدمة، ووقت المحاولة، ونتيجتها المؤكدة، وربطها بموافقة الإنسان إن كانت مطلوبة. إذا كان المطلوب تفسير سبب إرسال إشعار بعينه، فلا يكفي الاحتفاظ بآخر مسودة أو بمخرج مهمة؛ يجب أن يمكن وصل قرار الإرسال بنتيجة الخدمة الخارجية.
- ثبّت معرّف السير واحفظه خارج ذاكرة العامل، وحدد كيف سيعثر عامل آخر على الحالة الصحيحة.
- ارسم حد الحفظ السابق لكل أداة مؤثرة: عقدة مكتملة، أو طريقة Flow محفوظة، أو مهمة أنشأت نقطة تحقق.
- افصل بين اختبار توقف الأداة قبل تنفيذ الطلب واختبار توقف الوكيل بعد تنفيذ الطلب وقبل تسجيل الرد؛ الحالة الثانية هي التي تكشف خطر التكرار.
- راقب إخفاق كتابة نقاط التحقق وسياسة الاحتفاظ بها، واحتفظ بمعرّفات الأفعال الخارجية اللازمة للمصالحة والتدقيق.
يكون LangGraph أنسب عندما يريد الفريق تصميم حدود الاستئناف وانتقالات الحالة صراحة حول كل خطوة مؤثرة. ويكون CrewAI ملائماً حين تنسجم وحدة العمل مع مهمة وكيل أو طريقة Flow، مع ضبط أحداث الحفظ عند الحاجة. في الحالتين، يتوقف التعافي الموثوق على معرفة آخر حد محفوظ وعلى طريقة آمنة للتعامل مع فعل خارجي ربما اكتمل بالفعل.
اقرأ أيضًا:
مقالات ذات صلة


ثغرة Cisco ISE تُستغل فعليًا: لا حل مؤقتًا والتحديث وحده لا يكفي

Supabase تجمع 150 مليون دولار وتشتري Turso: وكل وكيل يحصل على قاعدة

LangChain أم LlamaIndex لـRAG؟ الاختيار يبدأ من بنية التطبيق

تعطل ChatGPT وClaude وGrok معًا: خطة الاحتياط لم تعد رفاهية

اعتراض Content ID خلال خمسة أيام يحمي إيراد YouTube من اليوم الأول
اشترك في نشرتنا الإخبارية
احصل على أحدث أخبار الويب 3 والذكاء الاصطناعي والعملات المشفرة مباشرة في بريدك.