Việc sử dụng các Subagent để xử lý một cách tin cậy các mục tiêu cụ thể của người dùng đang ngày càng gia tăng. Chúng ta có thể thấy điều này trong các công cụ như Claude Code và Poke.com. Một Subagent là một Agent chuyên biệt, được xây dựng có mục đích để thực hiện một nhiệm vụ duy nhất và được định nghĩa rõ ràng. Các Subagent có thể là tường minh (explicit) – nơi người dùng hoặc mô hình định nghĩa chúng để tái sử dụng, hoặc ẩn định (implicit) và được định nghĩa một cách linh hoạt theo tình huống. Cách tiếp cận này giải quyết được một hạn chế cốt lõi của các agent AI nguyên khối: ô nhiễm ngữ cảnh (context pollution). Khi một agent duy nhất, to lớn và phức tạp phải xử lý quá nhiều tác vụ, cửa sổ ngữ cảnh và số lượng công cụ của nó có thể trở nên lộn xộn và kém tin cậy hơn.
Subagent là gì?
Subagent là các agent AI chuyên biệt. Đa số trường hợp, chúng được sử dụng kết hợp với một bộ điều phối (orchestrator) – nơi sẽ giao nhiệm vụ cho chúng. Một Subagent về cơ bản giống như một agent thông thường và có cùng các thành phần cấu tạo. Điều này bao gồm một cái tên để nhận diện, bản mô tả khả năng, các chỉ dẫn hệ thống (system instructions) và một bộ công cụ để tương tác với môi trường. Điểm quan trọng là nó sở hữu cửa sổ ngữ cảnh độc lập của riêng mình.

Subagent Tường minh, do người dùng định nghĩa (Explicit, User-Defined Subagents)
Các Subagent tường minh là một đội ngũ chuyên gia cố định và có thể tái sử dụng. Chúng được định nghĩa trong một tệp tĩnh hoặc trực tiếp trong mã nguồn; bộ điều phối (orchestrator) sẽ sử dụng chúng thông qua tên gọi hoặc khi câu lệnh khớp với phần mô tả (description). Claude Code sử dụng phương pháp này. Các công cụ được liệt kê thủ công trong phần định nghĩa, và agent này là dạng stateless (không lưu trạng thái), nghĩa là nó sẽ bắt đầu mới hoàn toàn trong mỗi lần chạy.
Ưu điểm:
- Bạn có toàn quyền kiểm soát các công cụ và hành vi của agent.
- Các hành động của agent rất dễ dự đoán và an toàn.
- Có thể tái sử dụng và dễ dàng kiểm thử độc lập.
Nhược điểm:
- Hệ thống cứng nhắc. Bạn phải cập nhật tệp định nghĩa để thêm công cụ mới.
- Bộ điều phối phải quản lý toàn bộ trạng thái giữa các bước.
- Khó mở rộng quy mô lên hàng trăm nhiệm vụ chuyên biệt.Ví dụ đoạn mã giả lập tệp định nghĩa (lấy cảm hứng từ Claude Code):
--- name: "Code-Reviewer" description: "BẮT BUỘC SỬ DỤNG để đánh giá mã nguồn theo quy chuẩn phong cách và thực hành bảo mật." tools: ['file_read', 'search_code'] --- Bạn là một chuyên gia đánh giá bảo mật mã nguồn. Mục tiêu của bạn là phân tích mã và xác định các lỗ hổng. Hãy cung cấp phản hồi dưới dạng danh sách được đánh số.
Subagent Ẩn định, khởi tạo tức thời (Implicit, On-the-Fly Subagents)
Các Subagent ẩn định có thể được bộ điều phối tạo ra tạm thời để xử lý các tác vụ phát sinh. Bộ điều phối sử dụng một công cụ (ví dụ: send_message_to_agent) để tạo và tương tác với agent. Hệ thống sẽ tự động gán các công cụ cần thiết từ một "kho" có sẵn dựa trên yêu cầu ngôn ngữ tự nhiên của người dùng. Poke.com sử dụng phương pháp này để tạo ra vô số agent cho các yêu cầu cụ thể. Một tính năng then chốt là các agent này có thể là dạng stateful (có lưu trạng thái), ví dụ: giữ lại ngữ cảnh từ các lần chạy trước khi được gọi với cùng một agent_name.
Ví dụ đoạn mã giả lập cách bộ điều phối gọi agent:
# Bộ điều phối gọi công cụ này để tạo hoặc tái sử dụng một subagent
send_message_to_agent(
agent_name="q3_report_email_draft",
description="Một agent chuyên soạn thảo các thông tin liên lạc nội bộ, đặc biệt là tóm tắt báo cáo và cập nhật đội ngũ.",
message=f"""Hãy soạn một email gửi cho đội ngũ marketing về báo cáo Quý 3..."""
)
Ưu điểm:
- Hệ thống cực kỳ linh hoạt và không cần thiết lập trước.
- Công cụ được lựa chọn dựa trên nhiệm vụ độc nhất của người dùng.
- Các tác vụ đa bước được thực hiện dễ dàng vì agent ghi nhớ được ngữ cảnh.
Nhược điểm:
- Hệ thống ít tính dự đoán hơn và bạn có ít quyền kiểm soát trực tiếp hơn.
- Có thể thất bại nếu agent hiểu sai nhiệm vụ và gán sai công cụ.
- Khó gỡ lỗi và tái hiện lỗi vì cấu hình của agent được tạo ra một cách linh hoạt.
Kết luận
Cả hai loại subagent (định nghĩa trước và khởi tạo tức thời) đều sẽ được sử dụng ngày càng nhiều. Các agent linh hoạt (dynamic) có thể được áp dụng rộng rãi hơn trong các ứng dụng B2C phổ thông. Trong khi đó, các agent định nghĩa trước là sự lựa chọn tuyệt vời cho các quy trình doanh nghiệp có cấu trúc và tính lặp lại cao.
Kỹ nghệ Ngữ cảnh (Context Engineering) là tất cả. Chìa khóa thành công là cung cấp cho LLM đúng thông tin và đúng công cụ vào đúng thời điểm. Sử dụng Subagent cho phép chúng ta tạo ra một môi trường tập trung cho LLM với một ngữ cảnh rõ ràng, biệt lập, các chỉ dẫn hệ thống cụ thể và một bộ công cụ giới hạn cho nhiệm vụ. Điều này giúp cải thiện hiệu suất và có thể giảm chi phí để đạt được mục tiêu.
Tuy nhiên, ngay cả với kiến trúc subagent, tính tin cậy vẫn là một thách thức đối với các hệ thống agentic. Việc chia nhỏ một tác vụ phức tạp thành các hàm subagent nhỏ hơn có thể giúp chúng dễ dàng kiểm thử và đánh giá độc lập hơn.
Các mô hình đang cải tiến rất nhanh. Đừng quá phức tạp hóa (over-engineer) một giải pháp ở hiện tại mà một mô hình đơn giản hơn hoặc tốt hơn trong tương lai có thể giải quyết dễ dàng.
Nguồn bài viết từ Tác giả Phil Schmid