นับตั้งแต่ที่เราเผยแพร่ SWE-bench Verified เป็นครั้งแรกในเดือนสิงหาคม พ.ศ. 2567 การประเมินนี้ถูกใช้อย่างกว้างขวางในอุตสาหกรรมเพื่อติดตามความก้าวหน้าของโมเดลด้านงานวิศวกรรมซอฟต์แวร์อัตโนมัติ หลังจากเปิดตัว SWE-bench Verified ให้ข้อมูลชัดเจนเกี่ยวกับความก้าวหน้าของโมเดล และกลายเป็นตัวชี้วัดมาตรฐานในการรายงานโมเดลระดับแนวหน้า การติดตามและคาดการณ์ความก้าวหน้าของความสามารถเหล่านี้ก็ถือเป็นส่วนสำคัญของกรอบการเตรียมความพร้อมของ OpenAI ตอนที่เริ่มสร้างเกณฑ์มาตรฐาน Verified เราพยายามจัดการปัญหาในชุดประเมินเดิมที่ทำให้บางงานไม่สามารถสำเร็จได้ใน SWE-Bench Dataset(เปิดในหน้าต่างใหม่)
หลังจากการก้าวกระโดดในช่วงแรก ความคืบหน้าที่ล้ำสมัยบน SWE-bench Verified ชะลอตัวลง โดย ปรับปรุง(เปิดในหน้าต่างใหม่) จาก 74.9% เป็น 80.9% ในช่วง 6 เดือนที่ผ่านมา สิ่งนี้ทำให้เกิดคำถามว่า ความล้มเหลวที่ยังเหลือมาจากข้อจำกัดของโมเดลหรือจากลักษณะของชุดข้อมูลเอง
จากการวิเคราะห์ล่าสุด เราพบข้อบกพร่องหลักสองข้อในชุด Verified ซึ่งแสดงให้เห็นว่าเกณฑ์ทดสอบนี้ไม่สามารถใช้วัดพัฒนาการด้านวิศวกรรมซอฟต์แวร์อัตโนมัติสำหรับการเปิดตัวโมเดลแนวหน้าที่มีสมรรถนะระดับปัจจุบันได้อีกต่อไป
- การทดสอบปฏิเสธคำตอบที่ถูกต้อง: เราตรวจชุดข้อมูลย่อย 27.% ที่โมเดลแก้ไม่ผ่านบ่อย และพบว่าปัญหาอย่างน้อย 59.4% ที่ตรวจสอบมีชุดทดสอบบกพร่องและปฏิเสธการแก้ไขที่ถูกต้อง แม้เราจะพยายามปรับปรุงเรื่องนี้ตั้งแต่เริ่มสร้าง SWE-bench Verified
- การฝึกด้วยวิธีแก้ปัญหา: เนื่องจากโมเดลระดับแนวหน้าขนาดใหญ่สามารถเรียนรู้ข้อมูลจากการฝึกอบรมของตนได้ การหลีกเลี่ยงการฝึกโมเดลด้วยปัญหาและคำตอบที่ใช้ในการทดสอบจึงสำคัญ สถานการณ์นี้คล้ายกับการให้โจทย์และเฉลยของข้อสอบล่วงหน้ากับนักเรียน นักเรียนอาจไม่ท่องจำคำตอบ แต่คนที่เคยเห็นเฉลยมาก่อนย่อมทำได้ดีกว่าคนที่ไม่เคยเห็น โจทย์ปัญหา SWE-Bench มาจาก Repository แบบโอเพ่นซอร์สที่ผู้พัฒนาโมเดลหลายรายใช้สำหรับการฝึก การวิเคราะห์ของเราพบว่าโมเดลแนวหน้าทุกตัวที่ทดสอบสามารถสร้างบั๊กฟิกต้นฉบับที่ใช้เป็นแพตช์อ้างอิง หรือดึงรายละเอียดของโจทย์แบบตรงตัวในบางงานได้ ซึ่งชี้ให้เห็นว่าโมเดลเหล่านี้เคยเห็นโจทย์ปัญหาและคำตอบบางส่วนระหว่างการฝึก
รายังพบหลักฐานว่าโมเดลที่เคยเห็นโจทย์เหล่านี้ระหว่างการฝึกมีแนวโน้มผ่านการทดสอบมากกว่า เพราะโมเดลมีข้อมูลเพิ่มเติมที่ช่วยให้ผ่านการทดสอบที่ระบุเงื่อนไขไม่ครบถ้วน
นั่นหมายความว่าต่อให้ผลลัพธ์ใน SWE-bench Verified ดีขึ้น ผลลัพธ์นั้นก็ไม่ได้สะท้อนทักษะการพัฒนาซอฟต์แวร์จริงของโมเดลอย่างแท้จริง แทนที่จะสะท้อนความสามารถจริง คะแนนกลับกลายเป็นตัวบ่งบอกว่าโมเดลคุ้นเคยกับชุดทดสอบนี้แค่ไหนตั้งแต่ขั้นตอนการฝึก เพราะเหตุนี้เราจึงไม่รายงานคะแนน SWE-bench Verified อีกต่อไป และเราแนะนำให้ผู้พัฒนาโมเดลรายอื่นทำเช่นนั้นด้วย
เราพัฒนาการประเมินชุดใหม่ที่ปลอดการปนเปื้อน เพื่อช่วยติดตามความสามารถด้านการเขียนโค้ดได้ดีกว่าเดิม และเรามองว่านี่เป็นประเด็นสำคัญที่ชุมชนวิจัยควรให้ความสนใจ จนกว่าเราจะสร้างชุดทดสอบใหม่ OpenAI ขอแนะนำให้ใช้ SWE-bench Pro ในการรายงานผล
การประเมิน SWE-bench(เปิดในหน้าต่างใหม่) ต้นฉบับเผยแพร่ในปี พ.ศ. 2566 โจทย์ปัญหาแต่ละข้อเอามาจากปัญหาที่เคยเกิดขึ้นและแก้ไขแล้วบน GitHub ใน 12 Repositories ของ Python แบบโอเพ่นซอร์ส และจับคู่กับ Pull Request (PR) ที่แก้ไขปัญหานั้น เพื่อวัดว่าการแก้ไขโค้ดที่โมเดลสร้างขึ้นถูกต้องหรือไม่ ชุดทดสอบสองชุดแต่ละปัญหาจะมาพร้อมชุดการทดสอบสองชุด
- การทดสอบที่โค้ดเดิมทำไม่ผ่าน แต่ผ่านได้เมื่อแก้ปัญหาอย่างถูกต้องแล้ว
- การทดสอบแบบถดถอยที่ผ่านทั้งก่อนแก้และหลังแก้ เพื่อยืนยันว่าฟังก์ชันส่วนอื่นยังคงสมบูรณ์
โมเดลจะไม่เห็นชุดทดสอบ โมเดลต้องสร้างการแก้ไขโค้ดโดยใช้เพียงข้อความปัญหาเดิมและสถานะของ Repository ก่อนการแก้ไข การทดสอบถือว่าผ่านก็ต่อเมื่อโค้ดที่ปรับปรุงแล้วสามารถทำชุดทดสอบผ่านทั้งหมด
เราพบปัญหาหลายอย่างในชุดประเมินนั้น ซึ่งอาจทำให้รายงานความสามารถของรุ่นต่ำกว่าความจริง
- ยูนิตเทสต์บางตัวกำหนดเงื่อนไขแคบเกินไปหรือไม่สอดคล้องกับงาน โดยอาจส่งผลให้การแก้ไขที่ถูกต้องไม่ผ่านการทดสอบ
- ข้อความงานหลายข้อไม่ระบุรายละเอียดครบถ้วน ทำให้สามารถตีความได้หลายแบบ ขณะที่ชุดทดสอบรองรับเพียงการตีความแบบเฉพาะ
- การตั้งค่าของสภาพแวดล้อมที่ต่างกัน (เช่น Linux เทียบกับ Windows หรือเวอร์ชันของ Python) อาจทำให้บางการทดสอบล้มเหลวแบบไม่เกี่ยวกับตัวโค้ด
เราได้สร้าง SWE-bench Verified ในปี พ.ศ. 2567 เพื่อแก้ไขปัญหาเหล่านี้ เราได้ทำงานร่วมกับวิศวกรซอฟต์แวร์ผู้เชี่ยวชาญเพื่อตรวจสอบปัญหา SWE-bench จำนวน 1,699 ข้อ และคัดกรองโจทย์ที่มีปัญหาเหล่านี้ออก แต่ละโจทย์ปัญหาได้รับการตรวจสอบโดยผู้เชี่ยวชาญอิสระสามคนแยกกัน กระบวนการตรวจสอบนี้นำไปสู่การจัดทำ SWE-bench Verified ซึ่งเป็นชุดโจทย์ที่ผ่านการคัดสรรมาแล้ว 500 ข้อ
ถึงแม้ SWE-bench Verified จะดีกว่าเวอร์ชันเริ่มต้นมาก แต่ก็ยังมีข้อบกพร่องที่หลงเหลือ เราดำเนินการตรวจสอบ 138 ปัญหาใน SWE-bench Verified ที่ OpenAI o3 ไม่สามารถแก้ไขได้อย่างสม่ำเสมอในการรัน 64 ครั้งแยกกัน แต่ละกรณีได้รับการตรวจสอบแยกกันโดยวิศวกรซอฟต์แวร์ที่มีประสบการณ์อย่างน้อยหกคน หากผู้เชี่ยวชาญพบปัญหา กรณีนั้นจะถูกตรวจสอบซ้ำโดยทีมเพิ่มเติม
การตรวจสอบพบว่า 59.4% ของ 138 ปัญหา มีปัญหาสำคัญในชุดทดสอบหรือคำอธิบายโจทย์ ทำให้โมเดลหรือมนุษย์ที่เก่งที่สุดก็แทบจะแก้ไขไม่ได้
- 35.5% ของงานที่ผ่านการตรวจสอบมีกรณีทดสอบที่เข้มงวดซึ่งบังคับใช้รายละเอียดการนำไปใช้งานเฉพาะ ทำให้คำตอบที่ถูกต้องหลายคำตอบถูกปัดตก เราเรียกเทสต์ลักษณะนี้ว่า ชุดทดสอบแบบจำกัด
- 18.8% ของโจทย์ที่ตรวจสอบมีชุดทดสอบที่ตรวจสอบฟังก์ชันเพิ่มเติมที่ไม่ได้ระบุในคำอธิบายโจทย์ เราเรียกชุดทดสอบเหล่านี้ว่าชุดทดสอบแบบกว้าง
- อีก 5.1% ของงานยังมีข้อผิดพลาดอื่น ๆ ที่ไม่สามารถจัดอยู่ในหมวดหมู่ตามการจำแนกนี้ได้
ตัวอย่างของโหมดความล้มเหลวแบบแรกคือ pylint-dev__pylint-4551(เปิดในหน้าต่างใหม่) ซึ่ง PR ได้เพิ่มฟังก์ชันใหม่อย่าง `get_annotation` เป็นส่วนหนึ่งของแนวทางแก้ไขโดยรวม ชื่อฟังก์ชันนี้ไม่ได้ระบุในคำอธิบายโจทย์ แต่ชุดทดสอบดึงมาใช้งานโดยตรง แม้ว่าโมเดลบางตัวอาจเดาได้ว่าจะสร้างฟังก์ชันนี้ แต่การสร้างฟังก์ชันที่มีชื่อนี้เฉพาะไม่ได้จำเป็นสำหรับการแก้ปัญหาอย่างถูกต้อง คำตอบที่ถูกต้องหลายแบบไม่ผ่านการทดสอบเพราะมีข้อผิดพลาดในการนำเข้า
คำอธิบายปัญหา
ตัวอย่างสำหรับทดสอบ PR
ข้อผิดพลาดในการทดสอบ PR (ย่อให้อ่านง่าย)
ตัวอย่างของกรณีทดสอบที่กว้างเกินไปคือ sympy__sympy-18199(เปิดในหน้าต่างใหม่). งานนี้มาจาก PR ที่แก้ไขปัญหาที่แตกต่างกันสามประการในฟังก์ชัน `nthroot_mod` โดยเฉพาะ #17373(เปิดในหน้าต่างใหม่), #17377(เปิดในหน้าต่างใหม่) และ #18212(เปิดในหน้าต่างใหม่) อย่างไรก็ตามคำอธิบายสำหรับงาน SWE-bench Verified ครอบคลุมเฉพาะปัญหาสุดท้าย #18212(เปิดในหน้าต่างใหม่). สิ่งนี้ทำให้เกิดความไม่สอดคล้องกัน การทดสอบใน PR ครอบคลุมทั้งสามประเด็น ขณะที่คำอธิบายระบุรายละเอียดเพียงประเด็นเดียว ในการรันของเรา โมเดลมักจะดำเนินการแก้ไขที่อธิบายไว้ได้อย่างถูกต้อง แต่ไม่ผ่านเทสต์ที่ตรวจการทำงานของอีกสองประเด็น
คำอธิบาย PR ต้นฉบับ (จาก GitHub PR)
รายละเอียดของปัญหาหมายเลข 18212
รายละเอียดปัญหาสำหรับงาน SWE-bench Verified (อ้างอิงจาก #18212 เท่านั้น)
SWE-bench Verified และ Repository (ฐานโค้ดและบันทึกการปล่อยเวอร์ชัน) เปิดเป็นโอเพนซอร์ส โดยถูกใช้งานและถูกพูดถึงอย่างกว้างขวาง ซึ่งทำให้การหลีกเลี่ยงการปนเปื้อนเป็นเรื่องยากสำหรับผู้พัฒนาโมเดล
ครั้งแรกที่เราพบสัญญาณของการปนเปื้อนมาจากโมเดลของเราเอง ตัวอย่างเช่น ตอนที่ GPT‑5.2 แก้ได้ 31 งานที่เรามองว่าแทบเป็นไปไม่ได้ที่จะทำให้สำเร็จ ใน django__django-14725(เปิดในหน้าต่างใหม่) การทดสอบต้องการพารามิเตอร์ใหม่ที่เฉพาะเจาะจงอย่าง `edit_only` ซึ่งไม่ได้ระบุว่าเป็นข้อกำหนดอย่างชัดเจนในคำชี้แจงปัญหา ระหว่างการแก้ปัญหา GPT‑5.2 แสดงในการให้เหตุผลแบบเป็นลำดับขั้นว่ามมีข้อมูลจากบันทึกที่สรุปการเปลี่ยนแปลงของโค้ดเบส และบอกได้ถูกต้องว่าพารามิเตอร์ edit_only ปรากฏครั้งแรกใน Django 4.1
GPT‑5.2 CoT
เพื่อประเมินว่าการปนเปื้อนมีความรุนแรงในวงกว้าเพียงใดง เราจึงสร้างระบบ Red-Teaming อัตโนมัติขึ้นมา สำหรับแต่ละคำถามใน SWE-bench Verified เรามอบหมายให้ GPT‑5 ตรวจสอบ GPT‑5.2‑Chat สำหรับการประเมินการปนเปื้อน ใช้ Claude, Opus 4.5 และ Gemini 3 Flash Preview การเลือกโมเดลนี้ไม่รวมโมเดลให้เหตุผล อย่างไรก็ตามเราทราบดีว่าความสามารถของแต่ละโมเดลอาจต่างกันอย่างมีนัยสำคัญ
เพื่อทดสอบการปนเปื้อน GPT‑5 ได้รับข้อมูลต่อไปนี้ ได้แก่ ไอดีของงานใน SWE-bench Verified คำอธิบายงาน แพตช์อ้างอิง และชุดทดสอบจาก PR ตลอด 15 รอบ เราให้ GPT‑5 ปรับเปลี่ยนคำสั่งของระบบหรือนักพัฒนา คำสั่งของผู้ใช้ การป้อนข้อความเริ่มต้นของผู้ช่วย และใช้กลยุทธ์กระตุ้นการตอบสนองต่างๆ หลังจากแต่ละรอบ โมเดลที่ทำหน้าที่ตัดสินจะติดป้ายกำกับว่ามีข้อมูลใหม่ที่เกี่ยวกับงานมากน้อยเพียงใด และคำตอบแต่ละรายการถูกติดป้ายกำกับระดับความรุนแรงของการปนเปื้อนตั้งแต่ “ไม่มี” จนถึง “รุนแรง” GPT‑5 ได้รับอนุญาตให้ปรับกลยุทธ์ตามผลรอบก่อนหน้า เพื่อดึงรายละเอียดเฉพาะงานอย่างเป็นขั้นตอน สำหรับกรณีตัวอย่างที่มีการปนเปื้อนรุนแรง เราตรวจสอบกับผู้ตัดสินอีกตัวเพื่อยืนยันว่า GPT‑5 ไม่ได้เผยข้อมูลเกินควรต่อโมเดลเป้าหมาย สุดท้ายแล้วเราจะตรวจตัวอย่างระดับรุนแรงด้วยตนเอง ซึ่งประกอบเป็นข้อความสนทนาในโพสต์นี้
ด้านล่างเป็นตัวอย่างของการปนเปื้อนอย่างรุนแรงจากผู้ให้บริการโมเดลต่าง ๆ
เมื่อให้ข้อความสั้นๆ จากคำอธิบายงาน GPT‑5.2 กฌจะสามารถสร้างแพตช์มาตรฐานอ้างอิงออกมาได้อย่างตรงตัว มันรู้ชื่อคลาสและชื่อวิธีการอย่างแม่นยำ รวมถึงเงื่อนไขการคืนค่าตั้งแต่ต้นใหม่อย่าง `if username is None or password is None` ที่ถูกเพิ่มเข้ามา
การกระตุ้นให้เกิดการปนเปื้อน
แพตช์มาตรฐานอ้างอิง
Opus สามารถจำการเปลี่ยนแปลงฟังก์ชัน 4 บรรทัดที่ PR แนะนำได้อย่างแม่นยำ พร้อมทั้งระบุชื่อไฟล์และวิธีการที่เกี่ยวข้อง รวมถึงอ้างข้อความคอมเมนต์ในบรรทัดที่เป็นส่วนหนึ่งของ diff ได้ตรงตัว
การกระตุ้นให้เกิดการปนเปื้อน
แพตช์มาตรฐานอ้างอิง
Gemini 3 Flash สามารถดึงรายละเอียดจากคำอธิบายงานและแพตช์มาตรฐานอ้างอิงออกมาแบบคำต่อคำได้ แม้จะได้รับแค่หมายเลขงานโดยไม่มีข้อมูลอื่น รวมถึงสูตร regex ล่าสุดสำหรับการยืนยันชื่อผู้ใช้และหมายเลขบรรทัดที่เปลี่ยนแปลงตรงตามต้นฉบับ
การกระตุ้นให้เกิดการปนเปื้อน
แพตช์มาตรฐานอ้างอิง
การตรวจสอบ SWE-bench Verified เผยให้เห็นบทเรียนสำคัญสองข้อเกี่ยวกับการออกแบบการประเมิน ประการแรกคือ ชุดทดสอบที่ได้จากแหล่งสาธารณะมีความเสี่ยงเรื่องการปนเปื้อน ซึ่งมาจากการที่โมเดลเคยเห็นข้อมูลฝึกมาก่อน และอาจทำให้คะแนนสูงขึ้นโดยไม่รู้ตัว เมื่อใช้ข้อมูลสาธารณะในการสร้างชุดทดสอบ นักพัฒนาโมเดลควรทำการทดสอบเพิ่มเติมเพื่อหาการปนเปื้อนของข้อมูล ชุดทดสอบและวิธีแก้ปัญหาที่เผยแพร่ต่อสาธารณะสามารถถูกรวมเข้าในข้อมูลฝึกของโมเดลได้ ควรให้ความระมัดระวังเป็นพิเศษทั้งในการเผยแพร่ชุดข้อมูล (เช่น ป้องกันด้วยรหัสผ่าน) และการกรองข้อมูลการฝึกสอน (เช่น การปฏิบัติตาม Canary Strings อย่างเคร่งครัด)
ประการที่สอง การให้คะแนนแบบอัตโนมัตินั้นทำให้ถูกต้องได้ยาก กรณีทดสอบที่สมบูรณ์ควรตรวจสอบความถูกต้องของฟังก์ชันการทำงานอย่างครบถ้วน โดยทั้งไม่ยึดติดกับรายละเอียดการนำไปใช้ที่ไม่สำคัญ และยังต้องทนทานต่อวิธีแก้แบบลัด ปัญหาเหล่านี้มีความซับซ้อนโดยธรรมชาติและแก้ไขได้ยาก การตรวจจับปัญหาเหล่านี้ต้องใช้การติดป้ายกำกับอย่างละเอียด และหลายรอบโดยทีมมนุษย์
เราได้นำข้อค้นพบเหล่านี้มาปรับใช้ในการประเมินผลล่าสุดของเรา ในช่วงหลายเดือนที่ผ่านมา เราเลือกที่จะรายงานผลจากส่วนสาธารณะของ SWE-Bench Pro เราขอแนะนำให้นักพัฒนาโมเดลรายอื่นทำเช่นเดียวกัน SWE-bench Pro ไม่ได้สมบูรณ์แบบ แต่จากหลักฐานเชิงประจักษ์ดูเหมือนว่าจะประสบปัญหาเรื่องการปนเปื้อนน้อยกว่า ระบบตรวจการปนเปื้อนของเราพบกรณีปนเปื้อนบางส่วน แต่กรณีเหล่านี้เกิดน้อยกว่าและรุนแรงน้อยกว่า SWE‑bench Verified มาก และไม่มีรุ่นไหนสร้างแพตช์อ้างอิงแบบคำต่อคำได้ครบ
เราจะมุ่งมันพัฒนาเกณฑ์มาตรฐานต้นฉบับที่เขียนขึ้นเองต่อไป และขอความร่วมมือจากภาคอุตสาหกรรมภาควิชาการให้ทำเช่นเดียวกัน ในชุดการประเมิน GDPVal ผู้เชี่ยวชาญในสาขาต่างๆ ทำการเขียนงานเหล่านี้ขึ้นเอง ทำให้ความเสี่ยงด้านการปนเปื้อนลดลง และวิธีแก้ปัญหาจะถูกประเมินแบบองค์รวมโดยผู้ประเมินที่ผ่านการฝึกอบรม แนวทางนี้ใช้ทรัพยากรมาก แต่ก็มีความจำเป็นมากขึ้นเรื่อยๆ ในการประเมินความก้าวหน้าของความสามารถอย่างแท้จริง


