Benchmark · agentic
SWE-Lancer
SWE-Lancer هو معيار مكوَّن من 1488 مهمة حقيقية لهندسة البرمجيات بأسلوب العمل الحر من Upwork، بقيمة مليون دولار أمريكي (USD) من المدفوعات الفعلية؛ وهو يقيس مقدار ما يمكن لنموذج أن «يكسبه» من هذا المال عبر حلّها بالكامل، ويُحتسب الأداء كإجمالي الدولارات المكتسبة (ونسبة المهام المحلولة).
اقرأ المزيد
- مثال
- مهمة إصلاح خطأ بأسلوب العمل الحر: بمعطى issue حقيقي (على نمط GitHub) و repository كامل للتطبيق، على النموذج أن ينتج patch يعيد تشغيل مسار مستخدم معطَّل (مثل شاشة تقسيم الفاتورة أو الدفع)، ويُتحقَّق منه باختبارات end-to-end. ويقدّم مسار ثانٍ مهام إدارية: اختيار أفضل مقترح هندسي من بين عدة مقترحات.
- طريقة التقييم
- لكل مهمة سعرها الحقيقي بالدولار الذي دُفع مقابلها على Upwork (من نحو 50 إلى 32000 دولار). لا يكسب النموذج السعر الكامل للمهمة إلا إذا اجتاز حلّه — ولا توجد درجات جزئية داخل المهمة الواحدة. المقياس الرئيسي هو إجمالي الدولارات المكتسبة من مجمَّع المليون، إلى جانب نسبة المهام المحلولة؛ ويُبلَّغ عن المسارين (برمجة IC والإدارة) بشكل منفصل أيضًا.
- التحقق
- تُصحَّح مهام البرمجة (IC) عبر اختبارات end-to-end (Playwright) تحاكي أفعال المستخدم الحقيقية، كتبها وتحقَّق منها مهندسون محترفون وتُشغَّل في بيئة Docker معزولة؛ وعلى patch النموذج أن يجتاز جميع اختبارات المهمة، ولا يمكن للنموذج رؤيتها أو تعديلها. وتُقبل المهام الإدارية عندما يختار النموذج المقترح نفسه الذي اختاره فعليًا المدير الذي وظّف.
- لماذا يهم
- يربط أداء النموذج بعمل حقيقي اقتصاديًا ومسعَّر سوقيًا على قاعدة شيفرة إنتاجية حقيقية، بدلًا من مسائل مصطنعة أو ذاتية التصحيح. ولأن التصحيح يستخدم مسارات مستخدم end-to-end كاملة (لا إصلاحات دوال معزولة) إضافةً إلى مسار للقرار الإداري، فهو يختبر ما إذا كانت النماذج المتقدمة قادرة على أداء الهندسة الكاملة والقيّمة التي يدفع الناس فعلًا مقابلها لمستقلين.
مثال محلول
المهمة
مهمة IC SWE (توضيحية، ~250 دولارًا): تعرض شاشة «Split Bill» في التطبيق الإجمالي بقيمة NaN عند إزالة مشارك قبل كتابة أي مبلغ. اعمل داخل حاوية Docker تحتوي على repository الكامل، وأصلح الخطأ بحيث يعود الإجمالي المعروض إلى $0.00؛ ويعيد اختبار end-to-end مخفي تشغيل مسار المستخدم هذا.
الحل
```diff
function getSplitTotal(amounts) {
- return amounts.reduce((sum, a) => sum + a.value, 0);
+ return amounts.reduce((sum, a) => sum + (Number(a?.value) || 0), 0);
}
```
الشرح
تترك إزالة مشارك مدخلًا قيمته value تساوي undefined، فيحوِّل a.value المجموع الجاري إلى NaN؛ وتحويل كل قيمة بـ Number(...) || 0 يتخطى المبلغ المفقود فيظهر الإجمالي كـ $0.00. التصحيح ثنائي — لا يكسب patch السعر الكامل بالدولار للمهمة إلا إذا اجتاز كل اختبارات end-to-end الخاصة بتلك المهمة، المُشغَّلة على مسار المستخدم الحقيقي.
| التاريخ | النموذج | النتيجة | المصدر |
|---|---|---|---|
| 2025-03-05 | GPT-4.5 | 32.6% | OpenAI تطلق GPT-4.5، أكبر نموذج لها، لـ ChatGPT Plus |