Dieses Tool-Nutzungsformat ist veraltet

Wir empfehlen dringend, dass Sie so schnell wie möglich auf unsere verbesserte Tool-Nutzungsstruktur umsteigen, die zuverlässiger ist und eine höhere Leistungsqualität ermöglicht, insbesondere für komplexere Tool-Nutzungsaufgaben.

Dieses Tool-Nutzungsformat ist nicht für Claude 3 optimiert und kann zu schlechteren Leistungen führen als unser aktualisiertes Tool-Nutzungsformat.

Hinweis: Das neue Tool-Nutzungsformat ist noch nicht auf Vertex AI oder Amazon Bedrock verfügbar, wird aber bald auf diesen Plattformen eingeführt.


Wie die Legacy-Tool-Nutzung funktioniert

Bei der Legacy-Tool-Nutzung werden Funktionen innerhalb des Prompts selbst definiert. Wenn Sie Claude Beschreibungen von Tools und Funktionen zur Verfügung stellen, die es verwenden kann, ist Claude in der Lage, intelligent zu entscheiden, wann und wie diese Tools eingesetzt werden können, um Fragen zu beantworten und Aufgaben zu erledigen.

Nehmen wir zum Beispiel an, Sie stellen Claude (im Prompt) eine Funktion namens get_weather(location) zur Verfügung, die das aktuelle Wetter für einen bestimmten Ort abruft. Wenn ein Benutzer dann fragt: “Wie ist das Wetter gerade in London?”, erkennt Claude, dass es die von Ihnen bereitgestellte Funktion get_weather verwenden kann, um die Antwort nachzuschlagen.

Im Hintergrund ist dies ein mehrstufiger Prozess:

  1. Die Funktionsdefinitionen und die Benutzerfrage werden beide in einem einzigen Prompt an Claude übergeben
    • Claude benötigt nicht nur die Tools und ihre Beschreibungen, um erfolgreich entscheiden zu können, ob die Tools verwendet werden sollen, sondern wahrscheinlich auch begleitende Beispiele für Situationen, in denen solche Tools verwendet werden sollten, abhängig von der Komplexität des Anwendungsfalls und der Tools.
  2. Claude bewertet die Frage des Benutzers und entscheidet, welche Funktion(en) mit welchen Argumenten aufgerufen werden sollen
  3. Claude konstruiert einen ordnungsgemäß formatierten Funktionsaufruf
  4. Der Funktionsaufruf wird über Client-Code mit einer eindeutigen stop_sequence abgefangen und die eigentliche Funktion wird auf der Client-Seite ausgeführt
  5. Das Funktionsergebnis wird an Claude zurückgegeben
  6. Claude verwendet das Funktionsergebnis, um seine endgültige Antwort an den Benutzer zu formulieren

Diese Technik ermöglicht es Claude, externes Wissen und Fähigkeiten zu nutzen und gleichzeitig eine konversationelle Schnittstelle beizubehalten.


Funktionen definieren

Funktionen werden definiert, indem Claude eine Beschreibung der Funktion in XML-Tags bereitgestellt wird. Die Beschreibung sollte Folgendes enthalten:

  • Den Funktionsnamen
  • Eine Klartext-Erklärung, was die Funktion tut
  • Die erwarteten Parameter, ihre Typen und Beschreibungen
  • Die Rückgabewerte und -typen
  • Alle Ausnahmen, die ausgelöst werden können

Hier ist ein Beispiel für eine Funktionsdefinition:

XML
<tool_description>
<tool_name>get_weather</tool_name>
<description>
Ruft das aktuelle Wetter für einen bestimmten Ort ab.
Gibt ein Wörterbuch mit zwei Feldern zurück:
- temperature: float, die aktuelle Temperatur in Fahrenheit
- conditions: string, eine kurze Beschreibung der aktuellen Wetterbedingungen
Löst ValueError aus, wenn der angegebene Ort nicht gefunden werden kann.
</description>
<parameters>
<parameter>
<name>location</name>
<type>string</type>
<description>Die Stadt und der Bundesstaat, z.B. San Francisco, CA</description>
</parameter>
</parameters>
</tool_description>

Einige Tipps für das Schreiben guter Funktionsbeschreibungen:

  • Seien Sie klar und prägnant, geben Sie aber genügend Details, damit Claude versteht, wann die Funktion verwendet werden sollte
  • Geben Sie die Typen der Parameter und Rückgabewerte an
  • Erwähnen Sie alle relevanten Ausnahmen, die ausgelöst werden können
  • Verwenden Sie Klartext-Beschreibungen, keine Code-Syntax

Legacy-Tool-Nutzungsformat

Damit Claude eine Funktion aufrufen kann, muss es einen sehr spezifisch formatierten XML-Block ausgeben. Das Format sieht wie folgt aus:

XML
<function_calls>
<invoke>
<tool_name>function_name</tool_name>
<parameters>
<param1>value1</param1>
<param2>value2</param2>
</parameters>
</invoke>
</function_calls>

Der Block <function_calls> kann mehrere Blöcke <invoke> enthalten, wenn Claude mehr als eine Funktion gleichzeitig aufruft. Jedes <invoke> enthält den Namen der aufgerufenen Funktion und die übergebenen Parameter.

Sie sollten </function_calls> als stop_sequence an Ihren API-Aufruf übergeben, um sicherzustellen, dass Claude die Generierung von Text beendet, sobald es eine Funktion aufgerufen hat.

Nach einem Block <function_calls> und unter der Annahme, dass Sie die richtige Stoppsequenz eingerichtet haben, stoppt Claude die Generierung und wartet darauf, dass das Funktionsergebnis in einem Block <function_results> zurückgegeben wird, der wie folgt aussieht:

