Chính xác thì ChatGPT giỏi lập trình đến đâu?

Kiều My

Editor
Thành viên BQT
Các lập trình viên đã dành hàng thập kỷ để viết code cho các mô hình AI, và giờ đây, khi vòng quay đảo chiều, AI đang được sử dụng để viết code. Nhưng một trình tạo coe AI so với một lập trình viên là con người như thế nào?

Một nghiên cứu được công bố trên tạp chí IEEE Transactions on Software Engineering số tháng 6 đã đánh giá code do ChatGPT của OpenAI tạo ra về chức năng, độ phức tạp và bảo mật. Kết quả cho thấy ChatGPT có phạm vi thành công cực kỳ rộng khi tạo ra code hàm chức năng — với tỷ lệ thành công dao động từ mức thấp 0,66% đến mức tốt 89% — tùy thuộc vào độ khó của nhiệm vụ, ngôn ngữ lập trình và một số yếu tố khác.

1720401380814.png


Mặc dù trong một số trường hợp, trình tạo AI có thể tạo ra code tốt hơn con người, nhưng phân tích cũng cho thấy một số lo ngại về bảo mật với code do AI tạo ra.

Yutian Tang là giảng viên tại Đại học Glasgow, người đã tham gia vào nghiên cứu này. Ông lưu ý rằng tạo code dựa trên AI có thể mang lại một số lợi thế về việc nâng cao năng suất và tự động hóa các tác vụ phát triển phần mềm — nhưng điều quan trọng là phải hiểu rõ điểm mạnh và hạn chế của các mô hình này.

“Bằng cách tiến hành phân tích toàn diện, chúng ta có thể phát hiện ra các vấn đề và hạn chế tiềm ẩn phát sinh trong quá trình tạo code dựa trên ChatGPT... [và] cải thiện các kỹ thuật tạo,” Tang giải thích.

Để khám phá những hạn chế này chi tiết hơn, nhóm của ông đã tìm cách kiểm tra khả năng giải quyết 728 bài toán lập trình từ nền tảng kiểm tra LeetCode của GPT-3.5 bằng năm ngôn ngữ lập trình: C, C++, Java, JavaScript và Python.

Nhìn chung, ChatGPT khá giỏi trong việc giải quyết các vấn đề bằng các ngôn ngữ lập trình khác nhau — nhưng đặc biệt là khi cố gắng giải quyết các vấn đề đã tồn tại trên LeetCode trước năm 2021. Ví dụ: nó có thể tạo ra code hàm chức năng cho các vấn đề dễ, trung bình và khó với tỷ lệ thành công lần lượt là khoảng 89, 71 và 40%.

“Tuy nhiên, khi nói đến các bài toán thuật toán sau năm 2021, khả năng tạo code chính xác về mặt chức năng của ChatGPT bị ảnh hưởng. Đôi khi nó không hiểu được ý nghĩa của câu hỏi, ngay cả đối với những bài toán ở mức độ dễ,” Tang lưu ý.

Ví dụ: khả năng tạo ra code của ChatGPT cho các bài toán lập trình “dễ” đã giảm từ 89% xuống 52% sau năm 2021. Và khả năng tạo ra mã chức năng cho các bài toán “khó” cũng giảm từ 40% xuống 0,66% sau thời điểm này.

“Một giả thuyết hợp lý cho lý do tại sao ChatGPT có thể làm tốt hơn với các bài toán thuật toán trước năm 2021 là những bài toán này thường xuyên xuất hiện trong bộ dữ liệu đào tạo,” Tang nói.

Về cơ bản, khi lập trình phát triển, ChatGPT vẫn chưa được tiếp xúc với các vấn đề và giải pháp mới. Nó thiếu kỹ năng tư duy phản biện của con người và chỉ có thể giải quyết các vấn đề mà nó đã gặp phải trước đây. Điều này có thể giải thích tại sao nó lại giỏi hơn nhiều trong việc giải quyết các bài toán lập trình cũ hơn so với các bài toán mới hơn.

Điều thú vị là ChatGPT có thể tạo ra mã với thời gian chạy và chi phí bộ nhớ nhỏ hơn ít nhất 50% so với các giải pháp của con người cho cùng một bài toán LeetCode.

Các nhà nghiên cứu cũng đã khám phá khả năng ChatGPT tự sửa lỗi lập trình sau khi nhận được phản hồi từ LeetCode. Họ đã chọn ngẫu nhiên 50 tình huống lập trình mà ChatGPT ban đầu tạo ra không chính xác, do nó không hiểu nội dung hoặc vấn đề cần giải quyết.

Mặc dù ChatGPT giỏi trong việc sửa lỗi biên dịch, nhưng nhìn chung nó không giỏi trong việc tự sửa lỗi.

“ChatGPT có thể tạo ra mã không chính xác vì nó không hiểu ý nghĩa của các bài toán thuật toán, do đó, thông tin phản hồi lỗi đơn giản này là không đủ,” Tang giải thích.

Các nhà nghiên cứu cũng phát hiện ra rằng mã do ChatGPT tạo ra có khá nhiều lỗ hổng, chẳng hạn như thiếu kiểm tra null, nhưng nhiều lỗ hổng trong số này có thể dễ dàng khắc phục. Kết quả của họ cũng cho thấy mã được tạo bằng C là phức tạp nhất, tiếp theo là C++ và Python, có độ phức tạp tương tự như mã do con người viết.

Tangs cho biết, dựa trên những kết quả này, điều quan trọng là các nhà phát triển sử dụng ChatGPT phải cung cấp thêm thông tin để giúp ChatGPT hiểu rõ hơn các vấn đề hoặc tránh các lỗ hổng.

“Ví dụ: khi gặp phải các bài toán lập trình phức tạp hơn, nhà phát triển có thể cung cấp càng nhiều kiến thức có liên quan càng tốt và cho ChatGPT biết trong lời nhắc nên lưu ý những lỗ hổng tiềm ẩn nào,” Tang nói.
 


Đăng nhập một lần thảo luận tẹt ga
Thành viên mới đăng
Top