CodeChain: نحو توليد الشفرة المودولارية من خلال سلسلة من المراجعات الذاتية مع وحدات فرعية تمثيلية

أصبحت نماذج اللغة الكبيرة (LLMs) بالفعل متقدمة إلى حدٍ كبير في حل مهام البرمجة البسيطة، مثل تلك المُستخدمة في معايير HumanEval أو MBPP. ومع ذلك، لا تزال حل مهام البرمجة المعقدة والمنافسة يُعدّ تحديًا كبيرًا لهذه النماذج، وربما يعود ذلك إلى ميلها إلى إنتاج حلول على شكل كتل رمزية متماسكة بدلاً من تقسيمها إلى مهام فرعية منطقية ووحدات فرعية. من ناحية أخرى، يُولّد المبرمجون المتمرسون تلقائيًا كودًا منظمًا وقابلًا للتوسع من خلال التعميم، غالبًا ما يعيدون استخدام الوحدات المطورة سابقًا. ولسد هذه الفجوة، نقترح إطارًا جديدًا يُدعى CodeChain، يهدف إلى استخلاص إنتاج كود منظم من خلال سلسلة من المراجعات الذاتية، حيث يُرشد كل خطوة في هذه السلسلة بواسطة وحدات فرعية ممثلة تم إنشاؤها في التكرارات السابقة. وبشكل محدد، يُوجّه CodeChain النموذج أولاً لإنتاج كود منظم باستخدام تقنية التفكير المتسلسل (chain-of-thought prompting). ثم يُطبّق سلسلة من المراجعات الذاتية من خلال تكرار الخطوتين التاليتين: 1) استخراج الوحدات الفرعية المولّدة وتقسيمها إلى مجموعات (clustering)، واختيار ممثلي كل مجموعة كحلول أكثر شمولية وقابلة لإعادة الاستخدام؛ و2) تعزيز النموذج الأصلي لتقنية التفكير المتسلسل بإدراج هذه التحويلات المختارة، ثم توجيه النموذج لإنتاج حلول جديدة منظمة. ونلاحظ أنه من خلال تشجيع النموذج بشكل طبيعي على إعادة استخدام الوحدات الفرعية المطورة والمعتمدة سابقًا، يُمكن لـ CodeChain تحسين كلاً من الترابط المنطقي (modularity) ودقة الحلول بشكل كبير، ما يحقق تحسنًا نسبيًا في مؤشر pass@1 بنسبة 35% على APPS و76% على CodeContests. كما أظهرت النتائج فعاليته على نماذج OpenAI LLMs، وكذلك على النماذج المفتوحة المصدر مثل WizardCoder. وقمنا أيضًا بدراسات تحليلية شاملة باستخدام أساليب مختلفة من التوجيه، وأعداد مختلفة من المجموعات، ومقاييس مختلفة للنماذج، ومستويات مختلفة من جودة البرامج، لتوفير رؤى مفيدة تُفسّر نجاح إطار CodeChain.