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

Bài 2 · Cơ bản · 18 phút· Cập nhật 11/06/2026

Cách Claude Code hoạt động

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

Bản chất: vòng lặp agentic (thu thập ngữ cảnh → hành động → kiểm chứng), bộ công cụ, cửa sổ ngữ cảnh, model và phiên làm việc.

Nhiều người tưởng Claude Code là cái máy: gõ yêu cầu vào là nhận code trả ra. Thực tế nó làm việc giống một lập trình viên hơn nhiều: nó khảo sát dự án, ra tay, rồi tự kiểm tra - và nếu sai thì lặp lại cho đến khi đạt.

Cái “vòng lặp” đó chính là cốt lõi của một agent. Nó gồm ba pha xoay vòng:

  • Thu thập ngữ cảnh: đọc file, tìm kiếm, chạy lệnh đọc - để HIỂU trước khi làm.
  • Hành động: sửa file, tạo file, chạy lệnh - thực sự thay đổi dự án.
  • Kiểm chứng: chạy build/test, đọc lại kết quả - sai thì quay lại Hành động.

Đây là một việc thật: bạn nhờ “Thêm nút Đăng xuất vào header”. Theo dõi Claude đi qua ba pha, gặp lỗi, rồi tự quay lại sửa - màu cho biết mỗi bước thuộc pha nào:

Thu thập ngữ cảnh Hành động Kiểm chứng Bước 1/9
Đọc yêu cầu của bạn Thu thập ngữ cảnh
› Thêm nút "Đăng xuất" vào header

Mọi thứ bắt đầu từ câu bạn gõ. Claude Code chưa biết code của bạn - việc đầu tiên là đi TÌM HIỂU, không phải viết ngay.

  • Mỗi bước nhỏ là một lần dùng công cụ; nhiều bước nối nhau thành một việc lớn.
  • Gặp lỗi KHÔNG phải là dừng - nó quay lại pha Hành động và thử tiếp (đó là vòng lặp).
  • Nó chỉ báo “xong” khi tự kiểm chứng đạt; bạn vẫn nên đọc lại diff lần cuối.

Vì sao bạn cần biết điều này

Hiểu vòng lặp giúp bạn cộng tác đúng cách: cho nó thứ để kiểm chứng (test, mô tả kết quả mong đợi) thì nó tự sửa tới khi đạt; mô tả mơ hồ thì nó loay hoay. Bài “Tương tác hiệu quả” sẽ biến hiểu biết này thành kỹ năng ra đề.

Claude “hành động” được là nhờ một bộ công cụ. Bạn không cần gọi tên chúng - Claude tự chọn công cụ phù hợp cho mỗi bước:

