كيف أقوم بإعداد تقييمات RAG في CI/CD لاكتشاف التراجعات (Regressions)

يصل طلب سحب (PR). يعمل تقييم RAG في دقيقة واحدة. تظهر علامة صح خضراء. تقوم بدمج الكود.

بعد اثنتي عشرة ساعة، تصل تذاكر الدعم الفني.

قام المسترجع (retriever) بتغيير الجزء (chunk) الأول لأحد أنواع الاستعلامات المحددة. لم تغطِّ مجموعة البيانات المكونة من 30 مثالاً تلك الحالة أبدًا. ظلت مجموعة الاختبارات خضراء لأنها كانت تفحص الأشياء الخاطئة.

معظم بوابات RAG هي مجرد اختبارات دخان (smoke tests). فهي تستخدم مجموعات بيانات صغيرة وحدودًا دنيا ثابتة. إذا كان المتوسط فوق رقم معين، فإنها تجتاز الاختبار. هذا الأسلوب يفشل لأن مجموعات البيانات ليست ممثلة للواقع، ولأن العتبات (thresholds) لا تأخذ الضجيج (noise) في الاعتبار.

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

إليك إطاري العمل لبوابة RAG موثوقة.

الهيكل ثلاثي المستويات

  1. كل عملية دفع (بوابة الـ PR)
  1. الفرع الرئيسي الليلي (المسح الكامل)
  1. نسخة الـ Canary (مراقبة الإنتاج)

المعايير الخمسة الأساسية

لتحديد مكان تعطل النظام بالضبط، قم بتقسيم معاييرك حسب الطبقة:

ملاحظة: يجب عليك استخدام معرفات المستندات الحقيقية (ground-truth doc IDs) مثل (expected_chunks) لتقييم استدعاء الاسترجاع (retrieval recall). بدون ذلك، لن تتمكن من العثور على أخطاء الاسترجاع.

البوابة الإحصائية

لا تكتفِ بوضع بوابة بناءً على رقم ثابت. فالحد الأدنى الثابت يغفل الانحراف البطيء. استخدم عتبتين:

استخدم اختبارًا إحصائيًا مثل اختبار Welch's t-test. لا ترفض طلب السحب (PR) إلا إذا كان الانخفاض ذا دلالة إحصائية وكبيرًا بما يكفي ليكون مؤثرًا. هذا يمنع المطورين من تجاهل البوابة بسبب الإنذارات الكاذبة.

القاعدة الأكثر أهمية

يجب أن يكون خط الأساس الخاص بك نافذة إنتاج متحركة، وليس مجرد رقم ثابت.

عندما تتغير بيانات الإنتاج، يجب أن تتغير مجموعة البيانات الخاصة بك أيضًا. قم بأخذ الـ production traces الفاشلة، وقم بتجميعها (cluster)، ثم ارفعها لتصبح جزءًا من الـ eval set الخاصة بك. هذا يحول بوابة الاختبار (gate) الخاصة بك إلى نظام تعلم.

المصدر: https://dev.to/kartik-nvjk/how-i-set-up-rag-evals-in-cicd-so-they-actually-catch-regressions-46hb

مجتمع تعلم اختياري: https://t.me/GyaanSetuAi