بناء تطبيقات RAG باستخدام Apache Cassandra و Python و Ollama

توليد معزز بالاسترجاع (RAG) هو الأكثر شعبية للحصول على بيانات في الوقت الحقيقي أو بيانات محدثة من مصدر بيانات بناءً على النص المدخل من قبل المستخدمين. مما يعزز جميع تطبيقات البحث لدينا مع بحث عصبي متطور.

في أنظمة بحث RAG، يتم تحويل كل طلب مستخدم إلى تمثيل متجه بواسطة نموذج الإدخال، ويتم إجراء مقارنة هذا المتجه باستخدام خوارزميات متنوعة مثل تشابه جيب التمام، وأطول تسلسل مشترك، وغيرها، مع تمثيلات المتجهات الموجودة المخزنة في قاعدة بياناتنا الداعمة للمتجهات.

كما يتم إنشاء المتجهات الموجودة المخزنة في قاعدة بيانات المتجهات أو تحديثها بشكل غير متزامن بواسطة عملية خلفية منفصلة.

يوفر هذا المخطط نظرة عامة مفهومية عن مقارنة المتجهات 

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

في هذه المقالة، سنقوم بتنفيذ استخدام قاعدة بيانات متجهات ونموذج توليد تضمين في تطبيق بايثون. إذا كنت تقرأ هذا المفهوم للمرة الأولى أو n مرة، فأنت فقط تحتاج إلى أدوات للعمل، ولا حاجة لاشتراك في أي أداة. يمكنك ببساطة تحميل الأدوات والبدء.

يتكون مجموعة التقنيات لدينا من الأدوات مفتوحة المصدر والمجانية للاستخدام التالية:

  • نظام التشغيل – أوبونتو لينوكس
  • قاعدة بيانات المتجهات – أباتشي كاساندرا
  • نموذج التضمين – nomic-embed-text
  • لغة البرمجة – بايثون

الفوائد الرئيسية لهذه المجموعة

  • مفتوحة المصدر
  • بيانات معزولة لتلبية معايير الامتثال للبيانات

This diagram provides a high-level dependency architecture of the system

إجراءات التنفيذ

يمكنك التنفيذ والمتابعة إذا تم استيفاء المتطلبات السابقة؛ وإلا، اقرأ حتى النهاية لفهم المفاهيم.

المتطلبات السابقة

إعداد نموذج أولاما

أولاما هو خادم وسيط مفتوح المصدر يعمل كطبقة تجريدية بين الذكاء الاصطناعي التوليدي والتطبيقات من خلال تثبيت جميع الأدوات اللازمة لجعل نماذج الذكاء الاصطناعي التوليدية متاحة للاستخدام عبر واجهة سطر الأوامر وواجهة برمجة التطبيقات في جهاز واحد. يحتوي على معظم النماذج المتاحة علنًا مثل لاما، في، ميسترال، سنوفليك-أركتيك-إيمبد، وغيرها. إنه متعدد المنصات ويمكن تكوينه بسهولة في نظام التشغيل.

في أولاما، سنقوم بسحب نومك-إيمبد-تيكست النموذج لتوليد التضمينات.

تشغيل في سطر الأوامر:

Plain Text

 

هذا النموذج يولد تضمينات بحجم 768 متجهات.

إعداد سكريبتات أباتشي كاساندرا

كاساندرا هي قاعدة بيانات NoSQL مفتوحة المصدر مصممة للعمل مع كمية عالية من الأحمال التي تتطلب توسعًا عاليًا وفقًا لاحتياجات الصناعة. مؤخرًا، أضافت دعمًا للبحث عن المتجهات في الإصدار 5.0 الذي سيسهل حالة استخدام RAG الخاصة بنا.

ملاحظة: تتطلب كاساندرا نظام تشغيل لينوكس للعمل؛ يمكن أيضًا تثبيتها كصورة دوكر.

التثبيت

قم بتنزيل أباتشي كاساندرا من https://cassandra.apache.org/_/download.html.

قم بتكوين كاساندرا في مسار النظام الخاص بك.

ابدأ الخادم عن طريق تشغيل الأمر التالي في سطر الأوامر:

Plain Text

 

الجدول

افتح نافذة طرفية جديدة في نظام لينكس واكتب cqlsh؛ سيفتح هذا واجهة سطر الأوامر للغة استعلام كاساندرا. الآن، نفذ السكربتات أدناه لإنشاء مساحة المفاتيح embeddings، جدول document_vectors، والفهرس الضروري edv_ann_index لإجراء بحث عن المتجهات. 

SQL

 

ملاحظة: content_vector VECTOR <FLOAT, 768> مسؤولة عن تخزين المتجهات بطول 768 التي تم إنشاؤها بواسطة النموذج.  

المرحلة 1: نحن جاهزون لإعداد قاعدة البيانات لتخزين المتجهات.

كود بايثون

