تخطَّ إلى المحتوى

BestRAG - تخزين واسترجاع RAG الهجين

BestRAG - تخزين واسترجاع RAG الهجين

BestRAG (أفضل توليد معتمد على الاسترجاع) هي مكتبة Python لبناء خطوط أنابيب راج هجينة. تجمع بين كثيفة و قليلة و تفاعل متأخر التضمينات لتخزين واسترجاع المستندات بكفاءة باستخدام Qdrant كمتجر المتجهات و FastEmbed للتضمينات. الفكرة: تخزين كل مقطع مرة واحدة مع تمثيلات متعددة ثم استرجاع مع دمج الملاءمة حتى تحصل على كل من استعادة كثيفة الدلالات ودقة قليلة بدقة المصطلحات.

التثبيت

الطريقةالأمر
pippip install bestrag
المتطلباتمثيل Qdrant (محلي Docker أو Qdrant Cloud)
التضميناتيستخدم FastEmbed تحت الغطاء
التحققpython -c "import bestrag; print('ok')"

لماذا هجين

نوع الاسترجاعقوي فيضعيف في
كثيف (متجه)المعنى والإعادة الصيغةمعرّفات دقيقة وأرقام ومصطلحات نادرة
قليل (BM25)المصطلحات الدقيقة والمعرّفاتالمرادفات والإعادة صيغة
تفاعل متأخرمطابقة الرمز الدقيقةالتكلفة
مدمجة (هجين)أفضل من كثيفة + قليلة

BestRAG يخزن جميع التمثيلات بحيث يستفيد استعلام واحد من كل واحد منهم.

الاستخدام الأساسي

from bestrag import BestRAG

rag = BestRAG(
    url="http://localhost:6333",     # Qdrant
    api_key="...",                   # إذا كان يستخدم Qdrant Cloud
    collection_name="docs",
)

# التعاطي مع المستندات (تضمينات كثيفة + قليلة + تفاعل متأخر، إدراج في Qdrant)
rag.store_pdf("handbook.pdf")
rag.store_text("Nick تفضل الإجابات المختصرة.", metadata={"source": "prefs"})

# استرجاع مع دمج ملاءمة هجينة
results = rag.search("ماذا تقول سياسة الاسترجاع؟", limit=5)
for r in results:
    print(r.score, r.text)
الطريقةالوصف
BestRAG(url, collection_name, ...)الاتصال بـ Qdrant اختر مجموعة
store_pdf(path)تحليل + مقطع + تضمين + إدراج PDF
store_text(text, metadata=...)تعاطي النص الخام
search(query, limit=k)استرجاع هجين (مندمج)
delete(...)إزالة المستندات

ما الذي يحدث عند الاستخدام

خطوةالتفاصيل
تحليلاستخراج النصوص (على سبيل المثال من PDF)
مقطعانقسم إلى مقاطع
تضمينناقل كثيف + قليل + تفاعل متأخر لكل مقطع
إدراجتخزين جميع المتجهات + الحمولة في Qdrant

ما الذي يحدث عند البحث

خطوةالتفاصيل
تضمين الاستعلامكثيف + قليل (+ تفاعل متأخر)
Qdrant الاستعلاماستعادة المرشحين لكل تمثيل
دمجدمج الترتيبات (نمط RRF) في قائمة واحدة
إرجاعالممرات العليا مع الدرجات + البيانات الوصفية

تغذية النتائج إلى LLM

# استرجاع ثم بناء موجه مؤسس
hits = rag.search(user_question, limit=5)
context = "\n\n".join(h.text for h in hits)
prompt = f"الإجابة باستخدام هذا السياق فقط:\n{context}\n\nQ: {user_question}"
# → أرسل الموجه إلى LLM الخاص بك

الضبط

الرافعةالتأثير
حجم/تداخل المقطعدقة الاسترجاع
نموذج كثيفالجودة الدلالية (عبر FastEmbed)
نموذج قليلمطابقة المصطلح الدقيقة (BM25)
limit (k)استعادة مقابل حجم الموجه
مرشحات البيانات الوصفيةتقييد نطاق البحث / التحكم في الوصول

BestRAG مقابل البناء الخاص بك

الجانبBestRAGيدوي (LangChain/LlamaIndex)
إعداد هجينمدمج (كثيف+قليل+LI)الأسلاك اليدوية
متجرQdrant، بآراء الأمورأي، مرن
السيطرةأبسط، عدد أقل من الأزرارتحكم كامل
الأفضل لـبداية راج هجينة سريعةخطوط أنابيب مخصصة

مبني على FastEmbed و Qdrant؛ الوصول إلى LangChain أو LlamaIndex عندما تحتاج إلى تحكم خط أنابيب كامل.

الموارد