ظهرت تقنية التوليد المعزز بالاسترجاع القائمة على الرسوم البيانية (Graph RAG) كأسلوب فعَّال لتطبيقات الذكاء الاصطناعي التوليدي، يُتيح الاستفادة من المعرفة المتخصصة في المجالات والمعلومات ذات الصلة. يُعَد Graph RAG بديلًا عن طرق البحث باستخدام المتجهات التي تعتمد على قاعدة بيانات المتجهات.
الرسوم البيانية المعرفية هي أنظمة معرَّفة يمكن لقواعد البيانات الرسومية مثل Neo4j أو Amazon Neptune تمثيل البيانات المنظمة من خلالها. في الرسوم البيانية المعرفية، تُعَد العلاقات بين نقاط البيانات، المعروفة باسم الحواف، ذات معنى بمقدار أهمية الروابط بين نقاط البيانات نفسها، المعروفة باسم الرؤوس أو أحيانًا العُقَد. تسهِّل الرسوم البيانية المعرفية التنقل عبر الشبكة ومعالجة الاستعلامات المعقدة المتعلقة بالبيانات المرتبطة. تُعَد الرسوم البيانية المعرفية مناسبةً بشكل خاص للحالات التي تشمل روبوتات المحادثة وحل الهوية وتحليل الشبكات ومحركات التوصية والعميل 360 والكشف عن الاحتيال.
يستفيد نهج Graph RAG من الطبيعة المنظمة لقواعد البيانات الرسومية لتوفير عمق وسياق أكبر للمعلومات المسترجَعة حول الشبكات أو العلاقات المعقدة. عند اقتران قاعدة بيانات رسومية بنموذج لغوي كبير، يمكن للمطور أتمتة أجزاء كبيرة من عملية إنشاء الرسم البياني من بيانات غير منظمة مثل النصوص. يستطيع النموذج اللغوي الكبير معالجة بيانات النصوص وتحديد الكيانات وفهم علاقاتها وتمثيلها في هيكل رسومي.
هناك العديد من الطرق لإنشاء تطبيق Graph RAG، على سبيل المثال GraphRAG من Microsoft، أو دمج GPT4 مع LlamaIndex. في هذا البرنامج التعليمي، ستستخدم Memgraph، حل قاعدة بيانات رسومية مفتوح المصدر، لإنشاء نظام RAG باستخدام Llama-3 من Meta على watsonx. يستخدم Memgraph لغة Cypher، وهي لغة استعلام إعلانية. تشترك في بعض الخصائص مع SQL، لكنها تركِّز على الرؤوس والعلاقات بدلًا من الجداول والصفوف. سيمكِّنك Llama 3 من إنشاء قاعدة البيانات الرسومية الخاصة بك وملئها من النصوص غير المنظمة، بالإضافة إلى الاستعلام عن المعلومات داخل القاعدة.
رغم توفُّر عدة أدوات للاختيار منها، يُرشدك هذا الدليل خلال خطوات إعداد حساب IBM لاستخدام Jupyter Notebook.
سجِّل الدخول إلى watsonx.ai باستخدام حساب IBM Cloud الخاص بك.
أنشئ مشروع watsonx.ai.
يمكنك الحصول على معرِّف المشروع من داخل مشروعك. انقر على علامة التبويب الإدارة (Manage)، ثم انسخ معرِّف المشروع من قسم التفاصيل (Details) في صفحة عام (General). ستحتاج إلى هذا المعرِّف في هذا البرنامج التعليمي.
بعد ذلك، اربط مشروعك ببيئة تشغيل watsonx.ai Runtime.
أ. أنشئ مثيل خدمة watsonx.ai Runtime (اختَر خطة Lite، وهي مثيل مجاني).
ب. أنشئ مفتاح API في watsonx.ai Runtime. احفظ مفتاح API هذا لاستخدامه في هذا البرنامج التعليمي.
ج. انتقِل إلى مشروعك واختَر علامة التبويب "إدارة" (Manage).
د. في علامة التبويب اليسرى، اختَر الخدمات وعمليات التكامل (Services and Integrations).
هـ. اختَر خدمات IBM.
و. اختَر خدمة Associate ثم اختَر watsonx.ai Runtime.
ز. اربط watsonx.ai Runtime بالمشروع الذي أنشأته في watsonx.ai.
الآن، ستحتاج إلى تثبيت Docker.
بمجرد تثبيت Docker، ثبِّت Memgraph باستخدام حاوية Docker الخاصة به. على أنظمة OSX أو Linux، يمكنك استخدام هذا الأمر في المحطة الطرفية:
على جهاز كمبيوتر يعمل بنظام Windows، استخدِم:
اتَّبِع خطوات التثبيت لتشغيل محرك Memgraph وMemgraph Lab بشكل كامل.
على جهازك، أنشئ بيئة افتراضية جديدة (virtualenv) لهذا المشروع:
في بيئة Python لدفتر الملاحظات الخاص بك، ثبِّت مكتبات Python التالية:
أنت الآن جاهز للاتصال بـ Memgraph.
إذا قمت بتكوين Memgraph لاستخدام اسم مستخدم وكلمة مرور، فقم بتعيينهما هنا، وإلا يمكنك استخدام الإعدادات الافتراضية بعدم وجود أيٍّ منهما. هذا ليس من الممارسات الجيدة لقاعدة بيانات الإنتاج، لكن في بيئة تطوير محلية لا تخزِّن بيانات حساسة، لا يمثِّل ذلك مشكلة.
الآن، أنشئ سلسلة نصية نموذجية تَصِف مجموعة بيانات للعلاقات يمكنك استخدامها لاختبار قدرات توليد الرسوم البيانية في نظام النموذج اللغوي الكبير الخاص بك. يمكنك استخدام مصادر بيانات أكثر تعقيدًا ولكن هذا المثال البسيط يساعدنا على توضيح الخوارزمية.
أدخِل مفتاح API الخاص بـ watsonx الذي أنشأته في الخطوة الأولى:
الآن، اضبط إعدادات مثيل WatsonxLLM لتوليد النصوص. يجب أن تكون درجة الحرارة منخفضة نسبيًا ويكون عدد الرموز مرتفعًا لتشجيع النموذج على توليد أكبر قدر من التفاصيل دون الهلوسة بكيانات أو علاقات غير موجودة.
يُتيح لك LLMGraphTransformer تحديد أنواع الرؤوس والعلاقات التي تريد أن يُنشئها النموذج اللغوي الكبير. في حالتك، يَصِف النص الموظفين في شركة معينة، والمجموعات التي يعملون بها، ومسمياتهم الوظيفية. تقييد النموذج اللغوي الكبير بهذه الكيانات فقط يزيد من احتمالية الحصول على تمثيل جيد للمعرفة في الرسم البياني.
استدعاء convert_to_graph_documents يجعل LLMGraphTransformer يُنشئ رسمًا بيانيًا معرفيًا من النص. هذه الخطوة تولِّد صياغة Neo4j الصحيحة لإدخال المعلومات في قاعدة البيانات الرسومية لتمثيل السياق والكيانات ذات الصلة.
الآن امسح أي بيانات قديمة من قاعدة بيانات Memgraph وأدخِل العُقَد والحواف الجديدة.
يتم تخزين صياغة Cypher التي تم توليدها في كائنات graph_documents. يمكنك فحصه ببساطة عن طريق طباعته كسلسلة.
يمكن الاطِّلاع على المخطط وأنواع البيانات التي أنشأها Cypher في خاصية "get_schema" للرسوم البيانية.
سيظهر ما يلي:
يمكنك أيضًا مشاهدة هيكل الرسم البياني في عارض Memgraph Lab:
قام النموذج اللغوي الكبير بعمل جيد في إنشاء العُقد والعلاقات الصحيحة. حان الوقت الآن للاستعلام عن الرسم البياني المعرفي.
لضمان عمل النموذج اللغوي الكبير بشكل صحيح، يلزم إجراء بعض هندسة المطالبات. يوفر LangChain قالب FewShotPromptTemplate الذي يمكن استخدامه لتقديم أمثلة للنموذج اللغوي الكبير في المطالبة لضمان كتابته لصياغة Cypher صحيحة وموجزة. تقدِّم التعليمات البرمجية التالية عدة أمثلة على الأسئلة والاستعلامات التي يجب أن يستخدمها النموذج اللغوي الكبير. كما يوضِّح أيضًا كيفية تقييد مخرجات النموذج لتقتصر على الاستعلام فقط. قد يقوم النموذج اللغوي الكبير المبالِغ في التحدث بإضافة معلومات إضافية تؤدي إلى استعلامات Cypher غير صالحة، لذلك يطلب قالب المطالبة من النموذج إخراج الاستعلام نفسه فقط.
تساعد إضافة بادئة إرشادية أيضًا على تقييد سلوك النموذج، ما يزيد من احتمال أن ينتج النموذج اللغوي الكبير صياغة Cypher صحيحة.
بعد ذلك، ستُنشئ مطالبة للتحكم في كيفية إجابة النموذج اللغوي الكبير على السؤال باستخدام المعلومات المسترجَعة من Memgraph. سنزوِّد النموذج اللغوي الكبير بعدة أمثلة وتعليمات حول كيفية الرد بمجرد حصوله على معلومات السياق من قاعدة البيانات الرسومية.
حان الوقت الآن لإنشاء سلسلة الإجابة عن الأسئلة. يُتيح لك MemgraphQAChain تحديد النموذج اللغوي الكبير الذي تريد استخدامه، ومخطط الرسم البياني الذي سيتم استخدامه، ومعلومات حول التصحيح. استخدام درجة حرارة صفر وعقوبة طول النص يشجع النموذج اللغوي الكبير على إبقاء مطالبة Cypher قصيرة ومباشرة.
الآن يمكنك استدعاء السلسلة بسؤال بلغة طبيعية (لاحِظ أن إجاباتك قد تختلف قليلًا لأن النماذج اللغوية الكبيرة ليست حتمية تمامًا).
سيؤدي ذلك إلى إخراج:
> Entering new MemgraphQAChain chain...
Generated Cypher:
MATCH (p:Person {id: 'John'})-[:TITLE]->(t:Title) RETURN t.id
Full Context:
[{'t.id': 'Director of the Digital Marketing Group'}]
> Finished chain.
{'query': 'What is Johns title?',
'result': ' \nAnswer: Director of the Digital Marketing Group.',
'intermediate_steps': [{'query': " MATCH (p:Person {id: 'John'})-[:TITLE]->(t:Title) RETURN t.id"},
{'context': [{'t.id': 'Director of the Digital Marketing Group'}]}]}
في السؤال التالي، قدِّم للسلسلة سؤالًا أعقد قليلًا:
يجب أن تُظهر النتيجة ما يلي:
الإجابة الصحيحة موجودة في الاستجابة. في بعض الحالات، قد يكون هناك نص إضافي تريد حذفه قبل تقديم الإجابة للمستخدم النهائي.
يمكنك سؤال سلسلة Memgraph عن علاقات المجموعة:
سيُظهر هذا:
هذه هي الإجابة الصحيحة.
أخيرًا، اطرح على السلسلة سؤالًا ينتج عنه مخرجين.
يجب أن يُنتج هذا:
السلسلة تحدِّد بشكل صحيح كِلا المتعاونَين.
في هذا البرنامج التعليمي، قمت ببناء تطبيق Graph RAG باستخدام Memgraph وwatsonx لإنشاء هياكل البيانات الرسومية والاستعلام عنها. باستخدام نموذج لغوي كبير عبر watsonx، استخرجتَ معلومات العُقد والحواف من نصوص مصدرية طبيعية، وأنشأت صياغة استعلام Cypher لملء قاعدة البيانات الرسومية. بعد ذلك، استخدمتَ watsonx لتحويل الأسئلة بلغة طبيعية حول النص المصدر إلى استعلامات Cypher التي تستخرج المعلومات من قاعدة البيانات الرسومية. باستخدام هندسة المطالبات، حوَّل النموذج اللغوي الكبير النتائج المستخرجة من قاعدة بيانات Memgraph إلى استجابات بلغة طبيعية.