Local AI

بناء خط أنابيب RAG محلي باستخدام Milvus وOllama للبحث المؤسسي عالي الإنتاجية

في المشهد المتطور بسرعة للذكاء الاصطناعي، تعد خصوصية البيانات والكفاءة من حيث التكلفة أمرًا بالغ الأهمية لاعتماد المؤسسات. بينما تقدم نماذج اللغة الكبيرة (LLMs) المستندة إلى السحابة قدرات مذهلة، إلا أنها غالبًا ما تأتي مع زمن استجابة كبير ومخاطر امتثال. هنا يبرز الذكاء الاصطناعي المحلي. من خلال الجمع بين Milvus، وهو قاعدة بيانات متجهات عالية الأداء، وOllama، وهو أداة لتشغيل نماذج LLM مفتوحة المصدر محليًا، يمكن للمطورين بناء خط أنابيب قوي للتعلم المعزز بالاسترجاع (RAG) يبقي البيانات داخل المؤسسة مع توفير قدرات بحث عالية الإنتاجية.

لماذا Milvus وOllama؟

تعتمد أنظمة RAG بشكل كبير على سرعة ودقة عمليات البحث عن تشابه المتجهات. تواجه قواعد البيانات العلائقية التقليدية صعوبة في التعامل مع أبعاد متجهات التضمين (Embeddings)، مما يؤدي إلى اختناقات في الأداء مع توسع البيانات. تم تصميم Milvus خصيصًا لهذا الغرض، حيث يوفر زمن استجابة للبحث أقل من المللي ثانية وهياكل موزعة قابلة للتوسع.

بالاقتران مع Ollama، الذي يبسط نشر نماذج مثل Llama 3 أو Mistral، تكتسب القدرة على تشغيل الاستدلال (Inference) محليًا بالكامل. يلغي هذا المزيج تكاليف واجهات برمجة التطبيقات الخارجية ويضمن عدم مغادرة المستندات الحساسة للشركة لبيئتك الآمنة.

إعداد البيئة

قبل كتابة الكود، تأكد من تثبيت Docker لـ Milvus وقمت بسحب أحدث صورة لـ Ollama. ستحتاج أيضًا إلى Python مع تثبيت مكتبات milvus-client و requests. للتضمين، سنستخدم قدرات التضمين المدمجة في Ollama عبر واجهته البرمجية (API)، مما يبقي جميع المكونات موحدة.

أولاً، ابدأ تشغيل Milvus باستخدام Docker Compose. يتضمن الإعداد القياسي Etcd و MinIO ومكون Milvus Standalone. بمجرد التشغيل، يمكنك التحقق من الاتصال باستخدام سطر أوامر Milvus أو عميل Python.

تنفيذ منطق التضمين والفهرسة

يتضمن جوهر خط أنابيب RAG الخاص بنا تحويل مستندات النص إلى متجهات تضمين وتخزينها في Milvus. سنستخدم واجهة Ollama البرمجية (API) لتوليد هذه المتجهات. فيما يلي مثال عملي بلغة Python يوضح كيفية الاتصال بـ Milvus وإنشاء مجموعة (Collection) وإدراج البيانات.

from pymilvus import connections, Collection, CollectionSchema, FieldSchema, DataType
import requests
import numpy as np

# الاتصال بـ Milvus
connections.connect(alias="default", host="localhost", port="19530")

# تعريف مخطط المجموعة
fields = [
    FieldSchema(name="id", dtype=DataType.INT64, is_primary=True, auto_id=True),
    FieldSchema(name="vector", dtype=DataType.FLOAT_VECTOR, dim=768),
    FieldSchema(name="text", dtype=DataType.VARCHAR, max_length=512)
]
schema = CollectionSchema(fields, "Local RAG Collection")
collection = Collection("RAG_Collection", schema)

def get_embedding(text):
    response = requests.post("http://localhost:11434/api/embeddings", json={
        "model": "nomic-embed-text",
        "prompt": text
    })
    return response.json()["embedding"]

# مثال: إدراج مستند
text_data = "Enterprise security protocols require multi-factor authentication."
embedding = get_embedding(text_data)

insert_data = [
    [0],  # مكان لرقم التعريف الذي يتم إنشاؤه تلقائيًا
    [embedding],
    [text_data]
]
collection.insert(insert_data)
collection.load()

# إنشاء فهرس للبحث السريع
index_params = {
    "metric_type": "IP",  # الجداء الداخلي
    "index_type": "IVF_FLAT",
    "params": {"nlist": 128}
}
collection.create_index("vector", index_params)

تنفيذ البحث عالي الإنتاجية

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

الخاتمة

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

Share: