تخطَّ إلى المحتوى الرئيسي
مكتمل
  • الذكاء الاصطناعي وRAG
  • Backend
  • تطوير متكامل

SmartShop RAG Product Advisor

مشروع شخصي قائم على Retrieval-Augmented Generation يجيب عن أسئلة المتسوّقين من بيانات المتجر نفسه: توصيات، وأسئلة عن المنتجات والسياسات، ومقارنات، وملخّصات مراجعات مخزَّنة. يعيش الكتالوج في SQLite ويُفهرَس في Qdrant بـ BGE-M3؛ ويجري الاسترجاع كثيفًا ومتناثرًا معًا، ثم يُدمَج الاثنان بـ Reciprocal Rank Fusion ويُعاد ترتيبهما بمرمِّز متقاطع bge-reranker-v2-m3. ويعمل التوليد على Qwen2.5 عبر Ollama، فيشتغل النظام كله دون اتصال وبلا كلفة واجهات، وترد الإجابات بلغة السؤال — عربية أو إنجليزية.

الدور
مشروع شخصي
الفترة
July 2026
الحالة
مكتمل

01نظرة عامة

SmartShop مشروع شخصي حول سؤال ضيّق: ما الذي يحسّن جودة الاسترجاع فعلًا حين تكون المدوّنة كتالوج منتجات لا نصًا نثريًا؟

وانتهى مساعدَ تسوّق كاملًا. يوصي بالمنتجات، ويجيب عن الأسئلة حول منتج بعينه، ويقارن بين اثنين، ويجيب عن أسئلة الإرجاع والشحن والضمان من ملفات السياسات، ويلخّص ما قاله المراجعون — وكل إجابة مسنَدة إلى سجلات المتجر نفسها ومستشهدة بها.

وكل ذلك يعمل محليًا. الكتالوج في SQLite، والفهرس في Qdrant مضمَّنًا، والتضمينات وإعادة الترتيب على المعالج، ونموذج اللغة في Ollama، فلا مفتاح واجهة في النظام كله ولا كلفة على كل استعلام.

02السياق

تُحكَم أنظمة التوصية عادةً بالحكاية: تُجرَّب بضعة استعلامات، وتبدو النتائج معقولة، فيُعلَن أن النظام يعمل.

وسلك هذا المشروع النهج المعاكس — بُنيت المجموعة الذهبية وأداة التقييم بالتوازي مع الاسترجاع، ليُبرهَن على نفع التغيير بدل افتراضه. وتظهر الانضباطة نفسها في التخطيط: ثلاث عشرة وثيقة — بنية الاسترجاع، واختيار النماذج، والتقطيع، ومخطط المرشِّحات، واستراتيجية الإسناد — كُتبت قبل أول Sprint.

03المشكلة

الاسترجاع الكثيف وحده يفوّت التطابقات الدقيقة؛ والمتناثر وحده يفوّت النيّة. ولا يكفي أيٌّ منهما لبحث المنتجات، والاختيار بينهما سؤال خاطئ أصلًا.

  • أن تتطابق الرموز الدقيقة كأرقام الطُّرز تطابقًا تامًا لا تقريبيًا.
  • أن تعيد الاستعلامات التي تعبّر عن نيّة لا عن كلمات مفتاحية منتجاتٍ معقولة رغم ذلك.
  • أن الأسئلة ترد بالعربية أو الإنجليزية، وعلى الجواب أن يعود باللغة نفسها.
  • أن تقيّد السمات المبنية — الفئة والسعر والتوافر — النتائجَ لا أن تؤثر فيها فحسب.
  • أن يعمل كل شيء على جهاز واحد بلا ميزانية معالج رسومي ولا واجهة مدفوعة، ما يسقّف حجم النموذج ويستبعد التضمينات المستضافة.
  • أن تكون تغييرات الاسترجاع قابلة للقياس لا محكومة بالمعاينة.

04دوري في المشروع

دوري في المشروع

هذا مشروعي الخاص، بنيتُه من طرفه إلى طرفه: وثائق التخطيط، واستيعاب الكتالوج وملفات السياسات، ومسار الاسترجاع الهجين وإعادة الترتيب، واستخراج المرشِّحات، ومسارات الإجابة للتوصية وأسئلة المنتجات والمقارنة وأسئلة السياسات وملخّصات المراجعات، وتخصيص الجلسة، وخدمة FastAPI، وواجهتَي Streamlit والصفحة الواحدة، والمجموعة الذهبية وأداة التقييم، ومجموعة الاختبارات.

