Bỏ qua tới nội dung

AI viết code bị lỗi: tả lỗi thế nào để AI sửa được

Nhờ AI làm trang web mà bấm không chạy, nói 'sửa đi' mãi vẫn hỏng? Cách lấy lỗi đỏ trong Console, tả mong đợi và thực tế, kèm mẫu chép dùng ngay.

Hướng dẫn8 phút đọc

"Không chạy. Sửa đi."

Đây là câu người mới hay gõ nhất khi nhờ AI làm trang web hay công cụ nhỏ. AI trả lời rất tự tin, sửa một loạt, bạn bấm thử: vẫn hỏng. Gõ lại câu đó. AI sửa chỗ khác. Ba bốn vòng sau, trang còn tệ hơn lúc đầu.

Web AI247 bạn đang đọc do mình dựng cùng AI (Claude Code), không thuê lập trình viên. Mình nghĩ AI sửa được hay không phụ thuộc vào cách bạn tả lỗi nhiều hơn là vào việc bạn dùng AI nào. Bài này chỉ bạn cách tả lỗi để AI sửa trúng hơn, kèm một mẫu chép dùng được ngay.

Vì sao "sửa đi" không ăn thua

AI không nhìn thấy màn hình của bạn. Nó chỉ có đoạn code nó viết và câu bạn vừa gõ. "Không chạy" có thể là trang trắng tinh, nút bấm không phản hồi, số tính sai, hay chữ bị lệch trên điện thoại. Bốn chuyện khác hẳn nhau.

Thiếu thông tin, AI phải đoán. Mà khi đoán, nó thường sửa luôn vài chỗ "cho chắc". Chỗ đang chạy tốt cũng bị đụng vào. Lỗi cũ còn đó, giờ có thêm lỗi mới.

  1. Trang tính tiền không chạy. Sửa đi.
  2. Có thể nút chưa gắn đúng hàm. Mình viết lại phần nút và phần tính cho bạn nhé.
    Đoán, vì không thấy lỗi
  3. Bấm Tính tiền không ra tổng. Console báo: Cannot set properties of null (setting 'textContent'), dòng 19.
  4. Dòng 19 tìm ô có id “tong-tien”, nhưng ô kết quả lại đặt id “tongTien”. Sửa cho trùng là chạy.
    Đúng chỗ, sửa một dòng
Minh hoạ, câu trả lời của AI là ví dụ, không chép từ một công cụ cụ thể. Có lỗi nguyên văn, AI chỉ ra đúng dòng hỏng.

"id" trong tin cuối là tên riêng gắn cho một ô trên trang, để code tìm tới đúng ô đó. Còn đoạn lỗi ở tin thứ ba không phải mình bịa ra cho đẹp. Phần dưới là cách lấy được nó.

Thử với một lỗi thật

Dưới đây là một trang tính tiền quán cà phê, kiểu trang AI hay viết khi bạn nhờ "làm cho mình trang tính tiền đơn giản". Mình cố tình để một lỗi trong đó. Nếu đang ngồi máy tính, bạn có thể làm theo: mở Notepad, dán đoạn này vào, lưu với tên tinh-tien.html, rồi bấm đúp để mở. Máy mở bằng Chrome hay Edge đều được, hai trình duyệt này dùng chung phím F12.

tinh-tien.html
HTML
<!DOCTYPE html>
<html lang="vi">
<head>
  <meta charset="utf-8">
  <title>Tính tiền quán cà phê</title>
</head>
<body>
  <h1>Tính tiền</h1>
  <p>Cà phê sữa (25000đ): <input id="caPheSua" type="number" value="2"></p>
  <p>Bạc xỉu (29000đ): <input id="bacXiu" type="number" value="1"></p>
  <button onclick="tinhTien()">Tính tiền</button>
  <p id="tongTien"></p>
 
  <script>
    function tinhTien() {
      const caPheSua = document.getElementById("caPheSua").value;
      const bacXiu = document.getElementById("bacXiu").value;
      const tong = caPheSua * 25000 + bacXiu * 29000;
      document.getElementById("tong-tien").textContent = "Tổng: " + tong + "đ";
    }
  </script>
