Wird geladen

Umgang mit Tool-Nutzungsantworten

Lektion 247 Min.

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:

  1. Die Tool-Informationen aus dem ToolUse-Teil extrahieren
  2. Deine eigentliche Tool-Funktion ausführen
  3. Eine ToolResult-Nachricht zusammen mit dem vollständigen Konversationsverlauf zurücksenden
  4. 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:

python
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:

python
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.