لقد بنيت تطبيق RAG، ثم سألته عن نوع السيارة التي أحبها. لم يكن يعرف الإجابة.
أقوم حالياً ببناء أداة للدردشة مع المستندات تسمى Kenning. تعتمد هذه الأداة على تقنية RAG (Retrieval-Augmented Generation) لتسمح للمستخدمين بطرح أسئلة حول الملفات التي يتم رفعها.
لقد قمت ببناء خط المعالجة (pipeline) بالكامل من الصفر باستخدام:
- Java 21 و Spring Boot
- Spring AI
- PostgreSQL مع pgvector
- Ollama (لتشغيل llama3.2:3b و nomic-embed-text)
- Docker Compose
يعمل خط المعالجة على النحو التالي: رفع الملف ← استخراج النص ← تقسيم النص إلى أجزاء (Chunking) ← تحويل الأجزاء إلى متجهات (vectors) ← التخزين في pgvector ← البحث عن أجزاء مشابهة ← إرسال الأجزاء + السؤال إلى النموذج ← الحصول على الإجابة مع المصادر.
كان النظام يعمل، لكنني واجهت نوعين مختلفين من الفشل. بدا كلاهما متشابهاً، لكن الأسباب كانت مختلفة.
الفشل 1: النموذج كان مرتبكاً. سألت: "ما هو نموذج التضمين (embedding model) الذي يستخدمه هذا المشروع؟" ذكر المستند الإجابة بوضوح. استرجع النموذج النص الصحيح، ومع ذلك، أجاب بأنه لا يعرف، رغم أنه كرر اسم النموذج الصحيح في الجملة التالية.
نظريتي: نموذج 3B صغير جداً. لقد استرجع البيانات الصحيحة لكنه لم يستطع تقديم إجابة واثقة. من المرجح أن يؤدي استخدام نموذج أكبر إلى حل هذه المشكلة.
الفشل 2: النموذج لم يجد شيئاً. سألت: "ما هي ماركة السيارات التي أحبها؟" ذكر المستند أنني أحب BMW. لكن النظام لم يعرض أي نتائج. كانت درجة التشابه (similarity score) منخفضة جداً بحيث لم تتجاوز الحد الذي وضعته.
نظريتي: تخفيف الأجزاء (Chunk dilution). كان مستند الاختبار قصيراً، حيث دمج مواضيع عديدة مثل Spring AI و OAuth2 وتفضيلاتي للسيارات في جزء واحد (chunk). أصبح المتجه (vector) الخاص بهذا الجزء مشتتاً بين كل تلك المواضيع. فقد السؤال المحدد عن السيارات قوته أمام هذا الجزء العام. استراتيجية تقسيم (chunking) أفضل من شأنها حل هذه المشكلة.
الدروس المستفادة:
- النماذج الصغيرة لديها حدود في القدرة على الاستنتاج.
- التقسيم البسيط (Naive chunking) يؤثر على دقة الاسترجاع.
- البحث عن سبب المشكلة (the "why") أهم من مجرد إصلاح الخطأ.
الهيكلية صامدة. هي بطيئة وتخطئ أحياناً، لكن الدورة البرمجية اكتملت.
المصدر: https://dev.to/mido-dev/i-built-a-rag-app-then-asked-it-what-car-i-like-it-didnt-know-583n
مجتمع تعليمي اختياري: https://t.me/GyaanSetuAi
