Khi sử dụng AI agent một thời gian để làm các công việc xử lý dữ liệu, Hiếu gặp phải một bài toán là nếu xử lý một khối lượng nhỏ thì agent làm rất tốt. Nhưng khi đưa khối lượng công việc nhiều hơn thì agent bắt đầu có nhiều dấu hiệu như quá tải ngữ cảnh, tìm cách làm nhanh hơn và quên mất những quy tắc mà Hiếu đã cung cấp cho nó. Sau đó, Hiếu đã tìm hiểu về subagent và nghĩ ra ba chiến lược sử dụng subagent giúp xử lý công việc có khối lượng lớn.
Subagent là gì
Theo cách hiểu của Hiếu, subagent là một agent phụ được gọi bởi agent chính của phiên chat. Nó sẽ làm việc theo prompt mà agent chính yêu cầu, sau đó báo cáo lại kết quả để agent chính tổng hợp và báo cáo lại một cách tổng quát cho bạn. Hiện Hiếu đang dùng subagent trong Claude Code, công cụ AI agent của Anthropic.
Subagent có thể được gọi với model khác agent chính. Ví dụ phiên chat của bạn đang dùng model Opus 5.5 (10/2026) cho agent chính nhưng vẫn có thể gọi các subagent với model Sonnet 5.5 để xử lý công việc. Hiếu thấy cách này khá hay, vì những việc không cần suy nghĩ nhiều thì chọn model thấp cho tiết kiệm token, còn agent chính để điều phối thì dùng model cao hơn một chút để suy luận và đánh giá kết quả.
Subagent không thấy cuộc trò chuyện của bạn, vì vậy khi agent chính giao việc cho subagent thì prompt phải hoàn chỉnh. Kết quả của subagent cũng cần agent chính kiểm tra, tổng hợp rồi mới báo cáo lại cho bạn.
3 chiến lược sử dụng subagent
Mặc dù biết là subagent sẽ làm việc song song với agent chính của phiên chat, nhưng qua kinh nghiệm áp dụng vào vài dự án thì Hiếu thấy chọn chiến lược nào sẽ phụ thuộc vào cách chúng ta bóc tách dữ liệu để xử lý và cập nhật dữ liệu vào nơi lưu trữ.
Chiến lược 1 - Dùng subagent để xử lý tuần tự
Dùng subagent để xử lý tuần tự là chiến lược không giúp công việc nhanh hơn nhiều, nhưng nó giúp cửa sổ ngữ cảnh không bị quá tải, từ đó subagent làm việc đúng theo kỹ năng và quy tắc hơn. Nhưng tại sao lại tuần tự?
Để Hiếu lấy một ví dụ từ dự án Hiếu đã làm cho bạn dễ hình dung. Bài toán chính là phân loại tin nhắn trong group chat để biết khách hàng có tạo ra các yêu cầu gì, nhân viên chăm sóc khách hàng nên làm gì, trạng thái của yêu cầu đó đang là gì.
Vì trong một group chat thì agent phải đọc lại vài tin nhắn trước đó để hiểu ngữ cảnh nội dung cho tới tin nhắn đang được phân tích, đọc lại các ticket để đoán xem khách và nhân viên đang trả lời cho ticket nào. Chính vì thế nên Hiếu phải nhờ agent xử lý tuần tự mỗi batch 20-30 tin nhắn để agent không bị quá tải ngữ cảnh.
Bài toán này không thể bảo subagent chạy song song được vì các tin nhắn đang xử lý phụ thuộc vào kết quả của các tin nhắn trước đó. Khi chạy song song sẽ dễ gây nhầm lẫn và kết quả khi lưu bị chồng chéo lên nhau.