05المسؤوليات

الاسترجاع

  • استرجاع هجين كثيف ومتناثر فوق Qdrant، مدموج بـ Reciprocal Rank Fusion.
  • تضمينات BGE-M3 محسوبة على المعالج.
  • إعادة ترتيب بمرمِّز متقاطع bge-reranker-v2-m3.
  • استخراج المرشِّحات: تحويل الجملة إلى قيود فئة وسعر وتوافر وتقييم.
  • استعلامات عربية وإنجليزية، يُجاب عنها بلغة ورودها.

الإجابة

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

المنصة والتقييم

  • خدمة FastAPI وواجهة محادثة Streamlit وواجهة صفحة واحدة تُقدَّم من التطبيق نفسه.
  • استيعاب من CSV وPDF إلى SQLite وإلى الفهرس الشعاعي.
  • مجموعة ذهبية وأداة تقييم للاسترجاع واستخراج المرشِّحات.
  • مجموعة اختبارات pytest حتمية تعمل بلا نموذج ولا فهرس.

06المنهج التقني

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

  1. 01استيعاب الكتالوج ووثائق السياسات إلى SQLite، وفهرستها في Qdrant بـ BGE-M3.
  2. 02قراءة السؤال أولًا: تحديد نيّته وتحويل صياغته إلى مرشِّحات مبنية قبل البحث في أي شيء.
  3. 03استرجاع المرشّحين كثيفًا ومتناثرًا في آن، ودمج الترتيبين، لتُخدَم استعلامات الرموز الدقيقة واستعلامات النيّة على السواء.
  4. 04إعادة ترتيب المرشّحين المدموجين بمرمِّز متقاطع، لأن المرحلة الأولى تُحسَّن للاستدعاء، وإعادة الترتيب هي حيث تُستعاد الدقة.
  5. 05الإجابة من السجلات المسترجَعة وحدها، بلغة السؤال، مع الاستشهاد بالمنتجات أو مقاطع السياسات المستخدَمة.
  6. 06تقييم التغييرات على المجموعة الذهبية لا بمعاينة حفنة من الاستعلامات.

07البنية التقنية

يُستوعَب الكتالوج وملفات السياسات في SQLite ويُضمَّنان بـ BGE-M3 داخل فهرس Qdrant مضمَّن يحمل متجهات كثيفة ومتناثرة معًا. ويُحلّ السؤال أولًا إلى نيّة ومجموعة مرشِّحات مبنية؛ ثم يشغّل الاسترجاعُ الهجين الاستراتيجيتين ويدمجهما بـ Reciprocal Rank Fusion، ويعيد مرمِّز متقاطع ترتيب ما يعود، ويجيب Qwen2.5 من تلك السجلات وحدها بلغة السؤال. ويعيد سجل الجلسة التفضيلات إلى الاسترجاع، وتقيس المجموعة الذهبية المسارَ خارج التشغيل.

الفهرسةالإجابةالقياسالكتالوج والسياساتCSV · PDFSQLiteمصدر الحقيقةفهرس BGE-M3Qdrant · كثيف + متناثرسؤال المتسوّقعربي أو إنجليزيالنيّة والمرشِّحاتفئة · سعر · توافراسترجاع هجيندمج RRFإعادة ترتيبbge-reranker-v2-m3إجابة مسنَدةQwen2.5 · باستشهادسجل الجلسةتفضيلات لاصقةالمجموعة الذهبيةاسترجاع · استخراج
  1. 01الاستيعاب: يُحمَّل كتالوج المنتجات وملفات السياسات إلى SQLite مصدرًا للحقيقة.
  2. 02الفهرسة: تُضمَّن السجلات ومقاطع السياسات بـ BGE-M3 وتُخزَّن في Qdrant كثيفةً ومتناثرة.
  3. 03السؤال: يسأل المتسوّق بالعربية أو الإنجليزية.
  4. 04المرشِّحات: يُحلّ السؤال إلى نيّة وقيود مبنية — فئة وسعر وتوافر.
  5. 05الاسترجاع الهجين: تُدمَج المرشّحات الكثيفة والمتناثرة بـ Reciprocal Rank Fusion.
  6. 06إعادة الترتيب: يعيد مرمِّز متقاطع bge-reranker-v2-m3 ترتيب المجموعة المدموجة طلبًا للدقة.
  7. 07الإجابة: يجيب Qwen2.5 من السجلات المسترجَعة وحدها، مستشهدًا بها، بلغة السؤال.
  8. 08القياس: تسجّل المجموعة الذهبية الاسترجاعَ واستخراج المرشِّحات عبر التغييرات.

