Retrieval-Augmented Generation (RAG)

إتقان تصفية البيانات الوصفية في RAG: ما وراء التشابه المتجهي البسيط

مقدمة

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

لماذا تصفية البيانات الوصفية أساسية

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

  • التحكم في الوصول: ضمان أن يرى المستخدمون فقط البيانات المصرح لهم بالوصول إليها.
  • الجِدّة: إعطاء الأولوية لأحدث إصدارات المستندات.
  • التصنيف: تقييد النتائج بأنواع ملفات محددة، أو مؤلفين، أو وسوم.
  • الدقة: تقليل الهلوسة (Hallucinations) من خلال إجبار النموذج على استخدام مصادر محددة وموثوقة فقط.

تنفيذ الفلاتر في LangChain

توفر LangChain دعماً قوياً لتصفية البيانات الوصفية من خلال واجهات المسترجع الخاصة بها. عند استخدام مخازن متجهية مثل FAISS أو Pinecone، يمكنك تمرير فلاتر البيانات الوصفية مباشرةً أثناء عملية البحث عن التشابه.

from langchain.vectorstores import Pinecone

# نفترض أن `pinecone_index` هو فهرس Pinecone المهيأ الخاص بك
# وأن `pca` هي تقنية تقليل الأبعاد الخاصة بك

def retrieve_with_filter(query, department, doc_id):
    # تعريف فلاتر البيانات الوصفية
    filters = {
        "department": department,  # تطابق دقيق
        "doc_id": doc_id           # قيد مستند محدد
    }

    # تنفيذ بحث التشابه مع الفلاتر
    # k: عدد النتائج، filter: قاموس البيانات الوصفية
    results = pinecone_index.similarity_search_with_relevance_scores(
        query, k=3, filter=filters
    )

    return results

# الاستخدام
# results = retrieve_with_filter("How do I request PTO?", "HR", "doc_123")

التصفية المتقدمة في LlamaIndex

تقدم LlamaIndex تحكماً أكثر دقة من خلال واجهة `MetadataFilters` الخاصة بها، مما يسمح بتوليفات منطقية معقدة مثل AND وOR ومقارنات (أكبر من، أصغر من، ضمن قائمة).

from llama_index.vector_stores.pinecone import PineconeVectorStore
from llama_index import VectorStoreIndex, SimpleDirectoryReader
from llama_index.filters import MetadataFilters, FilterCondition, FilterOperator

# تحميل المستندات
documents = SimpleDirectoryReader("data_dir").load_data()

# بناء الفهرس
index = VectorStoreIndex.from_documents(documents, vector_store=vector_store)

# تعريف فلاتر معقدة
filters = MetadataFilters(
    filters=[
        {
            "key": "author",
            "value": ["John Doe", "Jane Smith"],
            "operator": FilterOperator.IN
        },
        {
            "key": "date_published",
            "value": "2023-01-01",
            "operator": FilterOperator.GTE  # أكبر من أو يساوي
        }
    ],
    condition=FilterCondition.AND
)

# الاستعلام مع الفلاتر
retriever = index.as_retriever(similarity_top_k=5)
query_engine = index.as_query_engine()
response = query_engine.query("Summarize recent policy updates", filters=filters)

أمثلة عملية: أمان SaaS متعدد المستأجرين

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

خاتمة

تحوّل تصفية البيانات الوصفية أنظمة RAG من محركات بحث دلالية بسيطة إلى منصات استرجاع معلومات دقيقة وآمنة وواعية بالسياق. من خلال إتقان دمج الفلاتر المهيكلة مع التشابه المتجهي، يمكن للمطورين تحسين دقة استجابات LLM بشكل كبير، وتقليل تكاليف الرموز (Tokens) من خلال تقييد نافذة السياق، وتطبيق سياسات حوكمة بيانات صارمة. مع تزايد تعقيد معماريات RAG، لم يعد التعامل مع البيانات الوصفية كمواطن من الدرجة الأولى في خط أنابيب الاسترجاع اختيارياً، بل أصبح أمراً أساسياً.

Share: