Trợ lý AI viết mã là một mô hình ngôn ngữ lớn được gắn vào chỗ bạn làm việc với mã: trình soạn thảo, cửa sổ trò chuyện hoặc dòng lệnh. Nó đọc phần mã và lời dặn bạn đưa cho nó, rồi đoán ra đoạn mã hoặc câu trả lời có khả năng hợp nhất. Có ba dạng chính: gợi ý dòng kế tiếp ngay khi bạn gõ, trò chuyện để hỏi và nhờ viết từng đoạn, và tác tử tự đọc nhiều tệp, chạy lệnh, sửa mã rồi báo lại.
Ba dạng này dùng chung một loại công nghệ nhưng khác nhau ở chỗ AI được thấy bao nhiêu, được làm bao nhiêu và bạn phải kiểm bao nhiêu. Hiểu khác biệt đó giúp bạn chọn đúng dạng cho từng việc, thay vì kết luận vội rằng "AI viết mã giỏi" hay "AI viết mã toàn sai". Bài này giải thích ở mức người viết mã cần biết, không đi vào toán học của mô hình.
Bên trong mọi trợ lý viết mã là một mô hình đoán phần tiếp theo
Mô hình ngôn ngữ lớn được huấn luyện trên một lượng rất lớn văn bản và mã nguồn công khai. Trong quá trình đó, nó học cách đoán mẩu chữ tiếp theo (gọi là token) dựa trên mọi thứ đứng trước. Khi bạn gõ def tinh_tong_don_hang(, mô hình đã thấy hàng triệu hàm tương tự, nên nó đoán được rằng tiếp theo thường là danh sách tham số, rồi một vòng lặp cộng dồn, rồi lệnh trả về. Nó không chạy thử mã, không tra từ điển hàm; nó viết ra thứ giống mã đúng nhất theo những gì đã học.
Điểm này giải thích gần hết hành vi bạn sẽ gặp. Mã AI viết thường gọn, đúng phong cách, đặt tên hợp lý, vì đó là những thứ phổ biến trong dữ liệu học. Nhưng khi gặp chỗ hiếm, chỗ riêng của dự án bạn, hay thư viện mới ra sau khi mô hình được huấn luyện, nó vẫn tự tin viết tiếp theo khuôn quen, và kết quả có thể là một hàm không tồn tại hoặc một tham số sai thứ tự. Câu trả lời trôi chảy không phải bằng chứng là đúng.
Các trợ lý hiện nay còn được huấn luyện thêm để làm theo chỉ dẫn, trò chuyện, và gọi công cụ như đọc tệp hay chạy lệnh. Phần "trợ lý" chính là lớp bao quanh mô hình: phần mềm quyết định gửi cho mô hình những đoạn mã nào, nhận câu trả lời ra sao và được phép làm gì trên máy bạn. Hai sản phẩm dùng cùng một mô hình vẫn có thể cho kết quả khác nhau xa vì lớp bao này khác nhau.
Ba dạng trợ lý bạn sẽ gặp
Phần lớn công cụ hiện nay có cả ba dạng trong cùng một sản phẩm, nhưng mỗi dạng có nhịp làm việc riêng. Bảng dưới so theo những điều ảnh hưởng tới cách bạn dùng, không theo tên hãng.
| Dạng | Bạn làm gì | AI được thấy gì | Hợp với việc |
|---|---|---|---|
| Gợi ý dòng (tự hoàn thành) | Gõ bình thường, bấm phím chấp nhận khi gợi ý hợp | Đoạn mã quanh con trỏ, vài tệp đang mở hoặc liên quan | Mã lặp khuôn, đặt tên, viết nốt vòng lặp, chú thích ngắn |
| Trò chuyện (chat) | Hỏi bằng lời, dán mã hoặc chọn đoạn mã, nhận câu trả lời rồi tự chép vào | Những gì bạn dán hoặc chọn, cộng tệp bạn đính kèm | Giải thích mã, hỏi cách làm, viết một hàm, so hai hướng giải quyết |
| Tác tử (agent) | Giao một việc, xem nó tự đọc tệp, chạy lệnh, sửa nhiều chỗ, rồi duyệt kết quả | Cả thư mục dự án mà nó tự tìm đọc, đầu ra của lệnh nó chạy | Việc nhiều bước có thể kiểm bằng kiểm thử: sửa lỗi theo báo cáo, thêm tính năng nhỏ, nâng phiên bản |
Đi từ trên xuống dưới bảng, AI tự quyết nhiều hơn và bạn gõ ít hơn, nhưng phần phải rà lại tăng lên. Gợi ý dòng sai thì bạn thấy ngay vì nó nằm dưới con trỏ. Tác tử sửa mười hai tệp thì bạn phải đọc thay đổi của cả mười hai tệp, nếu không sẽ có thứ lọt qua mà không ai nhìn.
Trợ lý thật sự nhìn thấy gì trong dự án của bạn
Một hiểu lầm phổ biến là trợ lý "biết" toàn bộ dự án. Thực tế mỗi lần nó trả lời, phần mềm chỉ gửi cho mô hình một gói chữ có giới hạn độ dài, gọi là ngữ cảnh. Gói đó gồm lời dặn hệ thống của công cụ, đoạn mã quanh con trỏ hoặc đoạn bạn chọn, một số tệp được chọn theo cách riêng của công cụ, và lịch sử trò chuyện gần đây. Những gì không nằm trong gói thì với mô hình là không tồn tại, kể cả khi tệp đó nằm ngay cạnh trong thư mục.
Vì vậy câu hỏi đúng khi trợ lý trả lời sai thường là: nó đã được thấy những gì? Nếu bạn hỏi vì sao hàm luu_don_hang lỗi mà không đưa cấu trúc bảng dữ liệu, AI sẽ đoán cấu trúc bảng theo thói quen phổ biến, và đoán đó có thể lệch hoàn toàn với dự án của bạn. Đưa thêm đúng tệp, đúng thông báo lỗi thường giúp nhiều hơn là đổi sang công cụ khác.
Tác tử khác ở chỗ nó có thể tự đi tìm: liệt kê thư mục, tìm theo tên hàm, mở tệp, chạy lệnh kiểm thử. Nhờ vậy nó thấy được nhiều hơn, nhưng vẫn theo từng lượt và vẫn bị giới hạn độ dài. Khi phiên làm việc kéo dài, phần đầu có thể bị tóm tắt hoặc cắt bớt, và tác tử bắt đầu quên điều bạn dặn từ đầu. Cách giữ lời dặn quan trọng là ghi chúng vào tệp hướng dẫn dự án mà công cụ tự đọc mỗi phiên, phần này có bài riêng trong mục chọn và cài công cụ.
Việc trợ lý làm tốt và việc dễ hỏng
Làm tốt: mã theo khuôn quen. Đọc tệp cấu hình, gọi một API phổ biến, viết hàm kiểm định dạng thư điện tử, chuyển một vòng lặp sang cách viết gọn hơn. Những việc này xuất hiện nhiều trong dữ liệu học nên tỉ lệ đúng cao và bạn kiểm cũng nhanh.
Làm tốt: giải thích và tóm tắt. Đọc một hàm dài, nói nó làm gì, chỉ chỗ đáng ngờ. Ngay cả khi phần sửa AI đề xuất chưa đúng, phần giải thích thường đủ để bạn tiết kiệm thời gian dò từng dòng.
Làm tốt: viết nháp kiểm thử và tài liệu. Liệt kê ca thử, sinh dữ liệu giả, viết phần mô tả hàm. Đây là việc người hay ngại nhất, và bản nháp của AI là điểm khởi đầu tốt để bạn sửa.
Dễ hỏng: quy tắc nghiệp vụ riêng. Cách tính chiết khấu của công ty bạn, luồng duyệt đơn có ba cấp, ngoại lệ cho khách sỉ. AI không biết những điều này trừ khi bạn nói rõ, và nó sẽ lấp chỗ trống bằng phiên bản phổ biến nhất, nghe hợp lý mà sai.
Dễ hỏng: thư viện mới hoặc ít người dùng. Mô hình chỉ biết tới thời điểm dữ liệu huấn luyện được chốt. Thư viện đổi cách gọi sau thời điểm đó, hay thư viện nội bộ của công ty, là chỗ AI hay bịa tên hàm.
Dễ hỏng: thay đổi lớn trải trên nhiều tệp. Đổi cấu trúc dữ liệu dùng ở hai mươi chỗ, đổi cách xác thực người dùng. Tác tử làm được một phần, nhưng càng nhiều chỗ, khả năng sót một chỗ càng cao, nên cần kiểm thử giữ lưng trước khi giao.
Một buổi làm việc dùng cả ba dạng: ví dụ giả định
Ví dụ giả định: bạn làm ở một công ty phần mềm nhỏ ở Cần Thơ, được giao thêm chức năng xuất danh sách đơn hàng ra tệp CSV trong một ứng dụng PHP có sẵn. Một cách phối hợp hợp lý có thể như sau.
- Mở cửa sổ trò chuyện, chọn tệp điều khiển đơn hàng và hỏi trợ lý giải thích luồng hiện tại: dữ liệu lấy từ đâu, đã lọc theo quyền người dùng ở chỗ nào. Bạn đọc và đối chiếu với mã, sửa lại chỗ AI hiểu nhầm.
- Tự viết khung hàm xuất CSV, để gợi ý dòng điền phần lặp như ghi tiêu đề cột, duyệt từng dòng, định dạng ngày. Mỗi gợi ý bạn đọc trước khi bấm chấp nhận.
- Hỏi trợ lý trong khung trò chuyện những ca biên: tên khách có dấu phẩy, có xuống dòng, có ký tự tiếng Việt khi mở bằng Excel. Đây là chỗ hay sót mà AI liệt kê nhanh.
- Giao cho tác tử việc viết kiểm thử cho hàm mới và chạy bộ kiểm thử hiện có, yêu cầu nó không sửa mã ngoài hai tệp đã nêu.
- Đọc lại toàn bộ thay đổi trong công cụ so sánh của git, chạy thử bằng tay với dữ liệu mẫu, rồi mới gửi yêu cầu gộp mã để đồng nghiệp rà.
Điều đáng chú ý là bạn vẫn giữ các quyết định: luồng dữ liệu, chỗ lọc quyền, phạm vi tác tử được sửa. AI làm phần gõ và phần liệt kê, còn phần hiểu và phần chịu trách nhiệm vẫn ở người viết mã.
Những hiểu lầm hay gặp ở người mới dùng
"AI chạy thử mã rồi mới đưa." Dạng gợi ý dòng và dạng trò chuyện thông thường không chạy mã. Chỉ tác tử, hoặc công cụ có tính năng chạy mã được bật, mới chạy thật, và ngay cả khi đó bạn vẫn nên tự xem kết quả chạy thay vì tin dòng "đã kiểm thử thành công" do AI viết ra.
"Mô hình đang học từ mã của mình mỗi ngày." Mô hình không tự học thêm trong lúc bạn dùng; mỗi phiên nó chỉ dựa vào ngữ cảnh được gửi. Việc dữ liệu của bạn có được hãng dùng để huấn luyện bản sau hay không là chuyện điều khoản và cài đặt tài khoản, cần đọc kỹ chứ không đoán.
"Công cụ đắt hơn thì không sai." Mô hình mạnh hơn sai ít hơn ở việc khó, nhưng không hết sai. Quy trình kiểm của bạn quan trọng hơn tên công cụ.
"Có AI thì không cần hiểu mã nữa." Ngược lại, người hiểu mã dùng AI hiệu quả hơn hẳn, vì họ nhận ra gợi ý sai trong vài giây. Người chưa hiểu thì chấp nhận cả cái sai, và lỗi chỉ lộ ra khi đã lên máy chủ.
Chuẩn bị gì trước khi bắt đầu dùng
Trước khi cài công cụ đầu tiên, vài việc nhỏ dưới đây giúp bạn tránh được phần lớn rắc rối thường gặp ở tuần đầu.
- Dùng git cho mọi dự án, kể cả dự án cá nhân. Có lịch sử thay đổi thì bạn dám để AI sửa, vì luôn quay lại được bản trước.
- Kiểm xem dự án có bộ kiểm thử chạy được bằng một lệnh hay chưa. Chưa có thì đó là việc nên làm đầu tiên, và AI giúp viết nháp được.
- Tách khoá bí mật, mật khẩu cơ sở dữ liệu ra khỏi mã nguồn, để trong tệp cấu hình riêng không đưa vào kho mã. Như vậy khi trợ lý đọc thư mục, nó không đọc phải thứ không nên đọc.
- Hỏi công ty quy định gì về việc đưa mã nội bộ vào công cụ AI, dùng tài khoản cá nhân hay tài khoản công ty. Công ty chưa có quy định thì hỏi trưởng nhóm bằng văn bản.
- Chọn một việc nhỏ có kết quả kiểm được để thử trước, như viết kiểm thử cho một hàm có sẵn, thay vì giao ngay một tính năng lớn.
Khi đã quen nhịp, bạn sẽ thấy trợ lý hữu ích nhất ở những việc bạn hiểu rõ nhưng ngại gõ, và nguy hiểm nhất ở những việc bạn chưa hiểu mà muốn nó làm hộ cho xong. Phân biệt được hai loại việc đó là kỹ năng quan trọng nhất của người lập trình cùng AI.
Câu hỏi thường gặp
Trợ lý AI viết mã có thay được lập trình viên không?
Với hiện trạng công cụ, trợ lý làm nhanh phần gõ và phần tra cứu, còn phần hiểu yêu cầu, chọn thiết kế, chịu trách nhiệm khi lỗi vẫn ở người. Công việc của lập trình viên dịch dần sang đọc, kiểm và quyết định nhiều hơn là gõ từng dòng.
Dùng trợ lý viết mã có cần mạng Internet không?
Phần lớn trợ lý gửi mã lên máy chủ của hãng để mô hình xử lý nên cần mạng. Có loại mô hình chạy ngay trên máy cá nhân, không cần gửi mã đi, nhưng thường nhỏ hơn và đòi hỏi máy đủ bộ nhớ.
Ngôn ngữ lập trình nào AI viết tốt nhất?
AI thường viết tốt các ngôn ngữ có nhiều mã công khai như Python, JavaScript, TypeScript, Java, PHP, SQL. Ngôn ngữ ít người dùng, phiên bản rất mới hoặc khung làm việc nội bộ thì chất lượng giảm rõ, cần kiểm kỹ hơn.
Có nên hỏi trợ lý bằng tiếng Việt không?
Được. Các mô hình lớn hiện nay hiểu tiếng Việt khá tốt. Nhiều người hỏi bằng tiếng Việt nhưng giữ nguyên thuật ngữ và tên hàm tiếng Anh để tránh AI dịch nhầm tên biến hoặc thông báo lỗi.
Trợ lý có biết mã của mình đúng hay sai không?
Không tự biết. Nó chỉ đánh giá được khi có thêm tín hiệu từ bên ngoài, như kết quả chạy kiểm thử hay thông báo lỗi. Vì vậy đưa cho nó một cách tự kiểm, chẳng hạn lệnh chạy kiểm thử, giúp chất lượng tăng rõ.
Mã do AI viết có thuộc quyền của mình không?
Đây là câu hỏi pháp lý còn đang được bàn ở nhiều nơi và phụ thuộc điều khoản của từng công cụ. Về thực tế công việc, công ty thường coi mã bạn đưa vào dự án là mã bạn chịu trách nhiệm, nên hãy đọc điều khoản hiện hành và quy định nội bộ.