Việc tạo mã bằng LLM có thể dẫn đến suy giảm độ tin cậy
(jaysthoughts.com)- Gần đây, hiện tượng tạo mã dựa trên LLM đang ngày càng được sử dụng nhiều hơn trong giới phát triển
- Việc dùng mã được tạo tự động làm gia tăng lo ngại về chất lượng mã và độ tin cậy
- Các nhà phát triển đang trải nghiệm độ khó bảo trì dự án tăng lên do thiếu hiểu biết về mã và kiểm chứng chưa đầy đủ
- Sự lan rộng của việc sử dụng mã không đáng tin cậy đang ảnh hưởng đến toàn bộ hệ sinh thái phần mềm
- Cùng với tiến bộ công nghệ, nhu cầu xây dựng các biện pháp bảo đảm độ tin cậy được nhấn mạnh
Tổng quan
Trong blog của mình, Jay đề cập đến tác động của công nghệ tạo mã dựa trên LLM (mô hình ngôn ngữ lớn) mới xuất hiện gần đây đối với thực tiễn phát triển phần mềm. Dù sự phát triển của các công cụ này giúp nâng cao hiệu quả phát triển, các vấn đề về độ tin cậy và chất lượng của mã cũng đồng thời nổi lên.
Sự trỗi dậy của công nghệ tạo mã bằng LLM
- Các công cụ tự động tạo mã sử dụng LLM đang lan rộng nhanh chóng trong môi trường phát triển
- Chúng mang lại năng suất cao trong việc triển khai các tính năng phức tạp hoặc các tác vụ lập trình lặp đi lặp lại
- Có ưu điểm là hỗ trợ tạo nguyên mẫu nhanh và giảm gánh nặng khi học ngôn ngữ mới
Vấn đề về độ tin cậy
- Xuất hiện tình trạng mã do LLM tạo ra không phải lúc nào cũng hoạt động đúng như mong muốn
- Ý đồ và logic thiết kế bên trong mã không rõ ràng, khiến quá trình hiểu và kiểm chứng trở nên khó khăn
- Nếu quy trình review và kiểm thử không đầy đủ, có thể phát sinh lỗi hoặc lỗ hổng ngoài dự kiến
Bảo trì dự án và tác động đến hệ sinh thái
- Phát sinh vấn đề thiếu tài liệu hóa và giải thích chưa đầy đủ đối với mã được tạo tự động
- Các nhà phát triển gặp khó khăn trong việc nắm bắt nguyên lý hoạt động của mã, làm tăng độ phức tạp của bảo trì
- Có nguy cơ làm suy yếu văn hóa phát triển phần mềm đáng tin cậy
Kết luận và đề xuất
- Công nghệ tạo mã dựa trên LLM mang tính đổi mới, nhưng việc bảo đảm độ tin cậy là nhiệm vụ thiết yếu
- Khi áp dụng mã được tạo tự động, cần nhấn mạnh việc tăng cường kiểm chứng và review mã có hệ thống
- Về lâu dài, việc xây dựng các tiêu chuẩn để bảo vệ niềm tin trong hệ sinh thái điện toán là rất quan trọng
1 bình luận
Ý kiến Hacker News
Chia sẻ liên kết archive.is, chạy được cả trên trình duyệt cũ và chỉ cần JavaScript để vượt CloudSnare
Một người bạn của tôi hay nói rằng "đổi mới diễn ra với tốc độ của niềm tin". Từ sau khi GPT3 xuất hiện, câu này cứ lởn vởn trong đầu tôi. Việc xác minh rất tốn kém, và niềm tin là phương tiện chủ yếu để giảm chi phí đó. Nhưng tôi không biết phải xây dựng niềm tin với LLM như thế nào. Nó vừa code vừa dùng ngôn ngữ tự nhiên rất trôi chảy, nhưng đồng thời cũng lạc hướng theo cách mà nếu là con người thì có thể bị xem là ác ý
Tôi từng trải nghiệm chủ đề này ở công ty theo một cách không ngờ. Vì áp lực phải ra kết quả nhanh, một đồng nghiệp đã merge bản refactor lớn tôi làm dù nó mới ở trạng thái PR tạm thời. Sau đó bug xuất hiện trong đoạn mã chưa được test. Trong lúc debug, đồng nghiệp thú nhận rằng anh ấy tưởng tôi đã code bằng AI, và thấy bực khi phải cố hiểu đoạn mã do AI tạo ra sau khi sự việc đã rồi. Nhưng thực ra đó là mã tôi tự viết rất cẩn thận, và bug chỉ đến từ những sai sót nhỏ trong quá trình thay đổi API đơn giản. Trái lại, trải nghiệm này lại giúp tôi và đồng nghiệp tự nhiên bộc lộ được sự căng thẳng liên quan đến niềm tin và có một cuộc trao đổi mang tính xây dựng. Nhìn lại, đây là một trải nghiệm xây dựng niềm tin khá có ý nghĩa, và nếu bối cảnh khác đi thì có lẽ mọi thứ đã rối rắm hơn nhiều. Cảm giác như lúc nào cũng phải cẩn thận
Tôi không thật sự hiểu tiền đề ở đây. Niềm tin rằng ai đó viết code tốt đến từ kinh nghiệm thực tế rằng người đó tự code và cho ra kết quả tốt. Dùng LLM mà vẫn luôn tạo ra code không lỗi thì tôi tin, dùng LLM mà có lỗi thì tôi không tin. Tôi không thấy nó khác gì so với khi họ chỉ tự dùng đầu óc để viết
Thời đại đó đã đến rồi. Tôi thấy quá nhiều câu như "xin lỗi vì đã bỏ sót điểm này, bạn nói đúng". Chắc phải 8 hoặc 9 trên 10 lần tôi đều thấy kiểu đó. Mặt khác, tôi cũng thường thấy người ta copy-paste vô nghĩa đoạn code LLM tạo ra rồi nổi giận vì nó không như kỳ vọng. Thật ra như thế còn tốt hơn. Tôi nghĩ một thứ hỏng rõ ràng còn tốt hơn thứ nhìn bề ngoài có vẻ đúng
Các công cụ trừu tượng hóa trước đây vừa giảm độ phức tạp vừa mặc định lấy "tính đúng đắn" của lớp trừu tượng làm tiền đề. Tất nhiên không hoàn hảo, cũng có bug, nhưng đó là lỗi của implementation chứ không phải sai sót mang tính bản chất. Một khi đã vá thì nó có xu hướng vững hơn. Ngược lại, LLM là cỗ máy dự đoán xác suất nên chỉ cho độ chính xác gần đúng trong một khoảng thời gian nhất định. Điểm mà tác giả dường như bỏ qua là ta vẫn có thể xây dựng hệ thống quyết định đáng tin cậy từ các agent xác suất không hoàn hảo. Ví dụ, ta tin công cụ garbage collection không phải vì tin tác giả của nó, mà vì công cụ đã được test đủ để chứng minh nó hoạt động đúng như mong muốn. Trong tương lai có lẽ phát triển hướng kiểm thử sẽ mạnh hơn. Không phải niềm tin, mà là xác minh
Sự phản cảm với LLM chẳng có ích gì. Hiện tại LLM làm tăng năng suất của lập trình viên. Ít nhất thì càng hữu ích hơn với người ít kinh nghiệm. Một công cụ làm tăng năng suất mạnh như vậy sẽ không bị từ bỏ chỉ vì người khác phản đối. Dĩ nhiên, kể cả khi có thiệt hại như bug lớn khiến dịch vụ lớn sập lâu dài, nếu năng suất vẫn quan trọng thì công nghệ cũng không dừng lại. Cách thực tế duy nhất là đi cùng công nghệ và giải quyết (giảm nhẹ) điểm yếu của nó. Trong quá trình đó, nếu biện pháp giảm nhẹ làm hại mức tăng năng suất thì người ta sẽ tìm cách lách, và những biện pháp bổ sung hài hòa với công nghệ sẽ dần ổn định
Thay vì các chính sách như "cam kết rằng mã đóng góp không phải sản phẩm của LLM, là nguyên bản và đã được hiểu hoàn toàn" hay "yêu cầu chủ yếu làm thủ công", ta nên chỉ tập trung vào kết quả. Yêu cầu người đóng góp phải hiểu kỹ thay đổi của mình là điều tốt. Nhưng các chính sách kiểu "junior phải hạn chế hoặc cấm dùng công cụ LLM trong một thời gian" thì không ổn lắm. LLM rất hữu ích cho vấn đề setup môi trường onboarding vốn lộn xộn. Ngoài ra còn tốt để nắm bắt code/tài liệu, và là công cụ tìm kiếm văn bản, tóm tắt khá hữu dụng
Đây là lần đầu tôi nghe khái niệm "AI Cliff" (hiện tượng độ chính xác của LLM đột ngột sụt mạnh). Không biết người khác có từng gặp chưa
Bài gốc nói sẽ không tóm tắt ý kiến của nhiều người, nhưng có vẻ thực tế lại đang làm như vậy. Dù sao thì tôi cũng muốn trong PR có đánh dấu file nào chứa code do AI tạo. Kiểu lỗi của code LLM và code con người khác nhau, nên nếu review theo cách phân biệt được thì có thể tiết kiệm thời gian. Không biết ai từng trải nghiệm chính sách như vậy trong tổ chức lớn chưa, hoặc đã có công cụ tự động nào làm chuyện này chưa. Nếu các công ty đang đo tỷ lệ mã do LLM tạo thì có lẽ để lấy metric chi tiết họ đã có công cụ như thế rồi