فخ الإحساس
بنيت وكيلاً. تحدثت معه 30 دقيقة. بدا ذكياً. أطلقته.
بعد ثلاثة أيام، يُبلّغ مستخدم أنه أعطى إجابة خاطئة بكل ثقة على سؤال أساسي. تختبره مجدداً — يعمل بشكل جيد الآن. تهز كتفيك. لا بد أن النموذج كان يمر بيوم سيء.
هذا هو فخ الإحساس: استخدام الانطباعات غير الرسمية كإشارة للجودة. ينجح هذا على نطاق الهواية. يفشل في اللحظة التي يكون لديك فيها مستخدمون حقيقيون، أو أموال حقيقية، أو مخاطر حقيقية.
التقييمات هي مخرج الطريق السريع.
ما هو التقييم فعلاً
التقييم هو دالة تأخذ موجّهاً مع السلوك المتوقع وتعيد درجة. هذا كل شيء. لا تحتاج إلى بنية تحتية معقدة للبدء.
أبسط تقييم يمكنك كتابته:
interface EvalCase {
input: string;
expected: string;
check: (output: string) => boolean;
}
const cases: EvalCase[] = [
{
input: "What is 2 + 2?",
expected: "4",
check: (out) => out.includes("4"),
},
{
input: "Summarize: 'The quick brown fox jumps over the lazy dog'",
expected: "mentions fox and dog",
check: (out) => out.toLowerCase().includes("fox") && out.toLowerCase().includes("dog"),
},
];
async function runEvals(model: (prompt: string) => Promise<string>) {
let pass = 0;
for (const c of cases) {
const output = await model(c.input);
if (c.check(output)) {
pass++;
console.log(`✓ ${c.input.slice(0, 40)}`);
} else {
console.log(`✗ ${c.input.slice(0, 40)}`);
console.log(` Got: ${output.slice(0, 100)}`);
}
}
console.log(`\n${pass}/${cases.length} passed (${Math.round(pass / cases.length * 100)}%)`);
}
شغّل هذا عند كل تغيير في الموجّه. أصبح لديك الآن مجموعة اختبار انحدار.
أنواع التحقق الثلاثة التي تحتاجها
1. المطابقة الدقيقة — للمخرجات المنظمة، والرموز، ومعرّفات الهوية، وقرارات نعم/لا. ثنائي. سريع.
2. التحقق بالاحتواء — لمخرجات النثر حيث تتفاوت الصياغة الدقيقة لكن يجب أن تظهر الحقائق الرئيسية. "المخرج يذكر 'باريس'" أكثر متانة من "المخرج يساوي 'باريس هي عاصمة فرنسا'".
3. التقييم بالنموذج — للمهام المعقدة التي تحتاج إلى حكم دلالي. اسأل نموذجاً ثانياً (أرخص وأسرع): "هل تجيب هذه الاستجابة على السؤال بشكل صحيح؟ أجب بـ YES أو NO مع سبب واحد." هذا يتوسع ليشمل الجودة الذاتية والنبرة وسلاسل الاستدلال.
async function modelGrade(output: string, criterion: string): Promise<boolean> {
const verdict = await callModel(
`Criterion: ${criterion}\nOutput: ${output}\nDoes the output meet the criterion? Reply YES or NO only.`
);
return verdict.trim().startsWith("YES");
}
ما تقيّمه أولاً
إذا كنت تبدأ من الصفر، قيّم بهذا الترتيب:
-
المسار السعيد — الـ 5-10 مدخلات التي صُمّم وكيلك صراحةً من أجلها. يجب أن تجتاز جميعها. إن لم تفعل، فلديك عرض توضيحي لا وكيل فعّال.
-
حالات الحافة التي شهدت فشلاً سابقاً — أي شيء انكسر في الاختبار. رمّزها فوراً. كل خطأ هو حالة تقييم.
-
المدخلات العدائية — مدخلات فارغة، مدخلات مشوّهة، أسئلة خارج النطاق، محاولات حقن الموجّه. يحتاج وكيلك إلى التدهور بشكل سلس.
-
مجموعة الانحدار — مجموعة ثابتة من 50-100 حالة تشغّلها عند كل تغيير. الأخضر يعني أنك لم تكسر شيئاً. الأحمر يعني أن عليك اتخاذ قرار.
سير عمل التقييم
تغيير الموجّه → تشغيل التقييمات → فحص دلتا الدرجة → الإطلاق إذا كانت الدلتا > العتبة → انتهى
تعتمد عتبتك على المخاطر. مشروع تجريبي قد يقبل 2%-. وكيل إنتاجي يتعامل مع بيانات العملاء يجب أن يتطلب 0%+ أو أفضل. حدّد هذا صراحةً قبل البدء حتى لا تتخذ القرار تحت الضغط عندما تنخفض درجتك بنسبة 4% بعد تعديل "بسيط" للموجّه.
أدوات تستحق المعرفة
- Braintrust — تشغيلات التقييم، التسجيل، مقارنة النماذج. يمتلك مستوى مجانياً سخياً.
- Promptfoo — مفتوح المصدر، يعمل محلياً، ممتاز للاختبار الأحمر.
- Langfuse — القابلية للرصد مع التقييم، جيد إذا كنت تريد التتبع إلى جانب الدرجات.
- سكريبت محلي — للوكلاء البسيطة، غالباً ما يكفي سكريبت TypeScript من 50 سطراً. لا تفرط في الهندسة.
الحقيقة غير المريحة
معظم إخفاقات الوكلاء هي إخفاقات موجّه، وليست إخفاقات نموذج. لا تحتاج إلى نموذج جديد. تحتاج إلى معرفة أين ينكسر موجّهك الحالي وإصلاحه.
التقييمات تخبرك بذلك. الإحساس لا يفعل.
ابنِ تسخير التقييم قبل إضافة الميزة التالية. نسختك المستقبلية ستكون ممتنة.
