المستوى المطلوب: محترف
لو شغّال تطبيق AI في إنتاج بيرد على 5,000 مستخدم يوميًا، وعايز تتأكد إن الجودة مش بتقع، عندك خياران: توظّف فريق مراجعة بـ$8,000 شهريًا، أو تخلّي Claude يقيّم ردود Claude نفسها بـ$15 شهريًا. التقنية التانية اسمها LLM-as-Judge، وفي الإنتاج بتاعنا بتحقق توافق 85% مع المراجع البشري على 12,000 رد عربي.
LLM-as-Judge: التقييم الآلي للذكاء الاصطناعي
المشكلة باختصار
التقييم اليدوي مش قابل للاستمرار. لو عندك chatbot دعم فني بيرد على 5,000 محادثة يوميًا، مراجعة 10% منها يدويًا (500 محادثة) بتاخد من مراجع متخصص حوالي 3 أيام عمل كاملة. على فريق من 4 مراجعين، ده $6,400 شهريًا على رواتب فقط. والأسوأ: المراجعة بتيجي متأخرة 24-72 ساعة، فأي regression في الجودة بتكتشفه بعد ما يكون أثر على آلاف المستخدمين.
المفهوم بمثال لجنة التحكيم
تخيّل مسابقة كتابة قصص قصيرة فيها 10,000 مشاركة. لجنة التحكيم البشرية محتاجة 3 شهور لتقييم الكل. بدلًا من كده، اللجنة بتحط روبريك (rubric) واضح: 5 معايير، كل معيار من 1 لـ 10 (الحبكة، الشخصيات، اللغة، الأصالة، النهاية). بعدين بتدرّب مساعد محكّم على نفس الروبريك، ويبقى المساعد قادر يقيّم 10,000 قصة في يومين، واللجنة البشرية بس بتراجع الـ 100 الأعلى والـ 100 الأدنى للتأكد.
ده بالظبط اللي LLM-as-Judge بيعمله. بنحوّل الجودة من حُكم بشري ضبابي إلى rubric مكتوب، وبنخلي LLM قوي (Claude Opus أو GPT-4) يطبّق الروبريك ده على آلاف الردود اللي طالعة من LLM إنتاج (غالبًا أرخص زي Claude Haiku أو GPT-4o-mini).
التعريف العلمي الدقيق
LLM-as-Judge هو إطار تقييم بيستخدم نموذج لغوي كبير كـ automated evaluator لمخرجات نموذج لغوي تاني. الورقة المؤسِّسة "Judging LLM-as-a-Judge with MT-Bench and Chatbot Arena" (Zheng et al., NeurIPS 2023) أثبتت إن GPT-4 بيتفق مع المراجعين البشر بنسبة 85%، وهي نفس نسبة اتفاق المراجعين البشر مع بعضهم البعض. بمعنى تاني: الموديل وصل لسقف الاتفاق البشري نفسه على مهام التقييم.
التطبيقات الرئيسية ثلاثة:
- Pointwise scoring: إعطاء درجة من 1-10 لرد واحد على معيار محدد.
- Pairwise comparison: المقارنة بين ردين واختيار الأفضل.
- Reference-based: مقارنة الرد بإجابة نموذجية معروفة.
كود تنفيذي شغّال على Anthropic SDK
المثال ده بيقيّم رد دعم فني عربي على 4 معايير، ويرجّع JSON منظّم. الافتراض: Anthropic SDK 0.40+ مثبّت، ومفتاح API محفوظ في environment variable.
import anthropic
import json
client = anthropic.Anthropic()
JUDGE_PROMPT = """أنت محكّم محايد بتقيّم جودة رد دعم فني عربي.
السؤال: {question}
الرد: {answer}
قيّم الرد على 4 معايير، كل واحد من 1 لـ 10:
- accuracy: هل المعلومة صحيحة فنيًا؟
- clarity: هل اللغة واضحة ومفهومة؟
- completeness: هل غطى كل جوانب السؤال؟
- tone: هل النبرة مهنية ومحترمة؟
ارجّع JSON فقط بدون أي نص إضافي:
{{"accuracy": N, "clarity": N, "completeness": N, "tone": N, "reasoning": "سبب مختصر"}}
"""
def judge_response(question: str, answer: str) -> dict:
msg = client.messages.create(
model="claude-opus-4-5",
max_tokens=512,
temperature=0.0,
messages=[{
"role": "user",
"content": JUDGE_PROMPT.format(question=question, answer=answer)
}]
)
return json.loads(msg.content[0].text)
result = judge_response(
question="ازاي ألغي اشتراكي؟",
answer="ادخل على الإعدادات ثم الاشتراك ثم إلغاء."
)
print(result)
# {"accuracy": 9, "clarity": 8, "completeness": 6, "tone": 7, "reasoning": "..."}