08الميزات

  • استرجاع هجين

    مرشّحات كثيفة ومتناثرة تُدمَج بـ Reciprocal Rank Fusion، فتعمل الرموز الدقيقة والنيّة على السواء.

  • إعادة ترتيب بمرمِّز متقاطع

    يستعيد bge-reranker-v2-m3 الدقة بعد تمريرة أولى موجَّهة للاستدعاء.

  • مرشِّحات تُقرأ من الجملة

    «غطاء هاتف بأقل من خمسة عشر دولارًا» يصير فئةً وسقفَ سعر وقيدَ توافر.

  • إجابات مسنَدة بمصادرها

    التوصيات والمقارنات وأجوبة السياسات وملخّصات المراجعات كلها تستشهد بالسجلات التي جاءت منها.

  • العربية والإنجليزية

    يعود الجواب بلغة السؤال الذي طُرح.

  • يعمل بلا اتصال بالكامل

    Ollama وQdrant مضمَّن وتضمينات على المعالج — بلا مفتاح واجهة ولا كلفة على كل استعلام.

  • مجموعة ذهبية لا انطباعات

    يُسجَّل الاسترجاع واستخراج المرشِّحات على مجموعة أسئلة ثابتة قبل الإبقاء على أي تغيير.

09التحديات

  • يعيد البحث الدلالي منتجات تبدو معقولة لكنها الطراز الخطأ أو المقاس الخطأ، لأن التضمينات تطمس تحديدًا الرموزَ الأهم.

    اقتران الاسترجاع المتناثر بالكثيف يُبقي الرموز الدقيقة قابلة للاستهداف مع بقاء استعلامات النيّة عاملة، ثم يحسم المرمِّز المتقاطع الترتيب بعدها.

  • كان مستخرِج المرشِّحات أضعف الحلقات: يستقر على الفئة الخطأ، أو يُسقط بصمت قيدًا ذكره المتسوّق فعلًا، ولا يستطيع مسترجِعٌ جيد إنقاذ استعلام ضُيِّق خطأً من قبل.

    تقييد الفئة بالفئات الموجودة فعلًا واستعادة المرشِّحات المُسقَطة صراحةً أصلحا من إخفاقات الاسترجاع أكثر مما أصلح أي تغيير في البحث نفسه.

  • إبقاء نموذج بسبعة مليارات معامل ونموذج تضمين ومعيد ترتيب مقيمين في آن أكثر مما يحتمله حاسوب محمول بارتياح.

    أُبقيت التضمينات وإعادة الترتيب على المعالج، ورُبط نموذج أصغر بديلًا سريعًا، وخُزِّنت ملخّصات المراجعات بدل إعادة توليدها مع كل سؤال.

10القرارات والمفاضلات

القرارالبديل المطروحالمبرر
إبقاء SQLite مصدر البيانات الأساسي وQdrant فهرسًا شعاعيًا.اعتبار المخزن الشعاعي هو سجل الحقيقة.المخزن العلائقي يُبقي السمات المبنية قابلة للاستعلام وموثوقة؛ ويبقى الفهرس الشعاعي أثرًا مشتقًا يمكن إعادة بنائه. والثمن هو إبقاء الاثنين متوافقين.
تشغيل نموذج اللغة محليًا عبر Ollama.استدعاء نموذج متقدّم مستضاف مع كل استعلام.الاستدلال المحلي لا يكلّف شيئًا مع كل استعلام ويُبقي الكتالوج على الجهاز، وهذا ما جعل تشغيل المسار مئات المرات أثناء الضبط أمرًا معقولًا. والثمن جودة الإجابة: نموذج بسبعة مليارات معامل يكتب نثرًا أبسط بوضوح من نموذج مستضاف، والتصميم يتّكئ على صحة الاسترجاع لا على تغطية النموذج عن خلله.
إضافة مرحلة إعادة ترتيب بمرمِّز متقاطع.إرجاع نتائج المرحلة الأولى المدموجة مباشرة.إعادة الترتيب تكلّف وقتًا في كل استعلام وتُبقي نموذجًا آخر في الذاكرة، لكن المرحلة الأولى مضبوطة للاستدعاء — وبلا مرحلة ثانية تبقى الدقة مسقوفة.
حصر اللغات بالعربية والإنجليزية.الإبقاء على اللغة الثالثة التي حملها المسار في البداية.اللغة الثالثة ضاعفت المساحة الواجب فحصها في كل مسار إجابة دون أن تضيف شيئًا إلى سؤال الاسترجاع الذي قام عليه المشروع. فأُسقطت عمدًا، لا لقصور في النماذج.

