Lumen Search
مفتوح المصدر · بحث هجين في المستندات (RAG)
بحث هجين يذكر مصدر كل نتيجة في ملفات PDF وWord وExcel والصفحات الممسوحة ضوئياً، بالإنجليزية والروسية: BM25 وتضمينات متعددة اللغات في FAISS، وOCR، وخدمة FastAPI.

المشكلة
تصل المستندات خليطاً من ملفات PDF وWord والجداول والمستندات الممسوحة، والبحث التقليدي بالكلمات المفتاحية لا يجد الصياغات المختلفة ولا يبيّن مصدر الإجابة.
الحل
تحليل يراعي بنية المستند مع OCR، وبحث BM25 وبحث بالتضمينات يُدمجان حسب الترتيب، وإعادة ترتيب اختيارية، وإحالات تصل إلى الصفحة أو المادة أو صف الجدول.
التفاصيل التقنية
يحصل 83.9% من 62 سؤالاً مصنّفاً على مقطع صحيح بين أول خمس نتائج بعد إعادة الترتيب. عرض حيّ في المتصفح، واختبارات على ثلاثة إصدارات من Python وفحص لصورة Docker في CI.
نظرة عامة
Lumen Search هو النظير مفتوح المصدر للنظام الذي أبنيه في عملي: بحث واحد في ملفات PDF وWord وجداول Excel والمستندات الممسوحة، تُظهر فيه كل إجابة مصدرها بدقة. ويضم الفهرس ثمانية مستندات عامة: إرشادات NIST وOWASP الأمنية بالإنجليزية، وقانون البيانات الشخصية الروسي بالروسية، ومستندين ممسوحين لا يمكن قراءتهما إلا عبر OCR.
يتبع التحليل بنية كل مستند — إشارات PDF المرجعية والعناوين المرقّمة، وأنماط العناوين في Word، وصفاً واحداً من الجدول لكل سجل — فتُحيل النتيجة إلى صفحة وقسم، أو مادة من القانون، أو ورقة وصف. ويجري البحث بطريقتين: BM25 على كلمات إنجليزية وروسية مردودة إلى جذورها بأداة Snowball، وتضمينات multilingual-e5 في FAISS، ثم يُدمج الترتيبان، ويمكن إعادة ترتيب أفضل النتائج بنموذج cross-encoder متعدد اللغات.
والجودة مقيسة على 62 سؤالاً صُنّفت يدوياً: يضع البحث الهجين مقطعاً صحيحاً بين أول خمس نتائج في 75.8% من الأسئلة، وترفع إعادة الترتيب النسبة إلى 83.9%، ويذكر ملف README نقاط الضعف أيضاً. تعمل الخدمة بأمر docker compose واحد، ويشغّل العرض الحيّ البحث نفسه داخل المتصفح بنموذج int8 حجمه 66 ميغابايت، ويتحقق CI من تطابق نسخة JavaScript مع كود Python.
ماذا يفعل
- يحلّل ملفات PDF وWord وExcel وMarkdown وHTML، وتمرّ الصفحات الممسوحة عبر Tesseract OCR بالإنجليزية والروسية
- يقسّم النص حسب الأقسام وصفوف الجداول، فتشير كل نتيجة إلى صفحة أو مادة من القانون أو صف
- بحث هجين: BM25 مع تضمينات multilingual-e5 في FAISS يُدمجان حسب الترتيب، مع إعادة ترتيب اختيارية بنموذج cross-encoder
- خدمة FastAPI مع تخزين مؤقت في Redis، وإجابات بمصادر مرقّمة، وعرض تجريبي يعمل داخل المتصفح
الخطوة التالية
تبحث عن مطوّر Full-Stack أو Python أو ذكاء اصطناعي — أو تحتاج إلى بناء شيء مشابه؟ لنتحدث.
متاح فوراً — حضورياً أو بنظام هجين في موسكو، أو عن بُعد؛ بدوام كامل أو بعقد. أردّ خلال 48 ساعة — وأسرع عبر Telegram.