การสร้างโค้ดด้วย LLM อาจนำไปสู่การลดทอนความน่าเชื่อถือ
(jaysthoughts.com)- ช่วงหลังมานี้ การสร้างโค้ดด้วย LLM ถูกใช้งานมากขึ้นเรื่อย ๆ ในหมู่นักพัฒนา
- โค้ดที่สร้างขึ้นอัตโนมัติทำให้เกิดความกังวลเกี่ยวกับ คุณภาพและความน่าเชื่อถือของโค้ด มากขึ้น
- นักพัฒนาพบว่า ความยากในการบำรุงรักษาโปรเจกต์เพิ่มสูงขึ้น เนื่องจากความเข้าใจโค้ดไม่เพียงพอและการตรวจสอบไม่รัดกุม
- การใช้งานโค้ดที่ไม่น่าเชื่อถืออย่างแพร่หลาย ส่งผลกระทบต่อระบบนิเวศซอฟต์แวร์โดยรวม
- มีการเน้นย้ำถึงความจำเป็นในการจัดทำแนวทางเพื่อรับประกันความน่าเชื่อถือควบคู่ไปกับความก้าวหน้าทางเทคโนโลยี
ภาพรวม
Jay กล่าวในบล็อกของตนถึงผลกระทบที่เทคโนโลยีการสร้างโค้ดด้วย LLM (โมเดลภาษาขนาดใหญ่) ซึ่งเพิ่งเกิดขึ้นไม่นานนี้ มีต่อการพัฒนาซอฟต์แวร์ในภาคปฏิบัติ แม้การพัฒนาของเครื่องมือเหล่านี้จะช่วยเพิ่มประสิทธิภาพการทำงาน แต่ในขณะเดียวกันก็ทำให้ประเด็นเรื่อง ความน่าเชื่อถือ และ คุณภาพ ของโค้ดเด่นชัดขึ้น
การเติบโตของเทคโนโลยีสร้างโค้ดด้วย LLM
- เครื่องมือ สร้างโค้ดอัตโนมัติ ที่ใช้ LLM กำลังแพร่กระจายอย่างรวดเร็วในงานพัฒนา
- ให้ผลิตภาพสูงในการพัฒนาฟีเจอร์ที่ซับซ้อนหรือการเขียนโค้ดงานซ้ำ ๆ
- มีข้อดีทั้งในด้านการสร้างต้นแบบอย่างรวดเร็วและช่วยลดภาระในการเรียนรู้ภาษาใหม่
ปัญหาด้านความน่าเชื่อถือ
- มีกรณีที่โค้ดที่ LLM สร้างขึ้น ไม่ทำงานตามที่ตั้งใจไว้เสมอไป
- เจตนาและตรรกะการออกแบบภายในโค้ดไม่ชัดเจน ทำให้ กระบวนการทำความเข้าใจและการตรวจสอบ ยากขึ้น
- หากกระบวนการรีวิวและทดสอบไม่เพียงพอ ก็อาจเกิด บั๊กหรือช่องโหว่ที่ไม่คาดคิด ได้
การบำรุงรักษาโปรเจกต์และผลกระทบต่อระบบนิเวศ
- เกิดปัญหาเรื่อง การจัดทำเอกสารไม่เพียงพอ และคำอธิบายของโค้ดที่สร้างอัตโนมัติไม่ชัดเจน
- นักพัฒนาประสบความยากลำบากในการทำความเข้าใจหลักการทำงานของโค้ด ส่งผลให้ ความซับซ้อนในการบำรุงรักษา เพิ่มขึ้น
- มีความเสี่ยงที่วัฒนธรรมการพัฒนาซอฟต์แวร์ที่เน้นความน่าเชื่อถือจะ ถูกบ่อนทำลาย
บทสรุปและข้อเสนอแนะ
- เทคโนโลยีการสร้างโค้ดด้วย LLM เป็นนวัตกรรมที่สำคัญ แต่การทำให้ ความน่าเชื่อถือ เกิดขึ้นจริงยังเป็นภารกิจที่จำเป็น
- เมื่อมีการนำโค้ดที่สร้างอัตโนมัติมาใช้ ควรเน้นการ เสริมความเข้มงวดในการตรวจสอบ และการรีวิวโค้ดอย่างเป็นระบบ
- ในระยะยาว การกำหนดมาตรฐานเพื่อ ปกป้องความน่าเชื่อถือของระบบนิเวศการประมวลผล เป็นเรื่องสำคัญ
1 ความคิดเห็น
ความคิดเห็นบน Hacker News
แชร์ลิงก์ archive.is ใช้งานได้แม้กับเบราว์เซอร์รุ่นเก่า และต้องใช้ JavaScript แค่เพื่อหลบ CloudSnare เท่านั้น
เพื่อนของฉันชอบพูดเสมอว่า "นวัตกรรมเกิดขึ้นด้วยความเร็วของความไว้วางใจ" ตั้งแต่ GPT3 ออกมา คำนี้ก็วนอยู่ในหัวตลอด การตรวจสอบมีต้นทุนสูง และความไว้วางใจคือวิธีหลักที่ช่วยลดต้นทุนนั้น แต่ฉันไม่รู้จะสร้างความไว้วางใจกับ LLM ได้อย่างไร มันทั้งเขียนโค้ดและใช้ภาษาธรรมชาติได้อย่างลื่นไหล แต่ในขณะเดียวกันก็หลงทางไปในทิศทางที่ถ้าเป็นคน เราจะมองว่าเจตนาไม่ดีได้
ที่บริษัทฉันได้เจอประเด็นนี้ในแบบไม่คาดคิด เพื่อนร่วมงานกับแรงกดดันเรื่องผลงานระยะสั้น ตัดสินใจ merge งาน refactor ใหญ่ที่ฉันทำทั้งที่ยังอยู่ในสถานะ PR ชั่วคราว หลังจากนั้นก็เกิดบั๊กจากโค้ดที่ยังไม่ได้ทดสอบ ระหว่าง debug เพื่อนร่วมงานยอมรับว่าเขาคิดว่าฉันใช้ AI เขียนโค้ด และรู้สึกหงุดหงิดที่ต้องมาพยายามทำความเข้าใจโค้ดที่ AI สร้างขึ้นทีหลัง แต่จริง ๆ แล้วโค้ดนั้นฉันเขียนเองอย่างละเอียดทั้งหมด และต้นเหตุของบั๊กคือความผิดพลาดเล็ก ๆ ระหว่างการเปลี่ยน API แบบง่าย ๆ เสียมากกว่า ประสบการณ์นี้กลับทำให้ฉันกับเพื่อนร่วมงานได้เปิดเผยความตึงเครียดเรื่องความไว้วางใจกันอย่างเป็นธรรมชาติ และคุยกันแบบสร้างสรรค์ได้ ตอนนี้พอย้อนดูแล้ว ฉันว่าประสบการณ์การสร้างความไว้วางใจแบบนี้มีความหมายมาก และถ้าสภาพแวดล้อมต่างออกไป มันอาจจะซับซ้อนยุ่งเหยิงกว่านี้มาก จึงยิ่งรู้สึกว่าต้องระวังอยู่เสมอ
ฉันไม่ค่อยเข้าใจสมมติฐานตั้งต้น ความไว้วางใจว่าใครสักคนเขียนโค้ดดีได้ มันก็มาจากประสบการณ์จริงว่าคนนั้นลงมือเขียนเองแล้วผลลัพธ์ออกมาดี ถ้าใช้ LLM แล้วส่งโค้ดไม่มีบั๊กมาให้ ก็ไว้ใจ ถ้าใช้ LLM แล้วมีบั๊ก ก็ไม่ไว้ใจ ฉันไม่เห็นว่ามันต่างจากการเขียนด้วยหัวตัวเองตรงไหน
เราอยู่ในยุคนั้นแล้วจริง ๆ ฉันเห็นประโยคอย่าง "ขอโทษที่มองข้ามจุดนี้ คุณพูดถูก" บ่อยมาก มากประมาณ 8 หรือ 9 ครั้งจาก 10 ครั้ง ในทางกลับกัน ฉันก็เห็นคนก๊อปวางโค้ดที่ LLM สร้างมาแบบไม่คิดความหมาย แล้วพอผลไม่ตรงหวังก็โมโหอยู่บ่อย ๆ ซึ่งจริง ๆ แบบนั้นยังดีกว่า ฉันคิดว่าของที่พังอย่างชัดเจนยังดีกว่าของที่ดูเผิน ๆ เหมือนถูกต้อง
เครื่องมือ abstraction รุ่นก่อน ๆ ลดความซับซ้อนได้โดยตั้งอยู่บนสมมติฐานพื้นฐานว่า abstraction นั้น "ถูกต้อง" แน่นอนว่ามันไม่สมบูรณ์และมีบั๊กได้ แต่ปัญหาอยู่ที่ implementation ไม่ใช่ความผิดพลาดเชิงเนื้อแท้ และเมื่อแพตช์แล้วก็มักจะแข็งแรงขึ้น ในทางกลับกัน LLM เป็น prediction engine เชิงความน่าจะเป็น จึงให้ความถูกต้องแบบประมาณค่าได้แค่ช่วงเวลาหนึ่ง สิ่งที่ผู้เขียนมองข้ามคือ เราสามารถสร้างระบบ deterministic ที่น่าเชื่อถือได้แม้ใช้ agent เชิงความน่าจะเป็นที่ไม่สมบูรณ์ ตัวอย่างเช่น เราไม่ได้เชื่อใจผู้เขียนเครื่องมือ garbage collection แต่เชื่อใจเพราะตัวเครื่องมือถูกทดสอบมากพอและพิสูจน์ได้ว่าทำงานตามต้องการ ฉันคิดว่าในอนาคต test-driven development จะยิ่งเข้มข้นขึ้น ไม่ใช่ความไว้วางใจ แต่เป็นการตรวจสอบยืนยัน
ความไม่ชอบ LLM ไม่ช่วยอะไรเลย ตอนนี้ LLM เพิ่มผลิตภาพของนักพัฒนาได้ อย่างน้อยก็เป็นประโยชน์มากสำหรับนักพัฒนาที่ประสบการณ์น้อย เครื่องมือที่เพิ่มผลิตภาพได้มากขนาดนี้ ต่อให้ใครพูดอย่างไรก็ไม่มีทางถูกทิ้ง แน่นอนว่าแม้จะมีกรณีเสียหาย เช่น บั๊กใหญ่ทำให้บริการขนาดใหญ่ล่มนาน เทคโนโลยีก็จะไม่หยุดถ้าผลิตภาพยังสำคัญ ทางที่เป็นจริงมีเพียงอยู่ร่วมกับมันและแก้ไข/บรรเทาจุดอ่อนเหล่านั้นไปพร้อมกัน ในกระบวนการนั้น ถ้ามาตรการบรรเทาไปขัดกับการเพิ่มผลิตภาพ ผู้คนก็จะหาทางอ้อม และสุดท้ายมาตรการเสริมที่สอดคล้องกับเทคโนโลยีจะเป็นสิ่งที่ฝังตัวอยู่รอด
แทนที่จะออกนโยบายอย่าง "รับรองว่าโค้ดที่ส่งมาไม่ใช่ผลผลิตจาก LLM เป็นงานต้นฉบับ และเข้าใจทั้งหมดอย่างสมบูรณ์" หรือ "ส่วนใหญ่ต้องทำด้วยมือ" ฉันคิดว่าควรโฟกัสที่ผลลัพธ์มากกว่า การกำหนดให้ผู้มีส่วนร่วมต้องเข้าใจการเปลี่ยนแปลงที่ตัวเองส่งมานั้นเป็นเรื่องดี แต่นโยบายอย่าง "จูเนียร์ควรงดหรือถูกห้ามใช้เครื่องมือ LLM ชั่วคราว" ฉันไม่ค่อยเห็นด้วย LLM ช่วยได้มากกับปัญหา setup สภาพแวดล้อมที่วุ่นวายตอน onboarding นอกจากนี้ยังช่วยทำความเข้าใจโค้ด/เอกสาร และเป็นเครื่องมือค้นหาข้อความกับสรุปข้อมูลที่มีประโยชน์ด้วย
เพิ่งเคยได้ยินแนวคิดเรื่อง "AI Cliff" (อาการที่ความแม่นยำของ LLM ตกฮวบแบบฉับพลัน) อยากรู้ว่าคนอื่นเคยเจอบ้างไหม
ดูเหมือนผู้เขียนต้นฉบับจะประกาศว่าไม่คิดสรุปความคิดเห็นของหลายคน แต่เอาเข้าจริงก็เหมือนกำลังทำแบบนั้นอยู่ ถึงอย่างนั้น ฉันก็อยากให้ใน PR มีตัวบ่งชี้ว่าไฟล์ไหนมีโค้ดที่ AI สร้างรวมอยู่ด้วย เพราะรูปแบบความผิดพลาดของโค้ดจาก LLM กับโค้ดจากคนไม่เหมือนกัน ถ้าแยกรีวิวได้ก็น่าจะประหยัดเวลา อยากรู้ว่ามีใครเคยเจอนโยบายแบบนี้ในองค์กรใหญ่ หรือมีเครื่องมืออัตโนมัติแบบนี้อยู่แล้วหรือไม่ ถ้าบริษัทต่าง ๆ วัดสัดส่วนโค้ดที่สร้างโดย LLM ก็อาจมีเครื่องมือแบบนี้อยู่แล้วเพื่อเก็บ metric รายละเอียด