Wird geladen

Nachdem Claude einen Tool-Aufruf angefordert hat, musst du die Funktion ausführen und die Ergebnisse zurücksenden. Dies vervollständigt den Tool-Nutzungs-Workflow, indem Claude die angeforderten Informationen bereitgestellt werden.

Die Tool-Funktion ausführen

Wenn Claude mit einem Tool-Use-Block antwortet, extrahierst du die Eingabeparameter und rufst deine Funktion auf. So greifst du auf die Tool-Parameter zu:

python
response.content[1].input

Dies gibt dir ein Dictionary der Argumente, die Claude an deine Funktion übergeben möchte. Da deine Funktion Keyword-Argumente statt eines Dictionarys erwartet, verwendest du Pythons Unpacking-Syntax:

python
get_current_datetime(**response.content[1].input)

Tool-Result-Block

Nachdem du die Tool-Funktion ausgeführt hast, musst du die Ergebnisse mithilfe eines Tool-Result-Blocks an Claude zurücksenden. Dieser Block befindet sich innerhalb einer User-Nachricht und teilt Claude mit, was bei der Ausführung des Tools passiert ist.

Der Tool-Result-Block hat mehrere wichtige Eigenschaften:

  • tool_use_id - Muss mit der id des ToolUse-Blocks übereinstimmen, dem dieses ToolResult entspricht
  • content - Ausgabe der Ausführung deines Tools, als String serialisiert
  • is_error - True, wenn ein Fehler aufgetreten ist

Umgang mit mehreren Tool-Aufrufen

Claude kann in einer einzigen Antwort mehrere Tool-Aufrufe anfordern. Wenn ein Nutzer beispielsweise fragt „Was ist 10 + 10 und was ist 30 + 30?", könnte Claude mit zwei separaten ToolUse-Blöcken antworten.

Jeder Tool-Aufruf erhält eine eindeutige ID, und du musst diese IDs beim Zurücksenden der Ergebnisse abgleichen. Dies stellt sicher, dass Claude weiß, welches Ergebnis zu welcher Anfrage gehört, selbst wenn die Ergebnisse in einer anderen Reihenfolge eintreffen.

Die Folgeanfrage erstellen

Deine Folgeanfrage an Claude muss den vollständigen Gesprächsverlauf plus das neue Tool-Ergebnis enthalten. Hier ist die Struktur:

python
messages.append({
    "role": "user",
    "content": [{
        "type": "tool_result",
        "tool_use_id": response.content[1].id,
        "content": "15:04:22",
        "is_error": False
    }]
})

Der vollständige Nachrichtenverlauf enthält nun:

  • Ursprüngliche User-Nachricht
  • Assistant-Nachricht mit Tool-Use-Block
  • User-Nachricht mit Tool-Result-Block

Die finale Anfrage stellen

Beim Senden der Folgeanfrage musst du weiterhin das Tool-Schema einbeziehen, auch wenn du nicht erwartest, dass Claude einen weiteren Tool-Aufruf durchführt. Claude benötigt das Schema, um die Tool-Referenzen in deinem Gesprächsverlauf zu verstehen.

python
client.messages.create(
    model=model,
    max_tokens=1000,
    messages=messages,
    tools=[get_current_datetime_schema]
)

Claude antwortet dann mit einer finalen Nachricht, die die Tool-Ergebnisse in eine natürliche Antwort für den Nutzer einbindet. Der Tool-Nutzungs-Workflow ist nun abgeschlossen - du hast Claude erfolgreich ermöglicht, über deine benutzerdefinierte Funktion auf Echtzeitinformationen zuzugreifen.