لا تتعامل مع LangGraph كمجرد سلسلة أطول

توقف عن رؤية LangGraph على أنه LangChain بخطوات أكثر. هذا الخطأ يؤدي إلى وكلاء (agents) معطلين.

LangGraph مخصص لسير العمل (workflows) الذي يتطلب حالة (state)، وتفرعات (branches)، واستدعاءات للأدوات (tool calls)، وموافقة بشرية. إنه مخصص للوكلاء الذين يجب أن يتعافوا من الأخطاء دون الحاجة لإعادة التشغيل.

إذا كنت ستستخدمه، يجب عليك تحديد ثلاثة أشياء أولاً: الحالة (state)، والاعتراضات (interrupts)، والتعافي (recovery).

الحد الأول: مخطط الحالة (State Schema)

بالنسبة للمطالبة (prompt) الواحدة، يكون الحد هو النص. أما بالنسبة لـ LangGraph، فإن الحد هو مخطط الحالة (State schema). يجب عليك تحديد ما يلي:

  • أي الحقول تنتقل بين العقد (nodes).
  • أي الحقول تقوم العقدة بتحديثها.
  • كيف تدمج التفرعات المتزامنة القيم.
  • أي القيم تدخل في نقطة التحقق (checkpoint).
  • أي القيم يجب ألا تستمر أبداً.

تعتبر الـ Reducers حاسمة هنا. إذا لم تضع قاعدة مناسبة لإلحاق الرسائل (append messages)، فستفقد بياناتك أثناء العمل المتوازي.

ابدأ بخطوات صغيرة. ابنِ رسماً بيانياً (graph) بمخطط واحد، وعقدة واحدة، وreducer واحد. إذا لم تتمكن من جعل ذلك يعمل، فإن إضافة الأدوات لن تؤدي إلا إلى إخفاء أخطائك.

حد وقت التشغيل (Runtime Boundary)

قبل استدعاء compile()، يكون الرسم البياني مجرد وصف. بعد compile()، يتولى وقت التشغيل (runtime) المهمة.

عندما يفشل الرسم البياني، لا تنظر إلى العقدة فحسب. تحقق من هذه الأشياء الأربعة:

  • هل يسمح مخطط الحالة (State schema) للعقدة بكتابة ذلك المفتاح (key)؟
  • هل تعيد العقدة حقلاً صالحاً في الحالة (State field)؟
  • هل يقوم الـ reducer بدمج البيانات بشكل صحيح؟
  • هل للحافة الشرطية (conditional edge) مسار خروج؟

العنصر البشري في الحلقة (Human In The Loop)

لا تتعامل مع الموافقة البشرية كميزة في واجهة المستخدم (UI). تعامل معها كعقد للرسم البياني (graph contract).

النمط الموثوق يبدو كالتالي:

  • يقترح النموذج استدعاء أداة.
  • يرفع الرسم البياني اعتراضاً (interrupt).
  • يقوم إنسان بالموافقة على الإجراء أو تعديله.
  • يستأنف الرسم البياني العمل من تلك النقطة تحديداً.

هذا يجعل الوكلاء قابلين للتعافي بدلاً من كونهم مجرد رد فعل.

قائمة التحقق السريعة (Smoke Checklist)

قبل الانتقال إلى مرحلة الإنتاج، قم بإجراء هذا الاختبار:

  • استخدم دليلاً مؤقتاً لا يحتوي على بيانات إنتاج.
  • حدد حالة (State) دنيا.
  • اكتب عقدة واحدة تعيد الحقول الصالحة فقط.
  • استخدم reducer لعمليات الإلحاق (append).
  • أضف اعتراضاً واحداً قبل إجراء الأداة.
  • أضف أداة حفظ نقاط التحقق (checkpointer).
  • تسبب في فشل متعمد وتحقق من سلوك الاستئناف.

إذا فشل هذا المسار، فلا تضف المزيد من الأدوات. المشكلة تكمن في حد وقت التشغيل (runtime boundary) الخاص بك.

LangGraph ليس لاستدعاءات النموذج لمرة واحدة. استخدمه عندما يحتاج الذكاء الاصطناعي الخاص بك إلى أداء عمل متعدد الخطوات يمكن فحصه، وإيقافه مؤقتاً، ومراجعته.

Source: https://dev.to/doramagic/do-not-treat-langgraph-as-a-longer-chain-define-state-interrupts-and-recovery-first-4n3n

Optional learning community: https://t.me/GyaanSetuAi