Cách dev hiện đại dùng AI agent (Cursor, ChatGPT Codex...) để build nhanh hơn, sạch hơn, và luôn kiểm soát codebase.
“AI không thay thế dev — nó chỉ thay thế những người không hiểu mình đang làm gì.”
Chắc bạn từng thấy (hoặc chính bạn đã từng là người đó):
Dán nguyên project plan dài 200 dòng vô Cursor: “mày lo hết đi nha”.
→ AI gật đầu, code ra app chạy được thật — UI mượt cực, nhưng bấm “Save” thì mở modal “Delete”, fix 1 bug mọc thêm 10 bug mới.
Vì sao?
Vì AI chỉ “hiểu tạm thời” trong context hiện tại, không thể nhớ nổi toàn bộ flow hệ thống như dev thật.
Khi ông nhét 5–6 tính năng chồng lên nhau trong một prompt, phần sau sẽ đè phần trước, logic bị rối, và AI phải bịa code hợp lý trong phạm vi nó còn nhớ được.
Thế là bug nối bug, như hiệu ứng domino.
👉 Prompt càng to, context càng loãng.
Muốn AI code ổn, hãy chia nhỏ từng feature, feed lại context cũ, và để nó “suy nghĩ từng phần” như dev thật.
“AI ngu vãi, code dở ẹc”
→ Trong khi prompt chỉ vỏn vẹn: “code website bán hàng đi”.
Nghe quen đúng không?
Thật ra AI không ngu — chỉ là bạn chưa biết cách làm việc với nó.
Nó có những ưu điểm:
Nhưng nó cần bạn:
Và đó chính là cách tôi dùng AI mỗi ngày.
Dưới đây là quy trình cụ thể tôi đang áp dụng.
Trước khi code, tôi dùng ChatGPT hoặc Claude để hiểu vấn đề thật sự.
Ví dụ:
Bạn: "Tôi muốn build tính năng tracking price cho 1 product url bất kì"
AI: "OK, cho tôi hỏi:
- Bạn muốn theo dõi giá cho cá nhân?
- Có cần real-time alert?
- Bạn muốn track ở mọi domain?
- Muốn crawl định kỳ (ví dụ 6h/lần) hay on-demand khi user vào trang?
- Mức scale mong muốn: 100 URL, 10 000 URL, hay 1 000 000 URL?"
Tôi để AI hỏi ngược lại mình — 5 phút này thường giúp tôi:
Mẹo: Hỏi AI “Tôi nên tự hỏi những câu nào trước khi build tính năng này?”
Sau khi chọn được hướng đi, tôi nói:
"Tạo danh sách công việc chi tiết cho tính năng đăng nhập.
Mỗi task phải có:
- Input/output rõ ràng
- Tiêu chí hoàn thành cụ thể
- Test case cần có"
AI sẽ tạo ra một kế hoạch kiểu này:
Task 1: Thiết kế database schema cho User
Task 2: Xây dựng JWT service
Task 3: Tạo API endpoint đăng nhập
...
Sau khi AI trả về kế hoạch, đừng làm theo ngay.
Đây là lúc con người phải vào vai tech lead – xem lại xem:
Nếu thấy chưa hợp lý hoặc còn thiếu dữ kiện, hãy hỏi ngược lại ngay:
“Kế hoạch này có vẻ ổn, nhưng chỗ này dùng queue kiểu gì?”
“Lib đó có stable không?”
“Nếu thay phần này bằng Graphile Worker thì vẫn đúng logic chứ?”
...
Hoặc nếu phần lớn plan ổn nhưng có 1 mảnh chưa chắc ăn, hãy cho AI thử gợi ý cách khác: “Phần cron job này khó deploy trên Cloud Run, có cách nào khác mà vẫn đảm bảo periodic task không?”
Đây chính là điểm khác giữa người dùng AI và người chỉ đạo AI:
AI có thể lập kế hoạch — nhưng bạn quyết định kế hoạch đó có được duyệt hay không.
Đừng vội bảo Cursor hay ChatGPT Codex “code cho tôi tính năng X” khi project của ông còn trống trơn.
Trước khi viết dòng code đầu tiên, hãy dựng codebase chuẩn chỉnh trước.
Cụ thể:
any, không ép kiểu bừa, cấm console.log, v.v.Vì sao bước này cực kỳ quan trọng?
Vì nó giúp “đặt sân chơi” cho AI agent. Khi luật rõ ràng, Cursor sẽ viết code theo phong cách và rule của bạn,
còn nếu không, nó sẽ code theo tưởng tượng riêng của nó — và đó là lúc bug bắt đầu đẻ con.
Mỗi khi xong một tính năng, hãy commit đầy đủ lên GitHub.
Lý do rất đơn giản: Cursor hoặc Codex đôi khi hiểu sai prompt hoặc mất context,
và code có thể “chệch đường ray” mà ông không kịp nhận ra.
Khi có commit rõ ràng:
Coi mỗi commit là một mốc an toàn.
Chết thì load lại chứ đừng chơi lại từ đầu.
Sau khi hoàn thành một module hoặc một tính năng, đừng nhảy sang phần tiếp theo ngay.
Bảo Cursor hoặc ChatGPT Codex viết test case cho phần vừa xong (unit test, integration test, hoặc E2E tuỳ scope).
Ví dụ prompt: Viết test case cho module Auth (đăng nhập, đăng ký, refresh token) dùng Jest. Bao gồm cả trường hợp lỗi và edge case.
Sau đó:
Đây là cách “ép AI chịu trách nhiệm với code của nó”.
Khi mỗi phần có test riêng, bạn vừa có tài liệu sống, vừa tránh việc fix bug này sinh ra bug khác.
Khi cuộc hội thoại đã quá dài, Cursor hoặc Codex sẽ bắt đầu “quên chuyện cũ” hoặc hiểu sai logic.
Đó là dấu hiệu context bị quá tải.
Cách xử lý đúng:
“Ê, mày hãy đọc lại code của worker trong codebase A”
Giống như khi load game, hãy chắc rằng AI nhớ đúng chỗ mình đang đứng.
Đây là phần quan trọng nhất: Đừng bao giờ approve code của AI mà không hiểu.
Khi AI viết code, tôi:
"Thuật toán mã hóa nào phù hợp với làm checksum?"
"Đoạn get all products này, query 1 phát thế lỡ có cả ngàn product vào RAM 1 lần thì sao?"
"Giải thích từng bước của function parse DOM này"
"Hàm này có nên pipeline hóa không? Vì sao?"
"Code này hơi rối phần xử lý bất đồng bộ, viết lại bằng Lodash và Rxjs cho dễ đọc hơn"
"Tách function util này ra, không nên để chung với file service"
"Module search chưa chuẩn SOLID, bạn hãy lên refactor todo để tôi review các bước sẽ làm"
Kết quả: tôi vừa học thêm, vừa có code chuẩn, vừa hiểu toàn bộ flow hệ thống.
Agent chỉ thực sự sắc bén khi truy cập được tài liệu mới nhất. Nếu bạn chạy Cursor (hoặc bất kỳ runtime nào hỗ trợ MCP), hãy nối thêm một server Model Context Protocol chuyên cung cấp docs. Cho agent gọi resolve-library-id để tìm đúng package, rồi get-library-docs mỗi khi cần tra API mới. Nhờ vậy agent đọc tài liệu thật trước khi code, tránh bịa tên hàm đã lỗi thời. Làm một lần, tiết kiệm hàng giờ dò bug sau này.
Trước đây (chưa có AI):
Giờ (với AI):
Bạn không còn là “người xây nhà” — mà là người thiết kế và giám sát công trình.
Copy code mà không đọc — bug chắc chắn sẽ tới.
Tin AI mù quáng — nó có thể bịa API hoặc dùng cách đã có từ thời khủng long.
Bỏ qua test — code AI viết mà không test = bom nổ chậm.
AI giúp bạn tăng tốc, nhưng không thể thay thế:
Đây là thứ AI không có — chỉ con người có khả năng phán đoán.
AI không thay thế bạn — nó nâng cấp bạn.
Người thắng với AI là người:
Người thua là:
Bạn chọn ở phe nào?
Lần tới khi code, thử làm khác đi:
Tin tôi đi — bạn sẽ thấy sự khác biệt ngay.
P/S: Nếu bạn thấy bài viết này hữu ích, hãy share cho đồng nghiệp nhé!
Càng nhiều dev biết dùng AI đúng cách, cộng đồng dev Việt càng mạnh.
Written by Hien Nguyen – Fullstack Dev tận dụng AI để build nhanh hơn, học nhiều hơn, và ngủ đủ giấc hơn.