هذه اللغة البرمجية بالتأكيد لا تحتاج إلى مقدمة؛ فهي سهلة الاستخدام ومحبوبة من قبل الصناعة مع دعم قوي من المجتمع.

البيئة الافتراضية

إعداد البيئة الافتراضية:

Plain Text

 

تفعيل البيئة الافتراضية:

Plain Text

 

الحزم

تحميل حزمة داتاستاكس كاساندرا:

Plain Text

 

تحميل حزمة الطلبات:

Plain Text

 

الملف

إنشاء ملف باسم app.py.

الآن، اكتب الكود أدناه لإدخال مستندات نموذجية في كاساندرا. هذه هي الخطوة الأولى دائمًا لإدخال البيانات في قاعدة البيانات؛ يمكن القيام بذلك بواسطة عملية منفصلة بشكل غير متزامن. لأغراض العرض، كتبت طريقة ستقوم بإدخال المستندات أولاً في قاعدة البيانات. لاحقًا، يمكننا التعليق على هذه الطريقة بمجرد نجاح إدخال المستندات.

Python

 

الآن، قم بتشغيل هذا الملف باستخدام سطر الأوامر في البيئة الافتراضية:

Plain Text

 

بمجرد تنفيذ الملف وإدراج الوثائق، يمكن التحقق من ذلك عن طريق الاستعلام عن قاعدة بيانات Cassandra من وحدة التحكم cqlsh. لهذا، افتح cqlsh وقم بتنفيذ:

SQL

 

سيتم إرجاع 10 وثائق تم إدراجها في قاعدة البيانات، كما هو موضح في اللقطة أدناه.

مرحلة 2: لقد انتهينا من إعداد البيانات في قاعدة البيانات الخاصة بنا.

الآن، سنقوم بكتابة الكود للاستعلام عن الوثائق بناءً على التشابه الكوسيني. التشابه الكوسيني هو حاصل ضرب قيمتين ناقطتين. صيغته A.B / |A||B|. يتم دعم هذا التشابه الكوسيني داخليًا بواسطة Apache Cassandra، مما يساعدنا على حساب كل شيء في قاعدة البيانات ومعالجة البيانات الكبيرة بكفاءة.

الكود أدناه هو واضح بذاته؛ يقوم بجلب أعلى ثلاث نتائج بناءً على التشابه الكوسيني باستخدام ORDER BY <column name> ANN OF <text_vector> ويعيد أيضًا قيم التشابه الكوسيني. لتنفيذ هذا الكود، يجب التأكد من تطبيق فهرسة على هذا العمود الناقط.

Python

 

تذكر تعليق كود الإدراج:

Python

 

الآن، قم بتنفيذ كود Python باستخدام python app.py.

سنحصل على الناتج أدناه:

Plain Text

 

يمكنك رؤية التشابه الكوسيني لـ “The street food stalls in Bangkok served fiery pad Thai that left Varun with a tangy memory of the city’s vibrant energy.” هو 0.8205469250679016، وهو أقرب تطابق.

المرحلة النهائية: لقد قمنا بتنفيذ بحث RAG.

تطبيقات المؤسسات

Apache Cassandra

بالنسبة للشركات، يمكننا استخدام أباتشي كاساندرا 5.0 من مزودي الخدمات السحابية الشهيرة مثل مايكروسوفت أزور، AWS، GCP، إلخ.

أولاما

يتطلب هذا الوسيط جهازًا افتراضيًا متوافقًا مع وحدة معالجة الرسوميات المدعومة بواسطة Nvidia لتشغيل النماذج عالية الأداء، ولكننا لا نحتاج إلى أجهزة افتراضية فائقة الأداء للنماذج المستخدمة لإنشاء البيانات النصية. وبناءً على متطلبات حركة المرور، يمكن استخدام عدة أجهزة افتراضية، أو أي خدمة ذكاء اصطناعي توليدية مثل Open AI، Anthropy، إلخ، أيهما منخفض في تكلفة الملكية الكلية لتلبية الاحتياجات المتعلقة بالتوسع أو احتياجات حوكمة البيانات.   

أجهزة افتراضية Linux

يمكن دمج أباتشي كاساندرا وأولاما واستضافتهما في جهاز افتراضي Linux واحد إذا لم يكن الحالة الاستخدامية تتطلب استخدامًا مرتفعًا لتقليل تكلفة الملكية الكلية أو لتلبية احتياجات حوكمة البيانات.

الاستنتاج

يمكننا بسهولة بناء تطبيقات RAG باستخدام نظام التشغيل Linux، وأباتشي كاساندرا، ونماذج التضمين (nomic-embed-text) المستخدمة عبر أولاما، ولغة Python بأداء جيد دون الحاجة إلى أي اشتراك سحابي إضافي أو خدمات على أجهزتنا/خوادمنا.

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

هذا كل شيء! شكرًا لقراءتك حتى النهاية.

Source:
https://dzone.com/articles/build-rag-apps-apache-cassandra-python-ollama