Domain 2: Tool Design & MCP Integration·Task 2.3
Phân tool cho từng agent và cấu hình tool_choice
Giao mỗi agent đúng bộ tool nó cần, thay tool chung chung bằng tool có giới hạn, và dùng tool_choice để buộc Claude gọi tool.
- 6 phút đọc
- Đối chiếu docs 02/11/2026
- 4 nguồn
Đọc xong bạn nắm được
- Hiểu vì sao đưa cho agent quá nhiều tool làm nó chọn sai nhiều hơn
- Giới hạn bộ tool của mỗi subagent theo đúng vai trò
- Thay tool chung chung bằng tool có kiểm tra đầu vào
- Cho một agent thêm tool hẹp cho việc nó cần thường xuyên
- Dùng tool_choice auto, any và ép một tool cụ thể
Cho agent nhiều tool nghe như cho nó nhiều khả năng hơn. Thực tế thì ngược lại: càng nhiều tool, mỗi lần chọn càng khó, và agent bắt đầu dùng tool vào việc không phải của nó.
Bài này giúp bạn trả lời: mỗi agent nên có những tool nào, và khi nào cần buộc agent phải gọi tool thay vì trả lời bằng chữ?
Ví dụ xuyên suốt: hệ thống viết bài đánh giá điện thoại
Một trang tin công nghệ dựng hệ thống viết bài đánh giá điện thoại mới, gồm agent điều phối và ba subagent:
- Subagent tìm kiếm: tìm thông số, bài đánh giá khác, giá bán.
- Subagent phân tích: so sánh thông số, chấm điểm từng mặt.
- Subagent viết bài: viết bài đánh giá hoàn chỉnh.
Bản đầu, để cho tiện, cả ba subagent được dùng chung 18 tool: tìm web, tải trang, đọc PDF, tính toán, tạo bảng, gửi email, đăng bài... Kết quả:
- Subagent viết bài thỉnh thoảng tự đi tìm web giữa chừng, rồi viết theo một nguồn lạ chưa ai kiểm.
- Subagent tìm kiếm có lúc gọi nhầm tool đọc PDF cho một trang web.
- Tool
fetch_urltải được bất kỳ trang nào, kể cả trang rác quảng cáo.
Quá nhiều tool làm agent chọn kém đi
Đề thi lấy con số minh hoạ: một agent có 18 tool sẽ chọn kém hơn hẳn một agent chỉ có 4–5 tool. Mỗi lần chọn, agent phải cân nhắc giữa nhiều lựa chọn hơn, nên dễ sai hơn.
Bài viết của Anthropic về thiết kế tool cũng nói điều tương tự: nhiều tool không phải lúc nào cũng tốt hơn, và tool quá nhiều hoặc chồng chéo có thể làm agent đi lạc khỏi cách làm hiệu quả.
Vấn đề thứ hai: agent có tool ngoài chuyên môn của nó thì hay dùng sai. Subagent viết bài có tool tìm web, nên khi thiếu một con số, nó tự đi tìm thay vì báo lại. Đây chính là vấn đề 1 trong ví dụ.
Mỗi agent chỉ có tool nó cần
Cách sửa là giới hạn bộ tool của từng subagent theo vai trò (scoped tool access):
| Subagent | Tool được dùng |
|---|---|
| Tìm kiếm | web_search, load_review_page, read_spec_pdf |
| Phân tích | compare_specs, score_category |
| Viết bài | draft_article, verify_fact |
Trong Agent SDK, việc này làm bằng trường tools của từng subagent (xem bài 1.3). Tài liệu SDK nói rõ: tool nào không có trong danh sách thì subagent hoàn toàn không thấy nó.
Thay tool chung chung bằng tool có giới hạn
fetch_url tải mọi URL. Agent tìm kiếm có thể vô tình kéo về trang rác, trang giả mạo. Thay bằng một tool hẹp hơn:
load_review_page(url): Tải một bài đánh giá điện thoại.
Chỉ nhận URL thuộc danh sách trang tin công nghệ đã duyệt.
URL ngoài danh sách bị từ chối kèm lý do.Đề thi gọi đây là thay tool chung chung bằng phương án có ràng buộc (constrained alternatives). Tool tự kiểm đầu vào, nên agent có muốn dùng sai cũng không được.
Tool hẹp cho việc cần thường xuyên
Subagent viết bài hay cần kiểm nhanh một con số: "pin 5.000 mAh đúng không?". Nếu mỗi lần như vậy phải trả việc về agent điều phối, nhờ subagent tìm kiếm tìm, rồi gọi lại subagent viết bài, thì mất thêm vài lượt cho một việc rất nhỏ.
Cách cân bằng: cho subagent viết bài một tool hẹp verify_fact, chỉ để kiểm một sự thật đơn giản (ngày, tên, con số). Những việc cần tìm hiểu sâu vẫn đi qua agent điều phối như cũ.
Dùng tool_choice để buộc gọi tool
Ngoài việc chọn đưa tool nào, bạn còn quyết định được Claude có bắt buộc phải gọi tool hay không, bằng tham số tool_choice:
| Giá trị | Nghĩa |
|---|---|
{"type": "auto"} | Claude tự quyết có gọi tool hay không. Đây là mặc định khi có tool |
{"type": "any"} | Claude phải gọi một tool nào đó trong danh sách, không được chỉ trả lời bằng chữ |
{"type": "tool", "name": "..."} | Claude phải gọi đúng tool được chỉ định |
{"type": "none"} | Claude không được gọi tool nào |
Hai cách dùng đề thi hay hỏi:
- Buộc gọi một tool trước: ví dụ bài đánh giá luôn phải bắt đầu bằng việc lấy thông số máy. Lượt đầu đặt
tool_choice: {"type": "tool", "name": "extract_specs"}, các lượt sau mới để Claude tự chọn tool tiếp theo. - Bảo đảm có gọi tool: khi bạn cần kết quả luôn đi qua một tool (ví dụ để lấy dữ liệu có cấu trúc), đặt
tool_choice: {"type": "any"}để Claude không trả về một đoạn chữ thay vì gọi tool.
{
"tools": [ { "name": "extract_specs", "...": "..." }, { "name": "web_search", "...": "..." } ],
"tool_choice": {"type": "tool", "name": "extract_specs"}
}Tài liệu của Anthropic lưu ý: khi dùng any hoặc ép một tool, Claude sẽ không viết câu giải thích nào trước khi gọi tool, kể cả khi được yêu cầu.
Một điều cần biết khi làm thật: theo tài liệu hiện tại, các model mới nhất là Claude Opus 5.5, Sonnet 5.5 và Fable 5.1 không nhận any và ép tool, API sẽ trả lỗi 400. Với các model này, tài liệu khuyên dùng auto kèm strict tool use (strict: true) hoặc structured outputs, rồi dặn trong prompt nên gọi tool nào. Các model khác vẫn dùng any và ép tool như bảng trên. Trong đề thi và các câu luyện thi, any và ép tool vẫn là đáp án đúng cho hai tình huống dưới đây.
Anthropic Exam Pro