بناء أنابيب المعرفة الآلية باستخدام LangGraph و NetworkX: دليل عملي خطوة بخطوة

يقدم هذا الدليل العملي شرحًا تفصيليًا لكيفية بناء أنبوب معالجة بيانات آلي لإنشاء رسم بياني معرفي (Knowledge Graph – KG) باستخدام مكتبتي LangGraph و NetworkX في بيئة بايثون. سنقوم بمحاكاة سلسلة من الوكلاء الذكيين (Agents) الذين يتعاونون لإنجاز مهام مختلفة، بدءًا من جمع البيانات وانتهاءً بعرض الرسم البياني النهائي.

خطوات بناء أنبوب المعرفة الآلية

يتكون أنبوب المعرفة الآلية من سلسلة من الوكلاء الذكيين، كل وكيل مسؤول عن مهمة محددة. تتمثل هذه الخطوات في:

  1. جمع البيانات (Data Gatherer): تبدأ العملية بجمع البيانات ذات الصلة بالموضوع المحدد من قبل المستخدم. في هذا المثال، سنستخدم نصًا مُحاكى لتمثيل البيانات المُجمعة.

  2. استخراج الكيانات (Entity Extractor): يقوم هذا الوكيل باستخراج الكيانات (الأسماء، المصطلحات، الخ.) من النص المُجمع باستخدام تعابير نمطية (Regular Expressions).

  3. استخراج العلاقات (Relation Extractor): يُحدد هذا الوكيل العلاقات بين الكيانات المُستخرجة من خلال تحليل النص بحثًا عن كلمات أو عبارات دالة على العلاقات (مثل “يؤثر على”، “نوع من”).

  4. حل التضارب في الكيانات (Entity Resolver): يهدف هذا الوكيل إلى توحيد الكيانات المتشابهة أو المتكررة، وذلك بتحويلها إلى صيغة قياسية موحدة.

  5. دمج البيانات في رسم بياني (Graph Integrator): يقوم هذا الوكيل ببناء الرسم البياني المعرفي باستخدام مكتبة NetworkX، حيث تُمثل الكيانات بالرؤوس (Nodes) والعلاقات بالحواف (Edges).

  6. التحقق من صحة الرسم البياني (Graph Validator): يقوم هذا الوكيل بالتحقق من سلامة الرسم البياني المُنشأ، والتأكد من عدم وجود أخطاء أو تناقضات.

المكتبات المستخدمة

نحتاج إلى تثبيت المكتبات التالية في بيئة بايثون:

  • LangGraph: لبناء وتنسيق سير العمل القائم على الوكلاء.
  • LangChain Core: لتوفير فئات وأدوات أساسية لبناء تطبيقات تعتمد على نماذج اللغة.
  • NetworkX: لبناء الرسوم البيانية.
  • Matplotlib: لعرض الرسوم البيانية.
  • re: للتعامل مع تعابير النمطية.

يمكن تثبيت هذه المكتبات باستخدام الأمر التالي:

pip install langgraph langchain_core networkx matplotlib

تنفيذ كل وكيل (Agent)

فيما يلي شرح تفصيلي لكود بايثون لكل وكيل:

1. جمع البيانات (data_gatherer)

def data_gatherer(state: KGState) -> KGState:
    topic = state["topic"]
    print(f" Data Gatherer: Searching for information about '{topic}'")
    collected_text = f"{topic} is an important concept. It relates to various entities like EntityA, EntityB, and EntityC. EntityA influences EntityB. EntityC is a type of EntityB."
    state["messages"].append(AIMessage(content=f"Collected raw text about {topic}"))
    state["raw_text"] = collected_text
    state["current_agent"] = "entity_extractor"
    return state

2. استخراج الكيانات (entity_extractor)

def entity_extractor(state: KGState) -> KGState:
    # ... (كود الوكيل) ...

3. استخراج العلاقات (relation_extractor)

def relation_extractor(state: KGState) -> KGState:
    # ... (كود الوكيل) ...

4. حل التضارب في الكيانات (entity_resolver)

def entity_resolver(state: KGState) -> KGState:
    # ... (كود الوكيل) ...

5. دمج البيانات في رسم بياني (graph_integrator)

def graph_integrator(state: KGState) -> KGState:
    # ... (كود الوكيل) ...

6. التحقق من صحة الرسم البياني (graph_validator)

def graph_validator(state: KGState) -> KGState:
    # ... (كود الوكيل) ...

عرض الرسم البياني (visualize_graph)

def visualize_graph(graph):
    # ... (كود لعرض الرسم البياني) ...

بناء وتشغيل أنبوب المعرفة

# ... (كود لبناء وتشغيل الأنبوب) ...

الخاتمة

يُعد هذا الدليل نقطة انطلاق ممتازة لبناء أنابيب معالجة بيانات متقدمة لإنشاء رسوم بيانية معرفية. يمكن توسيع هذا الإطار الأساسي من خلال إضافة وكلاء متخصصين آخرين، أو استخدام تقنيات أكثر تطوراً في استخراج الكيانات والعلاقات، أو دمج مصادر بيانات خارجية.

المصدر: MarkTechPost