كيف يقلل RAG الوكالي من الهلوسات ويحسن الاسترجاع

اكتشف كيف يمكن لـ Agentic RAG تقليل الهلوسات وتحسين الاسترجاع من خلال إعادة صياغة الاستفسارات وتحسين النتائج والاستفادة من نماذج اللغة الأكبر. افتح طريقك إلى استجابات أكثر شمولاً وصلة لتطبيقات RAG الخاصة بك.

١٤ فبراير ٢٠٢٥

party-gif

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

كيف يمكن للوكلاء إصلاح الهلوسات في RAG

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

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

يمكننا إصلاح هذا من خلال إدخال وكلاء في أنبوب أنابيب RAG وإعطائهم القدرة ليس فقط على تحليل الاستفسار الأولي ولكن أيضًا على تحليل الردود المولدة بواسطة أنبوب أنابيب RAG. إليك كيف يبدو الأمر عادةً:

  1. يتم تمرير الاستفسار الأولي من خلال وكيل.
  2. سيقوم الوكيل بإعادة صياغة الاستفسار الأولي.
  3. يتم تمرير الاستفسار المحسن من خلال قاعدة المعرفة، وتُجرى عملية بحث تشابه قائمة على المعنى لاسترداد أكثر الوثائق ذات الصلة.
  4. قبل تمرير الوثائق ذات الصلة إلى نموذج اللغة، يحلل الوكيل تلك الوثائق أو الأجزاء مرة أخرى ويحسن الاستفسار إذا اعتقد أن الوثائق المسترجعة لا يمكنها الإجابة على السؤال.
  5. بناءً على الاستفسار المحسن، يتم تكرار العملية حتى يكون الوكيل راضيًا عن الوثائق المسترجعة والاستفسار المعاد صياغته.
  6. يتم تمرير السياق النهائي إلى نموذج اللغة لتوليد الإجابة.

في هذه الحالة، يمكن للوكيل التخطيط والتحليل والتنفيذ لتنفيذ الحلقة الوكيلية في أنبوب أنابيب RAG الخاص بك. لديك خيارات عديدة، مثل أطر العمل مثل Crew AI أو AutoGPT أو LangGraph من LangChain، والتي يمكنك استخدامها لبناء وكلاء. في هذا الفيديو، سنستخدم Transformers Agents، وهي ميزة أقل شهرة داخل حزمة Transformers تسمح لك بإنشاء وكلائك الخاصين.

بناء أنبوب أداة RAG

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

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

يمكننا إصلاح هذا من خلال إدخال وكلاء في أنبوب أنابيب RAG وإعطائهم القدرة ليس فقط على تحليل الاستفسار الأولي ولكن أيضًا على تحليل الردود المولدة بواسطة أنبوب أنابيب RAG. إليك كيف يبدو الأمر عادةً:

  1. يتم تمرير الاستفسار الأولي من خلال وكيل.
  2. سيقوم الوكيل بإعادة صياغة الاستفسار الأولي.
  3. يتم تمرير الاستفسار المحسن من خلال قاعدة المعرفة، وتُجرى عملية بحث تشابه قائمة على المعنى لاسترداد أكثر الوثائق ذات الصلة.
  4. قبل تمرير الوثائق ذات الصلة إلى نموذج اللغة، يحلل الوكيل تلك الوثائق أو الأجزاء مرة أخرى ويحسن الاستفسار إذا اعتقد أن الوثائق المسترجعة لا يمكنها الإجابة على السؤال.
  5. بناءً على الاستفسار المحسن، يتم تكرار العملية حتى يكون الوكيل راضيًا عن الوثائق المسترجعة والاستفسار المعاد صياغته.
  6. يتم تمرير السياق النهائي إلى نموذج اللغة لتوليد الإجابة.

لتنفيذ الحلقة الوكيلية في أنبوب أنابيب RAG الخاص بك، لديك خيارات عديدة، مثل أطر العمل مثل Crew AI أو Auto أو LangGraph من LangChain. في هذه الحالة، سنستخدم Transformers Agents، وهي ميزة أقل شهرة داخل حزمة Transformers تسمح لك بإنشاء وكلائك الخاصين.

أولاً، نحتاج إلى تثبيت الحزم المطلوبة، بما في ذلك pandas و LangChain وحزمة المجتمع LangChain وحزمة Sentence Transformer وحزمة Transformers. ثم سنقوم باستيراد الوحدات الضرورية وإعداد البيانات، بما في ذلك تقسيم الوثائق إلى أجزاء وإنشاء التضمينات.

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

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

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

إنشاء أداة استرجاع

لإنشاء أداة استرداد لأنبوب أنابيب RAG الوكيلي، نحدد فئة RetrievalTool ذات البنية التالية:

class RetrievalTool:
    """Using semantic similarity, retrieves some documents from the knowledge base that have the closest embeddings to the input."""

    def __init__(self, vector_db):
        self.vector_db = vector_db

    def __call__(self, query: str) -> List[str]:
        """
        Retrieve up to 7 most similar chunks from the vector DB for the given query.
        
        Args:
            query (str): A query to perform retrieval on. This should be semantically close to the target documents.
        
        Returns:
            List[str]: A list of up to 7 most similar chunks from the vector DB.
        """
        results = self.vector_db.similarity_search(query, k=7)
        return [chunk.page_content for chunk in results]

تأخذ فئة RetrievalTool كائن vector_db كمدخل، وهو متجر المتجهات (مثل Faiss أو Chroma أو Pinecone) المستخدم لتخزين تضمينات الوثائق.

يأخذ طريقة __call__ للفئة سلسلة query كمدخل وتعيد قائمة بما يصل إلى 7 أجزاء الأكثر تشابهًا من قاعدة البيانات المتجهة. وهي تستخدم طريقة similarity_search لكائن vector_db للعثور على أكثر الأجزاء تشابهًا بناءً على التشابه الجيبي.

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

دمج نموذج اللغة

لدمج نموذج اللغة في أنبوب أنابيب RAG الوكيلي، نحتاج إلى إعداد نموذج اللغة الذي سيتم استخدامه من قبل الوكيل وأيضًا لتوليد الاستجابة النهائية. لدينا خياران:

  1. استخدام محرك Hugging Face: هذا يسمح لنا بالاتصال مباشرةً بنقاط نهاية API للنماذج اللغوية المختلفة المتاحة من خلال البنية الخدمية لـ Hugging Face. يمكننا استخدام نماذج مثل Llama 38B أو 70B، ولكن هذه عادةً ما تتطلب اشتراكًا في Hugging Face Pro.

  2. استخدام OpenAI: في هذا المثال، سنستخدم محرك OpenAI. يمكن تكييف العملية لإعداد أي نموذج لغة آخر.

لإعداد محرك OpenAI، نقوم بإنشاء فئة تسمى OpenAIEngine تستخدم وظيفتي message_rle و gpt_generate_message_list من محرك LLM لوكلاء Transformer. تتعامل هذه الفئة مع تنظيف الرسائل الداخلة واستخدام نقطة نهاية إكمال الدردشة في OpenA

التعليمات