AutoCodeRover: تحسين البرنامج المستقل
👋 نظرة عامة
يعد AutoCodeRover أسلوبًا مؤتمتًا بالكامل لحل مشكلات GitHub (إصلاح الأخطاء وإضافة الميزات) حيث يتم دمج LLMs مع إمكانات التحليل وتصحيح الأخطاء لتحديد أولويات مواقع التصحيح مما يؤدي في النهاية إلى التصحيح.
على سوي-مقاعد البدلاء لايت، والذي يتكون من 300 مشكلة حقيقية في GitHub، يقوم AutoCodeRover بحل ~22% من المشكلات، وتحسين الفعالية الحالية لمهندسي برمجيات الذكاء الاصطناعي.
يعمل AutoCodeRover على مرحلتين:
- 🔎 استرجاع السياق: يتم تزويد LLM بواجهات برمجة التطبيقات للبحث عن التعليمات البرمجية للتنقل في قاعدة التعليمات البرمجية وجمع السياق ذي الصلة.
- 💊 إنشاء التصحيح: يحاول ماجستير إدارة الأعمال كتابة التصحيح بناءً على السياق المسترجع.
✨ أبرز
يتمتع AutoCodeRover بميزتين فريدتين:
- واجهات برمجة التطبيقات للبحث عن التعليمات البرمجية هي هيكل البرنامج على علم. بدلاً من البحث في الملفات عن طريق مطابقة السلسلة العادية، يبحث AutoCodeRover عن سياق التعليمات البرمجية ذات الصلة (الطرق/الفئات) في شجرة بناء الجملة المجردة.
- عند توفر مجموعة اختبار، يمكن لـ AutoCodeRover الاستفادة من حالات الاختبار لتحقيق معدل إصلاح أعلى، من خلال إجراء توطين الخطأ الإحصائي.
🗎ورقة arXiv
AutoCodeRover: تحسين البرنامج المستقل [arXiv 2404.05427]
للإشارة إلى أعمالنا، يرجى ذكر وذكر:
@misc{zhang2024autocoderover, title={AutoCodeRover: Autonomous Program Improvement}, author={Yuntong Zhang and Haifeng Ruan and Zhiyu Fan and Abhik Roychoudhury}, year={2024}, eprint={2404.05427}, archivePrefix={arXiv}, primaryClass={cs.SE}}
✔️ مثال: إصدار جانغو رقم 32347
على سبيل المثال، نجح AutoCodeRover في حل المشكلة #32347 جانجو. شاهد الفيديو التجريبي للعملية الكاملة:
acr-final.mp4
🚀 الإعداد والتشغيل
نوصي بتشغيل AutoCodeRover في حاوية Docker. أولاً، قم ببناء وبدء تشغيل صورة عامل الإرساء:
docker build -f Dockerfile -t acr .docker run -it acr
في حاوية عامل الإرساء، قم بتعيين OPENAI_KEY
env فار لك مفتاح OpenAI:
export OPENAI_KEY=xx-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
قم بإعداد مهمة واحدة أو أكثر في SWE-bench
في حاوية عامل الإرساء، نحتاج أولاً إلى إعداد المهام التي سيتم تشغيلها في SWE-bench (على سبيل المثال، django__django-11133
). يمكن العثور على قائمة بجميع المهام في conf/swe_lite_tasks.txt
.
يجب وضع المهام في ملف، واحدة في كل سطر:
cd /opt/SWE-benchconda activate swe-benchpython harness/run_setup.py --log_dir logs --testbed testbed --result_dir setup_result --subset_file tasks.txt
بمجرد الانتهاء من إعداد هذه المهمة، سيتم طباعة السطرين التاليين:
setup_map is saved to setup_result/setup_map.jsontasks_map is saved to setup_result/tasks_map.json
ال testbed
سيحتوي الدليل الآن على الكود المصدري المستنسخ للمشروع المستهدف. سيتم أيضًا إنشاء بيئة كوندا لمثيل المهمة هذا.
إذا كنت تريد إعداد مهام متعددة معًا، فقم بإدخال معرفاتها tasks.txt
واتبع نفس الخطوات.
تشغيل مهمة واحدة
قبل تشغيل المهمة (django__django-11133
هنا)، تأكد من إعداده كما هو مذكور فوق.
cd /opt/auto-code-roverconda activate auto-code-roverPYTHONPATH=. python app/main.py --enable-layered --model gpt-4-0125-preview --setup-map ../SWE-bench/setup_result/setup_map.json --tasks-map ../SWE-bench/setup_result/tasks_map.json --output-dir output --task django__django-11133
يمكن بعد ذلك العثور على مخرجات التشغيل في output/
. على سبيل المثال، تم إنشاء التصحيح لـ django__django-11133
يمكن العثور عليها في مكان مثل هذا: output/applicable_patch/django__django-11133_yyyy-MM-dd_HH-mm-ss/extracted_patch_1.diff
(سيختلف حقل التاريخ والوقت في اسم الدليل اعتمادًا على وقت تشغيل التجربة).
تشغيل مهام متعددة
أولاً، ضع معرفات جميع المهام المطلوب تشغيلها في ملف، واحدة في كل سطر. لنفترض أن هذا الملف هو tasks.txt
، يمكن تشغيل المهام بها
PYTHONPATH=. python app/main.py --enable-layered --model gpt-4-0125-preview --setup-map ../SWE-bench/setup_result/setup_map.json --tasks-map ../SWE-bench/setup_result/tasks_map.json --output-dir output --task-list-file tasks.txt
ملحوظة: تأكد من أن المهام في tasks.txt
تم إعدادها جميعًا في مقعد SWE. انظر الخطوات فوق.
باستخدام ملف التكوين
وبدلاً من ذلك، يمكن استخدام ملف التكوين لتحديد جميع المعلمات والمهام المطلوب تشغيلها. يرى conf/vanilla-lite.conf
على سبيل المثال. انظر أيضا تجربة.md للحصول على تفاصيل العناصر الموجودة في ملف conf. يمكن استخدام ملف التكوين من خلال:
python scripts/run.py conf/vanilla-lite.conf
تكرار التجربة
يرجى الرجوع إلى تجربة.md للحصول على معلومات حول تكرار التجربة.
✉️ جهات الاتصال
ولأي استفسار مرحبا بكم في فتح الموضوع.
وبدلاً من ذلك، اتصل بنا على: {yuntong,hruan,zhiyufan}@comp.nus.edu.sg.
شكر وتقدير
تم دعم هذا العمل جزئيًا من قبل وزارة التعليم السنغافورية (MoE) من المستوى 3 منحة “إصلاح البرنامج الآلي”، MOE-MOET32021-0001.