quanbi.dev
Kiểm tra code AI viết: tấm phôi chạy trên ray qua hai trạm soi khác hình dạng, mỗi trạm một thấu kính tròn đặt nghiêng một kiểu

Hướng dẫn thực hànhHướng dẫn

Kiểm tra code AI viết khi mình không đọc được code

Quân BiCập nhật 7 phút đọc6 lượt xem

Câu khuyên phổ biến nhất cho người dùng AI agent là đọc lại diff trước khi merge. Mình không đọc code, nên câu đó với mình là câu rỗng. Việc kiểm tra code AI viết vẫn phải xảy ra, chỉ là bằng thứ khác. Dưới đây là những thứ mình làm được thật, kèm chỗ cách này thua hẳn người biết đọc.

Kiểm tra code AI viết là kiểm cái gì

Mình kiểm kết quả, không kiểm từng dòng.

Quy trình gọn lại thế này. Agent viết code. Một model khác đọc lại phần vừa viết, quyền chỉ có đọc, không sửa được gì. Mình nhận cả hai phía rồi mới quyết.

Luật duy nhất chịu lực ở đây: bên viết không bao giờ được làm bên review. Nghe hiển nhiên. Bỏ nó ra thì cả quy trình rỗng, vì một model tự chấm bài của chính nó gần như luôn cho qua.

Kiểm tra code AI viết, với mình, là đi tìm những dấu vết mà nếu việc không xảy ra thì chúng biến mất. Lời khai của agent không phải dấu vết.

Cách mình tả việc cho agent nằm ở bài giao việc cho AI agent. Công cụ mình gõ lệnh hằng ngày có bài riêng, Claude Code là gì.

Hai vòng review, hai lỗi thật

Ngày 30 tháng 7 mình sửa lớp đệm nội dung của blog này.

Agent viết xong. Model review đọc lại, vòng thứ nhất. Trong code có một đoạn chú thích kể tên các script ghi nội dung từ bên ngoài app. Đoạn đó ghi hai cái. Thật ra có năm.

Cái thứ năm mới là cái đáng sợ. Nó ghi thẳng SQL, nên nó không chạm vào bất kỳ hook nào của app. Cột nó ghi lại chính là cột trang bài đọc ra để hiện thời gian đọc.

Agent sửa đoạn chú thích đó. Vòng review thứ hai đọc bản sửa, rồi bắt tiếp: chính bản sửa của vòng một nói quá lên một ý.

Hai vòng, cả hai đều ra lỗi thật. Từ hôm đó mình không bỏ vòng hai nữa.

Lần nó bác một điều ba tài liệu cùng ghi

Đây là lần mình phục nhất.

Ba tài liệu vận hành của dự án cùng chép một câu: deploy thường không chạy migration. Mình tin câu đó. Mọi bước chuẩn bị trước khi lên bản đều dựng trên nó.

Model review đi đọc mã nguồn của thư viện database rồi nói ngược lại. Chính app tự chạy những migration đang chờ, ngay lúc nó khởi động.

Mình cho kiểm trên database thật. Bảng lịch sử migration có bốn hàng, nằm ở bốn batch riêng, mỗi batch trùng đúng một lần deploy. Không hàng nào do người gõ tay cả.

Niềm tin sai đó nằm trong tài liệu của chính dự án. Không ai đọc chéo thì nó còn nằm đó bao lâu cũng được. Kiểu hỏng im lặng này mình mổ riêng ở bài khi máy làm sai mà không ai biết.

Năm việc mình tự làm được

Không đọc được code thì việc kiểm tra code AI viết còn lại chừng này thao tác.

  • Tự chạy lại test suite rồi đọc exit code thật, thay vì nghe agent kể lại.
  • Mở đúng một assertion ra đọc, xem nó đang khẳng định điều gì.
  • Chụp màn hình trang vừa sửa, rồi nhìn tấm ảnh đó bằng mắt.
  • Tự bấm qua luồng thật trên trình duyệt, từ đầu tới cuối.
  • Hỏi thẳng database về đúng cái mà thay đổi kia tuyên bố.

Cái cuối là cái mình dùng nhiều nhất. Một thay đổi nói rằng nó ghi thêm dữ liệu, thì mình đi đếm số row ở chỗ nó bảo đã ghi.

Cả năm việc đều không cần đọc một dòng code nào. Chúng chỉ cần mình chịu ngồi xuống làm, thay vì đọc dòng tóm tắt cuối cùng rồi gật.

Câu hỏi mình đã bỏ hẳn

Trước đây mình hỏi agent một câu: kiểm chưa.