</body>
</html>

Bấm nút "Tính tiền". Không có gì xảy ra. Không báo lỗi, không hiện tổng. Đúng cái cảm giác "nó không chạy".

Mở Console, chép dòng chữ đỏ

Trang web có một chỗ ghi lại lỗi mà bình thường bạn không thấy: bảng Console trong công cụ dành cho nhà phát triển (DevTools) của trình duyệt.

  • Trên Windows: bấm F12 rồi chọn thẻ Console, hoặc bấm thẳng Ctrl + Shift + J.
  • Trên Mac: Cmd + Option + J.

Mở xong, bấm lại nút "Tính tiền". Lần chạy thử file này trên Chrome 156 (ngày 02/11/2026), Console hiện một dòng đỏ (đường dẫn file đã rút gọn):

Văn bản
Uncaught TypeError: Cannot set properties of null (setting 'textContent')
    at tinhTien (tinh-tien.html:19:56)
    at HTMLButtonElement.onclick (tinh-tien.html:11:32)

Bạn không cần hiểu hết. Chỉ cần biết hai thứ. null nghĩa là code đi tìm một thứ trên trang mà không thấy. tinh-tien.html:19 là dòng 19, chỗ lỗi xảy ra. Nhìn lại dòng 19 ở trên: code tìm tong-tien, còn ô kết quả ở dòng 12 có id là tongTien. Một bên có gạch ngang, một bên viết liền và chữ T viết hoa. Với trình duyệt, đó là hai cái tên khác nhau.

Việc của bạn là chép nguyên văn dòng đỏ đó gửi AI. Không tóm tắt, không dịch, không sửa chữ nào. Một chữ "null" hay một con số dòng là thứ giúp AI khỏi phải đoán.

Nhiều người ngại bấm F12 vì sợ làm hỏng trang. Không đâu. Bạn chỉ đọc thì chẳng có gì thay đổi, đóng bảng đi hoặc tải lại trang là mọi thứ như cũ.

Mẫu tả lỗi, chép dùng ngay

Một lời tả lỗi đủ dùng có bốn ý: đang làm gì, làm sao để lỗi hiện ra, mong thấy gì, thực tế thấy gì. Thêm một câu dặn AI cách sửa. Đây là mẫu, thay phần trong ngoặc vuông:

Văn bản
Mình đang làm: [trang hay công cụ gì, mở bằng gì, ví dụ mở file HTML bằng Chrome]
 
Các bước để lỗi hiện ra:
1. [bước 1]
2. [bước 2]
 
Mong đợi: [điều lẽ ra phải thấy]
Thực tế: [điều đang thấy]
 
Thông báo lỗi, chép nguyên văn:
[dán dòng lỗi đỏ ở đây; không có thì ghi "Console không báo lỗi"]
 
Bạn giải thích nguyên nhân trước, chưa sửa vội. Sau đó chỉ sửa đúng chỗ gây lỗi, không đổi phần khác, và nói rõ đã đổi dòng nào.

Với trang tính tiền ở trên, bản điền xong trông thế này:

Văn bản
Mình đang làm: trang tính tiền quán cà phê, file tinh-tien.html, mở bằng Chrome trên máy tính.
 
Các bước để lỗi hiện ra:
1. Mở file, để nguyên số ly mặc định (2 cà phê sữa, 1 bạc xỉu).
2. Bấm nút "Tính tiền".
 
Mong đợi: hiện dòng "Tổng: 79000đ" bên dưới nút.
Thực tế: không hiện gì cả.
 
Thông báo lỗi, chép nguyên văn:
Uncaught TypeError: Cannot set properties of null (setting 'textContent')
    at tinhTien (tinh-tien.html:19:56)
    at HTMLButtonElement.onclick (tinh-tien.html:11:32)
 
