Hiện nay có rất nhiều cuộc thảo luận về việc "thiết kế vòng lặp" thay vì chỉ đưa ra lời nhắc cho agent lập trình của bạn. Nếu bạn dành thời gian trên X để tìm hiểu vòng lặp thực sự là gì, bạn sẽ bắt gặp nhiều câu trả lời khác nhau.
Tại nhóm Claude Code, chúng tôi định nghĩa vòng lặp là các agent lặp lại các chu kỳ công việc cho đến khi đáp ứng được điều kiện dừng. Chúng tôi phân loại một vài loại vòng lặp khác nhau dựa trên:
- Cách chúng được kích hoạt
- Cách chúng dừng lại
- Nguyên thủy Claude Code nào được sử dụng
- Loại tác vụ nào phù hợp nhất với mỗi loại.
Chúng tôi sẽ đề cập đến các loại vòng lặp chính, thời điểm sử dụng từng loại và cách duy trì chất lượng mã trong khi quản lý việc sử dụng token. Không phải tất cả các tác vụ đều yêu cầu vòng lặp phức tạp; hãy bắt đầu với giải pháp đơn giản nhất và sử dụng các mẫu này một cách có chọn lọc.
Vòng lặp theo lượt (Turn-based loops)

- Được kích hoạt bởi: Một lời nhắc của người dùng.
- Tiêu chí dừng: Claude đánh giá rằng nó đã hoàn thành tác vụ hoặc cần thêm ngữ cảnh.
- Tốt nhất cho: Các tác vụ ngắn hơn không phải là một phần của quy trình hoặc lịch trình thông thường.
- Quản lý việc sử dụng bằng cách: Viết các lời nhắc cụ thể và cải thiện việc xác minh bằng cách sử dụng các kỹ năng để giảm số lượt.
Mỗi lời nhắc bạn gửi sẽ bắt đầu một vòng lặp thủ công với bạn chỉ đạo từng lượt. Claude thu thập ngữ cảnh, thực hiện hành động, kiểm tra công việc của nó, lặp lại nếu cần và phản hồi. Chúng tôi gọi đây là vòng lặp agent.
Ví dụ: yêu cầu Claude tạo một nút thích. Nó đọc mã của bạn, thực hiện chỉnh sửa, chạy thử nghiệm và trả về thứ mà nó tin là hoạt động. Sau đó, bạn kiểm tra thủ công công việc và viết lời nhắc tiếp theo.
Bạn có thể cải thiện bước xác minh bằng cách mã hóa các bước thủ công của mình dưới dạng tệp SKILL.md để Claude có thể tự kiểm tra nhiều hơn công việc của mình, từ đầu đến cuối. Điều này nên bao gồm các công cụ hoặc trình kết nối để cho phép Claude nhìn thấy, đo lường hoặc tương tác với kết quả. Các kiểm tra càng định lượng thì Claude càng dễ dàng tự xác minh.
Ví dụ: trong tệp SKILL.md của bạn, bạn có thể chỉ định:
1---2name: verify-frontend-change3description: Xác minh mọi thay đổi UI từ đầu đến cuối trước khi tuyên bố hoàn thành.4---56# Xác minh các thay đổi frontend7Không bao giờ báo cáo một thay đổi UI là hoàn thành chỉ dựa trên một chỉnh sửa thành công. Hãy xác minh nó theo cách mà một người đánh giá sẽ làm:891. Khởi động máy chủ dev và mở trang đã chỉnh sửa trong trình duyệt.10112. Tương tác trực tiếp với thay đổi. Đối với một điều khiển mới (nút, ô nhập liệu, công tắc): nhấp vào nó, xác nhận thay đổi trạng thái mong đợi và chụp ảnh màn hình trước/sau.12133. Kiểm tra bảng điều khiển trình duyệt: không có lỗi hoặc cảnh báo mới.14154. Sử dụng Chrome Devtools MCP, chạy một dấu vết hiệu suất và kiểm tra Core Web Vitals.1617Nếu bất kỳ bước nào thất bại, hãy sửa sự cố và chạy lại từ bước 1 — không trả lại công việc đã xác minh một phần.
Vòng lặp dựa trên mục tiêu (/goal)