Nó trả lời gọn, đã chạy test, tất cả xanh. Câu đó không sai về ý định. Nó chỉ không phải một kết quả. Agent đang tóm tắt việc nó định làm rồi tưởng đó là việc đã xong.

Ban đầu mình tưởng chỉ cần bắt nó báo cáo kỹ hơn là xong. Hoá ra không. Báo cáo kỹ hơn chỉ làm lời khai dài ra, chứ không làm nó thật hơn.

Mình bỏ hẳn câu hỏi đó. Bây giờ mình tự chạy, tự đọc dòng cuối cùng.

Hai agent không thay được một người

Mình từng cho agent thứ hai đi kiểm agent thứ nhất.

Cách này hỏng ngay. Cả hai cùng tự tin, không bên nào chạm vào cái đang chạy thật. Vòng tròn khép lại, và không có gì thật lọt được vào bên trong.

Model review có ích vì nó đọc code, chứ không phải vì nó là agent thứ hai. Phần chạm vào thực tế vẫn phải có người làm. Một dòng kết quả thật, do mắt người đọc.

Một phép đo thắng một ý kiến

Cùng phiên đó, một ghi chép vận hành của mình có một con số.

Nó viết rằng mỗi cửa sổ cache có đúng một người đọc phải trả giá làm mới, và giá đó là 1,11 giây. Mình định lấy con số đó làm lý do để nới cửa sổ ra.

Model review không chịu, bảo đo lại cho tử tế. Lần đo lại, mỗi lượt hết hạn được kẹp cùng một lượt đối chứng lấy từ chính entry đó, mười giây trước khi nó hết hạn.

Lượt hết hạn không chậm hơn. Hai trong bốn cặp nó còn nhanh hơn.

1,11 giây là một mẫu đo duy nhất, chưa ai lặp lại lần nào. Mình suýt dựng một quyết định lên trên nó. Chuyện đo trước khi tin mình có kể thêm trong bài chi phí chạy website một tháng.

Lần hỏng gần nhất mình dính

Đợt vừa rồi blog cần năm ảnh bìa.

Mình cho sinh cả năm cùng lúc cho nhanh. Năm tiến trình ghi ảnh vào chung một thư mục, rồi mỗi tiến trình đi lấy file mới nhất trong thư mục đó.

Chúng bốc ảnh của nhau. Log báo thành công đủ năm dòng, không dòng nào đỏ. Ảnh của bài này nằm ở bài kia.

Mình chỉ biết vì mở từng ảnh ra xem trước khi cài vào bài. Sửa thì thô: sinh lại từng cái một, và vẫn mở từng cái ra nhìn.

Không có bước mở ảnh ra nhìn thì log vẫn xanh đủ năm dòng, và blog vẫn đăng sai ảnh. Đây đúng là loại lỗi mà đọc code cũng không bắt được, vì code chạy đúng như nó được viết.

Chỗ cách này yếu hẳn

Phải nói thẳng chỗ yếu.

Cách này bắt lời khai sai rất tốt. Chú thích ghi sai số lượng, tài liệu chép lại niềm tin cũ, con số chưa ai lặp lại, tên gọi lệch với thứ đang chạy. Bốn loại đó lộ ra ngay khi có người đọc chéo.

Cái nó bắt kém là lỗi logic nhỏ. Một điều kiện bị đảo, một trường hợp biên không ai nghĩ tới. Loại đó chỉ hiện ra khi gặp đúng dữ liệu thật, và có khi rất lâu sau mới hiện.

Phần dính tiền thì một người review cộng một người không đọc code vẫn là quá ít mắt. Mình chưa có câu trả lời tốt cho chỗ đó.

Nếu bạn cũng không đọc code

Thứ tự mình khuyên gói lại còn hai bước.

Bắt buộc có một model khác đọc lại, và nó không được là model vừa viết. Chỗ này đừng tiết kiệm.

Rồi mỗi lần lên bản, tự tay làm ít nhất một việc trong năm việc phía trên. Một việc thôi cũng đủ phá vỡ cái vòng tròn agent tự chấm agent.

Việc kiểm tra code AI viết theo kiểu này yếu hơn đọc diff, mình biết. Nó chắc hơn hẳn việc hỏi agent xem nó kiểm chưa.

Mấy ghi chép cùng nhóm mình gom ở chủ đề Công cụ. Phần mô tả chính thức về agent mình dùng nằm ở tài liệu Claude Code.

Bài này thế nào?

Chia sẻ

XFacebook

Ảnh đại diện của chủ trang quanbi.dev

Về mình

Quân Bi · Người viết

Xem thêm →

Bình luận (0)

Chưa có bình luận nào. Bạn mở hàng nhé.

Viết bình luận