AI rà mã hữu ích nhất khi được dùng như vòng soát đầu tiên: bắt những lỗi cục bộ, chỗ thiếu kiểm thử, tên gọi mù mờ, để người rà dành sức cho câu hỏi khó hơn. Dùng sai cách, nó thành máy đẻ bình luận: hàng chục góp ý về khoảng trắng và tên biến, lẫn trong đó vài góp ý sai, và cả nhóm học cách bỏ qua toàn bộ.
Bài này dành cho lập trình viên và trưởng nhóm muốn đưa AI vào khâu rà yêu cầu gộp mã (pull request, merge request). Nội dung gồm việc AI rà giỏi và kém, chuẩn bị ngữ cảnh, câu lệnh rà mẫu, cách lọc góp ý, gắn vào quy trình tự động, và cách đo xem nó có thật sự giúp nhóm hay không.
AI rà giỏi gì, kém gì
Biết ranh giới này giúp bạn đặt đúng kỳ vọng và phân việc giữa máy với người:
| Loại vấn đề | AI rà | Ghi chú |
|---|---|---|
| Lỗi cục bộ trong một hàm: lệch một, quên trường hợp rỗng, nuốt ngoại lệ | Khá tốt | Vẫn có dương tính giả, cần người xác nhận |
| Thiếu kiểm thử cho nhánh mới, ca mép rõ ràng | Khá tốt | Hữu ích khi đưa kèm tệp kiểm thử vào ngữ cảnh |
| Tên gọi, độ dễ đọc, mô tả thay đổi chưa rõ | Tốt | Dễ thành nhiễu nếu không giới hạn |
| Đúng nghiệp vụ, đúng yêu cầu của khách | Kém | AI không biết điều khách thật sự cần nếu không ai nói |
| Tác động sang phần khác của hệ thống, dịch vụ khác | Kém | Chỉ thấy phần mã được đưa vào ngữ cảnh |
| Quyết định thiết kế và đánh đổi | Gợi ý được, không quyết được | Là việc của người chịu trách nhiệm |
Hệ quả thực tế: AI rà không thay được người rà, nhưng có thể làm người rà nhanh hơn bằng cách gỡ trước những lỗi vặt. Người rà khi đó đọc với câu hỏi "thay đổi này có đúng điều cần làm không, có hợp với hệ thống không" thay vì đi soi từng dấu chấm phẩy.
Chuẩn bị ngữ cảnh: AI chỉ rà được những gì nó thấy
Đưa mỗi phần chênh lệch (diff) cho AI giống như nhờ người lạ rà mã mà không cho xem dự án. Chất lượng góp ý tăng rõ khi bạn kèm thêm:
- Mô tả yêu cầu gốc. Thay đổi này giải quyết việc gì, tiêu chí chấp nhận là gì. Có cái này AI mới soát được "có làm đúng việc không".
- Tệp liên quan, không chỉ dòng bị sửa. Hàm được gọi, kiểu dữ liệu, tệp kiểm thử tương ứng. Nhiều lỗi chỉ thấy khi nhìn chỗ gọi.
- Quy ước của nhóm. Cách xử lý lỗi, cách đặt tên, những điều cấm. Ngắn gọn, dạng gạch đầu dòng, đặt trong tệp hướng dẫn để lần nào cũng dùng lại.
- Những gì không cần góp ý. Định dạng mã đã có công cụ lo, quy tắc kiểu đã có trình kiểm tra lo. Nói rõ để AI không lặp lại.
- Mức rủi ro của thay đổi. Thay đổi đụng tiền hay phân quyền thì yêu cầu soát kỹ hơn.
Trước khi dán, soát diff và tệp kèm theo: không có khoá API, mật khẩu, chuỗi kết nối cơ sở dữ liệu, dữ liệu khách trong tệp kiểm thử. Dùng công cụ AI được công ty cho phép cho mã nguồn của công ty; nếu nhóm dùng tính năng rà tích hợp sẵn trong nền tảng quản lý mã, đọc kỹ điều khoản về việc mã được xử lý ở đâu.
Câu lệnh rà mẫu
Câu lệnh rà nên giới hạn phạm vi, bắt AI xếp mức độ và thừa nhận khi không chắc. Một mẫu bạn có thể đặt trong tệp hướng dẫn hoặc dùng mỗi lần:
"Rà thay đổi dưới đây như một người rà mã cẩn thận của nhóm. Yêu cầu gốc: [...]. Quy ước nhóm: [...]. Không góp ý về định dạng và thứ tự nhập thư viện. Chỉ nêu vấn đề thuộc các loại: sai so với yêu cầu, lỗi logic, xử lý lỗi, thiếu kiểm thử cho nhánh mới, rủi ro dữ liệu. Mỗi vấn đề ghi: tệp và dòng, mức độ (chặn, nên sửa, gợi ý), lý do, đề xuất sửa ngắn. Nếu không chắc, ghi rõ là không chắc và cần kiểm gì. Tối đa mười vấn đề, quan trọng nhất trước. Nếu không thấy vấn đề đáng kể, nói vậy, không cần cố tìm."
Câu cuối quan trọng hơn vẻ ngoài của nó. Nhiều mô hình có xu hướng luôn tìm ra điều gì đó để góp ý, vì được hỏi "rà mã" thì phải có kết quả. Cho phép nó nói "không có vấn đề đáng kể" làm giảm hẳn số góp ý bịa. Giới hạn mười vấn đề và xếp theo mức độ buộc góp ý quan trọng nổi lên đầu thay vì chìm giữa danh sách.
Lọc góp ý của AI trước khi để nó tới tay người khác
Dương tính giả. AI báo lỗi ở chỗ thật ra đúng, thường vì thiếu ngữ cảnh: biến đã được kiểm ở tầng trên, hàm đã đảm bảo không trả về rỗng. Mỗi góp ý mức "chặn" cần người xác nhận trước khi yêu cầu tác giả sửa.
Góp ý đúng nhưng không đáng. Đổi tên biến cho hay hơn một chút, tách hàm mười dòng thành hai hàm năm dòng. Nếu không có quy ước nhóm đứng sau, bỏ qua; mỗi góp ý vô thưởng vô phạt làm loãng góp ý quan trọng.
Đề xuất viết lại lớn. AI đôi khi đề xuất đổi cả cách tiếp cận. Có thể đúng, nhưng không thuộc phạm vi một lần gộp mã. Ghi lại thành việc riêng để bàn, không chặn thay đổi hiện tại vì nó.
Góp ý trùng với công cụ sẵn có. Nếu trình kiểm tra kiểu hay định dạng đã bắt, AI nhắc lại chỉ là nhiễu. Đây là dấu hiệu câu lệnh cần nói rõ hơn phần không cần góp ý.
Góp ý mà người rà không hiểu. Nếu bạn đọc một góp ý mà không tự giải thích được vì sao nó đúng, đừng chuyển tiếp cho tác giả. Hỏi lại AI, tra tài liệu, hoặc bỏ.
Gắn AI rà vào quy trình nhóm
Khi đã thấy giá trị ở việc dùng tay, nhiều nhóm muốn tự động: mỗi yêu cầu gộp mã mới thì AI để lại một lượt góp ý. Các bước đưa vào an toàn:
- Chạy thử bằng tay vài tuần trên các thay đổi thật, ghi lại góp ý nào đúng, góp ý nào nhiễu, để chỉnh câu lệnh trước khi tự động.
- Khi tự động, AI chỉ được quyền bình luận. Không cho quyền chấp thuận, yêu cầu thay đổi bắt buộc hay gộp mã. Quy tắc bảo vệ nhánh chính vẫn đòi ít nhất một người duyệt.
- Đánh dấu rõ bình luận nào đến từ máy, để tác giả biết có thể phản biện thoải mái và người rà biết góp ý nào chưa có người xác nhận.
- Gộp góp ý của AI thành một bình luận tóm tắt thay vì rải hàng chục bình luận trên từng dòng; tác giả đọc một lần, đánh dấu cái đã xử lý.
- Loại khỏi phạm vi AI rà những tệp nhạy cảm như cấu hình chứa bí mật, hoặc dữ liệu kiểm thử lớn, vừa vì an toàn vừa vì tốn ngữ cảnh vô ích.
- Sau một tháng, nhìn lại số liệu đơn giản ở mục cuối bài và quyết định giữ, chỉnh hay bỏ.
Bước thứ hai là bước không được bỏ qua. Một quy trình mà AI tự duyệt mã do AI viết là quy trình không có ai chịu trách nhiệm.
Tác giả tự rà bằng AI trước khi gửi
Cách dùng AI rà mã ít gây tranh cãi nhất lại là cách đơn giản nhất: tác giả tự dùng nó trước khi mở yêu cầu gộp. Bạn dán thay đổi của mình kèm câu lệnh rà, sửa những gì hợp lý, rồi mới gửi cho đồng nghiệp. Lỗi vặt được gỡ trước khi tốn thời gian của người khác, và bạn không phải ngại vì máy góp ý sai.
Kết hợp tự rà với việc nhờ AI soạn nháp mô tả thay đổi: thay đổi gì, vì sao, đã kiểm thử thế nào, người rà nên chú ý chỗ nào. Bản nháp bạn tự sửa cho đúng, đặc biệt phần đã kiểm thử thế nào phải là điều bạn đã thật sự làm. Một mô tả rõ ràng giúp người rà nhanh hơn bất kỳ công cụ nào.
Nếu phần lớn thay đổi do tác tử AI viết, nói rõ điều đó trong mô tả cùng với những phần bạn đã đọc kỹ và những phần chỉ chạy kiểm thử. Người rà cần biết để chọn mức đọc. Đây không phải chuyện xấu hổ, mà là thông tin giúp cả nhóm đánh giá đúng rủi ro.
Đo xem AI rà có giúp nhóm hay không
Đừng đo bằng số bình luận AI để lại; con số đó tăng không có nghĩa nhóm làm tốt hơn. Vài chỉ số đơn giản đáng theo dõi trong một tháng thử nghiệm: tỉ lệ góp ý của AI được tác giả chấp nhận và sửa, số lỗi bắt được ở khâu rà mà trước đây lọt sang môi trường thử nghiệm, thời gian từ lúc mở yêu cầu tới lúc có lượt rà đầu tiên của người, và cảm nhận của chính người rà sau mỗi tuần.
Cách ghi số liệu không cần công cụ gì phức tạp: mỗi tuần, người rà chính chọn ngẫu nhiên năm yêu cầu gộp mã đã đóng, đếm góp ý của AI theo ba loại là đúng và đã sửa, đúng nhưng bỏ qua, sai. Ghi vào một bảng tính chung. Sau bốn tuần, xu hướng hiện ra đủ rõ để quyết định mà không phải dựa vào cảm giác của người hào hứng nhất hay người hoài nghi nhất trong nhóm.
Nếu tỉ lệ chấp nhận thấp, câu lệnh đang quá rộng hoặc thiếu ngữ cảnh. Nếu người rà nói vẫn phải đọc lại mọi thứ AI đã soát, có thể AI đang soát đúng những thứ người rà vốn đã không mất công. Nếu thời gian chờ rà dài ra, AI đang tạo thêm việc chứ không bớt việc.
Kết quả hợp lý thường là AI giữ vai trò soát vòng đầu cho một số loại thay đổi, còn những thay đổi rủi ro cao vẫn có người rà kỹ từ đầu tới cuối. Ở nhóm nhỏ năm bảy người, chỉ riêng việc tác giả tự rà bằng AI trước khi gửi đã có thể đủ, không cần dựng hệ thống tự động.
Câu hỏi thường gặp
AI có thể là người duyệt thứ hai bắt buộc không?
Không nên. Người duyệt bắt buộc là người chịu trách nhiệm về thay đổi, và AI không chịu trách nhiệm được. AI nên đứng trước người duyệt như một vòng soát, còn quyền chấp thuận và gộp mã giữ cho người trong nhóm.
Dán mã công ty vào chatbot để rà có an toàn không?
Tuỳ chính sách công ty và công cụ. Chỉ dùng công cụ được công ty cho phép, đăng nhập bằng tài khoản công ty, và soát trước để không có khoá, mật khẩu, dữ liệu khách trong phần dán. Nếu chưa có chính sách, hỏi trưởng nhóm trước khi dán.
AI góp ý sai thì tác giả có phải sửa không?
Không. Góp ý của máy là gợi ý, tác giả có quyền trả lời rằng không áp dụng kèm lý do ngắn. Nhóm nên nói rõ quy ước này từ đầu để không ai sửa mã theo góp ý sai chỉ vì ngại tranh luận với một công cụ.
Nên dùng AI rà toàn bộ dự án một lần không?
Có thể làm như một lần khảo sát để tìm điểm đáng lo, nhưng kết quả thường rất dài và nhiều nhiễu. Hiệu quả hơn là rà theo từng thay đổi, nơi ngữ cảnh hẹp và rõ, và dành khảo sát toàn dự án cho từng chủ đề cụ thể như xử lý lỗi hay truy vấn chậm.
AI rà có bắt được lỗi bảo mật không?
Bắt được một số lỗi phổ biến như ghép chuỗi vào câu truy vấn hay thiếu kiểm đầu vào, nhưng không nên coi là lớp bảo vệ chính. Thay đổi đụng phân quyền, dữ liệu nhạy cảm cần người hiểu bảo mật rà và công cụ phân tích chuyên dụng.
Nhóm chỉ có hai ba người có cần AI rà không?
Không bắt buộc. Với nhóm rất nhỏ, cách có ích nhất thường là mỗi người tự rà thay đổi của mình bằng AI trước khi gửi, còn người kia vẫn đọc lại. Dựng quy trình tự động chỉ đáng khi số yêu cầu gộp mã mỗi tuần đủ nhiều.