التعمق في LangSmith

المقيّمون المخصصون ومجموعات البيانات

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

المقيّمون المدمجون يغطون الحالات الشائعة، لكن أنظمة الإنتاج تحتاج مقيّمين مخصصين مُصممين لمعايير الجودة الخاصة بك.

إنشاء مجموعات بيانات التقييم

أولاً، أنشئ مجموعة بيانات للتقييم مقابلها:

from langsmith import Client

client = Client()

# إنشاء مجموعة بيانات
dataset = client.create_dataset(
    dataset_name="support-qa-eval",
    description="مجموعة تقييم أسئلة وأجوبة دعم العملاء"
)

# إضافة أمثلة
client.create_examples(
    inputs=[
        {"question": "كيف أعيد تعيين كلمة المرور؟"},
        {"question": "ما هي ساعات عملكم؟"},
        {"question": "هل يمكنني الحصول على استرداد؟"}
    ],
    outputs=[
        {"answer": "انقر على 'نسيت كلمة المرور' في صفحة تسجيل الدخول..."},
        {"answer": "نحن مفتوحون من الإثنين للجمعة، 9 صباحاً حتى 5 مساءً..."},
        {"answer": "الاسترداد متاح خلال 30 يوماً..."}
    ],
    dataset_id=dataset.id
)

كتابة مقيّمين مخصصين

دالة تسجيل بسيطة

from langsmith.evaluation import evaluate

def check_length(run, example) -> dict:
    """مقيّم يتحقق من طول الاستجابة."""
    output = run.outputs.get("output", "")
    is_appropriate = 50 <= len(output) <= 500
    return {
        "key": "appropriate_length",
        "score": 1 if is_appropriate else 0,
        "comment": f"الطول: {len(output)} حرف"
    }

مقيّم LLM-as-Judge

from langsmith.evaluation import LangChainStringEvaluator

# استخدم LLM للتقييم
helpfulness_evaluator = LangChainStringEvaluator(
    "criteria",
    config={
        "criteria": {
            "helpfulness": "هل الاستجابة مفيدة وقابلة للتنفيذ؟"
        }
    }
)

حاكم LLM مخصص

from openai import OpenAI

judge_client = OpenAI()

def custom_judge(run, example) -> dict:
    """مقيّم LLM-as-Judge مخصص."""
    question = example.inputs.get("question", "")
    expected = example.outputs.get("answer", "")
    actual = run.outputs.get("output", "")

    response = judge_client.chat.completions.create(
        model="gpt-4o-mini",
        messages=[{
            "role": "system",
            "content": """أنت حكم تقييم. سجّل الاستجابة على:
            1. الدقة (تطابق الإجابة المتوقعة دلالياً)
            2. الاكتمال (تغطي جميع النقاط الرئيسية)
            3. الوضوح (سهلة الفهم)

            أرجع JSON: {"score": 1-5, "reasoning": "..."}"""
        }, {
            "role": "user",
            "content": f"السؤال: {question}\nالمتوقع: {expected}\nالفعلي: {actual}"
        }],
        response_format={"type": "json_object"}
    )

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

تشغيل التقييمات

from langsmith.evaluation import evaluate

def my_app(inputs: dict) -> dict:
    """تطبيق LLM الخاص بك."""
    question = inputs["question"]
    # منطقك هنا
    return {"output": answer}

# تشغيل التقييم
results = evaluate(
    my_app,
    data="support-qa-eval",  # اسم مجموعة البيانات
    evaluators=[
        check_length,
        custom_judge,
        helpfulness_evaluator
    ],
    experiment_prefix="v1.2-gpt4o"
)

عرض النتائج

في واجهة LangSmith:

  1. اذهب إلى Datasets & Testing
  2. اختر مجموعة بياناتك
  3. انقر على Compare Experiments

قارن عبر:

  • موجهات مختلفة
  • نماذج مختلفة
  • تغييرات الكود
  • تنويعات المعاملات

أفضل ممارسات التقييم

الممارسة لماذا
أصدر مقيّميك تتبع التغييرات في معايير التسجيل
استخدم عدة مقيّمين الجوانب المختلفة تحتاج مقاييس مختلفة
ضمّن خطوط أساس قارن مع إصدار جيد معروف
سجّل التفسير افهم لماذا أُعطيت الدرجات
اختبر المقيّمين أيضاً تأكد من اتساق المقيّمين

مثال: خط أنابيب تقييم كامل

from langsmith import Client
from langsmith.evaluation import evaluate

client = Client()

# 1. تعريف المقيّمين
evaluators = [
    check_length,
    custom_judge,
    LangChainStringEvaluator("criteria", config={
        "criteria": {"accuracy": "هل الاستجابة صحيحة واقعياً؟"}
    })
]

# 2. تشغيل التقييم
results = evaluate(
    target=my_app,
    data="support-qa-eval",
    evaluators=evaluators,
    experiment_prefix="prod-v2.1",
    max_concurrency=4
)

# 3. فحص النتائج
print(f"متوسط الدرجة: {results.aggregate_metrics['quality_score']['mean']}")

النقاط الرئيسية

  1. مجموعات البيانات مُصدَّرة: تتبع التغييرات في بيانات الاختبار
  2. المقيّمون دوال: Python بسيط مع معاملات run وexample
  3. حكام LLM تتوسع: استخدم LLMs للتقييم الدقيق
  4. قارن التجارب: تتبع الجودة عبر الإصدارات
  5. أتمت في CI: شغّل التقييمات مع كل PR

مع إتقان LangSmith، لنستكشف نهج MLflow لتقييم LLM. :::

اختبار

الوحدة 3: التعمق في LangSmith

خذ الاختبار