في عالم بيئات التطوير المتكاملة (IDEs)، لطالما تعززت القوة والدقة بميزات الإكمال التلقائي. ومع ذلك، فقد دخل منافس جديد إلى الساحة: الذكاء الاصطناعي (AI). أصبح دمج الذكاء الاصطناعي في بيئات التطوير المتكاملة منتشراً بشكل متزايد، مما أدى إلى إعادة تقييم الأدوات التقليدية. في حين أن هذه الأساليب القديمة لا تزال تعمل، فقد لا تقدم المساعدة المتطورة التي يتوقعها المطورون الآن.
هذه المقالة مقتبسة من مدونة JetBrains، وتتعمق في تدريب وقدرات Mellum، وهو نموذج يدعم الإكمال التلقائي المستند إلى السحابة. قامت JetBrains، المشهورة ببيئات التطوير المتكاملة ومحررات التعليمات البرمجية المصممة خصيصًا للمبرمجين، بتطوير Mellum لتوفير إكمال تلقائي سريع وفعال للتعليمات البرمجية. تم تصميم Mellum للعمل بفعالية على جهاز محلي، مما يميزه كواحد من أسرع النماذج وأكثرها إحكاما في فئته. مشروع مشابه من الناحية المفاهيمية هو Microsoft Phi.
معالجة التحديات الواضحة
واجه مهندسو JetBrains العديد من التحديات الحاسمة في سعيهم للإكمال التلقائي المدعوم بالذكاء الاصطناعي:
- السرعة والتكلفة: أثبتت نماذج الدردشة التقليدية أنها غير عملية بسبب تكاليفها الحسابية العالية وأوقات الاستجابة البطيئة. كما أن هذه النماذج تفتقر إلى الوعي بالتقنيات الخاصة بالشفرة مثل ملء الفراغات (FIM) أو ترميم الرموز.
- تنسيق الإخراج: غالبًا ما تقوم نماذج الدردشة الرئيسية بإنشاء بيانات بتنسيقات غير متناسقة، مما يجعل من الصعب تحليل الاستجابات ودمجها بسلاسة في المحرر.
- مصدر البيانات: شكّل تحديد أصل بيانات التدريب والتخفيف من حدة مشكلات انتهاك حقوق النشر المحتملة عقبة كبيرة.
Mellum: نظرة عامة
أدرك فريق التطوير في JetBrains أن إنشاء نموذج خاص بهم هو الأسلوب الأمثل. كان هدفهم هو تصميم نموذج يوازن بين الجودة وتكاليف الاستدلال ووقت الاستجابة مع التدريب على البيانات ذات المصدر الواضح. أشارت الأبحاث الأولية إلى أن نموذجًا يضم حوالي 4 مليارات معلمة يمكن أن يوفر قدرات إكمال تلقائي مختصة لمجموعة واسعة من السيناريوهات والمستخدمين. علاوة على ذلك، من خلال تدريب النموذج حصريًا على التعليمات البرمجية، يمكنهم إنشاء مفردات متخصصة من الرموز، خالية من البيانات غير ذات الصلة.
تتكون عملية التدريب لنموذج Mellum من ثلاث مراحل متميزة، تساهم كل منها بمعرفة جديدة وتعزز جودة التعليمات البرمجية التي تم إنشاؤها. تتضمن المرحلة الأولية التدريب المسبق الأساسي على مجموعة كبيرة من الملفات الفردية. تتكون المرحلة الثانية من تحسين النموذج بمجموعة أصغر من الأمثلة المتخصصة. يتم استخدام التعلم المعزز مع ملاحظات الذكاء الاصطناعي (RLAIF) في المرحلة الثالثة لتكييف النموذج مع الخصائص الخاصة ببيئة التطوير المتكاملة والتخلص من الإخراج غير المرغوب فيه.
التدريب المسبق
لتجنب المشكلات المحتملة المتعلقة بأصول البيانات الغامضة، تم تدريب النموذج من الألف إلى الياء، مما يتطلب مقدمة شاملة للعديد من اللغات، وبناء جملة البرمجة، والأنماط، والمفاهيم الأساسية.
مجموعة البيانات
كان المصدر الرئيسي للبيانات للتدريب المسبق هو TheStack. تضمن مجموعة البيانات هذه أن تكون البيانات سليمة من الناحية القانونية ومفيدة عمليًا.
عملية التدريب المسبق
أثناء التدريب المسبق، تم أخذ عينات من مجموعة البيانات عدة مرات للوصول إلى ما يقرب من 3 تريليونات رمز. تم استخدام نافذة سياق مكونة من 8192 رمزًا، مع تقسيم مجموعة البيانات إلى أجزاء بهذا الحجم. تم تطبيق تحويل ملء الفراغات (FIM) على نصف الملفات في كل جزء، مما يشجع النموذج على مراعاة كل من التعليمات البرمجية السابقة واللاحقة. تحاكي هذه التقنية عن كثب سيناريوهات إنشاء التعليمات البرمجية في العالم الحقيقي.
تم إجراء مرحلة التدريب المسبق على مجموعة من ست عشرة عقدة، تم تجهيز كل منها بثمانية وحدات معالجة رسومية H100. استغرقت هذه المرحلة حوالي 15 يومًا لإكمالها، مما أدى إلى إنشاء نموذج Mellum-base المكون من 4 مليارات معلمة.
ينشئ التدريب المسبق نموذج إكمال تلقائي للتعليمات البرمجية للأغراض العامة يتمتع بمعرفة واسعة بالعديد من لغات البرمجة. ومع ذلك، في هذه المرحلة، يتم تدريب النموذج فقط على التنبؤ بالرمز المميز التالي في جزء ملف محدد عشوائيًا. بدون سياق إضافي، يفتقر النموذج إلى الوعي ببنية التعليمات البرمجية وليس لديه آلية لتحديد متى يتوقف عن إنشاء التعليمات البرمجية.
تم تصميم مرحلة الضبط الدقيق لمعالجة هذه القيود.
الضبط الدقيق الواعي بالسياق
ملء الفراغات المحسن
على عكس التدريب المسبق، حيث يتم تحديد أجزاء التعليمات البرمجية عشوائيًا للتنبؤ، يركز الضبط الدقيق على تقسيم التعليمات البرمجية بطريقة أكثر جدوى، وتعليم النموذج كيفية استخراج أجزاء التعليمات البرمجية التي تحدث ‘في البرية’.
أمثلة متخصصة
من الناحية العملية، يتطلب الإكمال التلقائي للتعليمات البرمجية فهم الملفات المحيطة والسياقات الأوسع، وربما يشمل المشاريع بأكملها.
لمعالجة البيانات، أطلقت الشركة مشروعًا داخليًا يحمل الاسم الرمزي Code Engine: مجموعة أدوات تطوير برامج عبر الأنظمة الأساسية ومجموعة من الأدوات المساعدة لوحدة التحكم تم تطويرها لبناء سياق مباشر من الملفات العادية دون الحاجة إلى فهرسة المشروع بالكامل. تم نشر مجموعة تطوير البرامج هذه على مجموعة MapReduce داخلية واستخدمت لمعالجة آلاف المستودعات العامة، مما أدى إلى إنشاء العديد من الأمثلة المفيدة للتدريب في إطار زمني معقول.
تطلب العثور على الخوارزميات الصحيحة بعض التجربة والخطأ.
الضبط للغات محددة
يمكن للنماذج الصغيرة أن تستفيد بشكل كبير من التخصص في لغات معينة. في حين أن النموذج الأساسي يتم تدريبه على أكثر من 80 لغة، إلا أن معظم المستخدمين عادة ما يعملون بواحدة أو اثنتين فقط. لمعالجة هذا الأمر، أنشأت JetBrains نماذج متخصصة متعددة:
- mellum-all: يدعم معظم اللغات واللهجات المتوفرة في بيئات تطوير JetBrains المتكاملة، ولكن جودة الإكمال التلقائي أقل من النماذج المتخصصة.
- mellum-python: متخصص في Python و Jupyter.
- mellum-kotlin: متخصص في Java و Kotlin.
- mellum-web: متخصص في تقنيات الويب.
الخطوة الأخيرة: RLAIF
أخيرًا، يجب حل الحالات التي لا تتطابق فيها أهداف التعلم مع توقعات المستخدم. يتم استخدام مرحلة تدريب إضافية، RLAIF - التعلم المعزز مع ملاحظات الذكاء الاصطناعي، لحل هذه المشكلات.
يتعلم النموذج من تفاعلات المستخدم ويفهم كيفية عكس تفضيلات المستخدم بشكل أفضل.
لا يؤدي هذا النهج إلى تحسين درجة الجودة الإجمالية فحسب، بل يقلل أيضًا من عدد القطع الأثرية المزعجة التي تم إنشاؤها.
ما مدى جودة Mellum؟
يقدم النموذج أداءً جيدًا بشكل استثنائي بالنسبة لحجمه. إليك كيفية تقييمه:
- أولاً، تم تقييم النموذج على معيار داخلي يحمل الاسم الرمزي ‘JetBrains BigCode’.
- ثم تم اختباره على معايير عامة معروفة مثل SAFIM.
- أخيرًا، تم جمع إحصائيات الاستخدام للميزات، وتم حساب مقاييس المستخدم.
التقييم دون اتصال بالإنترنت
يعد جمع البيانات مهمة معقدة، ولكن إنشاء مقياس جيد يقارن الاقتراح الأصلي بالاقتراح الجديد الذي اقترحته الشبكة العصبية يمثل تحديًا أكبر. أجرينا دراسة صغيرة واستقرنا في النهاية على مزيج من مقياسين أساسيين:
EM:
- Exact Match فكرة شائعة جدًا.
- يعتبر التنبؤ جيدًا إذا كان السطر الأول من الإكمال يطابق السطر الأول من الأصل، مع الحد الأدنى من المعالجة المسبقة.
KK:
- تم تسمية المقياس على اسم مؤلفيه.
- عدد الأسطر المقترحة من الأصل مقسومًا على عدد الأسطر في الإكمال المقترح.
JetBrains BigCode
تم تقييم النموذج مقابل مجموعة بيانات مرجعية تم الحصول عليها باستخدام أداة JetBrains BigCode الداخلية.
من خلال الحفاظ على السيطرة الكاملة على مجموعة البيانات الخاصة بنا بدلاً من الاعتماد على المعايير العامة، يصبح من الممكن تقييم جودة النموذج بشكل موثوق لمختلف أنماط وممارسات البرمجة.
تظهر نتائج تقييم JetBrains BigCode الخاص بنا جودة تضاهي النماذج الشائعة، ولكن Mellum أصغر حجمًا وأكثر كفاءة.
جودة الاقتراحات ذات السطر الواحد (مقياس EM)
المعايير العامة
لم يتم تقييم النموذج على مجموعة البيانات الداخلية فحسب، بل أيضًا على العديد من المعايير العامة، مثل المعيار متعدد اللغات SAFIM (ملء الفراغات الواعي بالبنية).
التقييم عبر الإنترنت
يسمى المقياس الرئيسي نسبة التعليمات البرمجية المكتملة (RoCC). يتم تعريفه على أنه نسبة أحرف التعليمات البرمجية المكتوبة باستخدام الإكمال التلقائي للتعليمات البرمجية إلى إجمالي مقدار التعليمات البرمجية في المحرر.
مقياس مهم آخر هو معدل القبول (AR)، والذي يتم حسابه على أنه عدد الاقتراحات المقبولة مقسومًا على عدد جميع الاقتراحات المعروضة.
لقد كانت هذه رحلة معقدة، لكن متخصصي JetBrains أكملوها بكرامة. في النهاية، تم الحصول على نموذج عام واحد وعدة نماذج متخصصة، وهي متوفرة من خلال منصة JetBrains AI. إنهم يعملون الآن بنجاح في JetBrains AI Assistant.
ماذا بعد؟
- يعمل مهندسو JetBrains حاليًا على نموذج للغات تطوير الويب. قد يصبح متاحًا للجمهور في المستقبل القريب.
- هناك خطط لزيادة عدد المعلمات وتنوع البيانات في وقت واحد. هناك العديد من المهام المختلفة في البرمجة - سيتمكن Mellum من أداء هذه المهام أيضًا. لا يزال أداء الخدمة مقياسًا رئيسيًا، لذا سيكون توسيع النموذج ضمن حدود معقولة.