W&B Weave للتقييم

LLM-as-Judge في Weave

3 دقيقة للقراءة

عندما تحتاج تقييماً دقيقاً يتجاوز المطابقة البسيطة، استخدم LLMs كحكام. Weave يسهّل بناء مسجلين مدعومين بـ LLM يقيّمون الجودة والمساعدة ومعايير ذاتية أخرى.

لماذا LLM-as-Judge في Weave؟

الفائدةالوصف
تقييم دقيقتقييم النبرة، المساعدة، التماسك
قابل للتوسعتقييم آلاف الأمثلة تلقائياً
قابل للتخصيصعرّف معاييرك الخاصة
متتبعجميع استدعاءات الحاكم تُسجل وتُصدَر

حاكم LLM أساسي

أنشئ مسجلاً بسيطاً مدعوماً بـ LLM:

import weave
from openai import OpenAI

weave.init('my-team/my-project')

client = OpenAI()

@weave.op()
def helpfulness_judge(output: str, question: str) -> dict:
    """استخدم LLM لتقييم المساعدة."""
    response = client.chat.completions.create(
        model="gpt-5.4-mini",
        messages=[{
            "role": "system",
            "content": """أنت حكم تقييم. قيّم مساعدة
            الاستجابة على مقياس من 1-5.

            1 = غير مفيد على الإطلاق
            3 = مفيد إلى حد ما
            5 = مفيد للغاية

            أرجع فقط كائن JSON: {"score": <number>, "reasoning": "<explanation>"}"""
        }, {
            "role": "user",
            "content": f"السؤال: {question}\n\nالاستجابة: {output}"
        }],
        response_format={"type": "json_object"}
    )

    result = json.loads(response.choices[0].message.content)
    return {
        "helpfulness_score": result["score"] / 5.0,  # تطبيع إلى 0-1
        "reasoning": result["reasoning"]
    }

حاكم متعدد المعايير

قيّم على أبعاد متعددة:

@weave.op()
def quality_judge(output: str, question: str, context: str = None) -> dict:
    """قيّم الاستجابة على أبعاد جودة متعددة."""
    criteria_prompt = """
    قيّم هذه الاستجابة على هذه المعايير (1-5 لكل منها):

    1. **الدقة**: هل المعلومات صحيحة؟
    2. **الاكتمال**: هل تجيب على السؤال بالكامل؟
    3. **الوضوح**: هل من السهل فهمها؟
    4. **النبرة**: هل النبرة مناسبة ومهنية؟

    أرجع JSON: {
        "accuracy": <1-5>,
        "completeness": <1-5>,
        "clarity": <1-5>,
        "tone": <1-5>,
        "overall": <1-5>,
        "feedback": "<تعليقات محددة>"
    }
    """

    response = client.chat.completions.create(
        model="gpt-5.4",  # استخدم نموذجاً أقوى للحكم
        messages=[
            {"role": "system", "content": criteria_prompt},
            {"role": "user", "content": f"السؤال: {question}\nالاستجابة: {output}"}
        ],
        response_format={"type": "json_object"}
    )

    result = json.loads(response.choices[0].message.content)

    # تطبيع جميع الدرجات إلى 0-1
    return {
        "accuracy": result["accuracy"] / 5.0,
        "completeness": result["completeness"] / 5.0,
        "clarity": result["clarity"] / 5.0,
        "tone": result["tone"] / 5.0,
        "overall": result["overall"] / 5.0,
        "feedback": result["feedback"]
    }

حاكم المقارنة الثنائية

قارن استجابتين مباشرة:

@weave.op()
def pairwise_judge(response_a: str, response_b: str, question: str) -> dict:
    """احكم أي استجابة أفضل."""
    response = client.chat.completions.create(
        model="gpt-5.4",
        messages=[{
            "role": "system",
            "content": """قارن هاتين الاستجابتين لنفس السؤال.
            أيهما أفضل؟ أرجع JSON:
            {
                "winner": "A" أو "B" أو "tie",
                "reasoning": "<شرح>"
            }"""
        }, {
            "role": "user",
            "content": f"""السؤال: {question}

            الاستجابة أ: {response_a}

            الاستجابة ب: {response_b}"""
        }],
        response_format={"type": "json_object"}
    )

    result = json.loads(response.choices[0].message.content)
    return {
        "winner": result["winner"],
        "a_wins": 1.0 if result["winner"] == "A" else 0.0,
        "reasoning": result["reasoning"]
    }

استخدام حكام LLM في التقييم

ادمج الحكام في خط أنابيب التقييم:

import weave

weave.init('my-team/my-project')

# نموذجك
class SupportBot(weave.Model):
    @weave.op()
    def predict(self, question: str) -> str:
        # توليد الاستجابة
        pass

# التقييم مع حكام LLM
evaluation = weave.Evaluation(
    dataset=weave.ref("support-test-cases").get(),
    scorers=[
        helpfulness_judge,
        quality_judge
    ]
)

# تشغيل التقييم
model = SupportBot()
results = await evaluation.evaluate(model)

# عرض الدرجات المجمعة
print(results.summary)
# {
#     "helpfulness_score": 0.82,
#     "accuracy": 0.88,
#     "completeness": 0.75,
#     ...
# }

أفضل الممارسات لحكام LLM

الممارسةلماذا
استخدم مخرجات منظمةJSON يضمن نتائج قابلة للتحليل
ضمّن التفسيريساعد في تصحيح قرارات التسجيل
طبّع الدرجاتنطاق 0-1 للمقارنة السهلة
استخدم نماذج حاكمة قويةفئة GPT-4o للتقييم الدقيق
أضف أمثلةfew-shot يحسن الاتساق

معايرة حاكمك

تحقق من دقة الحاكم على أمثلة معروفة:

# أمثلة جيدة/سيئة معروفة للمعايرة
calibration_set = [
    {"output": "استجابة ممتازة", "expected_score": 0.9},
    {"output": "استجابة ضعيفة", "expected_score": 0.2},
    {"output": "استجابة متوسطة", "expected_score": 0.5}
]

# تحقق إذا كانت درجات الحاكم تطابق التوقعات
for example in calibration_set:
    result = helpfulness_judge(example["output"], "سؤال اختبار")
    assert abs(result["helpfulness_score"] - example["expected_score"]) < 0.2

تتبع اتساق الحاكم

جميع استدعاءات حاكم LLM تُسجل في Weave:

  • شاهد الموجهات الدقيقة المُرسلة للحاكم
  • راجع استجابات الحاكم
  • حدد التسجيل غير المتسق
  • صحح النتائج غير المتوقعة

نصيحة: سجّل تفسير الحاكم مع الدرجات. هذا يساعد في تصحيح لماذا حصلت استجابات معينة على درجات عالية أو منخفضة.

مع إتقان الأدوات الثلاث، لنستكشف أنماط مراقبة الإنتاج والخطوات التالية. :::

مراجعة سريعة: كيف تجد هذا الدرس؟

اختبار

الوحدة 5: W&B Weave للتقييم

خذ الاختبار
نشرة أسبوعية مجانية

ابقَ على مسار النيرد

بريد واحد أسبوعياً — دورات، مقالات معمّقة، أدوات، وتجارب ذكاء اصطناعي.

بدون إزعاج. إلغاء الاشتراك في أي وقت.