Sign in to save your progressYou can keep reading without an account, but completed lessons won't be saved.
Sign in

Claude는 기본적으로 여러 도구를 동시에 실행할 수 있지만, 일부 버전은 이를 원하는 만큼 활용하지 못합니다. 배치 도구를 구현하면 Claude가 단일 메시지에서 여러 도구를 호출할 가능성을 크게 높일 수 있습니다.

Claude가 메시지에서 도구 사용 부분을 반환할 때, 단일 응답에 둘 이상의 도구 요청이 포함될 수 있습니다. 예를 들어 "2025년 3월 12일 + 50일은 언제인가요? 그리고 2025년 3월 12일 + 100일은 언제인가요?"라고 질문하면, Claude는 이론적으로 각 계산에 대해 하나씩, 두 개의 별도 도구 사용 부분을 반환할 수 있습니다. 이러한 작업들은 서로 의존하지 않기 때문에 완전히 병렬화할 수 있습니다.

하지만 Claude는 여러분이 기대하는 만큼 항상 도구 호출을 병렬화하려고 시도하지는 않습니다. 두 호출을 동시에 수행하는 대신, 종종 순차적으로 수행하는데, 이는 효율성이 떨어집니다.

배치 도구의 작동 방식

배치 도구는 다른 도구와 마찬가지로 구현됩니다 - 도구 명세와 호출될 때 처리할 함수가 필요합니다. 핵심 아이디어는 여러 다른 도구를 동시에 호출할 수 있는 도구를 만드는 것입니다.

다음은 배치 도구 명세의 기본 구조입니다:

json
{
  "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"]
  }
}

이 도구는 호출 목록을 받으며, 각 호출에는 호출할 도구의 이름과 그 인수(JSON 문자열로 인코딩됨)가 포함됩니다.

구현

배치 도구 구현에는 두 가지 주요 함수가 포함됩니다:

run_batch 함수

python
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

이 함수는 각 호출을 순회하며, 도구 이름과 인수를 추출하고, 기존의 run_tool 함수를 사용하여 적절한 도구를 호출한 다음, 모든 결과를 수집합니다.

run_tool에 추가하기

메인 run_tool 함수에도 케이스를 추가해야 합니다:

python
elif tool_name == "batch_tool":
    return run_batch(tool_input)

다른 도구와 달리, 배치 도구는 원시 입력 구조를 처리해야 하므로 스플랫 연산자(**)를 사용하지 않고 tool_input을 직접 전달한다는 점에 유의하세요.

결과

배치 도구를 구현하고 동일한 날짜 계산 쿼리를 실행하면, 메시지 로그에서 두 개의 별도 도구 호출을 보는 대신, 배치 도구에 대한 단일 호출을 보게 됩니다. 이 단일 호출에는 두 날짜 계산이 하위 호출로 포함되어 있어, 효과적으로 작업을 병렬화합니다.

배치 도구는 동시에 실행할 수 있는 여러 독립적인 작업이 있을 때 특히 유용합니다. Claude가 이 패턴을 사용하도록 "유도"함으로써, 도구 호출 워크플로우의 효율성을 크게 향상시킬 수 있습니다.