أدى التطور السريع للنماذج اللغوية الكبيرة (LLMs) إلى تحويل التركيز من روبوتات الدردشة البسيطة إلى وكلاء مستقلين معقدين قادرين على الاستدلال واستخدام الأدوات والتخطيط متعدد الخطوات. ومع ذلك، غالبًا ما يشعر بناء أنظمة الوكلاء القوية وكأنه معركة ضد الطبيعة الاحتمالية للنماذج. هنا يأتي دور LangGraph. تم تطوير LangGraph بواسطة LangChain، وهو ليس مجرد غلاف آخر حول LLMs؛ بل هو إطار عمل للتنسيق على مستوى منخفض مصمم لبناء وإدارة ونشر تطبيقات متعددة الفاعلين مع حالة محفوظة.
على عكس السلاسل الخطية التقليدية، يتيح LangGraph للمطورين نمذجة التطبيقات كرسوم بيانية. يوفر هذا التحول في النموذج تحكمًا دقيقًا في تدفق التنفيذ، مما يتيح الحلقات المنطقية الشرطية وإدارة الحالة الدائمة. في هذه المقالة، سنستكشف كيفية الاستفادة من LangGraph لبناء أنظمة ذكاء اصطناعي مرنة.
لماذا نتجاوز السلاسل الخطية؟
تعتمد أطر عمل تطبيقات LLM التقليدية غالبًا على "السلاسل" — وهي سلسلة من الخطوات حيث تمرر كل خطوة مخرجاتها إلى الخطوة التالية. على الرغم من أن هذا النهج بديهي، إلا أن السلاسل تفشل عندما يحتاج الوكلاء إلى التكرار، وتصحيح الأخطاء، أو إعادة زيارة الخطوات السابقة. على سبيل المثال، قد يحتاج وكيل البحث إلى: البحث في الويب → قراءة مقال → إدراك أن المعلومات غير كافية → البحث مرة أخرى → تركيب إجابة نهائية.
يحل LangGraph هذه المشكلة من خلال السماح بالدورات الصريحة. يتم تعريف التطبيق كـ StateGraph، حيث تمثل العقد الدوال (منطق أو استدعاءات LLM) وتحدد الحواف تدفق التحكم. يجعل هذا التعريف الصريح تصحيح الأخطاء أسهل ويتدخل في نقاط محددة.
المفاهيم الأساسية: الحالة والعقد
في قلب LangGraph يوجد مفهوم الحالة المشتركة. على عكس تمرير المتغيرات بين استدعاءات الدوال، يحافظ LangGraph على كائن حالة مشترك يمكن لجميع العقد قراءته وتحديثه. عادةً ما يتم تعريف هذه الحالة كـ TypedDict أو نموذج Pydantic، مما يضمن سلامة الأنواع والوضوح.
فكّر في مخطط حالة بسيط لروبوت دعم:
from typing import TypedDict
class AgentState(TypedDict):
messages: list
intent: str
resolution: str
كل عقدة هي دالة تأخذ الحالة الحالية وتعيد تحديثًا جزئيًا. يسمح هذا الفصل بين المهام بتبديل المكونات الفردية (مثل تغيير نموذج LLM أو قاعدة البيانات المتجهية) دون إعادة كتابة منطق التنسيق بأكمله.
بناء أول رسم بياني لوكيلك
لنلقِ نظرة على مثال عملي: وكيل فرز بسيط يوجه استفسارات المستخدم إما إلى "مساعد مفيد" أو "معالج استرداد" بناءً على النية.
from langgraph.graph import StateGraph, END
from langchain_openai import ChatOpenAI
llm = ChatOpenAI(model="gpt-4")
def triage_agent(state: AgentState):
prompt = f"Classify the intent of this message: {state['messages'][-1].content}\nReturn only 'help' or 'refund'."
response = llm.invoke(prompt)
intent = response.content.strip().lower()
return {"intent": intent}
def help_agent(state: AgentState):
prompt = "You are a helpful assistant. Answer: " + state['messages'][-1].content
response = llm.invoke(prompt)
return {"resolution": response.content}
def refund_agent(state: AgentState):
return {"resolution": "Your refund request has been logged."}
# Define the graph
graph = StateGraph(AgentState)
# Add nodes
graph.add_node("triage", triage_agent)
graph.add_node("help", help_agent)
graph.add_node("refund", refund_agent)
# Set entry point
graph.set_entry_point("triage")
# Define conditional edges
def route_by_intent(state: AgentState):
if state["intent"] == "refund":
return "refund"
return "help"
graph.add_conditional_edges(
"triage",
route_by_intent,
["help", "refund"]
)
# Finish the graph
graph.add_edge("help", END)
graph.add_edge("refund", END)
# Compile
app = graph.compile()
يوضح هذا الكود قوة LangGraph: يعمل triage_agent كموجّه، ويعتمد المسار اللاحق على تحديث الحالة الديناميكي. يمكنك تصور هذه البنية باستخدام LangGraph Studio أو طريقة .get_graph() المدمجة، التي تولّد مخطط Mermaid للتوثيق.
اعتبارات الإنتاج: الدائمة والذاكرة
واحدة من أهم مزايا LangGraph هي دعمها للدائمة. من خلال التكامل مع LangGraph Platform أو استخدام التخزين المحلي، يمكنك إنشاء نقاط تفتيش للحالة بعد كل خطوة. هذا يتيح:
- الاستئناف: إذا فشل الوكيل في منتصف المهمة بسبب خطأ في واجهة برمجة التطبيقات (API)، يمكنك إعادة التشغيل من آخر نقطة تفتيش ناجحة بدلاً من البدء من الصفر.
- التدخل البشري: يمكنك إيقاف تنفيذ الرسم البياني مؤقتًا، وعرض النتائج الوسيطة على شخص للموافقة، ثم الاستئناف تلقائيًا بمجرد توفير الإدخال.
- تصحيح الأخطاء: إعادة تشغيل أي محادثة عن طريق تحميل حالة نقطة التفتيش المحددة.
الخلاصة
يمثل LangGraph نضجًا في مشهد وكلاء الذكاء الاصطناعي. يتجاوز "السحر" في السلاسل التلقائية ويوفر الصرامة الهيكلية المطلوبة للتطبيقات على مستوى المؤسسات. من خلال معالجة منطق وكيلك كرسم بياني، تحصل على قابلية المراقبة والتحكم والمرونة. مع استمرار نمو قدرات LLMs، ستكون الأطر التي تسمح لنا بتنسيق هذه القدرات بدقة — مثل LangGraph — أساسية لبناء أنظمة ذكاء اصطناعي موثوقة وقابلة للتوسع.