XML
<function_results>
<result>
<tool_name>function_name</tool_name>
<stdout>
function result goes here
</stdout>
</result>
</function_results>

Das Funktionsergebnis sollte zwischen <stdout>-Tags platziert werden. Wenn die Funktion eine Ausnahme ausgelöst hat, sollte diese wie folgt zurückgegeben werden:

XML
<function_results>
<error>
error message goes here
</error>
</function_results>

Das vollständige Funktionsergebnis sollte als Nachricht an Claude zurückgegeben werden, die das Gespräch von vorher fortsetzt. Nach Erhalt der Funktionsergebnisse wird Claude die Generierung fortsetzen, um die Ergebnisse in seine Antwort einzubeziehen.


Beispiel für einen Legacy-Tool-Nutzungs-Prompt

Hier ist ein vollständiges Beispiel für einen Prompt, der Claude zwei Funktionen und eine Frage zur Verfügung stellt, die deren Verwendung erfordert:

Inhalt
SystemIn dieser Umgebung haben Sie Zugriff auf eine Reihe von Tools, die Sie zur Beantwortung der Frage des Benutzers verwenden können.

Sie können sie wie folgt aufrufen:
<function_calls>
<invoke>
<tool_name>$TOOL_NAME</tool_name>
<parameters>
<$PARAMETER_NAME>$PARAMETER_VALUE</$PARAMETER_NAME>

</parameters>
</invoke>
</function_calls>

Hier sind die verfügbaren Tools:
<tools>
<tool_description>
<tool_name>get_current_stock_price
</tool_name><description>Ruft den aktuellen Aktienkurs für ein Unternehmen ab. Gibt float zurück: Der aktuelle Aktienkurs.
Löst ValueError aus: wenn das Eingabesymbol ungültig/unbekannt ist.</description>
<parameters>
<parameter>
<name>symbol</name>
<type>string</type>
<description>Das Aktiensymbol des Unternehmens, für das der Kurs abgerufen werden soll.</description>
</parameter>
</parameters>
</tool_description>

<tool_description>
<tool_name>get_ticker_symbol</tool_name>
<description>Ruft das Aktiensymbol für ein Unternehmen ab, das nach Namen gesucht wird. Gibt str zurück: Das Tickersymbol für die Unternehmensaktie. Löst TickerNotFound aus: wenn kein passendes Tickersymbol gefunden wird.
</description>
<parameters>
<parameter>
<name>company_name</name>
<type>string</type>
<description>Der Name des Unternehmens.</description>
</parameter>
</parameters>
</tool_description></tools>
UserWie hoch ist der aktuelle Aktienkurs von General Motors?

So würde Claude antworten:

Inhalt
Assistant<scratchpad>
Um diese Frage zu beantworten, muss ich:

1. Das Tickersymbol für General Motors mit der Funktion get_ticker_symbol() abrufen.
2. Das zurückgegebene Tickersymbol verwenden, um den aktuellen Aktienkurs mit der Funktion get_current_stock_price() abzurufen.</scratchpad>

<function_calls>
<invoke>
<tool_name>get_ticker_symbol</tool_name>
<parameters>
<company_name>General Motors</company_name>
</parameters>
</invoke>
</function_calls>

Claude ruft zuerst get_ticker_symbol auf, um das Tickersymbol für General Motors abzurufen. Wir können erkennen, dass Claude eine Funktion aufrufen möchte, anhand der </function calls>-Stoppsequenz. Wir extrahieren die relevanten Daten zwischen den entsprechenden XML-Tags und führen die Funktion in Claudes Namen aus. Dann geben wir die Ergebnisse in <function_results>-Tags an Claude zurück.

Inhalt
User<function_results>
<result>
<tool_name>get_ticker_symbol</tool_name>
<stdout>
GM
</stdout>
</result>
</function_results>

Jetzt, da es das Tickersymbol kennt, wird Claude anschließend entscheiden, dass es get_current_stock_price aufrufen und den aktuellen Kurs abrufen muss.

Inhalt
Assistant<function_calls>
<invoke>
<tool_name>get_current_stock_price</tool_name>
<parameters>
<symbol>GM</symbol>
</parameters>
</invoke>
</function_calls>

Wir geben auch diese Ergebnisse zurück.

Inhalt
User<function_results>
<result>
<tool_name>get_current_stock_price</tool_name>
<stdout>
38.50
</stdout>
</result>
</function_results>

Mit dieser gesamten Gesprächskette, die Claude alle Details liefert, die es benötigt, wird Claude in der Lage sein, dem Benutzer als endgültige Ausgabe eine Antwort zu geben.

Inhalt
<answer>
Der aktuelle Aktienkurs von General Motors beträgt $38,50.
</answer>

Häufig gestellte Fragen zur Legacy-Tool-Nutzung

Wie viele Tools kann ich Claude in einer bestimmten Interaktion übergeben?

Sie können eine beliebige Anzahl von Tools und Funktionen definieren, die Claude verwenden soll, obwohl wir derzeit empfehlen, für diese Legacy-Tool-Nutzungsstruktur je nach Komplexität Ihres Anwendungsfalls und der betreffenden Funktionen nicht mehr als 3-5 zu verwenden.

Hat Claude irgendwelche eingebauten Tools, die es kennt?

Nein. Alle Tools, die Sie von Claude verwenden lassen möchten, müssen Sie selbst innerhalb eines Tool-Nutzungs-Prompts definieren. Claude verfügt nicht über eine vordefinierte Liste von Funktionen und Definitionen, die am besten funktionieren.

Wann wird das neue Tool-Nutzungsformat für Vertex AI oder Amazon Bedrock verfügbar sein?

In naher Zukunft!