LLM-as-a-Judge: قيّم ردود الـ AI قبل ما تثق فيها
مستوى القارئ: متوسط
هتكسب من المقال ده طريقة عملية تحط حارس جودة على ردود تطبيق الـ AI قبل ما توصل للعميل.
المشكلة باختصار
لو عندك chatbot بيرد على تذاكر دعم، الرد الجميل لغويًا مش كفاية. ممكن يكون منظم، سريع، وواثق، لكنه اخترع سياسة استرجاع غير موجودة. الطريقة الشائعة الغلط هنا إنك تختبر 20 سؤال بإيدك، وبعدها تعتبر النظام جاهز. الطريقة دي بتفشل أول ما الأسئلة تتغير أو حجم الطلبات يزيد.
الافتراض إن عندك تطبيق AI بيرد على 500 إلى 5000 طلب يوميًا، وفيه نوع من المخاطرة: إجابة دعم، تلخيص مستند، توصية داخلية، أو رد مبني على RAG. بدل ما تثق في الرد مباشرة، خلّي نموذج تاني يقيمه بروبرك واضح. ده هو LLM-as-a-Judge.
مثال بسيط قبل التعريف العلمي
ركز في المثال ده. عندك موظف جديد بيرد على العملاء. أنت مش هتراجع كل كلمة كتبها للأبد، لكنك هتديه checklist: هل جاوب على السؤال؟ هل التزم بالسياسة؟ هل ذكر معلومة غير مؤكدة؟ هل محتاج تصعيد؟ LLM-as-a-Judge بيعمل نفس الفكرة، لكن على ردود النموذج.
التعريف الأدق: LLM-as-a-Judge هو evaluator يستخدم نموذج لغة لتقييم مخرج نموذج آخر بناءً على معايير مكتوبة. المعايير ممكن تكون score من 0 إلى 1، أو قرار pass/fail، أو تصنيف مثل safe / needs_review / reject. قوته الحقيقية مش في كلمة “judge”، قوته في الروبرك والأمثلة.
نفّذه بسكربت Python صغير
المثال التالي يقيّم رد AI على سؤال دعم. القاعدة بسيطة: لو الرد اخترع سياسة غير موجودة أو تجاهل السؤال، يرجع score أقل من 0.7 وتحوّله لمراجعة بشرية.
from openai import OpenAI
import json
client = OpenAI()
rubric = """
قيّم الرد من 0 إلى 1.
1.0 = صحيح، مباشر، ولا يخترع سياسة.
0.7 = مفيد لكن ناقص تفصيلة بسيطة.
0.4 = فيه غموض أو ادعاء غير مدعوم.
0.0 = خطأ أو خطر على العميل.
ارجع JSON فقط: {"score": number, "reason": string, "decision": "pass|review|block"}
"""
user_question = "هل أقدر أسترجع الاشتراك بعد 45 يوم؟"
policy = "سياسة الاسترجاع: متاح خلال 30 يوم فقط من تاريخ الدفع. بعد ذلك يحتاج تصعيد للدعم."
answer = "نعم، تقدر تسترجع الاشتراك خلال 60 يوم بدون أي مشكلة."
judge_prompt = f"""
{rubric}
السؤال: {user_question}
السياسة المعتمدة: {policy}
رد النموذج: {answer}
"""
result = client.responses.create(
model="gpt-4.1-mini",
input=judge_prompt,
text={"format": {"type": "json_object"}},
)
score = json.loads(result.output_text)
print(score)
الناتج المتوقع في الحالة دي مش pass. الرد قال 60 يوم، بينما السياسة 30 يوم فقط. أفضل قرار هنا review أو block حسب حساسية المنتج.
الأرقام التي تهمك
في تجربة داخلية مع 100 رد دعم، بدون evaluator كان الفريق يراجع عينات عشوائية وتوافق القرار مع المراجعة البشرية كان حوالي 52%. لما أضفنا judge عام بدون أمثلة وصلنا تقريبًا إلى 68%. وبعد إضافة روبريك واضح و8 أمثلة مصححة، وصل التوافق إلى 82%. الأرقام هنا تقديرية من سيناريو عملي صغير، مش benchmark عام لكل المنتجات.
الـ trade-off هنا واضح. بتكسب مراقبة مستمرة وتقليل أخطاء الإنتاج، وبتخسر تكلفة طلب إضافي لكل عينة مقيمة. الحل العملي مش إنك تقيّم 100% من الردود دائمًا. ابدأ بـ 10% sampling في الإنتاج، و100% على الردود عالية المخاطر، مثل الفواتير أو السياسات أو الردود الطبية والقانونية.
ما الذي يجعل الـ judge مفيدًا فعلاً؟
- روبرك محدد: لا تكتب “قيّم الجودة”. اكتب ما معنى الجودة عندك: دقة، اكتمال، التزام بالسياسة، وضوح.
- أمثلة مصححة: أعطِ النموذج 5 إلى 10 أمثلة فيها score وسبب. ده يقلل التذبذب.
- مخرجات منظمة: استخدم JSON فيه score وreason وdecision بدل نص حر.
- مراجعة بشرية دورية: راجع 20 عينة أسبوعيًا. لو الـ judge بقى متساهل أو قاسي، عدّل الروبرك.
لو بتستخدم RAG، أضف retrieved context في prompt التقييم. أدوات مثل Ragas بتفصل مقاييس مثل faithfulness وcontext precision، وده مفيد عندما تريد تعرف هل الرد مدعوم بالمصادر أم لا. LangSmith كمان يدعم LLM-as-a-Judge كـ evaluator offline وonline، وOpenAI Evals يوفر بنية لإنشاء evaluation runs ومعايير اختبار قابلة للتكرار.
متى لا تستخدم هذه الطريقة
لا تستخدم LLM-as-a-Judge كبديل وحيد للمراجعة البشرية في قرارات مالية أو قانونية أو طبية حساسة. لا تستخدمه لو الرد له إجابة واحدة واضحة يمكن اختبارها بكود عادي. مثال: لو المطلوب التأكد أن JSON صالح أو أن price لا يساوي رقمًا سالبًا، الاختبار البرمجي أرخص وأدق. استخدم judge لما تكون الجودة لغوية أو سياقية أو فيها أكثر من إجابة صحيحة.
مصادر
الخطوة التالية
افتح آخر 50 رد من تطبيق الـ AI عندك، واكتب روبريك من 5 بنود. بعد كده شغّل judge على 10 ردود فقط، وقارن قراره بقرارك اليدوي قبل ما تدخله الإنتاج.