- Vào năm 2019, hầu hết kỹ sư phần mềm vẫn khó hình dung machine learning có thể giúp gì cho công việc của họ
- Nhưng đến năm 2024, sự hào hứng về cách AI hỗ trợ viết mã đã trở nên phổ biến rộng rãi
- Nhiều kỹ sư đã thử tính năng tự động hoàn thành dựa trên ML trong các công cụ nội bộ của công ty hoặc sản phẩm thương mại
- Bài viết này giới thiệu những cải tiến mới nhất dựa trên AI trong bối cảnh các công cụ phát triển phần mềm nội bộ của Google liên tục thay đổi
- Đồng thời cũng bàn về những thay đổi bổ sung được kỳ vọng trong 5 năm tới
- Bài viết cũng đưa ra phương pháp xây dựng sản phẩm AI mang lại giá trị cho phát triển phần mềm chuyên nghiệp
- Nhóm này phụ trách môi trường phát triển phần mềm nơi các kỹ sư Google dành phần lớn thời gian, như IDE, code review và code search
- Điều này cho thấy các cải tiến như vậy có thể tác động trực tiếp đến năng suất và mức độ hài lòng của lập trình viên
Thách thức
- Vì công nghệ AI đang tiến hóa rất nhanh, một thách thức thường trực trong lĩnh vực này là khó dự đoán ý tưởng nào nên được khám phá trước
- Thường tồn tại khoảng cách đáng kể giữa một bản demo khả thi về mặt kỹ thuật và việc sản phẩm hóa thành công
- Có ba nguyên tắc định hướng cho cách tiếp cận đưa ý tưởng vào sản phẩm:
- Ưu tiên theo tính khả thi kỹ thuật và mức độ tác động: tập trung vào những ý tưởng đã chứng minh được tính khả thi kỹ thuật và được kỳ vọng sẽ tạo ra tác động cao, có thể đo lường, lên quy trình làm việc của kỹ sư
- Học hỏi nhanh để cải thiện UX và chất lượng mô hình: tập trung vào việc lặp nhanh và rút ra bài học trong khi vẫn bảo vệ năng suất và sự hài lòng của lập trình viên. Trải nghiệm người dùng quan trọng không kém chất lượng mô hình
- Đo lường hiệu quả: vì mục tiêu là nâng cao các chỉ số về năng suất và mức độ hài lòng, cần giám sát rộng rãi các chỉ số này
Ứng dụng LLM vào phát triển phần mềm
- Cùng với sự xuất hiện của kiến trúc transformer, Google bắt đầu tìm cách áp dụng LLM vào phát triển phần mềm
- Tính năng hoàn thành mã inline dựa trên LLM là ứng dụng AI phổ biến nhất trong phát triển phần mềm
- Việc dùng chính mã nguồn làm dữ liệu huấn luyện là một ứng dụng tự nhiên của công nghệ LLM
- UX cũng mang lại cảm giác tự nhiên cho lập trình viên, vì tự động hoàn thành ở cấp độ từ từ lâu đã là tính năng cốt lõi của IDE
- Có thể ước lượng tác động ở mức tương đối, chẳng hạn tỷ lệ ký tự mới được AI viết ra
- Vì những lý do đó, việc triển khai ứng dụng LLM này đầu tiên là hợp lý
- Một bài blog trước đó đã giải thích cách cải thiện trải nghiệm người dùng với tính năng hoàn thành mã và cách đo lường tác động
- Kể từ đó, mức tăng trưởng nhanh liên tục vẫn tương tự như trong các môi trường doanh nghiệp khác
- Tỷ lệ chấp nhận của kỹ sư phần mềm là 37%, và công cụ này giúp hoàn thành 50% số ký tự mã
- Các cải tiến chính đến từ cả mô hình lẫn UX
- Chu kỳ này là thiết yếu để học từ hành vi thực tế thay vì các công thức tổng hợp
- Google cải thiện các tính năng AI cho công cụ lập trình như IDE bằng cách tận dụng dữ liệu nhật ký từ nhiều công cụ khác nhau và dữ liệu sử dụng phản ánh sở thích cũng như nhu cầu của người dùng
- Tỷ lệ mã được tạo ra với hỗ trợ AI vẫn tiếp tục tăng đều
- Chỉ số này được định nghĩa là số ký tự được chấp nhận từ gợi ý AI chia cho tổng của số ký tự gõ thủ công và số ký tự được chấp nhận từ gợi ý AI
- Điều đáng lưu ý là các ký tự đến từ thao tác copy-paste không được tính vào mẫu số
- Google sử dụng khối lượng lớn log chất lượng cao về hoạt động kỹ nghệ phần mềm nội bộ đã được tuyển chọn trong thời gian dài từ nhiều công cụ
- Dữ liệu này cho phép biểu diễn chỉnh sửa mã chi tiết, kết quả build, các chỉnh sửa để xử lý lỗi build, thao tác copy-paste mã, chỉnh sửa trên mã được dán, code review, chỉnh sửa để xử lý vấn đề do reviewer nêu ra, và gửi thay đổi vào repository
- Dữ liệu huấn luyện là một tập mã đã được căn chỉnh với chú thích theo từng tác vụ ở cả đầu vào và đầu ra
- Đợt triển khai quan trọng tiếp theo là xử lý nhận xét trong code review (hiện hơn 8% được xử lý bằng hỗ trợ AI) và tự động điều chỉnh đoạn mã được dán cho phù hợp với ngữ cảnh xung quanh (hiện chiếm khoảng 2% mã trong IDE)
- Các triển khai bổ sung bao gồm ra lệnh cho IDE chỉnh sửa mã bằng ngôn ngữ tự nhiên và dự đoán bản sửa cho lỗi build
- Các ứng dụng khác cũng khả thi, chẳng hạn dự đoán các gợi ý cải thiện độ dễ đọc của mã theo các mẫu tương tự
- Tổng thể, các ứng dụng đã triển khai này là những ứng dụng thành công và được sử dụng nhiều tại Google, đồng thời tạo ra tác động năng suất có thể đo lường trong môi trường công nghiệp thực tế
Những điều rút ra
- Từ công việc đến nay, Google đã học được một số điều:
- UX hòa nhập tự nhiên vào quy trình làm việc của người dùng sẽ tạo ra tác động lớn nhất. Trong tất cả ví dụ ở trên, gợi ý được hiển thị cho người dùng để họ chuyển sang bước tiếp theo trong quy trình chỉ với một lần chạm hoặc nhấp. Những thử nghiệm yêu cầu người dùng phải nhớ tự kích hoạt tính năng đã không thể mở rộng
- Google quan sát thấy với các gợi ý AI, người viết mã ngày càng trở thành người review. Việc tìm điểm cân bằng giữa chi phí review và giá trị bổ sung là rất quan trọng. Thông thường, sự đánh đổi này được giải quyết bằng mục tiêu về tỷ lệ chấp nhận
- Vì các chỉ số offline thường chỉ là đại diện gần đúng cho giá trị người dùng, lặp nhanh thông qua thử nghiệm A/B online là chìa khóa. Việc đưa các tính năng AI vào công cụ nội bộ mang lại lợi thế lớn vì có thể dễ dàng phát hành và lặp lại, đo dữ liệu sử dụng và trực tiếp hỏi người dùng về trải nghiệm qua nghiên cứu UX
- Dữ liệu chất lượng cao từ hoạt động của kỹ sư Google trên toàn bộ công cụ phần mềm, bao gồm cả tương tác với các tính năng này, là yếu tố thiết yếu đối với chất lượng mô hình
- Khi tận dụng cải tiến về UX và mô hình để loại bỏ các điểm nghẽn ở bước trung gian, điều quan trọng là tối ưu chuyển đổi từ cơ hội (chủ yếu là hoạt động người dùng, hiển thị ở phía trên phễu bên dưới) sang tác động (hỗ trợ AI được áp dụng, ở đáy phễu)
What's Next
- Được khích lệ bởi những thành công đến nay, Google đang tập trung kết hợp các mô hình nền tảng mới nhất (dòng Gemini) với dữ liệu dành cho nhà phát triển (một phần của DIDACT đã đề cập ở trên) để hỗ trợ các ứng dụng hiện có và mới trong việc áp dụng ML vào kỹ nghệ phần mềm tại Google
- Trên toàn ngành, tính năng hoàn thành mã dựa trên ML đã mang lại hỗ trợ lớn cho lập trình viên
- Dù vẫn còn cơ hội để cải thiện việc sinh mã, Google kỳ vọng làn sóng lợi ích tiếp theo sẽ đến từ hỗ trợ ML cho các hoạt động kỹ nghệ phần mềm rộng hơn như kiểm thử, hiểu mã và bảo trì mã
- Điều sau đặc biệt được quan tâm trong môi trường doanh nghiệp
- Những cơ hội này cũng đang cung cấp thông tin đầu vào cho công việc đang diễn ra của Google
- Google nhấn mạnh hai xu hướng có thể thấy trong ngành:
- Tương tác người-máy tính đang dịch chuyển sang ngôn ngữ tự nhiên như một phương thức chung, theo hướng dùng ngôn ngữ làm giao diện cho các tác vụ kỹ nghệ phần mềm và làm cổng truy cập cho nhu cầu thông tin của lập trình viên được tích hợp trong IDE
- Tự động hóa quy mô lớn dựa trên ML cho các tác vụ, từ chẩn đoán vấn đề đến áp dụng bản sửa, đã bắt đầu cho thấy bằng chứng về tính khả thi ban đầu
- Khả năng này được thúc đẩy bởi đổi mới trong agent và việc sử dụng công cụ, cho phép xây dựng các hệ thống dùng một hoặc nhiều LLM làm thành phần để thực hiện các tác vụ lớn hơn
- Để mở rộng các thành công nêu trên sang những tính năng thế hệ tiếp theo này, cộng đồng các practitioner và researcher nghiên cứu chủ đề này có thể hưởng lợi từ các benchmark chung, giúp dịch chuyển lĩnh vực theo hướng các tác vụ kỹ thuật mang tính thực tiễn
- Cho đến nay, các benchmark chủ yếu tập trung vào sinh mã (ví dụ: HumanEval)
- Tuy nhiên, trong môi trường doanh nghiệp, các benchmark cho những tác vụ rộng hơn như di chuyển mã và debug production có thể đặc biệt giá trị
- Các benchmark cho sửa lỗi (ví dụ: SWEBench) và các prototype nhắm tới những benchmark đó (ví dụ: Cognition AI) đã được công bố
- Google khuyến khích cộng đồng cùng nhau đề xuất thêm nhiều benchmark hơn để bao quát các tác vụ kỹ nghệ phần mềm rộng hơn
Ý kiến của GN⁺
- Sự tiến hóa nhanh của AI: Công nghệ AI đang phát triển rất nhanh, vì vậy việc liên tục học hỏi và áp dụng công nghệ mới là điều quan trọng.
- UX và chất lượng mô hình: Trải nghiệm người dùng và chất lượng mô hình là những yếu tố then chốt quyết định thành công của công cụ AI.
- Tầm quan trọng của dữ liệu: Dữ liệu chất lượng cao ảnh hưởng rất lớn đến hiệu năng của mô hình AI.
- Khả năng trong tương lai: AI có tiềm năng đóng vai trò lớn hơn trong nhiều khía cạnh của kỹ nghệ phần mềm.
- Xu hướng ngành: Giao diện ngôn ngữ tự nhiên và tự động hóa các tác vụ quy mô lớn sẽ dẫn dắt tương lai của phát triển phần mềm.
1 bình luận
Ý kiến Hacker News
Khi được sử dụng đúng cách, AI đảm nhiệm hai vai trò: 1) tiết kiệm thời gian cho lập trình viên và giảm tải nhận thức bằng những chỉnh sửa không gây tranh cãi. 2) giúp người dùng trở nên thông minh hơn và hiểu biết hơn thông qua các đề xuất. Ví dụ, có những lúc tính năng tự động hoàn thành mã hoạt động rất tốt.
Có một nhận định thú vị rằng công cụ AI "không mở rộng được" khi người dùng phải tự kích hoạt tính năng. Đang suy nghĩ về cách AI trong IDE có thể được thiết kế để đưa ra các gợi ý hữu ích ở cấp độ thiết kế và ý tưởng khái niệm.
Đang quan sát hiện tượng người viết mã dần trở thành người đánh giá do các đề xuất dựa trên AI. Điều quan trọng là tìm được sự cân bằng giữa chi phí review và giá trị bổ sung.
Cảm thấy hữu ích khi dùng GPT-4 để tạo React UI và Python UI trong vài phút, rồi review mã để hiểu cách nó hoạt động.
Vì con người có RAM hữu hạn nên cần đưa ý tưởng ra các phương tiện bên ngoài. Các gợi ý của AI giúp đẩy nhanh giai đoạn ban đầu.
Không thể phủ nhận rằng LLMs (mô hình ngôn ngữ lớn) hữu ích cho lập trình. Thách thức then chốt là UX phù hợp để làm mọi thứ mượt mà hơn. Đã thử dùng tính năng tự động hoàn thành nhưng tắt đi vì phần lớn các gợi ý không tốt.
Cảm thấy dùng ứng dụng desktop của ChatGPT để hỏi về mã hữu ích hơn. Tuy nhiên, việc phải giải thích chi tiết mỗi lần lại khá phiền.
Xu hướng tỷ lệ viết mã có hỗ trợ AI tăng lên tới 50% là điều đáng chú ý.
AI cho bạn biết cách thực hiện công việc được yêu cầu, nhưng không nói cho bạn biết đó là một ý tưởng tồi. Chất lượng của mã do ML tạo ra phụ thuộc vào dữ liệu huấn luyện.
Tò mò không biết sẽ mất bao lâu để AI hoàn toàn thay thế các kỹ sư phần mềm của Google.
Mục tiêu cuối cùng của AI là vận hành hệ thống, debug ứng dụng, quản lý kho dữ liệu và viết mã ứng dụng dựa trên phản hồi người dùng cùng mô tả yêu cầu.
Việc thử nghiệm các công cụ AI là tốt, nhưng việc người khác mù quáng sao chép có thể gây tác động tiêu cực. Khó tìm ra điểm bán hàng cốt lõi của việc viết mã bằng LLM.