📖 Nội dung bài học
Tóm tắt
Claude có thể chạy nhiều tool cùng lúc. Tuy nhiên, một số phiên bản không tận dụng tối đa điều này. Bạn có thể tăng khả năng Claude gọi nhiều tool trong một tin nhắn bằng cách triển khai batch tool.

Khi Claude trả về các phần tool use trong một tin nhắn, có thể có nhiều hơn một yêu cầu tool trong một phản hồi. Ví dụ, nếu bạn hỏi "Ngày 12 tháng 3 năm 2025 + 50 ngày là bao nhiêu? Ngoài ra, ngày 12 tháng 3 năm 2025 + 100 ngày là bao nhiêu?", về lý thuyết Claude có thể trả về hai phần tool use riêng biệt - một cho mỗi phép tính. Các thao tác này hoàn toàn có thể thực hiện song song vì chúng không phụ thuộc vào nhau.
Tuy nhiên, Claude không phải lúc nào cũng cố gắng song song hóa các cuộc gọi tool nhiều như bạn mong đợi. Thay vì thực hiện cả hai cuộc gọi đồng thời, nó thường thực hiện chúng tuần tự, điều này kém hiệu quả hơn.
Cách hoạt động của Batch Tool
Batch tool được triển khai giống như bất kỳ tool nào khác - bạn cần một thông số kỹ thuật tool và một hàm để xử lý khi nó được gọi. Ý tưởng chính là tạo ra một tool có thể gọi nhiều tool khác cùng một lúc.
Đây là cấu trúc cơ bản của thông số kỹ thuật batch tool:
{
"name": "batch_tool",
"description": "Invoke multiple other tool calls simultaneously",
"input_schema": {
"type": "object",
"properties": {
"invocations": {
"type": "array",
"description": "The tool calls to invoke",
"items": {
"type": "object",
"properties": {
"name": {
"type": "string",
"description": "The name of the tool to invoke"
},
"arguments": {
"type": "string",
"description": "The arguments to the tool, encoded as a JSON string"
}
},
"required": ["name", "arguments"]
}
}
},
"required": ["invocations"]
}
}
Tool này nhận một danh sách các invocations, trong đó mỗi invocation chứa tên của một tool để gọi và các đối số của nó (được mã hóa dưới dạng một chuỗi JSON).
Triển khai
Việc triển khai batch tool liên quan đến hai hàm chính:
Hàm run_batch
def run_batch(tool_input):
batch_output = []
for invocation in tool_input["invocations"]:
tool_name = invocation["name"]
args = json.loads(invocation["arguments"])
tool_output = run_tool(tool_name, args)
batch_output.append({"tool_name": tool_name, "output": tool_output})
return batch_output
Hàm này lặp qua từng invocation, trích xuất tên tool và các đối số, gọi tool thích hợp bằng cách dùng hàm run_tool hiện có và thu thập tất cả các kết quả.
Thêm vào run_tool
Bạn cũng cần thêm một trường hợp vào hàm run_tool chính của bạn:
elif tool_name == "batch_tool":
return run_batch(tool_input)
Lưu ý rằng không giống như các tool khác, bạn chuyển tool_input trực tiếp mà không dùng toán tử splat (**), vì batch tool cần xử lý cấu trúc đầu vào thô.
Kết quả
Khi bạn triển khai batch tool và chạy cùng một truy vấn tính toán ngày tháng, thay vì thấy hai cuộc gọi tool riêng biệt trong nhật ký tin nhắn, bạn sẽ thấy một cuộc gọi duy nhất đến batch tool. Cuộc gọi duy nhất này chứa cả hai phép tính ngày tháng dưới dạng sub-invocations, song song hóa các thao tác một cách hiệu quả.
Batch tool đặc biệt hữu ích khi bạn có nhiều thao tác độc lập có thể được thực hiện đồng thời. Bằng cách "lừa" Claude dùng mẫu này, bạn có thể cải thiện đáng kể hiệu quả của quy trình làm việc gọi tool của bạn.
🔁 Bài học liên quan
- Bài tiếp: Structured data with tools
- Bài trước: Adding multiple tools
- Cùng section: Overview of Claude Models · Accessing the API · Making a request
- Thuộc lộ trình: Path C
- Docs tham khảo: Glossary · Skills atlas · By use-case
📚 Nguồn & ghi nhận
- Bài học gốc Anthropic Academy: https://anthropic.skilljar.com/claude-in-amazon-bedrock/276766
- © 2025 Anthropic. Chỉ dùng cho mục đích giáo dục, fair-use.
- Crawl: — · Chuẩn hoá: 2026-05-01