W&B Weave للتقييم

إعداد خطوط أنابيب التقييم

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

Weave يوفر نهجاً منظماً لتقييم تطبيقات LLM. تُعرّف المسجلين، تُنشئ مجموعات البيانات، وتُشغّل التقييمات التي تتتبع النتائج تلقائياً.

مكونات التقييم

المكون الغرض
Model تطبيق LLM للتقييم
Dataset حالات الاختبار مع المدخلات والمخرجات المتوقعة
Scorers دوال تقيس الجودة
Evaluation يجمع النموذج ومجموعة البيانات والمسجلين

إنشاء مسجل

المسجلون هم دوال تُقيّم مخرجات النموذج:

import weave

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

@weave.op()
def accuracy_scorer(output: str, expected: str) -> dict:
    """تحقق إذا كان المخرج يطابق الإجابة المتوقعة."""
    is_correct = expected.lower() in output.lower()
    return {
        "correct": is_correct,
        "score": 1.0 if is_correct else 0.0
    }

تعريف مجموعة بيانات

أنشئ مجموعة بيانات مع حالات الاختبار:

import weave

# عرّف أمثلة التقييم
dataset = [
    {
        "question": "ما هي عاصمة فرنسا؟",
        "expected": "باريس"
    },
    {
        "question": "ما هو 2 + 2؟",
        "expected": "4"
    },
    {
        "question": "من كتب روميو وجولييت؟",
        "expected": "شكسبير"
    }
]

# احفظ كمجموعة بيانات Weave
weave_dataset = weave.Dataset(
    name="qa-test-set",
    rows=dataset
)
weave.publish(weave_dataset)

إنشاء نموذجك

غلّف تطبيق LLM الخاص بك كنموذج Weave:

import weave
from openai import OpenAI

class QAModel(weave.Model):
    model_name: str = "gpt-4o-mini"
    system_prompt: str = "أجب على الأسئلة بإيجاز."

    @weave.op()
    def predict(self, question: str) -> str:
        client = OpenAI()
        response = client.chat.completions.create(
            model=self.model_name,
            messages=[
                {"role": "system", "content": self.system_prompt},
                {"role": "user", "content": question}
            ]
        )
        return response.choices[0].message.content

تشغيل تقييم

ادمج كل شيء في تقييم:

import weave

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

# أنشئ نسخة النموذج
model = QAModel()

# حمّل مجموعة البيانات
dataset = weave.ref("qa-test-set").get()

# عرّف المسجلين
@weave.op()
def contains_answer(output: str, expected: str) -> dict:
    return {"contains_expected": expected.lower() in output.lower()}

# أنشئ وشغّل التقييم
evaluation = weave.Evaluation(
    dataset=dataset,
    scorers=[contains_answer]
)

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

مسجلون متعددون

أضف مسجلين متعددين لتقييم شامل:

@weave.op()
def length_scorer(output: str) -> dict:
    """تحقق إذا كان طول الاستجابة مناسباً."""
    word_count = len(output.split())
    return {
        "word_count": word_count,
        "appropriate_length": 5 <= word_count <= 100
    }

@weave.op()
def format_scorer(output: str) -> dict:
    """تحقق من تنسيق الاستجابة."""
    return {
        "has_period": output.strip().endswith('.'),
        "capitalized": output[0].isupper() if output else False
    }

# استخدم جميع المسجلين
evaluation = weave.Evaluation(
    dataset=dataset,
    scorers=[contains_answer, length_scorer, format_scorer]
)

عرض النتائج

بعد تشغيل التقييم:

  1. اذهب إلى مشروعك في wandb.ai
  2. انتقل إلى Evaluations
  3. شاهد المقاييس المجمعة والدرجات لكل مثال
  4. قارن عبر إصدارات النموذج المختلفة

هيكل نتائج التقييم

نتائج التقييم
├── مقاييس الملخص
│   ├── contains_expected: 0.85 (85% صحيح)
│   ├── appropriate_length: 0.95
│   └── has_period: 0.90
├── نتائج كل مثال
│   ├── مثال 1: درجات لكل مسجل
│   ├── مثال 2: درجات لكل مسجل
│   └── ...
└── معلومات النموذج
    ├── الإصدار
    └── المعاملات

نصيحة: ابدأ بمسجلين بسيطين مثل المطابقة الدقيقة أو الاحتواء، ثم أضف مسجلين أكثر تطوراً مع فهمك لاحتياجات التقييم.

التالي، سنتعلم كيفية مقارنة التجارب وتتبع التحسينات عبر الزمن. :::

اختبار

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

خذ الاختبار