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:
{
"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
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_outputDiese 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:
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.