← Posts

AI Software Engineer: Khi AI không còn chỉ biết viết code

AI đang đi từ chỗ gợi ý code sang nhận task, chạy test và tạo PR. Nhưng điều gì thực sự biến một Coding Agent thành AI Software Engineer?

Dạo gần đây, nếu thường xuyên sử dụng Codex hay Claude Code để lập trình, có lẽ bạn sẽ nhận thấy một sự thay đổi khá thú vị.

Trước đây, chúng ta hỏi AI cách viết một hàm, sửa một đoạn code hay giải thích một lỗi khó hiểu. Còn bây giờ, có thể giao cho AI cả một task: đọc repository, tìm hiểu logic hiện tại, lên kế hoạch, sửa code, chạy test và cuối cùng tạo Pull Request để mình review.

Từ một công cụ hỗ trợ viết code, AI đang dần trở thành một thành viên tham gia trực tiếp vào quá trình phát triển phần mềm.

Và đó cũng là lúc khái niệm AI Software Engineer bắt đầu trở nên đáng chú ý.

AI Software Engineer là gì?

Hiểu đơn giản, AI Software Engineer là một hệ thống AI có khả năng thực hiện nhiều công việc vốn thuộc về một kỹ sư phần mềm, thay vì chỉ sinh ra code từ câu lệnh của người dùng.

Ví dụ, bạn giao cho AI một yêu cầu:

Bổ sung tính năng đăng nhập bằng Google, đảm bảo không ảnh hưởng đến cơ chế đăng nhập hiện tại, viết thêm test và tạo PR.

Một Coding Assistant thông thường có thể hướng dẫn bạn thực hiện hoặc viết một vài đoạn code mẫu.

Trong khi đó, một AI Software Engineer được trang bị đầy đủ công cụ có thể tự đọc codebase, tìm những phần liên quan đến authentication, đề xuất phương án triển khai, chỉnh sửa nhiều file, chạy kiểm thử, xử lý lỗi phát sinh và chuẩn bị PR.

Điểm khác biệt nằm ở chỗ AI không chỉ trả lời mà còn thực hiện công việc.

Tất nhiên, làm được những việc này không có nghĩa AI đã trở thành một Software Engineer hoàn chỉnh như con người. Nhưng ranh giới giữa một công cụ hỗ trợ lập trình và một hệ thống có khả năng tự thực hiện công việc kỹ thuật đang ngày càng mờ đi.

Từ Coding Assistant đến AI Software Engineer

Nếu nhìn lại quá trình phát triển của các công cụ AI dành cho lập trình viên, có thể hình dung qua vài bước chuyển đổi.

Coding Assistant – AI hỗ trợ viết code

Đây là giai đoạn quen thuộc với GitHub Copilot và các công cụ gợi ý code. Developer vẫn là người điều khiển toàn bộ quá trình, còn AI giúp hoàn thành code, giải thích logic hoặc đề xuất cách giải quyết.

Coding Agent – AI bắt đầu tự làm việc

Với Codex hay Claude Code, AI không còn bị giới hạn ở một đoạn code trong editor. Nó có thể đọc nhiều file, sử dụng terminal, chỉnh sửa repository, thực thi lệnh và kiểm tra kết quả.

Developer đưa ra mục tiêu, còn agent có thể tự quyết định một số bước để hoàn thành mục tiêu đó.

Autonomous AI Software Engineer – AI nhận và thực hiện nhiệm vụ

Tháng 3/2024, Cognition giới thiệu Devin với cách gọi the first AI software engineer.

Điểm đáng chú ý của Devin không đơn thuần nằm ở khả năng viết code, mà ở cách sản phẩm được thiết kế để nhận một nhiệm vụ kỹ thuật, tự lập kế hoạch, sử dụng môi trường phát triển và thực hiện nhiều bước trước khi trả kết quả cho con người đánh giá.

Multi-Agent Software Engineering – Nhiều AI phối hợp làm việc

Một hướng khác là chia công việc cho nhiều agent với vai trò khác nhau: Planner phân tích yêu cầu, Developer triển khai, QA kiểm thử và Reviewer đánh giá kết quả.

Thay vì một AI làm tất cả, các agent phối hợp thành một quy trình phát triển phần mềm.

Các hướng phát triển từ Coding Assistant đến AI Software Engineer

Tuy nhiên, đây không hẳn là bốn thế hệ nối tiếp nhau. Một Coding Agent có thể được trao quyền tự chủ cao, còn hệ thống Multi-Agent chưa chắc đã hoạt động hiệu quả hơn một agent được thiết kế tốt.

Nhưng AI đã thực sự làm được công việc của Software Engineer chưa?

Câu trả lời có lẽ là: Đã làm được khá nhiều, nhưng vẫn còn khoảng cách.

Với những yêu cầu rõ ràng, chẳng hạn sửa bug, bổ sung API, viết unit test hay thay đổi một phần giao diện, các Coding Agent hiện nay đã có khả năng thực hiện phần lớn công việc trong nhiều trường hợp.

Nhưng khi bước vào những bài toán phức tạp hơn, vấn đề bắt đầu xuất hiện.

Một tính năng có thể chạy đúng test nhưng vẫn chưa đáp ứng nhu cầu người dùng. Một thay đổi nhỏ có thể ảnh hưởng đến những luồng nghiệp vụ khác. Một giải pháp trông hợp lý trong phạm vi một task lại chưa chắc phù hợp với kiến trúc dài hạn của hệ thống.

Chưa kể những thứ mà test khó bao phủ hết: khả năng bảo trì, hiệu năng thực tế, bảo mật, trải nghiệm người dùng và hàng loạt quyết định mang tính đánh đổi.

