Wird geladen

Claude kann nativ mehrere Tools gleichzeitig ausführen, aber manche Versionen nutzen dies nicht so stark, wie man es sich wünschen würde. Du kannst die Wahrscheinlichkeit, dass Claude mehrere Tool-Aufrufe in einer einzigen Nachricht tätigt, deutlich erhöhen, indem du ein Batch-Tool implementierst.

Wenn Claude Tool-Nutzungsteile in einer Nachricht zurücksendet, kann es mehr als eine Tool-Anfrage in einer einzigen Antwort geben. Wenn du beispielsweise fragst „Was ist der 12. März 2025 + 50 Tage? Und was ist der 12. März 2025 + 100 Tage?", könnte Claude theoretisch zwei separate Tool-Nutzungsteile zurücksenden - einen für jede Berechnung. Diese Operationen sind vollständig parallelisierbar, da sie nicht voneinander abhängen.

Allerdings versucht Claude nicht immer, Tool-Aufrufe so stark zu parallelisieren, wie man es erwarten würde. Anstatt beide Aufrufe gleichzeitig zu tätigen, führt es sie oft sequenziell aus, was weniger effizient ist.

Wie das Batch-Tool funktioniert

Das Batch-Tool wird genau wie jedes andere Tool implementiert - du benötigst eine Tool-Spezifikation und eine Funktion, die den Aufruf verarbeitet. Die Kernidee besteht darin, ein Tool zu erstellen, das mehrere andere Tools gleichzeitig aufrufen kann.

Hier ist die grundlegende Struktur der Batch-Tool-Spezifikation:

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

Das Tool nimmt eine Liste von Aufrufen entgegen, wobei jeder Aufruf den Namen eines aufzurufenden Tools und dessen Argumente (als JSON-String kodiert) enthält.

Implementierung

Die Implementierung des Batch-Tools umfasst zwei Hauptfunktionen:

Die run_batch-Funktion

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

Diese Funktion durchläuft jeden Aufruf, extrahiert den Tool-Namen und die Argumente, ruft das entsprechende Tool über die bestehende Funktion run_tool auf und sammelt alle Ergebnisse.

Hinzufügen zu run_tool

Du musst außerdem einen Fall zu deiner Hauptfunktion run_tool hinzufügen:

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

Beachte, dass du im Gegensatz zu anderen Tools tool_input direkt übergibst, ohne den Splat-Operator (**) zu verwenden, da das Batch-Tool die rohe Eingabestruktur verarbeiten muss.

Ergebnisse

Wenn du das Batch-Tool implementierst und dieselbe Datumsberechnungsanfrage ausführst, siehst du im Nachrichtenprotokoll statt zwei separater Tool-Aufrufe einen einzigen Aufruf des Batch-Tools. Dieser einzelne Aufruf enthält beide Datumsberechnungen als Unteraufrufe und parallelisiert die Operationen damit effektiv.

Das Batch-Tool ist besonders nützlich, wenn du mehrere unabhängige Operationen hast, die gleichzeitig ausgeführt werden können. Indem du Claude dazu „verleitest", dieses Muster zu verwenden, kannst du die Effizienz deiner Tool-Aufruf-Workflows erheblich verbessern.