Bạn giải thích nguyên nhân trước, chưa sửa vội. Sau đó chỉ sửa đúng chỗ gây lỗi, không đổi phần khác, và nói rõ đã đổi dòng nào.

Gửi đi, AI có đủ dữ kiện để chỉ ra dòng 19. Đổi "tong-tien" thành "tongTien" rồi chạy lại, trang hiện đúng "Tổng: 79000đ".

Dài hơn "sửa đi" chừng một phút gõ. Đổi lại, bạn thường khỏi mất thêm mấy vòng hỏi qua hỏi lại. Hướng dẫn dùng Claude Code của Anthropic cũng nói ý tương tự: nói rõ triệu chứng và thế nào là "đã sửa xong" ngay từ đầu thì thường đỡ được một vòng chỉnh sửa về sau.

Khi không có dòng chữ đỏ nào

Có những lỗi Console im re. Thử thêm vào trang trên (sau khi đã sửa dòng 19) một ô phí giao hàng, đặt ngay dưới dòng bạc xỉu:

HTML
<p>Phí giao hàng: <input id="phiGiao" type="number" value="15000"></p>

Rồi trong hàm tinhTien, thay dòng tính tong bằng hai dòng:

JavaScript
const phiGiao = document.getElementById("phiGiao").value;
const tong = caPheSua * 25000 + bacXiu * 29000 + phiGiao;

Lẽ ra phải ra 94000đ. Lần chạy thử thật, bấm "Tính tiền" thì trang hiện:

Văn bản
Tổng: 7900015000đ

Không có lỗi đỏ nào, vì với trình duyệt, đây không phải lỗi. Code đã lấy số trong ô phí giao hàng như một chuỗi chữ, nên thay vì cộng 79000 với 15000, nó ghép hai chuỗi lại: "79000" nối "15000". Sửa bằng cách đổi ô đó thành số trước khi cộng (thay + phiGiao bằng + Number(phiGiao)), chạy lại thì ra 94000đ.

Gặp kiểu này, hai dòng "Mong đợi" và "Thực tế" là thứ duy nhất giúp AI tìm ra chỗ sai. "Mong đợi 94000đ, thực tế 7900015000đ" thường đủ để AI đoán ra chuyện ghép chuỗi. Còn "tính sai rồi" thì không.

Lỗi về giao diện (chữ đè lên nhau, nút bị lệch trên điện thoại) thì chụp màn hình gửi kèm, nếu công cụ bạn dùng nhận ảnh. Ảnh nói nhanh hơn ba câu tả. Nhưng với thông báo lỗi bằng chữ, nên ưu tiên chép chữ: chép thì đúng từng ký tự, còn đọc từ ảnh vẫn có thể sai.

Bắt AI giải thích trước, mỗi lần chỉ sửa một chỗ

Câu cuối trong mẫu ("giải thích nguyên nhân trước, chưa sửa vội") là câu mình thấy đáng giá nhất. Khi phải nói ra nguyên nhân, AI phải chỉ vào một chỗ cụ thể. Nếu lời giải thích nghe mơ hồ kiểu "có thể do nhiều nguyên nhân", đó là dấu hiệu nó cũng đang đoán. Lúc đó bạn đưa thêm thông tin, chưa cho sửa.

Ý thứ hai: mỗi lần chỉ sửa một chỗ, chạy thử, rồi mới sang chỗ khác. Nghe chậm, nhưng nếu AI sửa năm chỗ một lúc mà trang hỏng thêm, bạn không biết chỗ nào gây ra.

Sửa lòng vòng“Sửa đi”AI đổi nhiều chỗChạy thửSửa có thứ tựLỗi nguyên vănSửa đúng 1 chỗChạy thử
Sửa lòng vòng
Hỏng chỗ khác thì không biết do lần đổi nào.
Sửa có thứ tự
Sai thì biết ngay, quay lại cũng dễ.
Cùng một lỗi, sửa có thứ tự chậm hơn một nhịp nhưng biết chắc chỗ nào đã đổi.

