← Lập trình với Claude Code

Bài 14 · Nâng cao · 24 phút· Cập nhật 13/07/2026

Kiểm chứng & tự động hoá

Biên soạn bởi Nguyễn Anh Tuấn

Đừng tin mù quáng: chạy test/build, đọc lại diff - bạn chịu trách nhiệm cuối. Headless (claude -p), Agent SDK & CI.

Đây là bài quan trọng nhất khoá, dù ngắn. Claude tự kiểm chứng trong vòng lặp của nó (chạy test, đọc lại) và bắt được nhiều lỗi - nhưng không phải tất cả. Nó có thể hiểu sai ý bạn, “tin” một test yếu, hay bỏ sót ca biên. Một công cụ dạy/làm mà sai còn tệ hơn không có - nên lớp kiểm chứng cuối cùng là bạn.

  • Claude tăng tốc bạn, nhưng TRÁCH NHIỆM cuối về code vẫn là của bạn.
  • ”Test xanh” chưa chắc là “đúng yêu cầu” - test có thể yếu hoặc sai hướng.
  • Tin nhưng phải kiểm: đọc diff, chạy lại, thử ca biên trước khi gộp/giao.

Thử ngay: Claude vừa báo xong một việc - bạn kiểm bằng cách nào thì bắt được bug?

Chọn một kịch bản. Claude vừa báo xong - bạn tin hay kiểm? Chọn bước kiểm, rồi bấm "Kiểm":

Claude báo cáo

"Xong! 12/12 test xanh. Tôi đã refactor hàm tính thuế theo yêu cầu."

Bạn sẽ kiểm bằng cách nào? (chọn một hoặc nhiều)

Chọn ít nhất một bước

Nhớ vòng lặp ở bài “Cách hoạt động” và lớp review thủ công ở bài “Review code AI sinh ra”: Claude tự sửa tới khi kiểm chứng đạt. Vậy hãy cho nó một cái đích rõ ràng - rồi tự bạn kiểm lần cuối:

  • Cho đích ngay từ đầu: một test, kết quả mong đợi, hay ảnh giao diện đúng.
  • Tự kiểm cuối: chạy test/build, ĐỌC diff, thử tay vài trường hợp quan trọng.
  • Soi ca biên: rỗng, rất lớn, sai định dạng, lỗi mạng… - chỗ AI hay sót.
  • Nghi ngờ test “quá dễ xanh”: nó có thật sự kiểm điều bạn cần không?

Kiểm chứng là kỹ năng, không phải gánh nặng

Càng cho Claude đích tốt để tự đối chiếu, bạn càng đỡ phải sửa tay. Kiểm chứng giỏi = ra đề giỏi + đọc kết quả giỏi - đúng hai kỹ năng cả khoá này rèn.

Đến giờ ta dùng Claude Code tương tác. Nó còn chạy phi tương tác bằng cờ -p (print) - đọc stdin, in stdout như một lệnh shell, hợp cho script & CI:

headless: nhúng Claude vào dòng lệnh

# Hoi mot cau, in ket qua
claude -p "Module auth lam gi?"

# Pipe du lieu vao, lay ket qua ra
git diff main | claude -p "liet ke loi chinh ta trong diff nay"

# Tu cho phep cong cu + ket qua co cau truc (JSON)
claude -p "Chay test va sua loi" --allowedTools "Bash,Read,Edit"
claude -p "Tom tat du an" --output-format json
  • -p (hay --print): chạy một lần, không vào REPL.
  • --allowedTools "Bash,Read,Edit": tự cho phép công cụ (không hỏi) - cần cho CI.
  • --output-format json: lấy kết quả có cấu trúc để script xử lý tiếp.
  • Lệnh gọi tay (/review…) KHÔNG có ở chế độ -p; hãy mô tả việc bằng lời.

Muốn nhúng Claude Code vào ứng dụng của riêng bạn? Dùng Agent SDK - cùng tools, vòng lặp agentic và quản lý ngữ cảnh, gọi được từ Python hoặc TypeScript:

cài đặt

# TypeScript
npm install @anthropic-ai/claude-agent-sdk

# Python
pip install claude-agent-sdk

agent tối giản (TypeScript)

import { query } from "@anthropic-ai/claude-agent-sdk";

for await (const message of query({
  prompt: "Tìm và sửa lỗi trong auth.ts",
  options: { allowedTools: ["Read", "Edit", "Bash"] }
})) {
  console.log(message);
}
  • Agent SDK = Claude Code “dưới dạng thư viện” cho Python/TypeScript.
  • CLI: phát triển tương tác, việc một lần. SDK: ứng dụng & tự động hoá sản xuất.
  • Cần khoá API (ANTHROPIC_API_KEY) - hợp cho dịch vụ chạy nền/CI.

Ghép lại: bạn có thể chạy claude -p trong CI, hay để @claude review PR tự động (bài trước). Nhưng nhớ nghịch lý:

Tự động hoá càng nhiều, kiểm chứng càng quan trọng

