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

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

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