يحتوي هذا المستودع على الكود الرسمي والبيانات الخاصة بالورقة "اللغة الطبيعية لإنشاء الكود على مستوى الفصل الدراسي من خلال الاستدلال المعزز بالأداة التكرارية عبر المستودع"، المقرر تقديمها في المؤتمر الدولي لعام 2024 حول ورشة عمل التعلم الآلي حول أبحاث التعلم الآلي المرتكزة على البيانات ( ورشة عمل DMLR في ICML'24).
يقدم عملنا:
عنوان بديل يستخدم لأغراض عدم الكشف عن هويته: إنشاء التعليمات البرمجية على مستوى الفصل الدراسي من اللغة الطبيعية باستخدام الاستدلال التكراري المعزز بالأدوات عبر المستودع
لقد أظهر حاملو ماجستير إدارة الأعمال إمكانات كبيرة في مهام إنشاء التعليمات البرمجية، وتحقيق نتائج واعدة على مستوى الوظيفة أو البيان عبر معايير مختلفة. ومع ذلك، فإن التعقيدات المرتبطة بإنشاء عناصر التعليمات البرمجية مثل الفئات، خاصة في سياق مستودعات البرامج الواقعية، لا تزال غير مستكشفة. تعامل الأبحاث السابقة مع عملية الإنشاء على مستوى الفصل كمهمة معزولة، متجاهلة التبعيات والتفاعلات المعقدة التي تميز بيئات البرامج في العالم الحقيقي.
ولمعالجة هذه الفجوة، نقدم RepoClassBench، وهو معيار شامل مصمم لتقييم LLMs بدقة في إنشاء تعليمات برمجية معقدة على مستوى الفصل داخل مستودعات العالم الحقيقي. يتضمن RepoClassBench مهام "إنشاء اللغة الطبيعية للفصل" عبر Java وPython وC# من مجموعة مختارة من المستودعات. نحن نضمن أن كل فئة في مجموعة البيانات الخاصة بنا لا تحتوي فقط على تبعيات عبر الملفات داخل المستودع، ولكنها تتضمن أيضًا حالات اختبار مقابلة للتحقق من وظائفها. لقد وجدنا أن النماذج الحالية تكافح مع التحديات الواقعية التي يفرضها معيارنا، ويرجع ذلك في المقام الأول إلى تعرضها المحدود لسياقات المستودع ذات الصلة.
لمعالجة هذا القصور، نقدم Retrieve-Repotools-Reflect (RRR)، وهو نهج جديد يزود LLMs بأدوات تحليل ثابتة للتنقل بشكل متكرر والتفكير في سياق مستوى المستودع في إطار عمل قائم على الوكيل. توضح تجاربنا أن RRR يتفوق بشكل كبير على الخطوط الأساسية الموجودة في RepoClassBench، مما يعرض فعاليته عبر لغات البرمجة وفي ظل إعدادات مختلفة. تؤكد النتائج التي توصلنا إليها على الحاجة الماسة لمعايير إنشاء التعليمات البرمجية لدمج تبعيات مستوى الريبو لتعكس بشكل أكثر دقة تعقيدات تطوير البرمجيات.
يوضح عملنا فوائد الاستفادة من الأدوات المتخصصة لتعزيز فهم ماجستير إدارة الأعمال لسياق المستودع.
data
: تحتوي على محتويات مجموعة بيانات RepoClassBench والبيانات التعريفية لتهيئة خط أنابيب تسخير التقييم. مزيد من التفاصيل هنا.repoclassbench
: يحتوي على التعليمات البرمجية لتهيئة بيئات المستودع لـ Java وC# وPython؛ لأخذ جزء من رمز الفصل وقياس صحته فيما يتعلق بحالات الاختبار الموجودة في المستودع. مزيد من التفاصيل هنا.repotools
: يحتوي على تطبيق أدوات التحليل الثابت التي يستخدمها إطار العمل الوكيل في عملنا للتفكير في المستودع.rrr
: رمز وكيل RRR الذي يتفاعل مع أداة التقييم لحل المهام المعياريةproject_utils
: وظائف المرافق العامة المستخدمة في المشروع لغة | عدد المهام |
---|---|
جافا | 130 |
بايثون | 97 |
ج # | 60 |
توجد البيانات المعيارية في data/input
، مع ملفات منفصلة لـ Python وJava وC#. يحتوي كل ملف على السمات التالية لكل مهمة:
task_id
: معرف فريد لكل مهمة في المعيار.class_name
: اسم الفصل الذي يتم اختباره.file_name
: المسار إلى الملف الذي يحتوي على تطبيق الحقيقة الأساسية للفئة داخل المستودع.detailed_description
: وصف مطول للفئة، يستخدمه الوكيل/LLM لإنشاء التعليمات البرمجية.sketchy_description
: وصف أقل تفصيلاً للفئة، مما يوفر مطالبة بديلة لإنشاء التعليمات البرمجية.repo_metadata
: معلومات حول المستودع الذي يحتوي على الفئة، بما في ذلك:repo_name
commit_id
evaluation_metadata
: بيانات لتقييم صحة التعليمات البرمجية التي تم إنشاؤها:ground_truth_class_body
: التنفيذ الصحيح للفئة التي يتم اختبارها. للبدء بالمشروع، اتبع الخطوات التالية:
git clone https://github.com/microsoft/repoclassbench
cd repoclassbench
conda create --name repoclassbench_env python=3.11
conda activate repoclassbench_env
pip install -r requirements.txt
قبل تقييم مسار التدفق/الإعداد، تأكد من إعداد البيئات والمستودعات المطلوبة في أداة التقييم بشكل صحيح. إذا لم يكن الأمر كذلك، فقد يفشل تنفيذ الحقيقة الأساسية لمهمة واحدة أو أكثر عبر اللغات الثلاث. قم بإجراء الاختبارات التالية لضمان الإعداد الصحيح:
# To ensure harness is setup for C#
pytest -x repoclassbench/tests/test_csharp.py
# To ensure harness is setup for Java
pytest -x repoclassbench/tests/test_java.py
# To ensure harness is setup for Python
pytest -x repoclassbench/tests/test_python.py
إذا كنت مستعدًا لمعرفة كيفية تكامل نهج إنشاء التعليمات البرمجية الخاص بك مع معيارنا المعياري، فستجد نموذجًا للتعليمات البرمجية لمساعدتك على البدء في دليل repoclassbench/tests
. اتبع هذا الدليل المفصّل خطوة بخطوة لاختبار التعليمات البرمجية الخاصة بك في مهمة محددة:
ابدأ بإنشاء كائن Dataset
للغة البرمجة التي تعمل بها. على سبيل المثال، إذا كنت تختبر كود بايثون، فستكتب:
from repoclassbench . dataset import Dataset
# Initialize the dataset for Python with detailed specifications
dataset = Dataset ( language = "python" , specification = "detailed" , delete_relatives = False )
بعد ذلك، اختر مهمة من مجموعة البيانات لاختبار التعليمات البرمجية الخاصة بك عليها. يمكنك القيام بذلك عن طريق جلب كائن task
باستخدام معرفه الفريد ( task_id
):
# Replace 'task_id' with the actual ID of the task you want to test
task = dataset . get_instance_and_setup_env ( task_id )
استرجاع أدوات التقييم للمهمة. سيعطيك هذا كائن TaskData
، والذي يتضمن المقيم، ووصفًا للفئة التي تحتاج إلى إنشائها، وموقع مستودع التعليمات البرمجية ذي الصلة.
# Get the evaluator from the task object
evaluator = task . evaluator
# The path to the repository files and the class description are also available
repository_path = task . repo_dir
description_to_use = task . description
أخيرًا، حان الوقت لمعرفة كيفية أداء التعليمات البرمجية التي تم إنشاؤها. استخدم المقيم لاختبار الكود الخاص بك وطباعة النتائج.
# 'code_test' should be replaced with the class code generated by your approach
evaluation_results = evaluator . evaluate ( code_test )
# Display the outcome of the evaluation
print ( "Number of passed testcases: " , evaluation_results . passed_tests )
print ( "Number of failed testcases: " , evaluation_results . failed_tests )
print ( "Did the code compile/pass linter checks: " , evaluation_results . compile_status )
print ( "Error feedback from the harness: " , evaluation_results . error_feedback )
تذكر استبدال code_test
بالكود الفعلي الذي تم إنشاؤه بواسطة طريقتك. سيقوم المُقيم بتشغيل التعليمات البرمجية الخاصة بك مقابل حالات الاختبار وتقديم تعليقات حول عدد الاختبارات التي تم اجتيازها، وعدد الاختبارات الفاشلة، وما إذا كان قد تم تجميع التعليمات البرمجية بنجاح، وأي أخطاء تمت مواجهتها.
يرجى مراعاة الاستشهاد بالمقالة التالية عند استخدام الكود والمعيار الخاص بنا.
@inproceedings{deshpande2024classlevelcodegenerationnatural,
title={Natural Language to Class-level Code Generation by Iterative Tool-augmented Reasoning over Repository},
author={Ajinkya Deshpande and Anmol Agarwal and Shashank Shet and Arun Iyer and Aditya Kanade and Ramakrishna Bairi and Suresh Parthasarathy},
booktitle={ICML 2024 Workshop on Data-Centric Machine Learning Research},
year={2024},
url={https://openreview.net/forum?id=yqjr7ojVYa}
}
يرحب هذا المشروع بالمساهمات والاقتراحات. تتطلب معظم المساهمات منك الموافقة على اتفاقية ترخيص المساهم (CLA) التي تعلن أن لديك الحق في منحنا حقوق استخدام مساهمتك، وهو ما تفعله بالفعل. للحصول على التفاصيل، تفضل بزيارة https://cla.opensource.microsoft.com.
عند إرسال طلب سحب، سيحدد روبوت CLA تلقائيًا ما إذا كنت بحاجة إلى تقديم CLA وتزيين العلاقات العامة بشكل مناسب (على سبيل المثال، التحقق من الحالة، التعليق). ما عليك سوى اتباع التعليمات التي يقدمها لك الروبوت. سوف تحتاج إلى القيام بذلك مرة واحدة فقط عبر جميع اتفاقيات إعادة الشراء باستخدام CLA الخاصة بنا.
اعتمد هذا المشروع قواعد السلوك الخاصة بشركة Microsoft مفتوحة المصدر. لمزيد من المعلومات، راجع الأسئلة الشائعة حول قواعد السلوك أو اتصل بـ [email protected] لطرح أي أسئلة أو تعليقات إضافية.
قد يحتوي هذا المشروع على علامات تجارية أو شعارات للمشاريع أو المنتجات أو الخدمات. يخضع الاستخدام المصرح به للعلامات التجارية أو الشعارات الخاصة بشركة Microsoft ويجب أن يتبع إرشادات العلامة التجارية والعلامات التجارية الخاصة بشركة Microsoft. يجب ألا يتسبب استخدام العلامات التجارية أو الشعارات الخاصة بشركة Microsoft في الإصدارات المعدلة من هذا المشروع في حدوث ارتباك أو الإشارة ضمنًا إلى رعاية Microsoft. ويخضع أي استخدام لعلامات تجارية أو شعارات تابعة لجهات خارجية لسياسات تلك الجهات الخارجية.