لماذا استمر تطبيق RAG الخاص بي في الهلوسة وكيف قمت بإصلاح ذلك
قبل بضعة أشهر، قمت بعرض تجريبي لروبوت الدعم الخاص بي القائم على تقنية RAG. أخبر أحد الزملاء أن سياسة الاسترداد لدينا هي 30 يومًا. بينما سياسة الاسترداد الفعلية هي 14 يومًا. لم يتردد الروبوت، ولم يقل إنه غير متأكد، بل اختلق إجابة بكل ثقة.
من المفترض أن تقلل تقنية RAG من الهلوسة، لكن إعداداتي لم تفعل شيئًا سوى نقلها من مكان لآخر. تعلمت خمسة دروس أثناء معالجة أخطاء هذا النظام.
توقف عن استخدام عدد ثابت من الحروف لتقسيم النصوص (chunks) كنت أستخدم أجزاءً مكونة من 1000 حرف مع تداخل بسيط. تسبب هذا في مشاكل؛ فغالبًا ما كان الجزء الواحد يخلط بين قواعد الشحن وقواعد الإرجاع. قام النموذج بدمج هذه الأقسام المختلفة في إجابة واحدة خاطئة. الحل: انتقلت إلى التقسيم الدلالي (semantic chunking). قمت بتقسيم البيانات بناءً على العناوين والفقرات، مما يحافظ على بقاء المعلومات ذات الصلة معًا.
التشابه لا يعني الصلة قام نظام الاسترجاع (retriever) لدي بجلب أفضل 3 أجزاء بناءً على تشابه جيب التمام (cosine similarity). يمكن أن يبدو الجزء مشابهًا للسؤال دون أن يحتوي على الإجابة. يفترض النموذج أن كل ما في السياق (context) صحيح. الحل: أضفت خطوة إعادة الترتيب (reranking) باستخدام cross-encoder. كما بدأت في تسجيل درجات الاسترجاع، مما يوضح متى يفتقر النظام إلى إجابة حقيقية.
أخبر النموذج أنه لا بأس بالفشل كان الأمر (prompt) الأصلي بسيطًا: "استخدم السياق للإجابة على السؤال". لم يعطِ الأمر أي تعليمات لما يجب فعله في حال غياب السياق. قام النموذج بملء الفجوات بالتخمينات. الحل: أضفت تعليمات محددة: "إذا لم تكن الإجابة موجودة في السياق، فقل إنك لا تعرف". انخفضت معدلات الهلوسة على الفور.
فرض حد أدنى للاسترجاع (retrieval threshold) كان النموذج لا يزال يستخدم المعرفة العامة عندما يفشل الاسترجاع. كنت آمل أن ينجح الأمر (prompt)، لكن الأمل ليس استراتيجية. الحل: وضعت حدًا صارمًا للدرجة (score threshold). إذا كانت أعلى درجة استرجاع منخفضة جدًا، يتوقف النظام ويعيد رسالة بديلة (fallback message) بدلاً من ترك النموذج يخمن.
اختبر حالات الفشل، وليس النجاح فقط كنت أختبر فقط الأسئلة السهلة التي أعرف أن المستندات تغطيها. تجاهلت الاستفسارات الغامضة والمعلومات المفقودة. الهلوسة تعيش في تلك الفجوات. الحل: قمت ببناء مجموعة تقييم من "الأسئلة الفخ" (trap questions). وهي حالات لا تكون فيها الإجابة الصحيحة موجودة في النظام. أقوم بإجراء هذه الاختبارات في كل مرة أجري فيها تغييرًا.
تقنية RAG لا تمنع الهلوسة تمامًا، بل تجعلها قابلة للتحكم. لا يزال الروبوت الخاص بي لا يعرف كل شيء. ولكن الآن، عندما يكون غير متأكد، فإنه يعبر عن ذلك. وهذا ما يجعل الأداة قابلة للاستخدام.
المصدر: https://dev.to/pallavi_sharma_10c1a6f1da/why-my-rag-app-kept-hallucinating-and-how-i-fixed-it-3i10