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 Nutzerfrage zu beantworten. Wenn ein Nutzer 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 mehrstufiges Konversationsmuster, bei dem Claude mehrere Tool-Anfragen stellt, bevor es eine endgültige Antwort liefert. Deine Anwendung muss dies automatisch handhaben.
Das mehrstufige Tool-Muster
Hier ist, was hinter den Kulissen passiert, wenn Claude mehrere Tools benötigt:
- Der Nutzer 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 korrekt zu handhaben.
Nachrichten-Handler aktualisieren
Deine Funktionen add_user_message und add_assistant_message gehen derzeit davon aus, dass du immer mit reinem Text arbeitest. 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
Ändere deine Chat-Funktion so, dass sie eine Liste von Tools akzeptiert und die vollständige Nachricht statt nur Text zurückgibt:
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 du jetzt vollständige Nachrichtenobjekte zurückgibst, erstelle einen Helfer, 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 Nutzern anzeigen musst.
Wichtige Verbesserungen
Diese Refaktorierungsschritte bereiten deinen Code auf eine robuste Tool-Handhabung vor:
- Flexible Nachrichtenhandhabung - Deine Hilfsfunktionen können jetzt mit verschiedenen Nachrichtenformaten arbeiten
- Tool-Unterstützung im Chat - Die Chat-Funktion kann Tool-Schemas empfangen und weiterleiten
- Vollständige Nachrichtenrückgaben - Du erhältst vollständige Nachrichtenobjekte statt nur Text, wobei alle Blöcke erhalten bleiben
- Text-Extraktionsdienstprogramm - Einfache Möglichkeit, lesbaren Text aus komplexen Nachrichten zu erhalten
Mit diesen Grundlagen bist du bereit, die Konversationsschleife zu implementieren, die mehrere Tool-Aufrufe automatisch handhabt und so ein nahtloses Erlebnis schafft, bei dem Claude so viele Tools wie nötig verwenden kann, um Nutzerfragen zu beantworten.