Claude의 도구 호출 기능을 사용하다 보면, Claude가 하나의 어시스턴트 메시지에 여러 개의 도구 사용 블록을 포함할 수 있다는 것을 알게 될 것입니다. 이를 통해 Claude는 각 도구마다 별도의 요청을 보내는 대신 여러 도구를 병렬로 실행할 수 있습니다. 하지만 실제로 Claude가 이를 일관되게 수행하도록 만드는 것은 쉽지 않을 수 있습니다.
여러 도구 호출의 문제점
같은 날짜에 두 개의 알림을 설정해 달라고 Claude에게 요청한다고 가정해 보겠습니다. 이론적으로 Claude는 각 알림에 대해 하나씩, 총 두 개의 도구 사용 블록을 포함한 단일 응답을 보낼 수 있어야 합니다. 하지만 실제로는 Claude가 별도의 응답을 보내는 경우가 많습니다.

일반적으로 일어나는 일은 Claude가 첫 번째 도구 호출을 수행하고, 결과를 기다린 다음, 후속 메시지에서 두 번째 도구 호출을 수행하는 것입니다. 이는 동시에 수행할 수 있었던 작업에 대해 불필요한 주고받기식 통신을 발생시킵니다.

배치 도구 솔루션
해결책은 "배치 도구"를 구현하는 것입니다. 이는 동시에 실행할 다른 도구 호출들의 목록을 받는 특수한 도구입니다. 이는 본질적으로 Claude가 한 번에 여러 도구 호출을 하도록 유도하는 일종의 우회 방법입니다.

작동 방식은 다음과 같습니다:
- Claude에게 여러 다른 도구를 병렬로 실행할 수 있다고 알려주는 배치 도구 스키마를 정의합니다
- Claude는 도구를 직접 호출하는 대신, 도구 호출 목록과 함께 배치 도구를 호출합니다
- 여러분의 코드는 이 목록을 처리하고 각 도구 호출을 실행합니다
- 결합된 결과를 Claude에게 다시 반환합니다
배치 도구 스키마 구현하기
배치 도구 스키마는 Claude가 여러 도구를 실행하고자 할 때 요청을 어떻게 구성해야 하는지를 정의합니다:
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"
}
}
}
}
}
}
}배치 도구 호출 처리하기
Claude가 배치 도구를 사용할 때, 여러분은 호출 목록을 처리하고 각각을 실행해야 합니다. 구현 방법은 다음과 같습니다:
def run_batch(invocations=[]):
batch_output = []
for invocation in invocations:
name = invocation["name"]
args = invocation["arguments"]
tool_output = run_tool(name, args)
batch_output.append({
"tool_name": name,
"output": tool_output
})
return batch_output또한 배치 도구 호출을 처리하도록 메인 도구 라우팅 함수를 업데이트해야 합니다:
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)결과
배치 도구를 구현하면, Claude는 관련된 작업들을 함께 그룹화할 가능성이 훨씬 높아집니다. 각 알림에 대해 별도의 요청을 보내는 대신, Claude는 배치 도구를 사용하여 두 알림을 동시에 설정합니다.
대화 흐름이 훨씬 깔끔해집니다. 사용자로부터의 요청 하나, 배치 도구 호출이 포함된 Claude의 응답 하나, 그리고 모든 결과가 담긴 후속 메시지 하나로 이루어집니다. 이는 지연 시간을 줄이고 애플리케이션을 더 효율적으로 만들어줍니다.
우회 방법처럼 보일 수 있지만(실제로 그렇습니다), 배치 도구 패턴은 Claude가 병렬화할 수 있는 작업을 고려하고 이를 더 효율적으로 실행하도록 유도하는 효과적인 방법입니다.