Đây cũng là lý do tôi nghĩ cần phân biệt giữa hoàn thành một coding task và chịu trách nhiệm cho một sản phẩm phần mềm.

Hai chuyện này liên quan với nhau, nhưng không hoàn toàn giống nhau.

Điều gì biến một AI biết viết code thành AI Software Engineer?

Một trong những điểm thú vị nhất là năng lực của AI Software Engineer không chỉ đến từ model.

Chúng ta thường chú ý đến model nào mạnh hơn, reasoning tốt hơn hay đạt điểm benchmark cao hơn. Nhưng trong thực tế, khả năng hoàn thành công việc còn phụ thuộc khá nhiều vào hệ thống được xây dựng xung quanh model.

Có thể hình dung:

AI Software Engineer = Model + Context + Tools + Harness + Verification

Trong đó:

  • Model: Năng lực suy luận, lập kế hoạch và sinh code.
  • Context: Hiểu repository, kiến trúc, tài liệu và các quy ước của dự án.
  • Tools: Có thể sử dụng terminal, Git, browser, hệ thống kiểm thử và các công cụ phát triển.
  • Harness: Điều phối quá trình làm việc, quản lý quyền hạn, môi trường thực thi, vòng lặp và xử lý lỗi.
  • Verification: Kiểm chứng kết quả thông qua test, code review, CI và các tiêu chí nghiệm thu.

Các thành phần tạo nên AI Software Engineer

Điều này giải thích vì sao cùng một model nhưng đặt vào hai Coding Agent khác nhau lại có thể mang đến trải nghiệm rất khác.

Một agent có thể sửa xong rồi tự chạy test, phát hiện lỗi và tiếp tục sửa. Agent khác cũng tạo ra đoạn code tương tự nhưng dừng lại ngay sau khi ghi file, rồi báo đã hoàn thành. :v

OpenAI cũng từng chia sẻ về hướng Harness Engineering, nơi kỹ sư tập trung nhiều hơn vào việc xây dựng môi trường, công cụ và những cơ chế kiểm chứng để agent có thể làm việc hiệu quả.

Nói cách khác, muốn AI làm việc giống một Software Engineer thì chỉ nâng cấp model thôi vẫn chưa đủ.

Vậy Software Engineer sẽ làm gì khi AI ngày càng tự chủ?

Đây có lẽ là câu hỏi thú vị hơn cả.

Khi AI đã có thể nhận task, viết code, chạy test và tạo PR, công việc của developer chắc chắn sẽ có những thay đổi.

Thay vì dành phần lớn thời gian để trực tiếp triển khai từng phần code, developer có thể chuyển sang tập trung nhiều hơn vào việc làm rõ yêu cầu, thiết kế kiến trúc, chia nhỏ công việc, thiết lập tiêu chí nghiệm thu và kiểm chứng kết quả.

Nhưng không có nghĩa những kiến thức lập trình truyền thống trở nên vô dụng.

Ngược lại, nếu không hiểu hệ thống, không có khả năng đánh giá thiết kế hoặc không biết một giải pháp đang sai ở đâu, chúng ta rất dễ chấp nhận một kết quả trông có vẻ đúng do AI tạo ra.

Tôi nghĩ vai trò của developer sẽ dần mở rộng từ người trực tiếp xây dựng phần mềm sang người thiết kế, điều phối và kiểm soát cả quá trình xây dựng phần mềm.

Và đây cũng là một trong những lý do các khái niệm như AI-Native Software Engineer hay AI Software Factory bắt đầu được nhắc đến nhiều hơn.

Một hướng phát triển đáng theo dõi

Điều khiến tôi tò mò nhất không phải là bao giờ AI có thể viết 100% code của một ứng dụng.

Mà là liệu chúng ta có thể xây dựng được một quy trình đủ tốt để giao phần lớn công việc kỹ thuật cho AI, trong khi vẫn đảm bảo chất lượng, khả năng kiểm soát và chi phí hợp lý hay không.

Ví dụ, một hệ thống có thể nhận issue từ GitHub, phân tích yêu cầu, triển khai, chạy test, kiểm tra giao diện, tạo PR, tiếp nhận phản hồi từ reviewer rồi tiếp tục sửa cho đến khi đạt yêu cầu.

Về mặt kỹ thuật, nhiều thành phần của quy trình này đã có thể thực hiện được. Nhưng kết nối chúng thành một hệ thống hoạt động ổn định trên những dự án thực tế vẫn là một bài toán không đơn giản.

Và không phải cứ bổ sung thêm agent, thêm model hay thêm một đống automation là mọi thứ sẽ tốt hơn.

Có khi phần khó nhất lại là xác định công việc nào nên giao cho AI, khi nào cần con người can thiệp và làm thế nào để biết kết quả thực sự đáng tin cậy.

Lời kết

AI Software Engineer không còn là một khái niệm chỉ xuất hiện trong các bản giới thiệu sản phẩm. Những công cụ như Devin, Codex hay Claude Code đã cho thấy AI có thể tham gia sâu vào quá trình phát triển phần mềm, vượt xa việc chỉ gợi ý một vài dòng code.

Dù vậy, khoảng cách từ một AI viết code tốt đến một hệ thống có thể tự đảm nhận công việc của Software Engineer vẫn còn khá nhiều thứ cần giải quyết.

Với tôi, câu hỏi đáng quan tâm lúc này không hẳn là AI có thay thế Software Engineer hay không.

Mà là:

Khi AI đã biết viết code, chúng ta cần xây dựng thêm những gì để nó thực sự có thể làm công việc của một Software Engineer?

Có lẽ câu trả lời sẽ nằm nhiều ở cách chúng ta thiết kế hệ thống và quy trình làm việc, chứ không chỉ ở việc chờ đợi một model thông minh hơn.


Tham khảo