Cargando

La herramienta batch

Lección 3010 min

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.

El intercambio ideal: un mensaje del asistente con dos usos de la herramienta set_reminder para el 1 de enero, "Impuestos vencen" y "Cita con el médico".

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.

Claude responde a la solicitud de dos recordatorios de nuestro servidor con una llamada a batch_tool: set_reminder para "Cita con el médico" e "Impuestos vencen".

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.

Claude responde a la solicitud de dos recordatorios de nuestro servidor con una llamada a batch_tool: set_reminder para "Cita con el médico" e "Impuestos vencen".

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:

python
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:

python
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

También necesitarás actualizar tu función principal de enrutamiento de herramientas para manejar las llamadas a la herramienta batch:

python
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.