Giữ bản chạy được gần nhất

Trước mỗi lần nhờ AI sửa lớn, nên giữ lại bản đang chạy được. Cách đơn giản nhất với người không biết code: chép file ra một bản, đặt tên kiểu tinh-tien-ban-chay-duoc.html. AI sửa hỏng thì mở bản đó ra, coi như chưa có gì.

Với AI247 thì việc này làm bằng git, công cụ lưu lịch sử thay đổi của code: mọi bản sửa đều được lưu lại, sai thì quay về bản trước. Bạn chưa cần học git ngay. Chép file ra một bản là cùng ý tưởng đó, chỉ thủ công hơn.

Công cụ viết code bằng AI thường có sẵn chỗ lùi lại. Claude Code có lệnh /rewind để đưa code và cuộc trò chuyện về một lượt trước. Một số công cụ làm web bằng AI có điểm khôi phục (checkpoint), như bài vibe coding là gì có nhắc. Dùng công cụ nào thì tìm sẵn nút lùi lại của nó trước khi bắt đầu.

Khi nào nên mở cuộc trò chuyện mới

Cùng một lỗi mà đã nhờ sửa hai lần vẫn sai thì nên dừng, đừng gõ lần thứ ba. Hướng dẫn của Anthropic cho Claude Code khuyên đúng như vậy, và giải thích lý do khá thuyết phục: lần sửa thứ ba chỉ chồng thêm vào một cuộc trò chuyện đã chứa hai lần thử hỏng, mà AI thì cứ đọc lại toàn bộ chỗ đó. Mở cuộc mới, viết một yêu cầu gọn có gộp những gì đã biết, thường ăn hơn hẳn.

Lời khuyên đó viết cho Claude Code, nhưng mình thấy lý lẽ ấy cũng đúng khi bạn dùng ChatGPT hay Gemini để viết code. Khi mở cuộc mới, nhớ dán bản code mới nhất (hoặc bản chạy được gần nhất) cùng mô tả lỗi theo mẫu ở trên, và thêm một dòng "đã thử sửa X, không được" để AI khỏi đi lại đường cũ.

Khi tả kỹ mà AI vẫn sửa không được

Tả lỗi tốt giúp AI sửa trúng nhiều lỗi nhỏ: gõ lệch tên, cộng nhầm, thiếu một dòng. Có những lỗi khó hơn, ví dụ chỉ xảy ra trên một loại điện thoại, hay liên quan tới dịch vụ bên ngoài. Cũng có lúc bạn tả đủ cả bốn ý mà AI vẫn loay hoay. Khi đó việc nên làm là thu nhỏ lại: bỏ bớt phần không liên quan cho tới khi còn đúng đoạn gây lỗi, hoặc nhờ một người biết code xem giúp mười phút.

Còn nếu muốn ít lỗi ngay từ đầu, cách tốt nhất mình biết là viết rõ yêu cầu trước khi AI viết dòng code nào, như trong bài viết bản mô tả sản phẩm cho AI. Và nếu bạn muốn AI tự mở file, tự chạy thử, tự đọc lỗi thay vì bạn chép qua chép lại, đọc thêm Claude Code là gì.

Nguồn tham khảo

Kiểm tra ngày 02/11/2026.

  • Open Chrome DevTools: Google, phím tắt mở DevTools và bảng Console.
  • Best practices for Claude Code: Anthropic, tả triệu chứng ngay từ đầu, dán ảnh chụp lỗi, dùng /rewind, mở phiên mới sau hai lần sửa không được.
  • Thông báo lỗi và kết quả "Tổng: 7900015000đ" trong bài lấy từ lần chạy thử thật hai file mẫu trên Chrome 156, ngày 02/11/2026.

Viết bởi Thế cho AI247. Thấy hữu ích? Hãy chia sẻ cho người cần.

FacebookX