Beim Erstellen von Anwendungen mit mehreren Tools musst du Szenarien handhaben, in denen Claude möglicherweise mehrere Tools in Folge aufrufen muss, um eine einzelne Benutzerfrage zu beantworten. Wenn ein Benutzer beispielsweise fragt „Welcher Tag ist 103 Tage von heute an?", muss Claude zunächst das aktuelle Datum abrufen und dann 103 Tage dazu addieren.

Dies erzeugt ein Multi-Turn-Tool-Muster, bei dem Claude mehrere Tool-Anfragen stellt, bevor es eine endgültige Antwort liefert. Deine Anwendung muss dies automatisch handhaben.
Das Multi-Turn-Tool-Muster
Hier ist, was hinter den Kulissen passiert, wenn Claude mehrere Tools benötigt:
- Der Benutzer fragt: „Welcher Tag ist 103 Tage von heute an?"
- Claude antwortet mit einem Tool-Use-Block, der
get_current_datetimeanfordert - Dein Server ruft die Funktion auf und gibt das Ergebnis zurück
- Claude erkennt, dass es weitere Informationen benötigt, und fordert
add_duration_to_datetimean - Dein Server ruft diese Funktion auf und gibt das Ergebnis zurück
- Claude hat nun genug Informationen, um die endgültige Antwort zu liefern

Eine Konversationsschleife erstellen
Um dieses Muster zu handhaben, benötigst du eine Konversationsschleife, die fortgesetzt wird, bis Claude keine Tools mehr anfordert:
def run_conversation(messages):
while True:
response = chat(messages)
add_assistant_message(messages, response)
# Pseudocode
if response isn't asking for a tool:
break
tool_result_blocks = run_tools(response)
add_user_message(messages, tool_result_blocks)
return messages
Hilfsfunktionen refaktorieren
Bevor du die Konversationsschleife implementierst, musst du deine Hilfsfunktionen aktualisieren, um mehrere Nachrichtenblöcke ordnungsgemäß zu handhaben.
Nachrichten-Handler aktualisieren
Deine Funktionen add_user_message und add_assistant_message gehen derzeit davon aus, dass sie immer mit reinem Text arbeiten. Aktualisiere sie, um vollständige Nachrichtenobjekte zu handhaben:
from anthropic.types import Message
def add_user_message(messages, message):
user_message = {
"role": "user",
"content": message.content if isinstance(message, Message) else message
}
messages.append(user_message)Dies ermöglicht es dir, entweder einen String, eine Liste von Blöcken oder ein vollständiges Nachrichtenobjekt zu übergeben.
Die Chat-Funktion aktualisieren
Modifiziere deine Chat-Funktion, um eine Liste von Tools zu akzeptieren und die vollständige Nachricht anstatt nur Text zurückzugeben:
def chat(messages, system=None, temperature=1.0, stop_sequences=[], tools=None):
params = {
"model": model,
"max_tokens": 1000,
"messages": messages,
"temperature": temperature,
"stop_sequences": stop_sequences,
}
if tools:
params["tools"] = tools
if system:
params["system"] = system
message = client.messages.create(**params)
return messageText aus Nachrichten extrahieren
Da die Chat-Funktion nun vollständige Nachrichten anstatt nur Text zurückgibt, füge eine Hilfsfunktion hinzu, um Text bei Bedarf zu extrahieren:
def text_from_message(message):
return "\n".join(
[block.text for block in message.content if block.type == "text"]
)Diese Funktion findet alle Textblöcke in einer Nachricht und fügt sie zusammen, was nützlich ist, wenn du die endgültige Antwort den Benutzern anzeigen musst.
Warum diese Änderungen wichtig sind
Diese Refaktorierungsschritte bereiten deinen Code auf die Realität von Tool-fähigen Konversationen vor:
- Mehrere Blöcke pro Nachricht - Claudes Antworten können sowohl Text- als auch Tool-Use-Blöcke enthalten
- Flexible Nachrichtenverarbeitung - Deine Funktionen können jetzt mit verschiedenen Nachrichtenformaten arbeiten
- Vollständige Nachrichtenerhaltung - Du behältst alle Informationen, die Claude bereitstellt, nicht nur die Textteile
- Unterstützung für Tool-Listen - Deine Chat-Funktion kann jetzt mehrere Tools empfangen und verwenden
Mit diesen Grundlagen bist du bereit, die vollständige Konversationsschleife zu implementieren, die mehrere Tool-Aufrufe automatisch handhabt und so eine nahtlose Erfahrung schafft, bei der Claude alle benötigten Tools verwenden kann, um Benutzerfragen vollständig zu beantworten.