- Được kích hoạt bởi: Một lời nhắc thủ công trong thời gian thực.
- Tiêu chí dừng: Đạt được mục tiêu HOẶC đạt đến số lượt tối đa.
- Tốt nhất cho: Các tác vụ có tiêu chí thoát có thể xác minh được.
- Quản lý việc sử dụng bằng cách: Đặt tiêu chí hoàn thành cụ thể và giới hạn lượt rõ ràng, "dừng sau 5 lần thử."
Đôi khi, một lượt là không đủ, đặc biệt là đối với các tác vụ phức tạp hơn. Các agent hoạt động tốt hơn khi chúng có thể lặp lại. Bạn có thể kéo dài thời gian Claude tiếp tục lặp lại bằng cách xác định "đã hoàn thành" trông như thế nào với /goal.
Khi bạn xác định tiêu chí thành công, Claude không phải đưa ra quyết định về điều gì là "đủ tốt" và kết thúc vòng lặp sớm. Mỗi lần Claude cố gắng dừng, một mô hình đánh giá sẽ kiểm tra điều kiện của bạn và gửi nó trở lại làm việc cho đến khi đạt được mục tiêu hoặc đạt đến một số lượt bạn xác định.
Đây là lý do tại sao các tiêu chí xác định, chẳng hạn như số lượng thử nghiệm đã vượt qua hoặc vượt qua một ngưỡng điểm số nhất định, lại hiệu quả đến vậy.
Ví dụ:
1/goal đạt điểm Lighthouse của trang chủ từ 90 trở lên, dừng sau 5 lần thử.
Vòng lặp dựa trên thời gian (/loop và /schedule)
- Được kích hoạt bởi: Một khoảng thời gian được chỉ định.
- Tiêu chí dừng: Bạn hủy nó, hoặc công việc hoàn thành (PR được merge, hàng đợi trống).
- Tốt nhất cho: Công việc định kỳ hoặc giao tiếp với các môi trường / hệ thống bên ngoài.
- Quản lý việc sử dụng bằng cách: Đặt khoảng thời gian dài hơn hoặc phản ứng dựa trên sự kiện thay vì thời gian.
Một số công việc agent là định kỳ: tác vụ giữ nguyên và chỉ đầu vào thay đổi. Ví dụ: tóm tắt tin nhắn Slack mỗi sáng. Công việc khác phụ thuộc vào các hệ thống bên ngoài và một cách đơn giản để giao tiếp với một hệ thống là kiểm tra nó theo một khoảng thời gian và phản ứng với những gì đã thay đổi. Ví dụ: một PR có thể nhận được đánh giá mã hoặc CI thất bại.
Đối với những trường hợp này, bạn có thể kích hoạt khi Claude chạy với \/loop`` để chạy lại một lời nhắc theo một khoảng thời gian. Ví dụ:
1/loop 5m kiểm tra PR của tôi, xử lý các nhận xét đánh giá và sửa CI bị lỗi
\/loop` chạy trên máy tính của bạn, vì vậy nếu bạn tắt nó, nó sẽ dừng. Bạn có thể chuyển vòng lặp lên đám mây bằng cách tạo một quy trình với \/schedule\`.
Vòng lặp chủ động (Proactive loops)

- Được kích hoạt bởi: Một sự kiện hoặc lịch trình, không có con người trong thời gian thực.
- Tiêu chí dừng: Mỗi tác vụ thoát khi đạt được mục tiêu của nó. Bản thân quy trình chạy cho đến khi bạn tắt nó.
- Tốt nhất cho: Các luồng công việc được xác định rõ ràng, định kỳ: báo cáo lỗi, phân loại vấn đề, di chuyển, nâng cấp phụ thuộc, v.v.
- Quản lý việc sử dụng bằng cách: Định tuyến các quy trình đến các mô hình nhỏ hơn, nhanh hơn và sử dụng mô hình có khả năng nhất cho các quyết định mang tính phán đoán.
Các nguyên thủy ở trên, cùng với các tính năng Claude Code khác như chế độ tự động (auto mode) và quy trình làm việc động (dynamic workflows) (bản xem trước nghiên cứu) có thể được kết hợp thành một vòng lặp cho công việc chạy dài.
Ví dụ: để xử lý phản hồi đến, bạn có thể sử dụng:
- `/schedule` (bản xem trước nghiên cứu) để chạy một quy trình kiểm tra các báo cáo mới
- `/goal` để xác định "đã hoàn thành" trông như thế nào và kỹ năng (skills) để ghi lại cách xác minh nó
- Quy trình làm việc động (Dynamic workflows) để điều phối các agent phân loại từng báo cáo, sửa nó và xem xét bản sửa lỗi
- Chế độ tự động (Auto mode) để quy trình chạy mà không dừng lại để xin phép
Kết hợp lại, một lời nhắc có thể trông như thế này:
1/schedule mỗi giờ: kiểm tra kênh project-feedback để tìm báo cáo lỗi. /goal: không dừng lại cho đến khi mọi báo cáo được tìm thấy trong lần chạy này được phân loại, xử lý và phản hồi. Khi sửa lỗi, hãy sử dụng một quy trình làm việc để khám phá ba giải pháp trong các worktree song song và có một người đánh giá đối nghịch xem xét chúng.
Duy trì chất lượng mã
Chất lượng đầu ra của một vòng lặp phụ thuộc vào hệ thống xung quanh nó. Khi thiết kế hệ thống:
- Giữ cho codebase sạch sẽ: Claude tuân theo các mẫu và quy ước đã tồn tại trong codebase của bạn.
- Cung cấp cho Claude cách để tự xác minh công việc của nó: Mã hóa "tốt" trông như thế nào đối với bạn và nhóm của bạn bằng kỹ năng (skills).
- Làm cho tài liệu dễ tiếp cận: Tài liệu về framework và thư viện có các phương pháp hay nhất được cập nhật.
- Sử dụng agent thứ hai để đánh giá mã: Một người đánh giá với ngữ cảnh mới mẻ sẽ ít thiên vị hơn và không bị ảnh hưởng bởi lý luận của agent chính. Bạn có thể sử dụng kỹ năng
\/code-review`` tích hợp sẵn hoặc Code Review cho Github.
Khi một kết quả riêng lẻ không đáp ứng tiêu chuẩn, đừng dừng lại ở việc sửa vấn đề riêng lẻ, hãy cố gắng mã hóa nó để cải thiện hệ thống cho tất cả các lần lặp trong tương lai.
Quản lý việc sử dụng token
Để quản lý việc sử dụng token, các vòng lặp nên có ranh giới rõ ràng:
- Chọn nguyên thủy và mô hình phù hợp cho công việc: Các tác vụ nhỏ hơn không cần nhiều agent hoặc vòng lặp. Một số tác vụ có thể sử dụng các mô hình rẻ hơn và nhanh hơn.
- Xác định tiêu chí thành công và dừng rõ ràng: Hãy cụ thể về "đã hoàn thành" trông như thế nào để Claude có thể đến giải pháp sớm hơn (nhưng không quá sớm).
- Thử nghiệm trước khi chạy quy mô lớn: Quy trình làm việc động có thể tạo ra hàng trăm agent. Hãy đánh giá mức sử dụng trên một phần nhỏ công việc trước.
- Sử dụng script cho công việc xác định: Chạy một script rẻ hơn là suy luận qua các bước. Ví dụ: một kỹ năng PDF có thể cung cấp một script điền biểu mẫu mà Claude chạy mỗi lần, thay vì suy ra lại mã.
- Đừng chạy các quy trình thường xuyên hơn mức cần thiết: Khớp khoảng thời gian với tần suất thay đổi của thứ bạn đang theo dõi.
- Xem xét việc sử dụng: Lệnh
\/usage`phân tích việc sử dụng gần đây theo kỹ năng, subagent và MCP,\/goal\không có đối số hiển thị số lượt và việc sử dụng token cho đến nay,\/workflows\` hiển thị việc sử dụng token của từng agent và bạn có thể dừng một agent bất kỳ lúc nào.
Bắt đầu
Tóm lại:
Vòng lặp
Bạn bàn giao
Sử dụng khi
Sử dụng
Theo lượt
Việc kiểm tra
Bạn đang khám phá hoặc quyết định
Kỹ năng xác minh tùy chỉnh
Dựa trên mục tiêu
Điều kiện dừng
Bạn biết "đã hoàn thành" trông như thế nào
/goal
Dựa trên thời gian
Trình kích hoạt
Công việc diễn ra bên ngoài dự án của bạn theo lịch trình
/loop
,
/schedule
Chủ động
Lời nhắc
Công việc là định kỳ và được xác định rõ ràng
Tất cả những điều trên và quy trình làm việc động
Để bắt đầu với các vòng lặp, hãy nhìn vào công việc bạn đã làm. Chọn một tác vụ mà bạn là nút thắt cổ chai và tự hỏi phần nào bạn có thể bàn giao: bạn có thể viết kiểm tra xác minh không? Mục tiêu có đủ rõ ràng không? Công việc có đến theo lịch trình không?
Khi bạn đã có ý tưởng, hãy chạy vòng lặp, quan sát kết quả như nơi nó bị đình trệ hoặc vượt quá giới hạn và đừng ngại lặp lại nó.
Để biết thêm thông tin, hãy đọc tài liệu Claude Code về chạy các agent song song, cũng như các trang về vòng lặp, lịch trình, mục tiêu và quy trình làm việc động.
Bài viết này được viết bởi @delba_oliveira





