Cuando trabajas con las capacidades de llamada a herramientas de Claude, podrías notar que Claude puede incluir múltiples bloques de uso de herramientas en un solo mensaje del asistente. Esto permite que Claude ejecute varias herramientas en paralelo en lugar de hacer solicitudes separadas para cada una. Sin embargo, lograr que Claude haga esto de manera consistente puede ser un desafío en la práctica.
El problema con las múltiples llamadas a herramientas
Supongamos que le pides a Claude que configure dos recordatorios para la misma fecha. En teoría, Claude debería poder enviar una sola respuesta que contenga dos bloques de uso de herramientas, uno para cada recordatorio. Pero en la realidad, Claude a menudo envía respuestas separadas en su lugar.

Lo que típicamente sucede es que Claude hace la primera llamada a la herramienta, espera el resultado y luego hace la segunda llamada a la herramienta en un mensaje de seguimiento. Esto crea una comunicación de ida y vuelta innecesaria cuando las operaciones podrían haberse realizado simultáneamente.

La solución de la herramienta batch
La solución es implementar una "herramienta batch", una herramienta especial que acepta una lista de otras llamadas a herramientas para ejecutarlas simultáneamente. Esto es esencialmente una solución alternativa que induce a Claude a hacer múltiples llamadas a herramientas a la vez.

Así es como funciona:
- Defines un esquema de herramienta batch que le indica a Claude que puede ejecutar múltiples otras herramientas en paralelo
- En lugar de llamar a las herramientas directamente, Claude llama a la herramienta batch con una lista de invocaciones de herramientas
- Tu código procesa esta lista y ejecuta cada llamada a herramienta
- Devuelves los resultados combinados a Claude
Implementación del esquema de la herramienta batch
El esquema de la herramienta batch define cómo Claude debe estructurar sus solicitudes cuando quiere ejecutar múltiples herramientas:
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"
}
}
}
}
}
}
}Procesamiento de llamadas a la herramienta batch
Cuando Claude usa la herramienta batch, necesitas procesar la lista de invocaciones y ejecutar cada una. Así es la implementación:
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_outputTambién necesitarás actualizar tu función principal de enrutamiento de herramientas para manejar las llamadas a la herramienta 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)Resultados
Con la herramienta batch implementada, es mucho más probable que Claude agrupe las operaciones relacionadas. En lugar de hacer solicitudes separadas para cada recordatorio, Claude usará la herramienta batch para configurar ambos recordatorios simultáneamente.
El flujo de la conversación se vuelve mucho más limpio: una solicitud del usuario, una respuesta de Claude con la llamada a la herramienta batch, y un seguimiento con todos los resultados. Esto reduce la latencia y hace que tu aplicación sea más eficiente.
Aunque pueda parecer una solución alternativa (y lo es), el patrón de la herramienta batch es una forma efectiva de animar a Claude a pensar en operaciones que se pueden paralelizar y ejecutarlas de manera más eficiente.