ما وراء الـ Prompt: هندسة الـ Agentic Layer باستخدام LangGraph و Expo
أتعمق في التحول المعماري من سلاسل LLM الخطية إلى سير عمل متعدد الوكلاء (multi-agent) يتميز بالحالة (stateful) والدورية. اكتشف كيف دمجت تنسيق LangGraph في الـ backend مع Expo لبناء تجارب جوال مستقلة حقاً.

ما وراء الـ Prompt: هندسة الـ Agentic Layer
خلال العام الماضي، كان أغلبنا يعمل باستخدام سلاسل خطية (linear chains). ترسل Prompt، وتتلقى رداً، وربما تعززه ببعض الـ RAG (Retrieval-Augmented Generation). ولكن مع توسعي في بناء تطبيقات ذكاء اصطناعي (AI) موجهة للإنتاج، واجهت عائقاً: الحتمية (determinism) مقابل الاستقلالية (autonomy). السلاسل الخطية هشة جداً بالنسبة للتفكير المعقد متعدد الخطوات، والوكلاء (agents) الخام غير متوقعين بدرجة لا تناسب واجهات المستخدم (UI) المصقولة.
في مشاريعي الأخيرة، نقلت تركيزي إلى ما أسميه الـ Agentic Layer. هذا ليس مجرد Chatbot؛ إنه Graph قائم على الحالة (stateful) من وكلاء متخصصين يمكنهم التكرار، والتصحيح الذاتي، والتفكير المنطقي. إليكم كيف أقوم ببناء ذلك باستخدام LangGraph في الـ backend و Expo في الـ frontend.
المشكلة في التفكير الخطي
تسلسلات LangChain القياسية تشبه سباق التتابع؛ بمجرد تمرير العصا، لا يوجد طريق للعودة. إذا أدركت الخطوة الثالثة أن الخطوة الأولى كانت خاطئة، تفشل العملية برمتها.
في سير عمل هندسي حقيقي، تحتاج إلى دورات (cycles). تحتاج إلى وكيل 'Researcher' للعثور على البيانات، ووكيل 'Critic' لإيجاد الثغرات، ووكيل 'Writer' لتجميعها. إذا لم يكن الـ Critic راضياً، يجب على الـ Researcher العودة مرة أخرى. هذا بالضبط ما يحله LangGraph من خلال التعامل مع سير العمل كـ State Machine.
المعمارية: LangGraph كعقل مدبر
يسمح لي LangGraph بتعريف StateGraph. الحالة (state) هي Schema مشتركة يقرأ منها جميع الوكلاء ويكتبون فيها.
تضمن هذه الدورة أن المخرجات تلبي معايير جودة محددة قبل أن تصل إلى شاشة المستخدم.
الربط مع الـ Edge: التكامل مع Expo
بناء backend قوي هو نصف المعركة فقط. تقديم هذا إلى جهاز جوال عبر Expo يتطلب تحولاً في كيفية التعامل مع الحالة. بما أن سير عمل الوكلاء قد يستغرق 30 ثانية أو دقيقتين، فإن طلب REST القياسي سينتهي وقته (timeout) أو سيوفر تجربة مستخدم (UX) سيئة.
1. البث المباشر باستخدام SSE
أنا لا أنتظر حتى ينتهي الـ Graph. أستخدم Server-Sent Events (SSE) لبث الحالة الداخلية للـ Graph مباشرة إلى تطبيق Expo الخاص بي. بينما ينهي الـ 'Researcher' مهمته، يتم تحديث واجهة الجوال لتظهر "جاري جمع البيانات..." بينما يبدأ الـ 'Critic' عمله.
2. طبقة الاستمرارية (Persistence Layer)
أحد أكبر النجاحات التي حققتها كان استخدام الـ checkpointer في LangGraph. إذا أغلق المستخدم تطبيق Expo في منتصف سير العمل، يتم حفظ الحالة في Postgres. وعندما يعيد فتح التطبيق، تستأنف العملية الوكيلية (agentic process) من حيث توقفت بالضبط. لا ضياع للـ Tokens، ولا ضياع للتقدم.
الـ Expo Custom Hook
في الـ frontend، قمت بتجريد التعقيد في Custom Hook. هذا الـ Hook يدير الاتصال بـ Agentic Layer ويقوم بتحديث واجهة المستخدم بناءً على الـ current_node في الـ Graph.
لماذا يهمنا هذا؟
كمهندسين خبراء، تكمن وظيفتنا في الانتقال من "تطبيقات العرض" (demo-ware) إلى أنظمة مرنة. من خلال تنفيذ الـ Agentic Layer:
- نتعامل مع الحالات الحافة (edge cases) بشكل أصيل: الأخطاء ليست انهيارات؛ بل هي مجرد Node أخرى في الـ Graph.
- نحسن تجربة المستخدم (UI/UX): يرى المستخدمون عملية "التفكير"، مما يبني الثقة في مخرجات الذكاء الاصطناعي.
- توسيع نطاق التفكير: يمكننا إضافة المزيد من الـ Nodes المتخصصة (قانوني، امتثال، ميزانية) دون إعادة هيكلة السلسلة بأكملها.
لقد غير الانتقال إلى LangGraph و Expo طريقة نظرتي لتطوير الذكاء الاصطناعي. لم يعد الأمر يتعلق بكتابة الـ Prompt المثالي؛ بل يتعلق بهندسة النظام المثالي من حلقات التغذية الراجعة (feedback loops).
دعونا نتوقف عن بناء السلاسل ونبدأ في بناء الـ Graphs.