يحتوي هذا المستودع على الكود والبيانات الخاصة بالرمز الذي ينشئه ChatGPT الورقية: توصيف مشكلات جودة الكود وتخفيفها ، المنشورة في معاملات ACM على هندسة البرمجيات والمنهجية (TOSEM).
تركز تجاربنا على تقييم جودة وصحة الكود الناتج عن ChatGPT. نحن نتحقق من العوامل التي تؤثر على فعالية chatgpt واستكشاف قدراتها على الإبداع الذاتي مع أنواع مختلفة من التعليقات. يتضمن هذا المستودع 2033 مهام البرمجة ، والبرامج النصية لاختبار الرمز الذي تم إنشاؤه ، والبرامج النصية الآلية لإرسال الرمز إلى LeetCode وجمع النتائج.
.
├── data
│ ├── chatgpt_generated_code
│ ├── leetcode_tasks
│ ├── rq3
│ ├── results (the folder to store the results of the experiments)
├── src
│ ├── evaluation
│ ├── debugging
│ ├── leetcode_auto_submit
├── README.md
يحتوي دليل data على ثلاثة مجلدات رئيسية: leetcode_tasks ، chatgpt_generated_code ، rq3 .
يحتوي مجلد leetcode_tasks على 2،033 مهمة برمجة من منصة LeetCode (). يتم تخزين المهام بتنسيق JSON وتتضمن المعلومات التالية:
إليك وصف مفصل للحقول:
id : معرف فريد للمهمة (على سبيل المثال ، "001").name : اسم المهمة (على سبيل المثال ، "ثانين").difficulty : مستوى صعوبة المهمة ، والتي يمكن أن تكون "سهلة" أو "متوسطة" أو "صعبة".link : عنوان URL للمهمة الأصلية على نظام LeetCode (على سبيل المثال ، "https://leetcode.com/problems/two-sum/").task_description : الوصف الكامل للمهمة ، بما في ذلك عبارات المشكلات وتنسيق الإدخال والقيود والأمثلة.test_cases : مجموعة من حالات الاختبار مع الإدخال والإخراج المتوقع التي يمكن استخدامها للتحقق من صحة الكود الذي تم إنشاؤه.python_template : قالب رمز Python للمهمة ، يحتوي على توقيع الفئة والطريقة.java_template : قالب رمز Java للمهمة ، يحتوي على توقيع الفئة والطريقة. يتكون مجلد chatgpt_generated_code من ملفين json: python.json و java.json . يحتوي كل ملف على قصاصات التعليمات البرمجية التي تم إنشاؤها بواسطة ChatGPT في لغات البرمجة المعنية لمهام البرمجة في مجلد leetcode_tasks . كما يتم تضمين نتائج التحليل الثابت والكشف عن خطأ وقت التشغيل في ملفات JSON.
إليك وصف مفصل للحقول:
name : اسم المهمة.is_pass : مؤشر ثنائي (1 أو 0) يمثل ما إذا كان الحل قد اجتاز حالات الاختبار.test_cases : وصف للإدخال والإخراج المتوقع لكل حالة اختبار.error : سلسلة تصف نوع الخطأ.error_info : معلومات إضافية بخصوص أخطاء وقت التشغيل.is_quality_issue : مؤشر ثنائي (1 أو 0) يمثل ما إذا كان الحل لديه مشكلات في الجودة.quality_info : وصف لمشكلات الجودة التي تم إنشاؤها بواسطة أدوات التحليل الثابت ، إن وجدت.generated_code : مقتطف الكود الذي تم إنشاؤه بواسطة ChatGPT للمهمة. يحتوي مجلد rq3 على نتائج تجارب RQ3. يتكون مجلد rq3 من اثنين من المجلدات الفرعية: simple_feedback و feedback_with_static_analysis_runtime . يحتوي كل مجلد فرعي على نتائج التجارب باستخدام ملاحظات بسيطة وردود فعل تحليل ثابت ، على التوالي. يتم تخزين النتائج بتنسيق JSON.
يحتوي دليل src على ثلاثة مجلدين: evaluation ، debugging ، leetcode_auto_submit .
chatgpt_code_generation.py هو البرنامج النصي الرئيسي لإنشاء رمز باستخدام chatgpt.
يحتوي الدليل الفرعي للتقييم على البرامج النصية لتقييم جودة التعليمات البرمجية التي تم إنشاؤها. لعملية تقييم جودة التعليمات البرمجية التي تم إنشاؤها ، نستخدم أدوات تحليل ثابتة للكشف عن مشكلات الجودة في الكود الذي تم إنشاؤه. يرجى قراءة ملف README.md في دليل src/evaluation لمزيد من المعلومات.
يتضمن الدليل الفرعي لتصحيح الأخطاء البرامج النصية لاستكشاف إمكانات تشاتغبت الذاتية. يقوم برنامج Simple_feedback.py بتنفيذ تجارب باستخدام ملاحظات بسيطة ، في حين أن البرنامج النصي static_analysis_feedback.py يشتمل على أدوات تحليل ثابت وأخطاء وقت التشغيل لتوفير المزيد من التعليقات التفصيلية لـ ChatGPT.
يحتوي مجلد leetcode_auto_submit على برنامج نصي لإرسال الكود الذي تم إنشاؤه تلقائيًا إلى نظام LEETCODE. يستخدم البرنامج النصي السيلينيوم لأتمتة عملية تسجيل الدخول إلى منصة LeetCode وتقديم الرمز.
حدود
اسم المستخدم: (النوع: سلسلة) - عنوان البريد الإلكتروني المستخدم لتسجيل الدخول إلى خدمة chatgpt.
كلمة المرور: (اكتب: سلسلة) - كلمة المرور المرتبطة بعنوان البريد الإلكتروني لخدمة ChatGPT. الحفاظ على هذا آمن.
SKIP_LOGIN: (النوع: منطقية) - إذا تم ضبطه على TRUE ، فسوف يحاول العميل استخدام جلسة محفوظة لتسجيل الدخول ، وتجنب الحاجة إلى بيانات الاعتماد. مفيد للتشغيل المتكرر.
مقطوع الرأس: (النوع: منطقية) - يحدد ما إذا كان المتصفح يعمل في وضع مقطوع الرأس (بدون واجهة المستخدم الرسومية). تعيين إلى خطأ لرؤية واجهة المستخدم للمتصفح.
التخفي: (النوع: منطقية) - إذا كان هذا صحيحًا ، فإن المتصفح ينطلق في وضع التخفي ، مما يضمن عدم استخدام ملفات تعريف الارتباط أو التاريخ من الجلسات السابقة.
user_data_dir: (النوع: سلسلة) - يتم تخزين المسار إلى الدليل حيث يتم تخزين بيانات المستخدم (مثل ملفات تعريف الارتباط وجلسات تسجيل الدخول) ، مما يسمح باستمرار الجلسة بين التشغيل.
login_type (اختياري): (النوع: سلسلة) - يحدد نوع تسجيل الدخول المراد استخدامه (طبيعي ، يدويًا). يحدد كيفية معالجة عملية تسجيل الدخول الآلية.
يمكنك استخدام الرمز التالي لإرسال الرمز إلى LeetCode وجمع النتائج.
from leetcode_auto_submit import AutoLeetCode
import time
autoleet = AutoLeetCode (
headless = False ,
username = "your_username" ,
password = "your_password" ,
verbose = False ,
incognito = False ,
skip_login = False ,
user_data_dir = "data/profile/" ,
login_type = 'manully'
)
time . sleep ( 2 )
chatgpt_generated_code = "xxxxxxxxxxxx"
task_name = "Two Sum"
language = "Python3"
# if only run code and collect
result_status , result_details = autoleet . run_and_collect ( task_name , language , chatgpt_generated_code )
# if submit codd and collect
result_status , result_details = autoleet . submit_and_collect ( task_name , language , chatgpt_generated_code )تتطلب نصوص التقييم التبعيات التالية:
python==3.8.5
openai==0.10.2
selenium==4.9.1
undetected_chromedriver=3.5.4
إذا وجدت هذا الريبو أو الاستطلاع الخاص بنا مفيدًا ، فيرجى التفكير في الاستشهاد بنا:
@article{liu2023refining,
title={Refining ChatGPT-generated code: Characterizing and mitigating code quality issues},
author={Liu, Yue and Le-Cong, Thanh and Widyasari, Ratnadira and Tantithamthavorn, Chakkrit and Li, Li and Le, Xuan-Bach D and Lo, David},
journal={arXiv preprint arXiv:2307.12596},
year={2023}
}
تم ترخيص هذا المستودع بموجب ترخيص معهد ماساتشوستس للتكنولوجيا.