التعمق في 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:
- اذهب إلى Datasets & Testing
- اختر مجموعة بياناتك
- انقر على 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']}")
النقاط الرئيسية
- مجموعات البيانات مُصدَّرة: تتبع التغييرات في بيانات الاختبار
- المقيّمون دوال: Python بسيط مع معاملات run وexample
- حكام LLM تتوسع: استخدم LLMs للتقييم الدقيق
- قارن التجارب: تتبع الجودة عبر الإصدارات
- أتمت في CI: شغّل التقييمات مع كل PR
مع إتقان LangSmith، لنستكشف نهج MLflow لتقييم LLM. :::