Tự động hoá khuếch đại cả cái đúng lẫn cái sai - một lỗi lọt qua sẽ lặp ở quy mô lớn. Vì thế: test phải chắc, dùng hook để kiểm tra tự động, và luôn giữ con người ở những điểm quan trọng (trước khi merge, trước khi deploy). Tự động hoá KHÔNG thay thế trách nhiệm - nó làm trách nhiệm của bạn quan trọng hơn.

Sẵn sàng cho capstone 🎯

Bạn đã đi trọn lý thuyết & công cụ: là gì → hoạt động → tương tác → đọc/sửa → CLAUDE.md → command → Skills → Subagents → Hooks → MCP → Plugins → git/PR → kiểm chứng. Bài cuối: 5 dự án thực chiến để biến tất cả thành kỹ năng thật trên dự án của bạn.

Câu hỏi thường gặp

Vòng tự kiểm của Claude bắt được NHIỀU lỗi của chính nó, nhưng không phải tất cả. Nó có thể hiểu sai ý bạn (làm đúng thứ bạn không cần), “tin” một test yếu, hoặc bỏ sót trường hợp biên. Bạn là lớp kiểm chứng cuối: đọc diff, kiểm xem có ĐÚNG YÊU CẦU không, thử vài ca biên. AI tăng tốc; trách nhiệm vẫn là của bạn.

Cho Claude “một cái đích để tự đối chiếu” NGAY TỪ ĐẦU: một test, mô tả kết quả mong đợi, hay ảnh giao diện đúng. Khi đó vòng lặp của nó tự sửa tới khi đạt đích. Cuối cùng bạn vẫn: chạy test/build, đọc diff, và thử tay vài trường hợp quan trọng.

Là chạy Claude Code KHÔNG tương tác: claude -p "việc cần làm". Nó đọc stdin, in kết quả ra stdout như một lệnh shell bình thường - hợp để nhúng vào script, build, hay CI. Thêm --allowedTools để tự cho phép công cụ, --output-format json để lấy kết quả có cấu trúc.

Cùng “bộ não” (tools + vòng lặp + quản lý ngữ cảnh), khác giao diện. CLI hợp phát triển tương tác & việc một lần. Agent SDK (thư viện Python/TypeScript) hợp khi BẠN tự dựng ứng dụng/agent của riêng mình hoặc tự động hoá sản xuất - gọi hàm query() từ code.

Không. Các skill bạn gọi tay (/review, /code-review…) và lệnh dựng sẵn chỉ có trong chế độ TƯƠNG TÁC. Ở chế độ -p, hãy MÔ TẢ việc cần làm bằng lời (vd “review diff này về bảo mật”) thay vì gọi lệnh.

Ngược lại. Tự động hoá KHUẾCH ĐẠI cả cái đúng lẫn cái sai - một lỗi lọt qua sẽ lặp lại ở quy mô lớn. Vì thế càng tự động hoá, bạn càng cần: test chắc, hook kiểm tra, và CON NGƯỜI duyệt ở những điểm quan trọng (nhất là trước khi merge/deploy).

Tick những điều em tự tin làm được. Càng lên cao, em càng hiểu sâu.

Tick những điều em tự tin làm được sau khi học bài này. 0/6

Trả lời vài câu để chắc rằng em đã nắm bài.

Câu 1/3 Điểm: 0

Vì sao “test xanh” do Claude chạy chưa đủ để yên tâm?

  1. 1

    Cái đích để tự kiểm

    Lần tới khi nhờ Claude sửa gì, kèm theo MỘT tiêu chí kiểm chứng (một test, hoặc “đúng khi in ra X”). So với khi không kèm.

    Hoàn thành khi: Bạn thấy Claude tự sửa tới khi đạt đích bạn đưa; kết quả ít phải qua lại hơn.

  2. 2

    Đọc diff như một reviewer

    Với một thay đổi Claude vừa làm, đọc toàn bộ diff và liệt kê 1 câu hỏi kiểm chứng (vd “ca rỗng thì sao?”).

    Hoàn thành khi: Bạn nêu được ít nhất một trường hợp cần thử thêm - không chỉ tin “test xanh là xong”.

  3. 3

    Headless đầu tiên

    Chạy: git diff main | claude -p "liệt kê lỗi chính tả trong diff này, mỗi lỗi một dòng". Xem kết quả.

    Hoàn thành khi: Claude in danh sách (hoặc “không có”) ra terminal - bạn vừa dùng Claude Code phi tương tác.

  4. 4

    Một script “linter AI”

    Thêm vào package.json (hoặc một script shell) một lệnh dùng claude -p để soi diff trước khi commit.

    Hoàn thành khi: Chạy script đó cho ra nhận xét tự động; bạn hiểu cách nhúng Claude vào quy trình.

  5. 5

    CLI hay SDK?

    Bằng lời: việc “một lần, ngay trên máy” nên dùng gì? Còn “dựng một dịch vụ tự review PR cho cả công ty”?

    Hoàn thành khi: Một lần/tương tác → CLI (claude / claude -p). Sản phẩm/tự động hoá sản xuất → Agent SDK.