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 عام لكل المنتجات.