11النتيجة

مساعد محلي مكتمل: يوصي، ويقارن، ويجيب عن أسئلة المنتجات وعن سياسات الإرجاع والشحن والضمان، ويلخّص المراجعات — مسنَدًا إلى كتالوج عيّنة من تسعين منتجًا ومراجعاتها وأربع وثائق سياسات، وكل إجابة تستشهد بالسجلات وراءها.

يعمل على جهاز واحد بلا مفتاح واجهة ولا شبكة، وهو مقيس لا مستعرَض: مجموعة ذهبية تسجّل الاسترجاع واستخراج المرشِّحات، ومجموعة الاختبارات الحتمية تعمل بلا نموذج ولا فهرس. وهو مشروع شخصي لا نظام متجر منشور.

12الدروس المستفادة

  1. 01الاسترجاع الهجين ليس تحوّطًا. فالاستراتيجيتان الكثيفة والمتناثرة تفشلان على استعلامات مختلفة، وهذا تحديدًا سبب أفضلية تشغيلهما معًا على اختيار إحداهما.
  2. 02إعادة الترتيب هي حيث تُكسب الدقة، بعد أن تكون المرحلة الأولى قد أدّت دورها في الاستدعاء.
  3. 03الخطوة السابقة للاسترجاع حسمت من النتائج أكثر مما حسم الاسترجاع نفسه: إذا حُوِّل السؤال إلى مرشِّحات خاطئة، فلا جودة بحثٍ تنقذه.
  4. 04بناء المجموعة الذهبية أولًا يغيّر طريقة عملك على الاسترجاع — إذ يحوّل الآراء إلى قياسات.

13حزمة التقنيات

اللغة

  • Python

الذكاء الاصطناعي والاسترجاع

  • Ollama
  • Qwen2.5 (7B / 3B)
  • BGE-M3 embeddings
  • bge-reranker-v2-m3 cross-encoder
  • Hybrid dense and sparse retrieval (RRF)
  • Filter extraction from natural language
  • Arabic and English answers

البيانات

  • SQLite
  • Qdrant

Backend

  • FastAPI
  • REST API
  • Session personalization

الواجهة الأمامية

  • Streamlit
  • Single-page web UI

الممارسات

  • pytest
  • Ruff
  • mypy
  • Golden-set evaluation
  • Sprint planning documents

14لقطات الشاشة

  • شاشة بدء SmartShop AI Advisor: شريط جانبي فيه المحادثات الأخيرة ومصادر البيانات وأدوات الإدارة، بجوار ستة تحليلات مقترحة مثل حواسيب الألعاب المحمولة وسياسات الإرجاع واتجاهات الأسعار، فوق حقل استعلام حر عن المنتجات.

    نقطة الدخول: التحليلات المقترحة تحلّ محل الحالة الفارغة، ويمكن كتابة أيٍّ منها سؤالًا حرًا بدلًا من ذلك.

  • محادثة مُصدَّرة يعيد فيها طلبُ غطاء هاتف بأقل من خمسة عشر دولارًا توصيتين مرتّبتين مع تعليلهما، ومرشِّحات الفئة والسعر المطبَّقة، وبطاقات منتجات تعرض السعر والتقييم والتوافر، ومعرّفات المنتجات المصدرية.

    إجابة مُصدَّرة. تظهر المرشِّحات التي انتهى إليها الاستعلام بجوار النتائج، وكل توصية تستشهد بسجل المنتج الذي جاءت منه.

لنتحدث عن مشروعك

هل لديك مشروع برمجي أو ذكاء اصطناعي أو RAG أو تطبيق ويب؟ لنتحدث عمّا تحتاجه ونحدد المنهج التقني المناسب.