Wenn Claude entscheidet, ein Tool zu verwenden, gibt es eine spezielle Antwortstruktur zurück, die eine sorgfältige Handhabung erfordert. Das Verständnis dieses Antwortformats und die Implementierung eines ordnungsgemäßen Konversationsmanagements sind entscheidend für den Aufbau robuster, Tool-fähiger Anwendungen.
Konfiguration der Tool-Auswahl
Bevor wir uns mit den Antworten beschäftigen, lohnt es sich zu verstehen, wie man steuern kann, wann Claude Tools verwendet. Der Parameter toolChoice bietet dir drei Optionen:

- auto - Claude entscheidet, ob ein Tool verwendet wird (Standardverhalten)
- any - Claude muss ein Tool verwenden, kann aber wählen, welches
- specific tool - Zwingt Claude, ein bestimmtes Tool namentlich zu verwenden
Die dritte Option ist besonders nützlich zum Testen, wenn du sicherstellen möchtest, dass Claude eine bestimmte Funktion aufruft.
Mehrteilige Nachrichtenstruktur
Wenn Claude ein Tool verwenden möchte, gibt es eine Assistant-Nachricht mit mehreren Inhaltsteilen zurück, anstatt nur Text:

Die Antwort enthält zwei Teile:
- Text-Teil - Eine für Menschen lesbare Erklärung wie „Ich kann dir helfen, die aktuelle Uhrzeit herauszufinden. Lass mich diese Information für dich finden"
- ToolUse-Teil - Strukturierte Daten, die dir mitteilen, welches Tool mit welchen Argumenten ausgeführt werden soll
Den ToolUse-Teil verstehen
Der ToolUse-Teil enthält drei wichtige Informationen:

- toolUseId - Eine eindeutige Kennung, die du benötigst, wenn du das Tool-Ergebnis zurücksendest
- name - Der exakte Tool-Name aus deinem JSON-Schema, den Claude aufrufen möchte
- input - Ein Dictionary mit Argumenten, die Claude an deine Tool-Funktion übergeben möchte
Konversationsablauf mit Tools
Die Tool-Nutzung folgt einem bestimmten Konversationsmuster, das die Pflege des vollständigen Nachrichtenverlaufs erfordert:

Wenn du eine Tool-Nutzungsanfrage erhältst, musst du:
- Die Tool-Informationen aus dem ToolUse-Teil extrahieren
- Deine eigentliche Tool-Funktion ausführen
- Eine ToolResult-Nachricht zusammen mit dem vollständigen Konversationsverlauf zurücksenden
- Die ursprüngliche Benutzernachricht und die Tool-Nutzungsnachricht des Assistenten in deine nächste Anfrage einbeziehen
Aktualisierung der Hilfsfunktionen
Um mehrteilige Nachrichten ordnungsgemäß zu verarbeiten, musst du deine Funktionen zur Nachrichtenverarbeitung aktualisieren. So machst du deine Funktionen flexibel genug, um sowohl einfachen Text als auch komplexe mehrteilige Inhalte zu verarbeiten:
def add_user_message(messages, content):
if isinstance(content, str):
user_message = {"role": "user", "content": [{"text": content}]}
else:
user_message = {"role": "user", "content": content}
messages.append(user_message)
def add_assistant_message(messages, content):
if isinstance(content, str):
assistant_message = {"role": "assistant", "content": [{"text": content}]}
else:
assistant_message = {"role": "assistant", "content": content}
messages.append(assistant_message)Du möchtest außerdem deine Chat-Funktion aktualisieren, damit sie sowohl den Text als auch die vollständige Liste der Teile zurückgibt:
def chat(messages, system=None, temperature=1.0, stop_sequences=[], tools=None):
# ... bestehender Setup-Code ...
response = client.converse(**params)
text = response["output"]["message"]["content"][0]["text"]
parts = response["output"]["message"]["content"]
return text, partsÜberprüfung des Stop-Grunds
Claudes Antwort enthält außerdem ein übergeordnetes Feld stopReason. Wenn dieses gleich "tool_use" ist, möchte Claude ein Tool aufrufen, anstatt nur eine Textantwort zu liefern — das ist dein Signal, die Tool-Informationen zu extrahieren und die angeforderte Funktion auszuführen. Der oben gezeigte Helfer chat() stellt dieses Feld noch nicht bereit, daher kannst du die Tool-Nutzung vorerst erkennen, indem du die zurückgegebene Liste der Teile auf einen Eintrag mit einem Schlüssel toolUse überprüfst. Du wirst chat() in einer späteren Lektion so erweitern, dass es stopReason direkt zurückgibt.
Mit diesen Mustern bist du bereit, Claudes Tool-Nutzungsanfragen zu verarbeiten und einen ordnungsgemäßen Konversationsablauf während mehrstufiger Tool-Interaktionen aufrechtzuerhalten.