พื้นที่เก็บข้อมูลนี้ประกอบด้วยรหัสและข้อมูลอย่างเป็นทางการสำหรับรายงาน "ภาษาธรรมชาติสู่การสร้างรหัสระดับชั้นเรียนโดยการใช้เหตุผลซ้ำซ้อนด้วยเครื่องมือซ้ำบนพื้นที่เก็บข้อมูล" ที่จะนำเสนอในการประชุมนานาชาติปี 2024 ว่าด้วยเวิร์กช็อปการเรียนรู้ของเครื่องเกี่ยวกับการวิจัยการเรียนรู้ด้วยเครื่องจักรเป็นศูนย์กลางข้อมูล ( การประชุมเชิงปฏิบัติการ DMLR ที่ ICML'24)
งานของเราแนะนำ:
ชื่อทางเลือกที่ใช้เพื่อวัตถุประสงค์ในการไม่เปิดเผยชื่อ: การสร้างโค้ดระดับคลาสจากภาษาธรรมชาติโดยใช้การวนซ้ำ การใช้เหตุผลแบบปรับปรุงด้วยเครื่องมือเหนือพื้นที่เก็บข้อมูล
LLM ได้แสดงให้เห็นถึงศักยภาพที่สำคัญในงานสร้างโค้ด โดยบรรลุผลลัพธ์ที่น่าคาดหวังในระดับฟังก์ชันหรือคำสั่งในการวัดประสิทธิภาพต่างๆ อย่างไรก็ตาม ความซับซ้อนที่เกี่ยวข้องกับการสร้างสิ่งประดิษฐ์โค้ด เช่น คลาส โดยเฉพาะอย่างยิ่งในบริบทของคลังซอฟต์แวร์ในโลกแห่งความเป็นจริง ยังคงไม่ได้รับการสำรวจ การวิจัยก่อนหน้านี้ถือว่าการสร้างระดับชั้นเรียนเป็นงานที่โดดเดี่ยว โดยละเลยการพึ่งพาและการโต้ตอบที่ซับซ้อนซึ่งกำหนดลักษณะของสภาพแวดล้อมซอฟต์แวร์ในโลกแห่งความเป็นจริง
เพื่อแก้ไขช่องว่างนี้ เราขอแนะนำ RepoClassBench ซึ่งเป็นเกณฑ์มาตรฐานที่ครอบคลุมซึ่งออกแบบมาเพื่อประเมิน LLM อย่างเข้มงวดในการสร้างโค้ดระดับคลาสที่ซับซ้อนภายในพื้นที่เก็บข้อมูลในโลกแห่งความเป็นจริง RepoClassBench รวมงาน "ภาษาธรรมชาติสู่การสร้างคลาส" ทั่วทั้ง Java, Python & C# จากแหล่งเก็บข้อมูลที่เลือก เรารับรองว่าแต่ละคลาสในชุดข้อมูลของเราไม่เพียงแต่มีการพึ่งพาข้ามไฟล์ภายในพื้นที่เก็บข้อมูลเท่านั้น แต่ยังรวมถึงกรณีทดสอบที่เกี่ยวข้องเพื่อตรวจสอบการทำงานของมันด้วย เราพบว่าโมเดลปัจจุบันต่อสู้กับความท้าทายที่สมจริงที่เกิดจากการวัดประสิทธิภาพของเรา โดยหลักแล้วเนื่องจากการเปิดรับบริบทของพื้นที่เก็บข้อมูลที่เกี่ยวข้องอย่างจำกัด
เพื่อแก้ไขข้อบกพร่องนี้ เราขอแนะนำ Retrieve-Repotools-Reflect (RRR) ซึ่งเป็นแนวทางใหม่ที่จัดเตรียม LLM ด้วยเครื่องมือการวิเคราะห์แบบคงที่เพื่อนำทางซ้ำและให้เหตุผลเกี่ยวกับบริบทระดับพื้นที่เก็บข้อมูลในเฟรมเวิร์กแบบอิงเอเจนต์ การทดลองของเราแสดงให้เห็นว่า RRR มีประสิทธิภาพเหนือกว่าพื้นฐานที่มีอยู่ใน RepoClassBench อย่างมีนัยสำคัญ โดยแสดงให้เห็นประสิทธิภาพในภาษาการเขียนโปรแกรมและภายใต้การตั้งค่าต่างๆ การค้นพบของเราเน้นย้ำถึงความจำเป็นที่สำคัญสำหรับการวัดประสิทธิภาพการสร้างโค้ดเพื่อรวมการพึ่งพาระดับ repo เพื่อสะท้อนถึงความซับซ้อนของการพัฒนาซอฟต์แวร์ได้แม่นยำยิ่งขึ้น
งานของเราแสดงให้เห็นถึงประโยชน์ของการใช้ประโยชน์จากเครื่องมือพิเศษเพื่อเพิ่มความเข้าใจของ LLM เกี่ยวกับบริบทของพื้นที่เก็บข้อมูล
data
: ประกอบด้วยเนื้อหาชุดข้อมูล RepoClassBench และข้อมูลเมตาเพื่อเริ่มต้นไปป์ไลน์สายรัดการประเมิน รายละเอียดเพิ่มเติมที่นี่repoclassbench
: มีโค้ดเพื่อเริ่มต้นสภาพแวดล้อมที่เก็บข้อมูลสำหรับ Java, C# และ Python; เพื่อนำโค้ดของคลาสมาวัดความถูกต้องโดยคำนึงถึงกรณีทดสอบใน Repository รายละเอียดเพิ่มเติมที่นี่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
สำหรับภาษาการเขียนโปรแกรมที่คุณใช้งานอยู่ ตัวอย่างเช่น หากคุณกำลังทดสอบโค้ด Python คุณจะเขียนว่า:
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 และตกแต่ง PR อย่างเหมาะสมหรือไม่ (เช่น การตรวจสอบสถานะ ความคิดเห็น) เพียงทำตามคำแนะนำที่ได้รับจากบอท คุณจะต้องทำสิ่งนี้เพียงครั้งเดียวกับ repos ทั้งหมดโดยใช้ CLA ของเรา
โครงการนี้ได้นำหลักจรรยาบรรณของ Microsoft Open Source มาใช้ สำหรับข้อมูลเพิ่มเติม โปรดดูคำถามที่พบบ่อยเกี่ยวกับจรรยาบรรณหรือติดต่อ [email protected] หากมีคำถามหรือความคิดเห็นเพิ่มเติม
โครงการนี้อาจมีเครื่องหมายการค้าหรือโลโก้สำหรับโครงการ ผลิตภัณฑ์ หรือบริการ การใช้เครื่องหมายการค้าหรือโลโก้ของ Microsoft โดยได้รับอนุญาตนั้นอยู่ภายใต้และต้องปฏิบัติตามแนวทางเครื่องหมายการค้าและแบรนด์ของ Microsoft การใช้เครื่องหมายการค้าหรือโลโก้ของ Microsoft ในเวอร์ชันแก้ไขของโครงการนี้จะต้องไม่ทำให้เกิดความสับสนหรือบ่งบอกถึงการสนับสนุนของ Microsoft การใช้เครื่องหมายการค้าหรือโลโก้ของบุคคลที่สามจะต้องเป็นไปตามนโยบายของบุคคลที่สามเหล่านั้น