Agent Loop là gì? Cách Claude Code tự động đọc file, chạy lệnh và sửa lỗi
Khám phá agent loop - vòng lặp Observe-Decide-Act giúp Claude Code tự động đọc file, chạy test và sửa lỗi. Hiểu sâu cách AI agent khác biệt so với Copilot
Định nghĩa
Claude Code không phải IDE hay plugin autocomplete thông thường, mà là một AI agent vận hành theo vòng lặp liên tục: đọc ngữ cảnh → suy luận → dùng công cụ → quan sát kết quả → lặp lại cho đến khi hoàn thành mục tiêu. Thay vì chỉ gợi ý từng dòng code như Copilot, Claude có thể tự động đọc hàng chục file, chạy test, sửa lỗi, và commit git mà không cần bạn chỉ từng bước.
Giải thích chi tiết
Vòng lặp 3 bước: Observe - Decide - Act
Tưởng tượng Claude như một thực tập sinh siêu nhanh nhưng bị "mù" - em ấy không thấy toàn bộ codebase mà chỉ đọc được từng phần bạn cho phép. Vòng lặp agent là cách em ấy làm việc:
-
Observe (Quan sát): Claude dùng công cụ
Read,Glob,Grepđể thu thập thông tin - đọc file, liệt kê thư mục, tìm kiếm pattern. Giống như thực tập sinh mở tủ hồ sơ để tìm tài liệu liên quan đến nhiệm vụ được giao. -
Decide (Quyết định): Dựa trên dữ liệu thu thập, LLM (Claude 3.5 Sonnet/Opus) phân tích trong context window và quyết định hành động tiếp theo. Em ấy tự hỏi: "Đã đủ thông tin chưa? Cần sửa file nào? Hay chạy test để verify?"
-
Act (Hành động): Claude thực thi qua các tool như
Edit,Write,Bash(chạy lệnh terminal), hoặcMCP(gọi API bên ngoài). Sau mỗi hành động, em ấy nhìn kết quả (output của lệnh, nội dung file sau edit) và quay lại bước 1.
Đây là agent loop - một state machine nơi LLM quyết định chuyển trạng thái, khác hoàn toàn với mô hình "hỏi-đáp" một lượt của ChatGPT thông thường.
Tại sao gọi là "Agent" (tác nhân)?
Thuật ngữ "agent" ám chỉ khả năng tự chủ (agency). Khác với IDE truyền thống chờ bạn bấm nút, Claude chủ động đề xuất chuỗi hành động: "Tôi cần đọc file config trước, rồi sửa hàm utils, sau đó chạy npm test để kiểm tra".
Điểm then chốt là inverted control (đảo ngược điều khiển): Trong lập trình truyền thống, code của bạn "kéo" dữ liệu (const data = fetchAPI()). Trong agent loop, LLM "đẩy" hành động ra ngoài - khi thấy cần thiết, Claude tự gọi tool mà không cần trigger từ bạn.
Context Window - "Trí nhớ làm việc" của Agent
Mỗi vòng lặp, Claude phải "nhìn lại" toàn bộ lịch sử hội thoại (context window ~200K tokens). Đây là bộ nhớ làm việc tạm thời - nếu bạn đóng terminal, session mới bắt đầu với bộ nhớ trống (trừ khi dùng CLAUDE.md để lưu trữ lâu dài).
Điều này giải thích tại sao sau khoảng 20-30 phút chat dài, Claude có thể "quên" những chỉ dẫn đầu tiên - context bị nén (compaction) để nhường chỗ cho kết quả mới. Để tránh điều này, bạn cần hiểu cách Context Window hoạt động và giữ phiên làm việc tập trung.
Ví dụ thực tế
Debug lỗi thanh toán trên app Shopee
Bạn gõ: "Fix lỗi TypeError: Cannot read property 'name' của undefined ở trang giỏ hàng khi khách chưa đăng nhập"
Vòng 1 - Observe: Claude chạy grep "Cannot read property" --include="*.ts" --include="*.tsx" để tìm stack trace, sau đó Read file CartPage.tsx và userContext.ts.
Vòng 2 - Decide: Phát hiện biến user có thể null khi chưa login. Quyết định thêm optional chaining để tránh crash.
Vòng 3 - Act: Dùng Edit để sửa user.name thành user?.name, đồng thời thêm fallback hiển thị "Khách" nếu chưa đăng nhập.
Vòng 4 - Verify: Chạy Bash: npm run test:cart để kiểm tra. Test pass, không còn lỗi TypeError.
Vòng 5 - Commit: Dùng Bash: git commit -m "fix: add null check for guest checkout - Shopee cart" và báo cáo cho bạn: "Đã sửa lỗi, giờ khách chưa đăng nhập sẽ thấy 'Khách' thay vì crash".
Toàn bộ quá trình diễn ra trong 30-60 giây, tự động, không cần bạn copy-paste lỗi hay chỉ đường dẫn file.
Refactor module VietQR từ JavaScript sang TypeScript
Bạn yêu cầu: "Chuyển tất cả file xử lý thanh toán VietQR từ JS sang TS trong thư mục payments/"
Giai đoạn 1: Claude dùng Glob để liệt kê 12 file .js liên quan đến VietQR (generate-qr.ts, validate-bank.ts...), sau đó spawn Subagents (agent con) - mỗi agent xử lý 1 file song song trong context window riêng để tránh "nhiễu" thông tin.
Giai đoạn 2: Mỗi subagent đọc file → thêm interface cho VietQRData → chạy tsc --noEmit để check lỗi type → sửa lỗi nếu có (ví dụ: thêm kiểm tra bankCode phải là string 8 số theo chuẩn Napas) → trả kết quả về agent chính.
Giai đoạn 3: Agent chính tổng hợp kết quả, chạy test toàn bộ hệ thống thanh toán, và báo cáo: "Đã refactor 12 file VietQR, 0 lỗi type, test pass hết, đảm bảo tương thích với API VietQR cũ".
Lập kế hoạch thêm tính năng "Giao hàng 2h" với Planning Mode
Kích hoạt /plan trước khi code:
Bước lập kế hoạch: Claude phân tích yêu cầu "Thêm tính năng giao hàng 2h cho khu vực nội thành Hà Nội", liệt kê các file cần sửa (shipping.ts, deliveryZones.json, CheckoutForm.tsx), và đề xuất kế hoạch 6 bước (thêm zone mới, tính phí ship, validate địa chỉ...). Bạn duyệt kế hoạch trước khi thực thi.
Vòng lặp thực thi: Sau khi bạn approve, Claude chạy agent loop để thực hiện từng bước trong kế hoạch, tự kiểm tra kết quả sau mỗi bước (ví dụ: sau khi sửa logic tính phí, em ấy tự mở file test chạy verify giá ship từ Quận 1 sang Quận 2 có đúng 15k không).
Ứng dụng
Developer mới vào nghề
Hiểu rằng Claude không "viết code ngẫu nhiên" mà có quy trình logic rõ ràng: quan sát → phân tích → hành động → kiểm chứng. Bạn có thể tin tưởng hơn vào các thay đổi khi thấy em ấy tự chạy test để verify. Đây là cách học test-driven development thông qua quan sát agent loop, giúp bạn nhanh chóng quen với chuẩn mực code chuyên nghiệp tại các công ty như Tiki, VNG hay các startup Việt.
Product Manager / Non-coder
Xem Claude như "thực tập sinh siêu tốc" làm việc theo quy trình: tìm hiểu → phân tích → thực hiện → kiểm tra. Bạn không cần biết syntax code, chỉ cần mô tả mục tiêu bằng tiếng Việt (ví dụ: "làm cho nút 'Mua ngay' to hơn khi hover trên mobile"), Claude sẽ tự xử lý vòng lặp để đạt được mục tiêu đó, rồi báo cáo kết quả bằng ngôn ngữ tự nhiên.
Team Lead và Senior Dev
Nắm được agent loop giúp đặt đúng kỳ vọng về Permission Modes. Bạn có thể chọn plan mode để review từng vòng lặp trước khi Claude act (phù hợp cho code liên quan đến tiền bạc, security), hoặc auto mode để cho phép em ấy tự chạy nhiều vòng lặp liên tiếp không cần approve từng bước (phù hợp cho refactor đơn giản, format code).
So sánh
| Đặc điểm | IDE truyền thống (VS Code + Copilot) | Claude Code (Agent) |
|---|---|---|
| Cách thức | Bạn viết code, AI gợi ý từng dòng | Bạn mô tả mục tiêu, AI tự đọc/sửa/chạy |
| Vòng lặp | Không có - hỏi-đáp 1 lượt | Vòng lặp Observe-Decide-Act liên tục |
| Bộ nhớ | Chỉ biết file đang mở | Đọc nhiều file, nhớ ngữ cảnh trong session |
| Kiểm chứng | Bạn tự chạy test | Tự động chạy test trong vòng lặp |
| Quyết định | Bạn quyết định mọi thứ | AI đề xuất sequence hành động |
Kết luận: Claude Code biến coding từ "đánh máy" thành "điều phối". Bạn không còn là người viết từng dòng, mà là người giám sát vòng lặp agent, approve kế hoạch, và verify kết quả cuối cùng - tương tự như quản lý một thực tập sinh giỏi nhưng cần giám sát.
Bài viết liên quan
Cùng cụm (Khái niệm cốt lõi)
- Hệ thống Tools và Permission trong Claude Code - Hiểu sâu các công cụ Claude dùng trong từng vòng lặp Observe-Act
- Context Window 200K token: Tại sao Claude hay 'quên' và cách xử lý - Cách Claude "nhớ" thông tin qua nhiều vòng lặp
- CLAUDE.md: Viết project instructions để Claude Code nhớ mãi không quên - Lưu trữ thông tin bền vững ngoài vòng lặp tạm thời
- 6 chế độ Permission: default, acceptEdits, plan, auto, dontAsk, bypassPermissions - Kiểm soát mức độ tự chủ của agent trong vòng lặp
Đọc tiếp (Thực chiến Level 1)
- Slash commands: /plan, /commit, /debug - Các lệnh điều khiển vòng lặp agent hiệu quả
- Subagents: 6 built-in agents giải thích - Khi nào cần tách vòng lặp thành nhiều agent chạy song song
Bảng giá Claude Code: Pro, Max, Team và Enterprise
Phân tích chi tiết bảng giá Claude Code: từ gói Pro $20/tháng đến Enterprise cho doanh nghiệp. So sánh chi phí với Cursor và Windsurf để chọn phù hợp ngân sách.
Tools và Permission: Cách Claude Code 'ra tay' với 6 cấp độ bảo vệ
Hiểu cách Claude Code 'ra tay' qua hệ thống Tools (Read, Bash, Edit...) và cơ chế Permission 6 cấp độ bảo vệ máy tính của bạn.