Công cụLàm gìPha
ReadĐọc nội dung file (kể cả ảnh, PDF)ngữ cảnh
GrepTìm theo nội dung (regex) khắp dự ánngữ cảnh
GlobTìm file theo tên/mẫu (vd **/*.ts)ngữ cảnh
EditSửa một đoạn trong file (thay chuỗi)hành động
WriteTạo mới / ghi đè cả filehành động
BashChạy lệnh shell: build, test, git…hành động / kiểm chứng
WebFetch / WebSearchTra cứu tài liệu trên webngữ cảnh
Task (subagent)Giao việc cho một “trợ lý phụ” riêngmở rộng
  • Đọc/tìm (Read/Grep/Glob/Web) = an toàn; Sửa/Chạy (Edit/Write/Bash) = cần thận trọng.
  • Bạn mô tả mục tiêu, KHÔNG cần chỉ định công cụ - Claude tự chọn.
  • Công cụ nào cần hỏi phép do “chế độ quyền” quyết định (bài tiếp theo).

Mở rộng được bộ công cụ

Bộ công cụ trên là mặc định. Bạn có thể THÊM năng lực mới - kết nối công cụ ngoài qua MCP (CSDL, GitHub, API…) - sẽ học ở nửa sau của khoá.

Mọi thứ Claude “biết” trong một phiên nằm trong cửa sổ ngữ cảnh: lời bạn nói, file CLAUDE.md, nội dung file nó đọc, kết quả lệnh. Cửa sổ này rất lớn nhưng có giới hạn (đo bằng token) và đầy dần khi phiên kéo dài.

  • Khi gần đầy, Claude Code TỰ NÉN (compact) phần cũ thành tóm tắt để chạy tiếp.
  • /context - xem ngữ cảnh đang dùng bao nhiêu, mục nào chiếm nhiều.
  • /compact - nén thủ công (có thể nêu trọng tâm cần giữ).
  • /clear - xoá sạch để bắt đầu việc MỚI không liên quan.

Ngữ cảnh: liên quan quan trọng hơn nhiều

Đừng nhồi cả dự án vào cho “chắc ăn”. Ngữ cảnh loãng (đầy file không liên quan) khiến Claude lạc hướng và tốn token. Mẹo vàng: một việc - một phiên gọn; xong việc thì /clear; việc dài thì /compact.

“Bộ não” của Claude Code là một model Claude. Có nhiều bậc - từ nhanh/rẻ tới mạnh nhất - đổi bằng /model:

OpusMạnh nhất, suy luận sâu - việc khó, kiến trúc, bug rối.
SonnetCân bằng tốc độ/chất lượng - phần lớn việc; thường là mặc định.
HaikuNhanh & rẻ - việc đơn giản, lặp nhiều, khối lượng lớn.

Trên các gói cao cấp còn có bậc mạnh hơn nữa (vd Fable) cho việc cực khó hoặc ngữ cảnh rất lớn. Tên model kèm số thế hệ (vd Opus 4.x) và đổi theo thời gian - gõ /model để xem máy bạn đang có những lựa chọn nào.

Mỗi cuộc trò chuyện là một phiên (session), lưu ngay trên máy bạn:

  • Mặc định mỗi lần mở claude là một phiên MỚI (sạch ngữ cảnh).
  • claude --continue: nối lại phiên gần nhất; claude --resume: chọn một phiên cũ.
  • Checkpoint & hoàn tác (rewind): Claude Code lưu ảnh chụp trước mỗi lần sửa file để bạn quay lui - khác với git (học kỹ ở bài “Đọc, sửa code”).

Quan trọng nhất: nó vẫn có thể sai

Vòng lặp tự kiểm chứng giúp 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, hoặc “tin” một test yếu. Bạn là người chịu trách nhiệm cuối - luôn đọc lại diff và chạy kiểm chứng. Cả một bài cuối khoá (“Kiểm chứng & tự động hoá”) dành cho điều này.

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

Vì nó chưa biết dự án của bạn. Viết code mà không hiểu cấu trúc, quy ước đặt tên, thư viện đang dùng… thì rất dễ sai hoặc lạc phong cách. Pha “thu thập ngữ cảnh” (Read/Grep/Glob) giúp nó bắt chước đúng những gì bạn đã có. Đọc trước, sửa sau - y như một lập trình viên giỏi vào dự án mới.

Không. Bạn chỉ mô tả MỤC TIÊU; Claude tự chọn công cụ phù hợp cho từng bước. Việc của bạn là nói rõ muốn gì và duyệt các hành động quan trọng. (Bạn có thể tác động gián tiếp, vd “đừng chạy lệnh xoá”, qua quyền - học ở bài sau.)

Là “bộ nhớ làm việc” của Claude trong một phiên: nó chứa lời bạn nói, CLAUDE.md, nội dung file nó vừa đọc, và kết quả các lệnh. Cửa sổ này có GIỚI HẠN (đo bằng token). Khi phiên kéo dài, nó đầy dần - nên cần biết cách dọn (xem Bước 4).

Không hẳn. Cái cần là ngữ cảnh ĐÚNG VÀ LIÊN QUAN, không phải nhiều. Nhồi cả đống file không liên quan làm “loãng” trọng tâm, tốn token và đôi khi khiến Claude lạc hướng. Chất lượng ngữ cảnh quan trọng hơn số lượng - đây là một trong những kỹ năng cốt lõi của khoá.

/clear xoá sạch ngữ cảnh phiên hiện tại để bắt đầu việc mới tinh. /compact NÉN phần cũ thành tóm tắt nhưng GIỮ mạch việc đang làm. Đóng claude rồi mở lại sẽ tạo phiên mới (sạch) - muốn nối tiếp phiên cũ thì dùng --continue hoặc --resume.

Opus: việc khó, cần suy luận sâu (kiến trúc, bug rối). Sonnet: cân bằng tốc độ/chất lượng cho phần lớn việc - thường là mặc định. Haiku: việc đơn giản, lặp nhiều, cần nhanh & rẻ. Đổi bằng /model. Quy tắc thực dụng: dùng Sonnet trước, nâng lên Opus khi thấy việc thật sự khó.

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

Ba pha của vòng lặp agentic theo đúng thứ tự là gì?

  1. 1

    Ba pha của vòng lặp

    Dùng công cụ ở Bước 2: bấm qua từng bước và viết ra, với MỖI bước, nó thuộc pha nào (ngữ cảnh / hành động / kiểm chứng).

    Hoàn thành khi: Bạn nhận ra mẫu lặp lại: đọc để hiểu → ra tay → kiểm tra; và thấy bước “lỗi → quay lại sửa” là vòng lặp, không phải thất bại.

  2. 2

    Đọc trước, sửa sau

    Bằng lời: nêu một lý do code sẽ TỆ hơn nếu Claude bỏ qua pha “thu thập ngữ cảnh” và viết ngay.

    Hoàn thành khi: Ví dụ: lạc phong cách dự án, gọi sai tên hàm có sẵn, trùng lặp thứ đã tồn tại, hoặc dùng nhầm thư viện.

  3. 3

    Soi ngữ cảnh

    Trong một phiên thật, làm vài việc rồi gõ /context. Phần nào đang chiếm nhiều nhất?

    Hoàn thành khi: Bạn đọc được bản phân tích token theo mục (CLAUDE.md, file đã đọc, hội thoại…) và hiểu vì sao ngữ cảnh đầy lên.

  4. 4

    Dọn đúng lúc

    Làm xong một việc, chuẩn bị sang việc KHÔNG liên quan. Bạn nên gõ /clear hay /compact? Vì sao?

    Hoàn thành khi: /clear - vì việc mới không cần ngữ cảnh việc cũ; giữ lại chỉ tổ làm loãng và tốn token.

  5. 5

    Chọn model

    /model xem các lựa chọn. Với việc “đổi tên một biến trong 1 file”, bạn chọn model nào và vì sao?

    Hoàn thành khi: Một model nhanh/rẻ (vd Haiku/Sonnet) là đủ; việc đơn giản không cần Opus. Bạn giải thích được đánh đổi tốc độ/chi phí/độ khó.