Chương 1 Giới thiệu đề tài Trong chương này, học viên xin biện luận về lý do thực hiện đề tài, giới thiệu Hệ thống sinh mã tự động, làm rõ mục tiêu và giới hạn phạm vi của đề tài. Đồng thời trình bày những đóng góp đã đạt được cùng nội dung tóm tắt của các chương luận văn 1.1 Giới thiệu chung Trong bối cảnh công nghệ phần mềm đang phát triển vượt bậc, trí tuệ nhân tạo đã và đang trở thành một yếu tố quan trọng và mang lại nhiều tiềm năng trong lĩnh vực này. Theo thống kê, năm 2024 sẽ có khoảng 28,7 triệu lập trình viên trên toàn thế giới, và số lượng này đang tăng lên hơn 1 triệu lập trình viên mỗi năm [3]. Sự gia tăng này chứng tỏ tầm quan trọng của lập trình và nhu cầu ngày càng tăng, cả về số lượng lẫn chất lượng của lập trình viên.
Việc phát triển mã nguồn sao cho dễ dàng, hiệu quả và năng suất, từ đó, dần thu hút được nhiều sự quan tâm và trở thành một trong những ưu tiên hàng đầu. Đặc biệt là khi lĩnh vực trí tuệ nhân tạo đã và đang đạt được nhiều bước đột phá lớn trong vài năm gần đây, giúp máy móc có thể hiểu được ngôn ngữ tự nhiên một cách rất phổ quát. Điều này nhận được nhiều kỳ vọng từ cộng đồng về việc xây dựng những hệ thống hỗ trợ các tác vụ lập trình, giúp giảm thời gian và công sức của lập trình viên trong việc phát triển mã nguồn, cải thiện năng suất làm việc và giúp họ tập trung nâng cao chất lượng của các ứng dụng phần mềm. Trí tuệ nhân tạo và sự phát triển của cộng đồng lập trình viên đang cùng nhau tạo nên một bức tranh lớn trong công nghệ phần mềm hiện đại.
Sự kết hợp này mang lại tiềm năng trong 1 việc tăng năng suất phát triển mã nguồn và cung cấp cho lập trình viên các công cụ thông minh để tạo ra nhiều ứng dụng phần mềm tiên tiến và hiệu quả hơn. Hơn thế nữa, nó còn đưa việc lập trình tiếp cận được nhiều tập đối tượng. Giúp những lập trình viên mới tự tin trên con đường của mình khi mã nguồn dự án, các thư viện hay ngôn ngữ lập trình ngày càng trở nên đa dạng và phức tạp. Giúp được cả những người ngoài mảng lập trình trong công việc chuyên ngành của họ với bối cảnh công nghệ thông tin đang dần trở nên thiết yếu trong mọi ngành nghề Trên thực tế, các mô hình ngôn ngữ lớn như ChatGPT của OpenAI [4], đang tạo nên cơn sốt trên thế giới.
Chỉ sau hai tháng ra mắt, ChatGPT đã thu hút hơn 100 triệu người dùng, trở thành ứng dụng internet phát triển nhanh nhất trong lịch sử (theo The Guardian, 2023 [5]). Tương tự, Copilot của Microsoft, một mô hình được thiết kế cho việc hỗ trợ lập trình, đã thu hút hơn 1 triệu lập trình viên chuyên nghiệp sử dụng (theo Euronews, 2023, [6]) và có thể tăng tốc các tác vụ lập trình lên đến 55% [7]. Đây là những công cụ mới đầy hứa hẹn để tăng năng suất lập trình, được dự đoán sẽ có tác động đáng kể đến lực lượng lao động trong những năm sắp tới [8].2 Tổng quan về Hệ thống sinh mã tự động Bài toán sinh mã tự động là một trong những bài toán quan trọng trong lĩnh vực trí tuệ nhân tạo và phát triển phần mềm, với mục đích nhằm tạo ra một cách tự động các đoạn mã máy dựa trên yêu cầu và mô tả từ ngôn ngữ tự nhiên của người dùng. Việc giải quyết bài toán này mang lại rất nhiều lợi ích, chẳng hạn như giúp việc lập trình trở nên dễ dàng hơn, tăng cường hiệu suất và độ chính xác của quá trình phát triển phần mềm, giảm thời gian và công sức cần thiết để viết mã, đảm bảo tính nhất quán và đúng đắn của các đoạn mã được sinh ra.
Việc sinh mã không chỉ mang lại lợi ích khi chúng ta 2 cần lời giải cho một bài toán, mà còn dùng để kiểm chứng, học hỏi thêm từ nhiều khía cạnh và cách giải quyết khác nhau.1: Tình huống thực tế cho Bài toán sinh mã tự động Hình 1.2: Kết quả sinh mã cho bài toán sinh logo với mô hình kiến thức tổng quát [5.4] 3 Yêu cầu: Sinh mã cho thành phần nút bấm màu trắng, viền xanh dương, hình tròn và có một logo hcmut ở giữa, sử dụng tailwinds, style inline Hình 1.3: Kết quả giải thích mã cho bài toán sinh logo với mô hình kiến thức tổng quát [5.4] Có không ít những phương pháp cổ điển đã được nghiên cứu để cố gắng giải quyết bài toán này [2.1], tuy nhiên chúng đều không mang lại hiệu quả cao. Đa số phương pháp cổ điển đều gặp phải một vấn đề cố hữu chung của những mô hình (template) đã được định nghĩa cứng, đó là chúng không giải quyết được bài toán một cách tổng quát với sự biến đổi của ngôn ngữ tự nhiên. Với bước đột phá của trí tuệ nhân tạo trong vài năm trở lại đây, cụ thể là những mô hình ngôn ngữ lớn (large language models) và các phương pháp tinh chỉnh tham số (fine-tuning methods), máy móc đã có khả năng hiểu được ngôn ngữ tự nhiên một cách phổ quát. Cuộc cách mạng này đã mở đường cho nhiều nhánh nghiên cứu trong lĩnh vực ngôn ngữ tự nhiên nói chung, và lĩnh vực sinh mã máy tự động dựa trên yêu cầu cụ thể nói riêng.
4 Để sinh được mã nguồn một cách tự động bằng việc vận dụng những đột phá mới của trí thông minh nhân tạo, các mô hình hiện đại dùng để giải quyết bài toán sinh mã thường phải được học từ rất nhiều kiến thức, hàng tỉ những đoạn mã được thu thập từ khắp nơi trên mạng. Điều đó giúp cho hệ thống có được một trí thông minh tổng quát để nhìn nhận và xử lý yêu cầu từ người dùng, giải quyết được vấn đề mà các phương pháp cổ điển gặp phải. Mặc dù vậy, trong thực tế, nhu cầu thực tiễn về việc phát triển mã nguồn cho những dự án có tính đặc thù cao, đi kèm với những yếu tố bảo mật nghiêm ngặt vẫn còn là một thách thức lớn.4: Tình huống thực tế sinh mã với yêu cầu đặc thù Bởi vì, nếu không sử dụng mã nguồn và kiến thức của dự án đặc thù, hệ thống sẽ không có khả năng để sinh ra những đoạn mã thỏa mãn yêu cầu phức tạp trong thực tế. Kể cả khi tổ chức hay cá nhân đó cố gắng huấn luyện lại mô hình ngôn ngữ lớn trên tập mã nguồn dự án của riêng họ, điều này cũng không mấy khả thi.
Thứ nhất, việc huấn luyện mô hình ngôn ngữ lớn đòi hỏi một hạ tầng phần cứng đủ mạnh mà tổ chức hay cá nhân đơn lẻ khó có thể đảm bảo. Thứ hai, thời gian huấn luyện thường sẽ khá đáng kể. Và cuối cùng, kết quả của việc huấn luyện là một bộ trọng số rất lớn, sẽ tốn nhiều không gian để lưu trữ cũng như tài nguyên để vận hành. Điều đó cũng có nghĩa tài nguyên và công sức bỏ ra để huấn luyện nhiều dự án khác 5 nhau sẽ bị lãng phí không cần thiết trong khi người dùng chỉ cần mô hình hoạt động tốt trên một vài dự án đặc thù vừa và nhỏ.
Ngược lại, nếu chỉ tập trung huấn luyện trên những dự án đặc thù ngay từ đầu chúng ta lại không tận dụng được khối kiến thức tổng quát mà mô hình ngôn ngữ lớn đem lại, dẫn đến mã nguồn được sinh ra với chất lượng không cao. Như vậy, học viên nhận định việc sinh mã máy tự động tuy có thể hoạt động tốt với những yêu cầu tổng quát bằng việc áp dụng các mô hình ngôn ngữ lớn, song vẫn còn nhiều thách thức khi vận dụng vào từng dự án cụ thể và đặc thù Để giải quyết những thách thức đó, trong ít năm gần đây, rất nhiều nghiên cứu đã tích cực trong việc tìm ra phương pháp để tinh chỉnh mô hình ngôn ngữ lớn bằng các phương pháp tối ưu tham số. Các phương pháp này hầu hết đều có chung một mục đích, đó là vận dụng khối kiến thức tổng quát vào các bài toán đặc thù trong điều kiện phần cứng hạn chế mà vẫn giữ được độ hiệu quả và chính xác tương đương. Luận văn của học viên cũng sẽ vận dụng cách tiếp cận này.
Hệ thống sinh mã tự động là tên gọi chung cho lớp các bài toán liên quan đến việc sinh ra mã nguồn tự động dựa trên những yêu cầu đặc tả của người dùng. Có thể chia Hệ thống sinh mã thành các ba nhóm công việc chính: học kiến thức từ dữ liệu đầu vào (learning), sinh mã máy tự động (generating) và phân tích kết quả đầu ra (analyzing) Ở giai đoạn học dữ liệu đầu vào, mục tiêu của hệ thống là học được những kiến thức, quy tắc và mô hình từ các yêu cầu đặc tả cho trước hay từ mã nguồn của các dự án thực tế mà người dùng cung cấp. Bằng việc ứng dụng những đột phá của trí tuệ nhân tạo thời gian gần đây, như các mô hình học sâu, mô hình ngôn ngữ lớn, việc trí thông minh nhân tạo hiểu bộ dữ liệu mã nguồn đầu vào đang ngày càng được cải thiện tốt hơn. Tiếp sau đó là quá trình sinh mã máy tự động, dựa vào yêu cầu cụ thể của người dùng mà hệ 6 Hình 1.5: Phân loại Hệ thống sinh mã tự động thống sẽ đề xuất, gợi ý những đoạn mã máy phù hợp với yêu cầu đó.
Đây là một nhu cầu rất thực tiễn khi lập trình. Cuối cùng, hệ thống có thể tiếp tục hậu xử lý kết quả vừa được tự động sinh ra. Ví dụ như tác vụ giải thích ý nghĩa của đoạn mã nguồn này, hệ thống hóa câu trúc, tự sinh ra các phương thức kiểm thử về tính đúng đắn của kết quả,. Mỗi công việc trong Hệ thống sinh mã tự động trên đều là một lĩnh vực đang rất thu hút và được cộng đồng nghiên cứu tích cực.
Chúng thường được chia thành các công việc riêng biệt và người phát triển mô hình thường phải huấn luyện hoặc tinh chỉnh các mô hình khác nhau cho từng công việc. Tuy nhiên, với công cụ tinh chỉnh có hướng dẫn sẽ được học viên trình bày ở phần 3.5, công việc sinh mã tự động và giải thích ý nghĩa đoạn mã sẽ được huấn luyện chung chỉ trong một mô hình công việc (downstream model) mà luận văn xây dựng. 7 Hệ thống sinh mã tự động hiện nay là một cuộc chạy đua của không chỉ giữa những nhà nghiên cứu cá nhân, mà còn của cả những công ty tập đoàn công nghệ lớn trên thế giới.