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)
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
Đế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
Sẵn sàng cho capstone 🎯
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.
Tick những điều em tự tin làm được. Càng lên cao, em càng hiểu sâu.
Trả lời vài câu để chắc rằng em đã nắm bài.
Vì sao “test xanh” do Claude chạy chưa đủ để yên tâm?
- 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
Đọ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
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
Một script “linter AI”
Thêm vào
package.json(hoặc một script shell) một lệnh dùngclaude -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
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.