---
title: "Những vấn đề hay gặp khi dùng AI viết code và cách tránh"
url: https://phatdev.net/vi/blog/ai-coding-common-problems
lang: vi
updated: 2026-10-21
alternate:
  en: https://phatdev.net/en/blog/ai-coding-common-problems
markdown: https://phatdev.net/vi/blog/ai-coding-common-problems.md
---

# Những vấn đề hay gặp khi dùng AI viết code và cách tránh

> Sáu cái bẫy quen thuộc: AI bịa hàm, sửa lan, hết lượt dùng giữa chừng, quên điều đã dặn, test giả qua và lộ khoá bí mật. Mỗi bẫy có dấu hiệu, lý do và cách phòng.

Chuyên mục: AI | Đăng: 2026-10-21 | Cấp độ: Cơ bản | 6 phút đọc

Tags: ai-coding, hallucination, quota, context, testing, secrets

Chiều thứ sáu, bạn nhờ AI thêm tính năng xuất đơn hàng ra Excel. Nó viết xong, báo "đã hoàn thành, test đều qua". Bạn deploy. Sáng thứ hai khách báo file Excel trống, và trang thanh toán cũng lỗi theo, dù bạn không hề nhờ đụng vào trang đó.

Chuyện kiểu này không hiếm. AI viết code rất nhanh, nhưng nó có sáu cái bẫy quen thuộc. Biết trước thì tránh được gần hết. Mình đi qua từng cái: dấu hiệu để nhận ra, lý do nó xảy ra, và cách phòng.

## 1. AI bịa ra hàm hoặc thư viện không có

Dấu hiệu: code trông rất hợp lý, nhưng chạy lên báo "không tìm thấy hàm" hoặc "không có thư viện này". Có khi tên hàm giống thật đến mức bạn mất nửa tiếng đi tìm lỗi ở chỗ khác.

Lý do: AI đoán chữ tiếp theo dựa trên những gì nó đã thấy, không tra cứu một danh sách hàm chính xác. Khi nhớ không rõ, nó điền vào một cái tên nghe hợp lý. Tài liệu của Anthropic cũng khuyên cho phép AI nói "tôi không chắc" và yêu cầu nó dẫn nguồn khi trả lời dựa trên tài liệu.

Cách phòng: cho AI xem tài liệu thật của thư viện (dán đoạn liên quan hoặc đưa link) thay vì để nó tự nhớ. Trước khi cài thư viện lạ, tự mở trang chính thức của nó và xem nó có thật, còn được duy trì không. Và luôn chạy thử, vì lỗi này lộ ra ngay lúc chạy.

