Bỏ qua để vào nội dung chính
Bắt AI coding agent dùng lại boilerplate của dự án

Bắt AI coding agent dùng lại boilerplate của dự án

Bởi Ava Mitchell
15 thg 9, 20264 phút đọc

Cursor và Claude Code hay viết mới thay vì tái dùng lib/db.ts. Ba lớp ràng buộc: file luật ở gốc repo, static inspector và pre-prompt hook context.

Bạn bảo Cursor hoặc Claude Code thêm một route thanh toán. Mười phút sau, agent viết xong một database client mới tinh — trong khi lib/db.ts của bạn đã nằm sẵn ở đó từ đầu dự án.

Đây không phải lỗi model kém. Theo một bài phân tích mới trên dev.to, chế độ hỏng mặc định của agent là "non-destructive creation": nó không đi tìm abstraction có sẵn mà chọn đường ít kháng cự nhất, tức là viết mới.

Vì sao vector search không cứu được

Tác giả gọi hiện tượng này là boilerplate drift. Sau vài tuần "vibe coding", một starter kit sạch sẽ biến thành codebase có ba database client, bốn pattern UI cạnh tranh nhau, và middleware xử lý lỗi trùng lặp rải rác trong các API route.

Phản xạ phổ biến là cấp cho agent quyền tìm kiếm toàn bộ workspace qua vector index. Bài viết lập luận cách này không đủ: vector embedding khớp theo ý định ngữ nghĩa chứ không theo phụ thuộc cấu trúc. Khi agent tìm "database connection", nó nhận về năm chỗ có nhắc tới connection và phải đoán, thay vì bị buộc dùng client trung tâm của bạn.

Ba lớp ràng buộc được đề xuất

Bài viết mô tả một khung ba lớp, đều là thứ bạn tự dựng được trong một buổi chiều:

  1. File luật ở gốc repo. Một CLAUDE.md hoặc .cursorrules chứa quy tắc "discovery before creation": trước khi tạo file, helper hay component mới, agent phải tìm trong lib/components/; nếu đã có thì bắt buộc import và mở rộng. Kèm theo là danh sách pattern bị cấm và một bảng ánh xạ đường dẫn cho từng domain.
  2. Static inspector chạy trước khi commit. Một script Node.js quét file do agent sinh ra, đối chiếu với danh sách import bị cấm — ví dụ import trực tiếp pg thay vì @/lib/db, hay jsonwebtoken thay vì helper session của dự án — rồi thoát với mã lỗi khác 0.
  3. Pre-prompt hook bơm context. Một script quét cây export trong ./lib và chèn danh sách primitive đang có sẵn thẳng vào system prompt, để model không phải nhớ xem dự án đã có gì.

Ba lỗi bài viết cảnh báo

Phần đáng giá nhất là danh sách sai lầm, vì hai trong ba lỗi rất dễ mắc khi bạn đã bỏ công viết luật:

  • Tin hoàn toàn vào vector search toàn codebase. Nó trả về ngữ cảnh gần đúng, không trả về ràng buộc.
  • Viết file hướng dẫn dài hàng nghìn dòng. Tác giả dẫn hiện tượng "lost in the middle": file càng dài, agent càng bỏ qua luật nằm giữa file và quay về thói quen từ dữ liệu huấn luyện. Giữ luật ngắn và chia module.
  • Chỉ cảnh báo thay vì chặn. Nếu script kiểm tra chỉ in warning mà không chặn commit hoặc fail build, codebase vẫn xuống cấp đều đặn. Guardrail phải không bỏ qua được.

Checklist áp dụng

Bài viết khép lại bằng năm việc nên làm trước khi thả agent vào một boilerplate production: duy trì file luật ở gốc repo và cập nhật nó; chặn agent tự chạy npm install hay yarn add khi chưa xác nhận; chạy static analysis tự động ở pre-commit qua Husky hoặc git hook; giữ export barrel sạch như lib/index.ts để agent tra cứu primitive trong một lần đọc file; và đánh dấu các thư mục nền tảng như lib/core hay app/api/auth là chỉ đọc đối với agent.

Việc nên làm trước tiên là việc rẻ nhất trong danh sách: mở file luật ở gốc repo, viết ba domain mà dự án của bạn hay bị viết trùng nhất, kèm đúng đường dẫn phải import. Sau một tuần, đếm số lần agent vẫn tạo mới — con số đó nói cho bạn biết có cần lớp thứ hai và thứ ba hay không.

Không spam, hủy đăng ký bất kỳ lúc nào.

Bài viết liên quan