Bỏ qua đến nội dung chính

The batch tool

📖 Nội dung bài học

Tóm tắt

Khi làm việc với khả năng tool calling của Claude, bạn có thể thấy Claude có thể bao gồm nhiều khối tool use trong một tin nhắn assistant. Điều này cho phép Claude chạy nhiều tool song song thay vì thực hiện các yêu cầu riêng biệt cho từng tool. Tuy nhiên, việc khiến Claude thực sự làm điều này một cách nhất quán có thể là một thách thức trong thực tế.

Vấn đề với nhiều Tool Calls

Giả sử bạn yêu cầu Claude đặt hai lời nhắc cho cùng một ngày. Về mặt lý thuyết, Claude có thể gửi lại một phản hồi duy nhất chứa hai khối tool use - một cho mỗi lời nhắc. Nhưng trên thực tế, Claude thường gửi các phản hồi riêng biệt.

Điều thường xảy ra là Claude thực hiện tool call đầu tiên, đợi kết quả, sau đó thực hiện tool call thứ hai trong một tin nhắn tiếp theo. Điều này tạo ra giao tiếp qua lại không cần thiết trong khi các thao tác có thể được thực hiện đồng thời.

Giải pháp Công cụ Batch

Giải pháp là triển khai "công cụ batch" - một công cụ đặc biệt chấp nhận một danh sách các tool call khác để thực thi đồng thời. Về bản chất, đây là một giải pháp thay thế để "lừa" Claude thực hiện nhiều tool call cùng một lúc.

Đây là cách nó hoạt động:

  • Bạn định nghĩa một lược đồ công cụ batch cho Claude biết nó có thể chạy nhiều tool khác song song
  • Thay vì gọi tool trực tiếp, Claude gọi công cụ batch với một danh sách các lời gọi tool
  • Code của bạn xử lý danh sách này và thực thi từng tool call
  • Bạn trả lại kết quả kết hợp cho Claude

Triển khai Lược đồ Công cụ Batch

Lược đồ công cụ batch xác định cách Claude nên cấu trúc các yêu cầu của nó khi nó muốn chạy nhiều tool:

batch_tool_schema = {
    "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": "object",
                            "description": "The arguments to pass to the tool"
                        }
                    }
                }
            }
        }
    }
}

Xử lý Tool Calls Batch

Khi Claude dùng công cụ batch, bạn cần xử lý danh sách các lời gọi và thực thi từng lời gọi. Đây là cách triển khai:

def run_batch(invocations=[]):
    batch_output = []
    
    for invocation in invocations:
        name = invocation["name"]
        args = json.loads(invocation["arguments"])
        
        tool_output = run_tool(name, args)
        
        batch_output.append({
            "tool_name": name,
            "output": tool_output
        })
    
    return batch_output

Bạn cũng cần cập nhật hàm định tuyến tool chính của mình để xử lý các tool calls batch:

def run_tool(tool_name, tool_input):
    if tool_name == "get_current_datetime":
        return get_current_datetime(**tool_input)
    elif tool_name == "add_duration_to_datetime":
        return add_duration_to_datetime(**tool_input)
    elif tool_name == "set_reminder":
        return set_reminder(**tool_input)
    elif tool_name == "batch_tool":
        return run_batch(**tool_input)

Kết quả

Với công cụ batch được triển khai, Claude có nhiều khả năng nhóm các thao tác liên quan lại với nhau hơn. Thay vì thực hiện các yêu cầu riêng biệt cho từng lời nhắc, Claude sẽ dùng công cụ batch để đặt cả hai lời nhắc cùng một lúc.

Luồng hội thoại trở nên rõ ràng hơn nhiều - một yêu cầu từ người dùng, một phản hồi từ Claude với tool call batch và một phần tiếp theo với tất cả các kết quả. Điều này làm giảm độ trễ và làm cho ứng dụng của bạn hiệu quả hơn.

Mặc dù có vẻ như là một giải pháp thay thế (và đúng là như vậy), mẫu công cụ batch là một cách hiệu quả để khuyến khích Claude suy nghĩ về các thao tác có thể được song song hóa và thực hiện chúng hiệu quả hơn.

🔁 Bài học liên quan

📚 Nguồn & ghi nhận

Bài học có hữu ích không?

Góp ý / Báo lỗiPhát hiện sai sót hoặc có ý tưởng cải thiện?