![Một khối hàm trong suốt nằm giữa các khối thật: AI nối vào một thứ không có thật](https://phatdev.net/uploads/blog/ai-coding-common-problems/phantom-1920.webp)

## 2. Sửa lan sang chỗ bạn không nhờ

Dấu hiệu: bạn nhờ sửa một hàm, nhưng danh sách file thay đổi dài hơn nhiều. Nó đổi tên biến ở chỗ khác, "dọn" một đoạn code cũ, thêm một thư viện.

Lý do: AI cố làm cho tổng thể gọn đẹp, và nó không biết đoạn code "thừa" kia đang được một chức năng khác dùng.

Cách phòng: nói rõ phạm vi ngay từ đầu ("chỉ sửa file này, không đổi tên gì, không thêm thư viện"). Làm trên một nhánh git riêng để xem được chính xác những gì đã đổi, bằng lệnh `git diff`. Đọc diff trước khi nhận. Tài liệu Claude Code cũng khuyên đặt phạm vi rõ ràng, chỉ ra file và tình huống cần sửa, thay vì ra lệnh chung chung.

![Vùng được giao sáng lên, còn vài thay đổi rò ra ngoài ranh giới](https://phatdev.net/uploads/blog/ai-coding-common-problems/scope-1920.webp)

## 3. Chạm giới hạn lượt dùng giữa chừng

Dấu hiệu: đang làm dở, công cụ báo hết hạn mức, bạn phải chờ vài giờ. Tệ hơn, nó dừng giữa lúc đã sửa nửa số file.

Lý do: các gói thuê bao tính hạn mức theo cửa sổ thời gian. Theo trang giá của Claude (kiểm ngày 21/10/2026), hạn mức tính theo cửa sổ 5 giờ cộng giới hạn theo tuần, dùng chung giữa app Claude và Claude Code. Tài liệu giá của Codex cũng nêu cửa sổ 5 giờ và có thể có giới hạn theo tuần, và chế độ nhanh (fast mode) hay việc tạo ảnh đều tiêu hao hạn mức nhanh hơn.

Cách phòng: chia việc lớn thành các bước nhỏ, mỗi bước xong là commit, để lúc bị ngắt bạn vẫn có một điểm sạch để quay lại. Nhờ AI ghi tiến độ vào một file ghi chú để phiên sau (hoặc công cụ khác) đọc và làm tiếp. Việc đơn giản dùng mô hình nhỏ và rẻ hơn. Nếu thường xuyên chạm trần, tính xem dùng API trả theo lượng dùng có hợp hơn không.

## 4. Cuộc trò chuyện dài, AI quên điều bạn dặn

Dấu hiệu: đầu phiên nó làm đúng quy ước của bạn, càng về sau càng lệch. Nó hỏi lại điều bạn đã nói, hoặc lặp lại một lỗi đã sửa.

Lý do: mọi thứ trong cuộc trò chuyện, gồm lời bạn, file nó đọc và kết quả lệnh, đều nằm trong một vùng nhớ có giới hạn (gọi là ngữ cảnh, hay context). Tài liệu Claude Code nói thẳng: vùng này đầy rất nhanh, và khi đầy thì chất lượng giảm, AI có thể bắt đầu "quên" chỉ dẫn trước đó.

Cách phòng: một phiên một việc. Xong việc thì bắt đầu phiên mới (Claude Code có lệnh `/clear`). Nếu bạn đã sửa AI hai lần mà vẫn sai, đừng sửa lần ba, hãy mở phiên mới với yêu cầu rõ hơn. Những quy ước phải nhớ lâu thì ghi vào file hướng dẫn của dự án (với Claude Code là CLAUDE.md), giữ file ngắn, kẻo chính nó cũng bị bỏ qua.

![Cuộn giấy dài chạy qua khung cửa sổ: phần cũ mờ dần, phần mới rõ](https://phatdev.net/uploads/blog/ai-coding-common-problems/context-1920.webp)

## 5. Test "xanh" nhưng chẳng kiểm gì

Dấu hiệu: AI báo toàn bộ test qua, nhưng lỗi vẫn còn. Khi mở file test ra, bạn thấy nó chỉ gọi hàm mà không kiểm kết quả, hoặc kiểm đúng cái nó vừa viết, hoặc đã sửa luôn test cho khớp code sai.

Lý do: nếu mục tiêu là "làm test qua", cách ngắn nhất đôi khi là làm test dễ đi. AI không cố lừa bạn, nhưng nó tối ưu theo điều bạn đo.

Cách phòng: tự viết trước vài ví dụ đúng sai bằng lời ("100 giảm 10 phần trăm phải ra 90"), đưa cho AI làm chuẩn. Yêu cầu nó cho bạn xem kết quả chạy thật thay vì chỉ nghe lời báo. Cho một AI khác (hoặc phiên mới) đọc lại test và tìm chỗ nó không kiểm gì. Tài liệu Claude Code cũng nhấn mạnh: không có cách kiểm thì "trông xong" là tín hiệu duy nhất, và bạn phải làm vòng kiểm đó thay.

## 6. Lộ khoá bí mật trong prompt

Dấu hiệu: bạn dán cả file cấu hình hoặc cả đoạn log lên để hỏi, trong đó có mật khẩu database hoặc khoá API.

Lý do: mọi thứ bạn dán đều được gửi đi. Với Claude Code, tài liệu ghi rằng hội thoại được lưu cục bộ dạng văn bản thường trong thư mục `~/.claude/projects/` (mặc định 30 ngày). Và theo từng loại tài khoản, nội dung có thể được lưu hoặc dùng cho mục đích khác theo điều khoản (xem bài [Claude, Codex và Gemini: chọn trợ lý AI viết code nào cho việc gì](https://phatdev.net/vi/blog/claude-codex-gemini-for-coding) phần dữ liệu).

Cách phòng: đừng bao giờ dán khoá thật. Thay bằng chữ giả như `API_KEY=xxx`. Đặt bí mật trong file `.env` và đưa file đó vào `.gitignore`. Nếu lỡ dán, coi như lộ: đổi khoá ngay, không cần chờ xem có chuyện gì.

## Cho bạn nào viết code

Ba đoạn nhỏ dưới đây mình đã chạy thật trên máy (Python 3, pytest).

Kiểm xem một hàm AI gợi ý có tồn tại không, trước khi mất thời gian:

```python
import importlib

def exists(module, name):
    try:
        return hasattr(importlib.import_module(module), name)
    except ImportError:
        return False

print(exists("json", "loads"))       # True
print(exists("json", "parse_file"))  # False
```

Test giả và test thật. Hàm bên dưới cố tình sai, nhưng test đầu vẫn xanh:

```python
def apply_discount(price, pct):
    return 0  # sai cố ý

def test_fake():
    apply_discount(100, 10)               # luôn xanh

def test_real():
    assert apply_discount(100, 10) == 90  # đỏ, đúng như cần
```

Chạy `pytest -q` ra "1 failed, 1 passed": chỉ test thật mới bắt được lỗi.

Quét nhanh bí mật trước khi dán (chỉ bắt vài mẫu quen, không thay cho công cụ chuyên dụng):

```python
import re, sys

PATTERNS = [
    r"sk-[A-Za-z0-9_-]{20,}",
    r"AKIA[0-9A-Z]{16}",
    r"(?i)(password|passwd|secret|token)\s*[:=]\s*\S+",
    r"-----BEGIN [A-Z ]*PRIVATE KEY-----",
]
text = sys.stdin.read()
if any(re.search(p, text) for p in PATTERNS):
    print("DUNG LAI: có vẻ có bí mật")
    sys.exit(1)
```

## Làm gì tiếp theo

Chọn một dự án nhỏ và thử ba thói quen: làm trên nhánh riêng, luôn đọc diff, và đưa cho AI ví dụ đúng sai trước khi nhờ viết. Ba thói quen này giúp tránh được nhiều chuyện ở trên. Muốn viết yêu cầu cho AI rõ hơn, xem [Viết yêu cầu cho AI sao cho nó làm đúng và không bịa](https://phatdev.net/vi/blog/prompt-engineering-for-developers). Còn nếu cho AI chạy lệnh thẳng trên máy, đọc tiếp [Cho AI agent chạy lệnh trên máy hoặc máy chủ của bạn: giữ an toàn thế nào](https://phatdev.net/vi/blog/ai-agent-safety-on-your-machine).

## Nguồn tham khảo

- [Anthropic - Reduce hallucinations](https://platform.claude.com/docs/en/test-and-evaluate/strengthen-guardrails/reduce-hallucinations)
- [Claude Code - Best practices](https://code.claude.com/docs/en/best-practices)
- [Claude Code - Data usage](https://code.claude.com/docs/en/data-usage)
- [Claude - Pricing (kiểm 21/10/2026)](https://claude.com/pricing)
- [Codex - Pricing (kiểm 21/10/2026)](https://learn.chatgpt.com/docs/pricing)
- [OWASP Top 10 for LLM Applications](https://genai.owasp.org/llm-top-10/)

## Bài liên quan

- [Claude, Codex và Gemini: chọn trợ lý AI viết code nào cho việc gì](https://phatdev.net/vi/blog/claude-codex-gemini-for-coding.md)
- [Cho AI agent chạy lệnh trên máy hoặc máy chủ của bạn: giữ an toàn thế nào](https://phatdev.net/vi/blog/ai-agent-safety-on-your-machine.md)
- [Viết yêu cầu cho AI sao cho nó làm đúng và không bịa](https://phatdev.net/vi/blog/prompt-engineering-for-developers.md)
