ฟีเจอร์ Full Line Code Completion ของ JetBrains ที่ใช้โมเดล AI แบบ local เพื่อช่วยนักพัฒนาเขียนโค้ด logging ได้จุดประกายการถกเถียงอย่างร้อนแรงเกี่ยวกับบทบาทของปัญญาประดิษฐ์ในการเขียนโปรแกรม และว่าเครื่องมือเหล่านี้ช่วยเพิ่มทักษะของนักพัฒนาหรือทำให้ทักษะลดลง
ฟีเจอร์นี้ทำงานทั้งหมดบนเครื่องของนักพัฒนาแบบ local โดยใช้โมเดลขนาดกะทัดรัด 100MB ที่สามารถทำนายและเติมเต็ม logging statements โดยอิงจากบริบทของโค้ดโดยรอบ ซึ่งแตกต่างจาก AI assistants แบบ cloud-based โดยแนวทางนี้ให้ความสำคัญกับความเป็นส่วนตัวและความเร็วด้วยการประมวลผลแบบ offline ทั้งหมด
ข้อมูลจำเพาะของโมเดล AI ของ JetBrains:
- ขนาดโมเดล: 100MB (บีบอัดจาก 400MB โดยใช้การควอนไทเซชัน INT8)
- พารามิเตอร์: 100 ล้าน (สไตล์ GPT-2 ต่อมาเปลี่ยนเป็นสถาปัตยกรรม Llama2)
- หน้าต่างบริบท: 384 ตัวอักษร
- ข้อมูลการฝึก: ชุดข้อมูลย่อยขนาด 45GB จากชุดข้อมูล The Stack
- คำศัพท์ของ tokenizer: 16,384 โทเค็น
- ความต้องการฮาร์ดแวร์: ทำงานในเครื่องบน CPU โดยไม่ต้องพึ่งพา CUDA
![]() |
---|
การรวม AI เข้ากับการเขียนล็อกช่วยเพิ่มประสิทธิภาพของนักพัฒนา ตามที่ได้สำรวจในโพสต์บล็อก |
ความแตกแยกทางปรัชญาการเขียนโปรแกรมที่ยิ่งใหญ่
การตอบสนองจากชุมชนเผยให้เห็นความแตกแยกพื้นฐานในวิธีที่นักพัฒนามองงานฝีมือของตน บางคนโต้แย้งว่าการพึ่งพา AI สำหรับงานพื้นฐานเช่นการจำว่าจะใช้ logger.info
หรือ logging.info
แสดงถึงความเสื่อมถอยที่น่ากังวลในพื้นฐานการเขียนโปรแกรม พวกเขามองว่ารายละเอียดเหล่านี้เป็นความรู้หลักที่นักพัฒนาที่มีความสามารถควรจะจำได้
คนอื่นๆ โต้กลับว่าการจัดการ cognitive load เป็นสิ่งสำคัญสำหรับประสิทธิภาพการทำงาน โดยเฉพาะเมื่อทำงานข้าม codebase หลายๆ ตัวที่มี logging libraries ต่างกัน พวกเขามองว่าการช่วยเหลือจาก AI เป็นวิวัฒนาการตามธรรมชาติของเครื่องมือการเขียนโปรแกรม คล้ายกับที่ auto-completion และ syntax highlighting กลายเป็นฟีเจอร์มาตรฐาน
สิ่งหนึ่งที่ชัดเจนขึ้นจากความคลั่งไคล้ AI คือมีผู้คนจำนวนมากที่เขียนโปรแกรมเป็นอาชีพแต่กลับมีทัศนคติที่เป็นศัตรูต่อการประยุกต์ใช้ computer science ใหม่ๆ ที่น่าสนใจ ซึ่งเปิดความสามารถและวิธีการทำงานใหม่ๆ ทั้งหมด
การใช้งานทางเทคนิคและการแลกเปลี่ยน
JetBrains บรรลุความสามารถ AI แบบ local นี้ผ่านการปรับปรุงที่ชาญฉลาดหลายประการ พวกเขาฝึกโมเดล 100 ล้าน parameter เฉพาะกับโค้ด Python โดยลบ comments และ imports ออกจากข้อมูลการฝึกเพื่อมุ่งเน้นที่การสร้างโค้ดอย่างแท้จริง จากนั้นโมเดลถูกบีบอัดจาก 400MB เหลือ 100MB โดยใช้เทคนิค quantization
อย่างไรก็ตาม นักพัฒนาบางคนตั้งคำถามว่านี่เป็นโซลูชันที่ดีที่สุดหรือไม่ Language servers แบบดั้งเดิมและ intelligent code completion สามารถจัดการกับคำแนะนำชื่อตัวแปรและการเติมเต็มตามบริบทได้อย่างแม่นยำสมบูรณ์และใช้ทรัพยากรน้อย นักวิจารณ์โต้แย้งว่าการใช้ transformer-based inference สำหรับงานที่เครื่องมือแบบ deterministic สามารถแก้ไขได้อย่างสมบูรณ์แบบแสดงถึงการเลือกใช้เครื่องมือที่ไม่มีประสิทธิภาพ
การปรับปรุงการฝึกอบรม:
- ลบคอมเมนต์ของโค้ดออกเพื่อมุ่งเน้นไปที่การสร้างโค้ด
- แปลงการจัดย่อหน้าเป็นโทเค็น
<SCOPE_IN>/<SCOPE_OUT>
- ไม่รวมคำสั่ง import ในข้อมูลการฝึกอบรม
- ใช้ BPE tokenizer ที่ปรับให้เหมาะสำหรับโค้ดมากกว่าภาษาธรรมชาติ
- ฝึกอบรมบน GPU NVIDIA A100 8 ตัวเป็นเวลาหลายวัน
ความขัดแย้งเรื่อง Logging Best Practices
การถกเถียงยังเน้นย้ำข้อพิจารณาทางเทคนิคที่สำคัญเกี่ยวกับแนวปฏิบัติ Python logging นักพัฒนาที่มีประสบการณ์หลายคนชี้ให้เห็นว่าการใช้ f-strings ใน logging statements แม้จะสะดวก แต่อาจทำให้เกิดปัญหาด้านประสิทธิภาพและรบกวนระบบ log aggregation เช่น Sentry แนวทางดั้งเดิมของการใช้ format strings กับ operator %
ช่วยให้ระบบ logging จัดกลุ่มข้อความที่คล้ายกันเข้าด้วยกันและหลีกเลี่ยงการ string interpolation ที่ไม่จำเป็นเมื่อ logging levels ถูกปิดใช้งาน
แนวทางปฏิบัติที่ดีสำหรับ Python Logging:
- แนะนำ:
logger.info("Message %s", variable)
- หลีกเลี่ย:
logger.info(f"Message {variable}")
- เหตุผล: F-strings ป้องกันการรวบรวม log ทำให้เกิดปัญหาด้านประสิทธิภาพในส่วนของโค้ดที่ทำงานบ่อย และอาจเกิดข้อผิดพลาดหากตัวแปรมี format specifiers
![]() |
---|
แนวทางปฏิบัติที่ดีที่สุดในการ logging ของ Python รวมถึงการใช้ f-strings อย่างเหมาะสม ได้ถูกเน้นให้เห็นในโค้ดนี้ |
โมเดล AI แบบ Local เทียบกับ Cloud
ลักษณะ local ของการใช้งานของ JetBrains ได้รับคำชมอย่างกว้างขวางจากนักพัฒนาที่ใส่ใจเรื่องความเป็นส่วนตัว การรัน inference แบบ local ช่วยขจัดความกังวลเรื่องการส่งโค้ดที่เป็นกรรมสิทธิ์ไปยังบริการภายนอก ขณะเดียวกันก็ให้ประสิทธิภาพที่สม่ำเสมอไม่ว่าการเชื่อมต่ออินเทอร์เน็ตจะเป็นอย่างไร
แนวทางนี้แสดงถึงแนวโน้มที่กว้างขึ้นไปสู่โมเดล AI เฉพาะทาง domain-specific มากกว่าบริการ cloud แบบ general-purpose ด้วยการมุ่งเน้นเฉพาะการเติมเต็มโค้ด Python ภายใน context window ขนาด 384 ตัวอักษร JetBrains ได้สร้างเครื่องมือที่มีทั้งประสิทธิภาพและประสิทธิผลสำหรับ use case เฉพาะ
บทสรุป
การถกเถียงรอบ AI-powered code completion ของ JetBrains สะท้อนคำถามที่ใหญ่กว่าเกี่ยวกับอนาคตของการพัฒนาซอฟต์แวร์ ในขณะที่นักพัฒนาบางคนยอมรับ AI ในฐานะตัวคูณประสิทธิภาพที่ปลดปล่อยให้พวกเขามุ่งเน้นไปที่ปัญหาระดับสูงกว่า คนอื่นๆ กลับกังวลเรื่องการสร้างการพึ่งพาที่อาจทำให้ทักษะการเขียนโปรแกรมพื้นฐานอ่อนแอลง
ความสำเร็จของโมเดล AI แบบ local เฉพาะทางเช่นการใช้งานของ JetBrains บ่งบอกว่าอนาคตอาจรวมทั้งสองแนวทาง: โมเดล general-purpose ที่ทรงพลังสำหรับงานที่ซับซ้อนและเครื่องมือเบาๆ ที่มุ่งเน้นสำหรับ workflow เฉพาะ เมื่อเทคโนโลยีเติบโตขึ้น นักพัฒนาจะต้องหาสมดุลของตนเองระหว่างการใช้ประโยชน์จากการช่วยเหลือของ AI และการรักษาความสามารถหลัก