- JetBrains Full Line Code Completion (FLCC) เป็นฟีเจอร์เติมโค้ดอัตโนมัติด้วย AI ที่ใช้งานได้ใน PyCharm และ GoLand ซึ่งช่วยเพิ่ม ประสิทธิภาพในการเขียนล็อก และยกระดับประสิทธิภาพการพัฒนาอย่างมาก
- ช่วยลดความยุ่งยากจากการต้องเขียนไวยากรณ์ล็อกแบบ f-string ซ้ำ ๆ หรือการเข้าถึงตัวแปร/ดาต้าเฟรม และ AI จะสร้างล็อกที่กระชับและชัดเจนตามบริบท ให้โดยอัตโนมัติ
- โมเดลนี้เป็น LLM ขนาดเล็กที่ ทำงานบนเครื่องโลคัล จึงได้ทั้งความเร็วในการอนุมานสูง ใช้หน่วยความจำต่ำ (ราว 1GB) และไม่มีความกังวลเรื่องข้อมูลส่วนตัวรั่วไหล
- ตามบทความวิจัยของ JetBrains มีการฝึก Transformer ขนาดเล็กที่ปรับแต่งเฉพาะสำหรับ Python (100M พารามิเตอร์) เพื่อรองรับการเติมโค้ดอัตโนมัติทีละหนึ่งบรรทัดภายในบริบทโค้ด 384 ตัวอักษร และยังสะท้อนลักษณะเฉพาะของโค้ด Python อย่างมากในขั้นตอนเตรียมข้อมูลและโทเค็นไนซ์
- กรณีความสำเร็จของ FLCC แสดงให้เห็นอย่างชัดเจนว่า โมเดลขนาดเล็กที่มุ่งเป้าตามวัตถุประสงค์ ไม่ใช่ LLM ขนาดใหญ่ สามารถเพิ่มผลิตภาพในงานพัฒนาจริงได้มากเพียงใด
การเขียนล็อกอัตโนมัติด้วย AI: การเปลี่ยนแปลงที่เกิดขึ้นจริงต่อผลิตภาพนักพัฒนา
- JetBrains Full Line Code Completion (FLCC) มีฟีเจอร์ เติมข้อความล็อกทั้งบรรทัดโดยอัตโนมัติ ใน PyCharm (ติดตั้งมาเป็นค่าเริ่มต้นช่วงปลายปี 2023), GoLand และเครื่องมืออื่น ๆ
- ในงานอย่างการประมวลผลข้อมูลแบบลำดับ การเรียกใช้ API แบบ asynchronous หรือการคำนวณเวกเตอร์ การดีบักด้วย print และการใส่ล็อกอย่างละเอียดเป็นสิ่งจำเป็น
- แต่เดิมมีปัญหาว่า โฟลว์การดีบักมักสะดุดบ่อย เพราะต้องพิมพ์ซ้ำ ๆ ทั้ง f-string, การเข้าถึงตัวแปร/ลิสต์/ดาต้าเฟรม และการเลือก logger (loguru vs logging)
- ตัวอย่างเช่น
logger.info(f'Adding a log for {your_variable} and {len(my_list)} and {df.head(0)}') ของ loguru แม้จะดูเรียบง่าย แต่ก็มีภาระทางความคิดหลายขั้นตอน ทั้งวงเล็บ ชื่อตัวแปร ไวยากรณ์ดาต้าเฟรม และชนิดของ logger
FLCC เปลี่ยนโฟลว์การพัฒนาและนิสัยการเขียนล็อกอย่างไร
- Full Line Code Completion จะรวมข้อมูลบริบททั้งหมด เช่น นามสกุลไฟล์ พาธ และโค้ดเหนือเคอร์เซอร์ มาเป็นพรอมป์ต์อินพุตของโมเดลเพื่อ เติมข้อความล็อกที่เป็นธรรมชาติที่สุดโดยอัตโนมัติ
- ล็อกที่แนะนำถูกปรับให้เหมาะกับบริบทของตัวแปร ดาต้าเฟรม และการประมวลผลต่าง ๆ ทำให้หลายครั้งชัดเจนกว่าที่คนเขียนเอง
- เพราะได้ล็อกที่กระชับ ทำให้หลังดีบักเสร็จแล้วก็ไม่จำเป็นต้องลบล็อกออกจากโค้ด และยังมีคุณภาพดีพอจะคงไว้ในสภาพแวดล้อมจริงได้
-
ตัวอย่าง
- ตอนตรวจสอบ Redis URL:
redis = aioredis.from_url(settings.redis_url, decode_responses=True) → AI จะเสนอข้อความล็อกการเชื่อมต่อ Redis ให้อัตโนมัติ
- ตอนทำ DataFrame profiling: หลังนิยามข้อมูล/คอลัมน์แล้ว จะมีการเสนอข้อความล็อกสำหรับ profiling เช่น shape ของ
df โดยอัตโนมัติ
คุณลักษณะทางเทคนิคและการนำไปใช้ของโมเดล JetBrains FLCC
-
ทำงานบนสภาพแวดล้อมโลคัลทั้งหมด
- การอนุมานโมเดลและการแนะนำโค้ดประมวลผลบนเครื่องโลคัลเท่านั้น จึงปลอดภัยโดยไม่ต้องกังวลเรื่องข้อมูลส่วนตัว/โค้ดรั่วไหล
- บน Mac โมเดลมีขนาดประมาณ 1GB ใช้หน่วยความจำไม่มาก และทำงานได้รวดเร็วมาก
- ไม่จำเป็นต้องมีโครงสร้างพื้นฐาน LLM ขนาดใหญ่บนคลาวด์ เช่น vLLM, SGLM, Ray, PagedAttention
-
สถาปัตยกรรม LLM ขนาดเล็กที่ปรับแต่งเฉพาะสำหรับ Python
- เริ่มต้นพัฒนาด้วย Decoder-only Transformer สไตล์ GPT-2 (100M พารามิเตอร์) บนพื้นฐาน PyTorch และภายหลังปรับปรุงเป็นสถาปัตยกรรม llama2
- ใช้ข้อมูลเพียง 45GB จากชุดย่อยของ The Stack ขนาด 6TB (30 ภาษา) โดยลบคอมเมนต์โค้ดและ import ที่ไม่จำเป็นออก เพื่อโฟกัสกับการสร้างโค้ดจริง
- ให้สอดคล้องกับลักษณะเฉพาะของภาษา Python จึงใช้โทเค็นไนเซอร์แบบ BPE และแปลงโครงสร้างอย่าง indentation และ scope เป็นโทเค็น
<SCOPE_IN>/<SCOPE_OUT> เพื่อหลีกเลี่ยงการสิ้นเปลืองโทเค็นโดยไม่จำเป็นจากความต่างของช่องว่าง
- ปรับขนาด vocabulary ของ Tokenizer ไว้ที่ 16,384
- เนื่องจากพฤติกรรมการเขียน Python ที่มักเพิ่ม import ไว้ท้ายโค้ด ก็สะท้อนแนวทางนี้ในการฝึกโมเดลด้วย และตัด import ออกจากข้อมูลไปเลย
-
การฝึกและการเพิ่มประสิทธิภาพ
- ฝึกโมเดลหลายวันด้วย NVIDIA A100 GPU จำนวน 8 ตัว และประเมินด้วย cross-entropy loss
- ใช้การทำ quantization แปลงโมเดล FP32 เป็น INT8 (400MB→100MB) เพื่อให้โหลดลงหน่วยความจำของพีซีได้โดยไม่เป็นภาระ
- ใช้ ONNX RT สำหรับการอนุมานบน CPU และภายหลังเปลี่ยนเซิร์ฟเวอร์ไปเป็นสถาปัตยกรรม llama.cpp
- ใช้ Beam Search (k=20) เพื่อสร้างลำดับโทเค็นที่หลากหลาย และใช้ตัวอักษรขึ้นบรรทัดใหม่เป็นเกณฑ์จบผลลัพธ์
- จาก context window 384 ตัวอักษร จะมี 50% ที่ถูก prefetch และแคชไว้ล่วงหน้า ทำให้เมื่อเลื่อนเคอร์เซอร์กลับไปยังโค้ดก่อนหน้า สามารถตอบสนองได้ทันทีโดยไม่ต้องอนุมานใหม่
-
โครงสร้างปลั๊กอินและการผสานรวม
- ปลั๊กอิน PyCharm เขียนด้วย Kotlin และให้โทเค็นสำหรับการอนุมานผ่านเซิร์ฟเวอร์ native C++ บนเครื่อง
- มีทั้ง API ที่สะอาด การตอบสนองความเร็วสูง และกลยุทธ์ caching ที่เหมาะกับเวิร์กโฟลว์การพัฒนาจริง
การเปลี่ยนแปลงด้านผลิตภาพการพัฒนาที่ FLCC นำมาอย่างเป็นรูปธรรม
-
ยกระดับทั้งคุณภาพและประสิทธิภาพของล็อกพร้อมกัน
- ด้วยล็อกที่ AI เติมอัตโนมัติ ทำให้ทั้งคุณภาพของ print debugging/operational log และประสิทธิภาพในการเขียนดีขึ้นพร้อมกัน
- มีการเสนอข้อความล็อกที่สั้นและชัดเจนโดยอัตโนมัติ จึงไม่ทำให้โฟลว์การดีบักสะดุด
-
คุณค่าเชิงปฏิบัติของ LLM ขนาดเล็กแบบเฉพาะทาง
- ไม่ใช่ LLM ขนาดใหญ่ แต่เป็นโมเดล AI ขนาดเล็กที่ปรับให้เหมาะกับงานเฉพาะ (การเติมโค้ดหนึ่งบรรทัด) ซึ่งสร้างนวัตกรรมด้านผลิตภาพอย่างมากในงานพัฒนาจริง
- เป็นกรณีตัวอย่างสำคัญที่แสดงให้เห็นว่าโมเดลขนาดเล็กแบบมุ่งเป้าตามวัตถุประสงค์สามารถปรับปรุงเวิร์กโฟลว์จริงได้อย่างมีนัยสำคัญในสาขาอื่น ๆ เช่นกัน
5 ความคิดเห็น
ถ้ามีอะไรแบบนี้ใน C++ ด้วยก็คงดีนะ!
จะให้จ่ายเดือนละ $20 ~ $200 เพื่อเรื่องนี้ก็ดูจะ...
ดูเหมือนว่าคนนี้กำลังพูดถึงค่าใช้จ่ายค่าสมาชิก IDE นะครับ FLCC ไม่มีให้ในเวอร์ชันฟรี
แต่ก็ไม่ใช่ว่าผู้คนจะยอมจ่ายเงินเพราะหวังแค่อย่างนั้นอย่างเดียว
อ้อ เวอร์ชันฟรีใช้งานไม่ได้สินะครับ ผมเข้าใจผิดไปเอง 😅
น่าจะไม่ต้องเสียค่าใช้จ่าย เพราะรันบนเครื่องตัวเอง