ไฟล์บริบทสำหรับเอเจนต์เขียนโค้ดมักไม่ช่วยเหลือ และอาจลดทอนประสิทธิภาพลงได้
ในยุคที่เอเจนต์ปัญญาประดิษฐ์ (AI) สำหรับการเขียนโค้ดอย่าง Devin, Cursor หรือ Aider ได้รับความนิยมเพิ่มขึ้น ผู้พัฒนาซอฟต์แวร์จำนวนมากมักจัดเตรียมไฟล์บริบท เช่น README.md, requirements.txt หรือเอกสารอื่นๆ เพื่อช่วยให้เอเจนต์เข้าใจโครงสร้างโครงการได้ดีขึ้น อย่างไรก็ตาม การวิจัยล่าสุดจาก Microsoft Research เผยให้เห็นว่าการเพิ่มไฟล์บริบทเหล่านี้กลับไม่ช่วยยกระดับประสิทธิภาพของเอเจนต์ ในทางตรงกันข้าม อาจทำให้ผลลัพธ์แย่ลงด้วยซ้ำ
การทดลองและผลลัพธ์หลัก
นักวิจัยได้ตีพิมพ์ผลงานในชื่อ “Do Context Files Help? Rethinking Context Provisioning for Code Agents” โดยทดสอบเอเจนต์เขียนโค้ดจากโมเดล GPT-4o บนชุดข้อมูลมาตรฐานหลายชุด ประการแรกคือ HumanEval ซึ่งเป็นชุดทดสอบปัญหาการเขียนโค้ดภาษา Python 193 ปัญหา โดยวัดผลด้วยตัวชี้วัด pass@1 (อัตราความสำเร็จในการแก้ปัญหาครั้งแรก) ผลปรากฏว่า เมื่อเพิ่มไฟล์บริบทจาก repository ของชุดข้อมูล HumanEval ประสิทธิภาพลดลงจาก 74.5% เหลือ 71.9%
ต่อมา ชุดข้อมูล MBPP (Mostly Basic Python Problems) ซึ่งมีปัญหา 974 รายการ ก็แสดงแนวโน้มคล้ายกัน โดยประสิทธิภาพลดลงจาก 80.6% เป็น 79.2% นอกจากนี้ การทดสอบบน SWE-bench lite ซึ่งเป็นชุดข้อมูลที่ซับซ้อนกว่า โดยจำลองงานแก้ไขบั๊กจริงจาก GitHub repositories 300 แห่ง พบว่าประสิทธิภาพร่วงลงอย่างชัดเจนจาก 33.1% เหลือ 28.7% แม้แต่ไฟล์ที่เกี่ยวข้องโดยตรงกับงาน เช่น docs ใน repository ก็ยังทำให้ประสิทธิภาพลดลงในหลายกรณี
การวิเคราะห์สาเหตุที่ไฟล์บริบทส่งผลกระทบเชิงลบ
นักวิจัยชี้ให้เห็นหลายปัจจัยที่ทำให้ไฟล์บริบทกลายเป็นอุปสรรค ประการแรกคือปัญหาด้านงบโทเค็น (token budget) ไฟล์บริบทมักมีขนาดใหญ่ โดยเฉลี่ย 2,000 โทเค็นต่อไฟล์ ซึ่งเมื่อรวมกันอาจเกินขีดจำกัดของโมเดล ทำให้เอเจนต์ไม่สามารถประมวลผลข้อมูลหลักของงานได้อย่างเต็มที่
ประการที่สองคือข้อมูลที่ไม่เกี่ยวข้องหรือข้อมูลรบกวน (irrelevant or distracting information) ไฟล์อย่าง README มักมีคำอธิบายทั่วไป ข้อมูลติดต่อ หรือคำแนะนำการติดตั้งที่ไม่จำเป็นต่อการแก้ปัญหาเฉพาะหน้า ส่งผลให้เอเจนต์สับสนและผลิตโค้ดที่ผิดพลาดมากขึ้น นอกจากนี้ การทดสอบย่อยพบว่าแม้เลือกไฟล์ที่เกี่ยวข้องที่สุด เช่น requirements.txt สำหรับปัญหาที่ต้องใช้แพ็กเกจเฉพาะ ประสิทธิภาพก็ยังไม่ดีขึ้นอย่างมีนัยสำคัญ
ใน SWE-bench การเพิ่มไฟล์ทั้งหมดจาก repository ทำให้เอเจนต์แก้ปัญหาได้น้อยลง 4.4% ขณะที่การเพิ่มเฉพาะไฟล์ที่เกี่ยวข้องกับงานยังลดลง 2.1% สิ่งนี้บ่งชี้ว่าปัญหาไม่ได้อยู่ที่ปริมาณข้อมูลเท่านั้น แต่รวมถึงคุณภาพและความเหมาะสมด้วย
ข้อเสนอแนะ: เปลี่ยนไปใช้ Retrieval-Augmented Generation (RAG)
เพื่อแก้ไขปัญหานี้ นักวิจัยแนะนำให้ใช้เทคนิค Retrieval-Augmented Generation (RAG) แทนการป้อนไฟล์บริบททั้งหมด RAG ทำงานโดยการค้นหาและดึงข้อมูลที่เกี่ยวข้องเฉพาะเจาะจงจากเอกสารโครงการ โดยใช้การค้นหาแบบ semantic search ซึ่งช่วยลดข้อมูลรบกวนและประหยัดงบโทเค็น
ในการทดลอง RAG พบว่าประสิทธิภาพดีขึ้นอย่างเห็นได้ชัด เช่น ใน HumanEval เพิ่มจาก 74.5% เป็น 77.3% ใน MBPP ดีขึ้นเป็น 82.1% และใน SWE-bench lite สูงถึง 36.2% ซึ่งดีกว่า baseline เดิมมาก นักวิจัยทดสอบ RAG หลายรูปแบบ เช่น การดึง top-k ไฟล์ (k=1-5) หรือดึงโค้ดเฉพาะส่วนที่เกี่ยวข้อง โดยพบว่า RAG ที่ดีที่สุดคือการดึงโค้ดจากไฟล์ที่แก้ไขบ่อยที่สุดในประวัติศาสตร์ repository
นอกจากนี้ การใช้ embedding model ที่เหมาะสม เช่น voyage-code-3 หรือ bge-m3 ช่วยยกระดับการค้นหาให้แม่นยำยิ่งขึ้น โดย voyage-code-3 ให้ผลดีที่สุดใน SWE-bench
ความหมายต่ออุตสาหกรรมซอฟต์แวร์
ผลการวิจัยนี้มีนัยสำคัญต่อผู้พัฒนาเอเจนต์ AI และทีมพัฒนาซอฟต์แวร์ที่ใช้เครื่องมือเหล่านี้ การพึ่งพาไฟล์บริบทแบบดั้งเดิมอาจเป็นความเข้าใจผิดที่แพร่หลาย โดยเฉพาะในเครื่องมืออย่าง Devin หรือ Cursor ที่ผู้ใช้มักอัปโหลดไฟล์โครงการทั้งหมดโดยไม่รู้ถึงผลกระทบเชิงลบ แนะนำให้เปลี่ยนไปใช้ระบบ RAG ที่สามารถรวมเข้ากับ IDE ได้ง่าย เช่น VS Code extensions
อย่างไรก็ตาม นักวิจัยยอมรับว่าการทดสอบนี้จำกัดอยู่ที่ GPT-4o และชุดข้อมูลเฉพาะ ผลลัพธ์อาจแตกต่างในโมเดลอื่นๆ หรือโครงการขนาดใหญ่ แต่ข้อมูลเหล่านี้ชี้ให้เห็นถึงความจำเป็นในการปรับปรุงกลยุทธ์การให้บริบทใหม่
การวิจัยนี้เผยแพร่เมื่อเร็วๆ นี้ และสามารถเข้าถึงได้ที่ arXiv สร้างแรงกระตุ้นให้อุตสาหกรรมพัฒนาเครื่องมือที่ชาญฉลาดยิ่งขึ้น โดยเน้นการดึงข้อมูลแบบไดนามิกแทนการป้อนข้อมูลแบบคงที่ สุดท้าย ผู้พัฒนาควรทดสอบประสิทธิภาพของเอเจนต์ในโครงการจริง เพื่อหลีกเลี่ยงการลดทอนผลงานโดยไม่จำเป็น
(จำนวนคำประมาณ 728 คำ)
This Article is sponsored by Gnoppix AI (https://www.gnoppix.org)