Function Calling (Tool Use)
Function Calling, auch Tool-Nutzung genannt, ermöglicht es einem Sprachmodell, eine externe Funktion mit JSON-Argumenten anzufordern, die die Anwendung ausführt und deren Ergebnis zurückgibt.
Funktionsaufrufe, auch Werkzeugaufrufe oder Werkzeugnutzung genannt, ermöglichen es einem großen Sprachmodell (LLM), statt einfachem Text eine Aufforderung zur Ausführung einer externen Funktion auszugeben. Die Anwendung beschreibt jedes verfügbare Werkzeug mit einem Namen, einem Zweck und einem JSON-Schema für seine Argumente. Benötigt eine Anfrage aktuelle Daten oder eine Aktion, antwortet das Modell mit dem Namen des Werkzeugs und JSON-Argumenten. Die Anwendung führt die Funktion aus, und das Modell verfasst seine Antwort anhand des Ergebnisses. Das Modell führt selbst nichts aus. Metas Toolformer zeigte im Februar 2023, dass ein Modell sich selbst beibringen kann, API-Aufrufe in den eigenen Text einzufügen. OpenAI ergänzte am 13. Juni 2023 Funktionsaufrufe in seiner API. Die dafür feinabgestimmten Modelle erkennen, wann eine Funktion benötigt wird, und formatieren Argumente passend zu deren Signatur. Alle großen Modellanbieter unterstützen Funktionsaufrufe inzwischen, und offene Modelle lernen sie durch ihre Instruktionsabstimmung und Chatvorlagen.
So funktionieren Funktionsaufrufe#
Ein Werkzeugaufruf ist ein wiederholter Austausch zwischen dem Modell und der Anwendung, der so lange fortgesetzt wird, bis das Modell alles Nötige hat:
Der folgende Code bildet beide Seiten eines solchen Austauschs im Format des Leitfadens von OpenAI zu Funktionsaufrufen ab. Die Antwort des Modells ist ausgeschrieben, damit der Code ohne API-Schlüssel ausgeführt werden kann:
import json
from jsonschema import validate
# Die mit der Anfrage gesendete Werkzeugdefinition: ein Name, ein Zweck und ein JSON-Schema für die Argumente
tool = {
"type": "function",
"name": "get_order_status",
"description": "Look up the shipping status of an order by its number.",
"parameters": {
"type": "object",
"properties": {"order_id": {"type": "string", "pattern": "^[0-9]+$"}},
"required": ["order_id"],
},
}
# Die Ausgabe des Modells ist ein Funktionsaufruf, dessen Argumente als JSON-Zeichenfolge eintreffen
call = {"type": "function_call", "call_id": "call_1", "name": "get_order_status", "arguments": '{"order_id": "4417"}'}
args = json.loads(call["arguments"])
validate(args, tool["parameters"]) # Löst einen Fehler aus, bevor irgendetwas ausgeführt wird, wenn die Argumente gegen das Schema verstoßen
# Die Anwendung führt ihre eigene Funktion aus und gibt das Ergebnis unter derselben call_id zurück
orders = {"4417": "Shipped, arriving Thursday"}
print({"type": "function_call_output", "call_id": call["call_id"], "output": orders[args["order_id"]]})Es gibt {'type': 'function_call_output', 'call_id': 'call_1', 'output': 'Shipped, arriving Thursday'} aus, also das Element, das die Anwendung an die Unterhaltung anhängt, bevor sie das Modell erneut aufruft. Wird bei einem Tool "strict": true festgelegt, wendet die API eingeschränktes Decoding an, sodass die vom Modell erzeugten Argumente immer dem Schema entsprechen.
Tools auswählen und verketten#
Modelle können in einem Durchgang mehrere unabhängige Aufrufe ausgeben, etwa um zwei Bestellungen gleichzeitig zu prüfen. Eine Anwendung kann ein bestimmtes Tool erzwingen, ein Tool voraussetzen oder Tools für einen Durchgang verbieten. Aufrufe über mehrere Durchgänge zu verketten, wobei jedes Ergebnis den nächsten Aufruf bestimmt, ist die Schleife, die ein Modell zu einem KI-Agenten macht, der in einem Agenten-Framework läuft. Die Berkeley Function Calling Leaderboard bewertet diese Fähigkeiten: die richtige Funktion auswählen, ihre Argumente ausfüllen, parallele Aufrufe und Aufrufe über mehrere Durchgänge hinweg ausführen und ablehnen, wenn kein Tool geeignet ist. Da Tool-Ergebnisse als Eingabe an das Modell zurückgegeben werden, kann eine von einem Tool abgerufene Webseite oder ein Dokument eine Prompt-Injection enthalten. Deshalb gewähren Anwendungen Tools nur die unbedingt erforderlichen Berechtigungen und holen vor Käufen, Löschungen oder dem Senden von Nachrichten die Zustimmung einer Person ein.
Visionsmodelle eignen sich besonders gut als Tools, weil ihre Ausgabe bereits strukturiert ist. In Ultralytics YOLO gibt Results.summary() jedes Objekt, das ein YOLO26-Modell erkennt, als Wörterbuch mit Klassenname, Klassenindex, Konfidenz und Boxkoordinaten zurück. Diese Liste wandelt json.dumps direkt in ein Tool-Ergebnis um, sodass ein Chatmodell oder ein Bild-Sprach-Modell (VLM) mithilfe des Vorhersagemodus Objekte auf einem Foto zählen und lokalisieren kann.
Funktionsaufrufe und verwandte Begriffe#
- Agenten zur Computersteuerung: Bedienen Software mithilfe von Screenshots, Klicks und Tastatureingaben und eignen sich dadurch auch für Anwendungen ohne API. Ein Funktionsaufruf führt bei vorhandener API mit einer strukturierten Anfrage zum selben Ergebnis.
- Strukturierte Ausgaben: Beschränken die endgültige Antwort eines Modells auf ein Schema, etwa beim Extrahieren von Feldern aus einer Rechnung. Funktionsaufrufe verwenden dieselben Schemata, um eine Aktion anzufordern, und erwarten ein Ergebnis zurück.
- Retrieval-Augmented Generation (RAG): Fügt abgerufene Dokumente zum Prompt hinzu. Ein Such-Tool kann RAG umsetzen, und agentisches RAG lässt das Modell entscheiden, wann und wonach gesucht wird.
- Model Context Protocol (MCP): Ein offenes Protokoll, das Anthropic im November 2024 eingeführt hat und über das Anwendungen Tools entdecken, die von externen Programmen bereitgestellt werden. Das Modell ruft ein MCP-Tool weiterhin per Funktionsaufruf auf.










