في المشهد سريع التطور للنماذج التوليدية المعززة بالاسترجاع (RAG)، تُعد جودة خطوة الاسترجاع العامل الحاسم الوحيد لأداء النظام. من الأخطاء الشائعة لدى المطورين افتراض أن استعلام المستخدم الخام يتطابق تماماً مع المصطلحات المستخدمة في قاعدة المعرفة الخاصة بهم. ومع ذلك، غالباً ما تكون الاستعلامات الواقعية غامضة، أو مختصرة، أو تفتقر إلى المصطلحات المتخصصة في المجال. هنا يأتي دور
توسيع الاستعلام ليس كرفاهية، بل كضرورة للهندسة المعمارية للنماذج التوليدية المعززة بالاسترجاع عالية الدقة.
يُعد توسيع الاستعلام عملية إثراء للاستعلام الأصلي للمستخدم بمصطلحات إضافية، أو مرادفات، أو مفاهيم ذات صلة، قبل إجراء بحث المتجهات أو المطابقة المفتاحية. ومن خلال توسيع النطاق الدلالي للبحث، نخفف من خطر "فشل الاسترجاع"، حيث يتم تفويت المستندات ذات الصلة لأنها ببساطة لم تشارك تطابقاً مفردياً دقيقاً مع الاستعلام.
آليات توسيع الاستعلام
يعمل توسيع الاستعلام الفعال على ثلاثة مستويات رئيسية، يقدم كل منها مقايضات مختلفة بين التكلفة الحسابية وجودة الاسترجاع.
1. توسيع المرادفات المعجمية
تعتمد هذه الطريقة على القواميس الثابتة أو المعاجم لاستبدال أو إرفاق مرادفات بالمصطلحات الرئيسية. على سبيل المثال، إذا سأل المستخدم عن "السيارات"، فإن توسيع الاستعلام ليشمل مصطلحات مثل "المركبات"، و"السيارات"، و"السيارات" يضمن استرجاع المستندات التي تستخدم المصطلحات القياسية.
2. الإثراء الدلالي باستخدام نماذج اللغات الكبيرة
تعتمد خطوط أنابيب RAG الحديثة على نماذج اللغات الكبيرة (LLMs) لفهم النية الكامنة وراء الاستعلام. بدلاً من مجرد تبديل الكلمات، يمكن لنموذج اللغة الكبيرة توليد مجموعة من الأسئلة ذات الصلة أو إعادة صياغة الاستعلام ليكون أكثر تحديداً. وهذا فعال بشكل خاص للمفاهيم المجردة. إذا سأل المستخدم: "كيف أصلح جهاز كمبيوتر بطيء؟"، فقد يقوم نموذج اللغة الكبيرة بتوسيع هذا الاستعلام ليشمل مصطلحات مثل "تحسين التسجيل"، و"مسح الملفات المؤقتة"، و"إعادة تنظيم القرص الصلب"، و"فحص استخدام الذاكرة العشوائية".
3. التفكيك
بالنسبة للأسئلة المعقدة متعددة الأجزاء، يمكن أن يتضمن توسيع الاستعلام تقسيم الاستعلام الواحد إلى عدة استعلامات فرعية. ثم يتم إرسال كل استعلام فرعي إلى قاعدة بيانات المتجهات بشكل مستقل، ويتم دمج النتائج. يتيح ذلك للنظام استرجاع أجزاء مميزة من المعلومات التي قد تكون مبعثرة عبر مستندات مختلفة.
استراتيجية التنفيذ مع LangChain
يتم تبسيط تنفيذ توسيع الاستعلام في لغة بايثون باستخدام مكتبات مثل LangChain. فيما يلي مثال عملي باستخدام
SynonymQueryExpander ومعيد صياغة مفاهيمي يعتمد على نماذج اللغات الكبيرة.
from langchain.retrievers import ContextualCompressionRetriever
from langchain.retrievers.document_compressors import EmbeddingsFilter
from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain.vectorstores import FAISS
from langchain.embeddings import OpenAIEmbeddings
from langchain.llms import OpenAI
# افترض أنك قمت بتهيئة متجر المتجهات 'vectorstore' بالفعل
embeddings = OpenAIEmbeddings()
vectorstore = FAISS.from_texts(["نص قاعدة المعرفة الخاصة بك هنا"], embeddings)
# إنشاء مسترجع
base_retriever = vectorstore.as_retriever()
# تطبيق الضغط السياحي لمحاكاة شكل من أشكال التوسيع/التصفية
# في الإعدادات المتقدمة، ستستخدم فئة QueryExpander محددة هنا
# التي تستدعي نموذج لغة كبير لإعادة صياغة الاستعلام قبل الاسترجاع.
from langchain.retrievers import BM25Retriever, EnsembleRetriever
# مجموعة من المتجهات (الدلالية) و BM25 (المفتاحية) تعمل غالباً كتوسيع ضمني
bm25_retriever = BM25Retriever.from_documents(your_documents)
ensemble_retriever = EnsembleRetriever(retrievers=[base_retriever, bm25_retriever], weights=[0.7, 0.3])
في بيئة الإنتاج، من المعتاد إنشاء فئة مخصصة
BaseQueryExpander تأخذ استعلام الإدخال، وتمرره إلى نموذج لغة كبير مع تعليمات في الاستعلام تفيد بـ "توليد 5 كلمات مفتاحية ذات صلة وإصدار أكثر تحديداً من هذا الاستعلام"، ثم تلصق هذه المصطلحات في سلسلة البحث الأصلية.
اعتبارات عملية وأخطاء شائعة
بينما يحسن توسيع الاستعلام من معدل الاسترجاع بشكل كبير، فإنه يطرح تحديات جديدة. يتمثل الخطر الرئيسي في
تدهور الدقة. من خلال إضافة الكثير من المصطلحات ذات الصلة بشكل ضعيف، قد تقوم باسترجاع مستندات ضوضائية أو غير ذات صلة مما يخفف من الإجابة النهائية التي يولدها نموذج اللغة الكبيرة. لمقاومة ذلك، من الضروري تنفيذ خطوات إعادة ترتيب قوية بعد الاسترجاع. يمكن لنماذج مثل Cohere Reranker أو Cross-Encoders تقييم صلة النتائج الموسعة، مما يضمن مرور المستندات الأكثر صلة فقط إلى مرحلة التوليد.
بالإضافة إلى ذلك، ضع في اعتبارك آثار زمن الاستجابة. تضيف كل خطوة استعلام إضافية أو خطوة توسيع أجزاء من الثانية إلى إجمالي وقت الاستجابة. بالنسبة للتطبيقات الحساسة لزمن الاستجابة، قد يُفضل التوسيع المعجمي الخفيف الوزن بدلاً من إعادة الصياغة الثقيلة المعتمدة على نماذج اللغات الكبيرة.
الخاتمة
يُعد توسيع الاستعلام رافعة قوية في مجموعة أدوات مطوري Nماذج التوليدية المعززة بالاسترجاع. ومن خلال تجاوز المطابقة البسيطة للمفاتيح وتبني الإثراء الدلالي، يمكننا بناء أنظمة تفهم حقاً نية المستخدم. سواء من خلال قواميس المرادفات البسيطة أو التفكيك المعقد المدعوم بنماذج اللغات الكبيرة، يظل الهدف واحداً: سد الفجوة بين طريقة طرح المستخدمين للأسئلة وطريقة تخزين المعلومات. أثناء قيامك بتحسين خط أنابيب RAG الخاص بك، أعطِ الأولوية لاستراتيجيات التوسيع التي توازن بين الاسترجاع والدقة، مما يضمن تقديم مساعد الذكاء الاصطناعي الخاص بك لإجابات دقيقة ومراعية للسياق في كل مرة.