Diese Seite behandelt parallele Werkzeugaufrufe: wenn Claude mehrere Werkzeuge in einem Durchgang aufruft, wie man die Nachrichtenhistorie formatiert, damit die Parallelität funktioniert, und wie man sie deaktiviert. Für den Single-Call-Ablauf siehe Werkzeugaufrufe verarbeiten.
Standardmäßig kann Claude mehrere Werkzeuge verwenden, um eine Benutzerabfrage zu beantworten. Sie können dieses Verhalten deaktivieren durch:
disable_parallel_tool_use=true wenn der tool_choice-Typ auto ist, was sicherstellt, dass Claude höchstens ein Werkzeug verwendetdisable_parallel_tool_use=true wenn der tool_choice-Typ any oder tool ist, was sicherstellt, dass Claude genau ein Werkzeug verwendetEinfacher mit Tool Runner: Das folgende Beispiel zeigt manuelle parallele Werkzeugbehandlung. Für die meisten Anwendungsfälle verarbeitet Tool Runner die parallele Werkzeugausführung automatisch mit viel weniger Code.
Hier ist ein vollständiges, ausführbares Skript zum Testen und Überprüfen, dass parallele Werkzeugaufrufe korrekt funktionieren:
# Define tools
tools = [
{
"name": "get_weather",
"description": "Get the current weather in a given location",
"input_schema": {
"type": "object",
"properties": {
"location": {
"type": "string",
"description": "The city and state, e.g. San Francisco, CA",
}
},
"required": ["location"],
},
},
{
"name": "get_time",
"description": "Get the current time in a given timezone",
"input_schema": {
"type": "object",
"properties": {
"timezone": {
"type": "string",
"description": "The timezone, e.g. America/New_York",
}
},
"required": ["timezone"],
},
},
]
# Test conversation with parallel tool calls
messages = [
{
"role": "user",
"content": "What's the weather in SF and NYC, and what time is it there?",
}
]
# Make initial request
print("Requesting parallel tool calls...")
response = client.messages.create(
model="claude-opus-4-7", max_tokens=1024, messages=messages, tools=tools
)
# Check for parallel tool calls
tool_uses = [block for block in response.content if block.type == "tool_use"]
print(f"\n✓ Claude made {len(tool_uses)} tool calls")
if len(tool_uses) > 1:
print("✓ Parallel tool calls detected!")
for tool in tool_uses:
print(f" - {tool.name}: {tool.input}")
else:
print("✗ No parallel tool calls detected")
# Simulate tool execution and format results correctly
tool_results = []
for tool_use in tool_uses:
if tool_use.name == "get_weather":
if "San Francisco" in str(tool_use.input):
result = "San Francisco: 68°F, partly cloudy"
else:
result = "New York: 45°F, clear skies"
else: # get_time
if "Los_Angeles" in str(tool_use.input):
result = "2:30 PM PST"
else:
result = "5:30 PM EST"
tool_results.append(
{"type": "tool_result", "tool_use_id": tool_use.id, "content": result}
)
# Continue conversation with tool results
messages.extend(
[
{"role": "assistant", "content": response.content},
{"role": "user", "content": tool_results}, # All results in one message!
]
)
# Get final response
print("\nGetting final response...")
final_response = client.messages.create(
model="claude-opus-4-7", max_tokens=1024, messages=messages, tools=tools
)
print(f"\nClaude's response:\n{final_response.content[0].text}")
# Verify formatting
print("\n--- Verification ---")
print(f"✓ Tool results sent in single user message: {len(tool_results)} results")
print("✓ No text before tool results in content array")
print("✓ Conversation formatted correctly for future parallel tool use")Dieses Skript demonstriert:
Führen Sie dieses Skript aus, um Ihre Implementierung zu testen und sicherzustellen, dass Claude parallele Werkzeugaufrufe effektiv durchführt.
Während Claude 4-Modelle standardmäßig hervorragende Fähigkeiten zur parallelen Werkzeugnutzung haben, können Sie die Wahrscheinlichkeit der parallelen Werkzeugausführung über alle Modelle hinweg mit gezieltem Prompting erhöhen:
Wenn Claude nicht wie erwartet parallele Werkzeugaufrufe durchführt, überprüfen Sie diese häufigen Probleme:
1. Falsche Formatierung von Werkzeugergebnissen
Das häufigste Problem ist die falsche Formatierung von Werkzeugergebnissen in der Gesprächshistorie. Dies „lehrt" Claude, parallele Aufrufe zu vermeiden.
Speziell für parallele Werkzeugnutzung:
// ❌ Dies reduziert die parallele Werkzeugnutzung
[
{"role": "assistant", "content": [tool_use_1, tool_use_2]},
{"role": "user", "content": [tool_result_1]},
{"role": "user", "content": [tool_result_2]} // Separate Nachricht
]
// ✅ Dies behält die parallele Werkzeugnutzung bei
[
{"role": "assistant", "content": [tool_use_1, tool_use_2]},
{"role": "user", "content": [tool_result_1, tool_result_2]} // Einzelne Nachricht
]Siehe Werkzeugaufrufe verarbeiten für andere Formatierungsregeln.
2. Schwaches Prompting
Das Standard-Prompting reicht möglicherweise nicht aus. Verwenden Sie die stärkere Systemaufforderung aus dem Abschnitt Maximierung der parallelen Werkzeugnutzung oben.
3. Messung der parallelen Werkzeugnutzung
Um zu überprüfen, dass parallele Werkzeugaufrufe funktionieren:
# Calculate average tools per tool-calling message
tool_call_messages = [
msg for msg in messages if any(block.type == "tool_use" for block in msg.content)
]
total_tool_calls = sum(
len([b for b in msg.content if b.type == "tool_use"]) for msg in tool_call_messages
)
avg_tools_per_message = (
total_tool_calls / len(tool_call_messages) if tool_call_messages else 0.0
)
print(f"Average tools per message: {avg_tools_per_message}")
# Should be > 1.0 if parallel calls are workingtool_result-Formatierungsregeln siehe Werkzeugaufrufe verarbeiten.Was this page helpful?