Chiến lược 2 - Nhiều subagent song song hoàn toàn
Đây hẳn là chiến lược mà Hiếu thích nhất, vì mỗi subagent được tự do làm việc của nó mà không phụ thuộc vào một kết quả nào trước đó, giúp cho tốc độ xử lý công việc nhanh đến tối đa.
Yêu cầu là bài toán có dạng như xử lý tệp độc lập, mỗi kết quả lưu một nơi riêng, không sợ ghi đè lẫn nhau.
Để bạn dễ hình dung, giả sử bạn có 12 file Excel doanh số của 12 chi nhánh, mỗi file đặt tên cột một kiểu, ngày tháng lúc thì dd/mm/yyyy lúc thì mm/dd/yyyy, tên sản phẩm viết hoa viết thường lộn xộn. Agent chính sẽ chia cho 4 subagent, mỗi subagent làm sạch 3 file và lưu ra thư mục riêng của từng chi nhánh. Vì không file nào phụ thuộc file nào, tổng thời gian gần như chỉ bằng thời gian làm 3 file thay vì cả 12 file. Cuối cùng agent chính gộp các file đã làm sạch lại và kiểm tra số dòng có khớp với dữ liệu gốc không.
Prompt agent chính giao cho mỗi subagent có thể trông như sau, các subagent chỉ khác nhau ở danh sách file:
Bạn làm sạch dữ liệu doanh số cho các file được giao.
1. Đọc quy tắc chuẩn hóa trong rules/clean_rules.md (tên cột, định dạng ngày, tên sản phẩm).
2. Xử lý lần lượt các file: data/raw/chi_nhanh_01.xlsx, chi_nhanh_02.xlsx, chi_nhanh_03.xlsx.
3. Lưu mỗi file sau khi làm sạch ra data/clean/<tên chi nhánh>.csv, không ghi vào file của subagent khác.
4. Dòng nào không chắc cách sửa thì giữ nguyên và ghi vào data/clean/<tên chi nhánh>_review.csv.
Khi xong, trả lời ngắn: số dòng trước và sau của từng file, số dòng cần xem lại.Đổi lại, chạy song song sẽ tốn nhiều token hơn vì subagent nào cũng phải đọc lại quy tắc từ đầu. Prompt cũng phải thống nhất, nếu không thì mỗi subagent sẽ xử lý theo một kiểu.


Chiến lược 3 - Nhiều subagent song song kết hợp tuần tự
Đây chính là bản kết hợp của chiến lược 1 và chiến lược 2, có song song và có tuần tự. Quay lại bài toán phân loại tin nhắn trong group chat, nếu như có nhiều group chat thì chúng ta có thể chia ra cho mỗi subagent chỉ xử lý một batch của một group chat, và mỗi group chat thì cứ xử lý tuần tự từng batch một.
Sẽ có nhiều bài toán có dạng như vậy, quan trọng là khi chia việc cho subagent, phải đảm bảo là dữ liệu phải xử lý và lưu của mỗi subagent là độc lập với nhau. Ví dụ chia theo mã khách hàng.


Tối ưu skill xử lý song song
Bạn có thể nhờ agent tạo một skill dùng chung cho mọi dự án, chỉ cần agent biết dùng chiến lược phù hợp dựa theo bài toán của bạn, Hiếu nghĩ là nên có một skill ở cấp global như vậy. Nhưng với một vài dự án đặc thù xử lý phức tạp thì bạn nên tạo thêm skill riêng cho dự án đó, vì những lý do sau:
- Tự động chia nhóm bằng script: Vì skill riêng cho dự án nên script có thể tự động chia dựa theo đặc trưng dữ liệu của dự án và những quy ước giữa bạn với agent. Đảm bảo mọi lần chia đều chuẩn. Ví dụ như script tự kiểm tra có bao nhiêu group chat còn tin nhắn chưa xử lý và in ra báo cáo, từ đó agent chính sẽ phân việc cho subagent xử lý group nào.
- Prompt đồng nhất theo dự án: Skill riêng của dự án sẽ chứa prompt hay brief đặc thù riêng luôn cho công việc này. Đảm bảo mọi lần agent chính gọi subagent đều cùng một format.
Trong skill phải có các phần như sau:
- Quy tắc chia việc cho subagent, dùng chiến lược nào.
- Quy tắc trả kết quả của subagent, báo cáo thế nào, lưu kết quả ở thư mục nào để dễ phân biệt kết quả của các subagent.
- Agent chính tổng hợp kết quả và báo cáo lại thế nào.
Nói chung, dữ liệu phụ thuộc nhau thì cho subagent chạy tuần tự, dữ liệu độc lập thì chạy song song, còn có cả hai kiểu thì kết hợp. Nếu bạn có cách dùng subagent hay hơn, chia sẻ với Hiếu ở phần bình luận nhé.






