Funktionsaufruf (englisch: Function Calling) ist ein Mechanismus der Anwendungsprogrammierschnittstelle (API) in großen Sprachmodellen (LLMs), der es dem Modell ermöglicht, eine strukturierte, maschinenlesbare Anfrage auszugeben, um eine vom Entwickler definierte Funktion oder ein Werkzeug aufzurufen, anstatt nur Klartext zu generieren. Diese Fähigkeit überbrückt die Kluft zwischen konversationaler oder generativer Ausgabe und ausführbaren Aktionen und ermöglicht es LLMs, Echtzeitdaten abzurufen, Berechnungen durchzuführen, mit externen Systemen zu interagieren oder mehrstufige Arbeitsabläufe zu orchestrieren. In einer typischen Implementierung stellt der Entwickler dem Modell eine Reihe von Funktionsdefinitionen bereit, einschließlich Namen, Beschreibungen und Parameterschemata; das Modell entscheidet dann basierend auf der Eingabe des Benutzers, ob eine Funktion aufgerufen werden soll, und gibt, falls ja, ein strukturiertes Objekt (häufig JSON) mit dem Funktionsnamen und den Argumenten aus. Die Anwendung führt die Funktion aus, gibt das Ergebnis an das Modell zurück, und das Modell kann dieses Ergebnis dann in eine endgültige Antwort an den Benutzer einbeziehen.
Funktionsaufruf unterscheidet sich von früheren Ansätzen wie Prompt-Engineering oder Feintuning für die Werkzeugnutzung, da er auf der nativen Fähigkeit des Modells beruht, strukturierte Ausgabeformate zu befolgen und zu überlegen, wann und wie Werkzeuge aufgerufen werden sollen. Er ist ein Kernmerkmal vieler moderner LLM-APIs, einschließlich derer von OpenAI, Anthropic und Google DeepMind, und ist zu einem Standardbaustein für agentische KI-Systeme geworden, bei denen Modelle autonom Handlungsabläufe planen und ausführen. Der Mechanismus wird auch als Werkzeugnutzung, Werkzeugaufruf oder strukturierte Ausgabeerzeugung bezeichnet, wobei der Funktionsaufruf insbesondere den API-Vertrag zwischen dem Modell und der Anwendung betont.
Historische Entwicklung
Das Konzept, Sprachmodelle mit externen Werkzeugen zu verbinden, geht der Bezeichnung „Funktionsaufruf“ voraus. Frühe Arbeiten in den 2010er Jahren, wie die Integration von Abrufsystemen mit neuronalen Modellen, legten den Grundstein, indem sie zeigten, dass Modelle von externen Informationsquellen profitieren können. Das moderne Paradigma des Funktionsaufrufs entstand jedoch mit dem Aufkommen transformerbasierter LLMs und ihrer Fähigkeit, strukturierte Ausgaben zuverlässig zu erzeugen.
OpenAI führte im Juni 2023 eine formale Funktionsaufruf-API als Teil seiner GPT-4- und GPT-3.5-Turbo-Modellupdates ein. Dies ermöglichte es Entwicklern, Funktionen zu definieren und das Modell ein JSON-Objekt zurückgeben zu lassen, das angibt, welche Funktion mit welchen Argumenten aufgerufen werden soll. Die Veröffentlichung wurde von Dokumentation und Beispielen begleitet, die Anwendungsfälle wie das Abfragen von Datenbanken, das Senden von E-Mails und das Abrufen von Wetterdaten zeigten. Anthropic folgte 2024 mit einer eigenen Werkzeugnutzungsfunktion, und Google DeepMind integrierte ähnliche Fähigkeiten in seine Gemini-Modelle. Bis 2025 war der Funktionsaufruf zu einem Standardmerkmal aller großen LLM-Anbieter geworden, einschließlich Open-Source-Modellen wie denen von Meta und Mistral, die häufig über das OpenAI-kompatible API-Format implementiert wurden.
Das Design des Funktionsaufrufs wurde durch frühere Forschung zu werkzeugerweiterten Sprachmodellen beeinflusst, wie das Toolformer-Modell von Meta AI (2023), das lernte, zu entscheiden, wann APIs aufgerufen werden sollen, und das ReAct-Muster (2022), das Denken und Handeln verschränkte. Diese Ansätze zeigten, dass LLMs von explizitem Werkzeugaufruf profitieren können, erforderten jedoch individuelles Training oder Prompting. Der Funktionsaufruf standardisierte dies in einen einfachen API-Vertrag und machte ihn für jeden Entwickler zugänglich.
Technischer Mechanismus
Der Funktionsaufruf arbeitet innerhalb der standardmäßigen LLM-Inferenzschleife. Der Entwickler sendet eine Anfrage an die API, die die Benutzereingabe und eine Liste von Funktionsdefinitionen enthält. Jede Definition enthält typischerweise einen Namen, eine Beschreibung und ein JSON-Schema, das die Parameter spezifiziert. Das Modell verarbeitet diese Eingabe und generiert entweder eine normale Textantwort oder einen strukturierten Funktionsaufruf. In der OpenAI-API gibt das Modell beispielsweise ein Feld tool_calls in der Antwort zurück, das den Funktionsnamen und die Argumente als JSON-String enthält.
Die Fähigkeit des Modells, gültige strukturierte Ausgaben zu erzeugen, wird durch sein Training auf großen Korpora ermöglicht, die JSON und andere strukturierte Formate enthalten, sowie durch Instruktionstuning und Reinforcement Learning aus menschlichem Feedback (RLHF). Einige Implementierungen verwenden eingeschränkte Dekodierung oder grammatikbasiertes Sampling, um sicherzustellen, dass die Ausgabe syntaktisch gültig ist, obwohl die meisten modernen LLMs korrektes JSON ohne solche Einschränkungen mit hoher Zuverlässigkeit erzeugen können.
Nachdem das Modell einen Funktionsaufruf ausgegeben hat, führt die Anwendung die Funktion in einer Sandbox- oder vertrauenswürdigen Umgebung aus, erfasst das Ergebnis (das ein String, eine Zahl oder ein komplexes Objekt sein kann) und sendet es in einer Folgeanfrage an das Modell zurück. Das Modell generiert dann eine endgültige Antwort, die das Werkzeugergebnis einbezieht. Diese Schleife kann mehrfach wiederholt werden, sodass das Modell mehrere Funktionsaufrufe verketten kann, um eine komplexe Aufgabe zu bewältigen.
Anwendungsfälle und Anwendungen
Der Funktionsaufruf ermöglicht eine breite Palette praktischer Anwendungen. Ein häufiger Anwendungsfall ist der Abruf von Echtzeitdaten: Ein Benutzer stellt eine Frage zu aktuellen Aktienkursen, Wetter oder Sportergebnissen, und das Modell ruft eine Funktion auf, die eine externe API abfragt, um die neuesten Daten zu holen. Ein weiterer ist die Datenbankinteraktion, bei der das Modell natürliche Sprachabfragen in SQL oder andere Abfragesprachen übersetzt und sie gegen eine Datenbank ausführt, wobei die Ergebnisse an den Benutzer zurückgegeben werden.
In Unternehmensumgebungen unterstützt der Funktionsaufruf Kundendienst-Chatbots, die Bestellstatus nachschlagen, Datensätze aktualisieren oder Probleme eskalieren können. In der Softwareentwicklung ermöglicht er KI-Assistenten, Code auszuführen, Tests zu laufen lassen oder mit Versionskontrollsystemen zu interagieren. In der Automatisierung ermöglicht er Modellen, Smart-Home-Geräte zu steuern, Nachrichten zu senden oder Termine zu planen. Der Mechanismus ist auch zentral für agentische Frameworks, bei denen ein Modell eine Abfolge von Aktionen plant, Funktionen aufruft, um jeden Schritt auszuführen, und basierend auf den Ergebnissen iteriert.
Integration mit agentischen Systemen
Der Funktionsaufruf ist eine grundlegende Komponente der agentischen KI, bei der Modelle nicht nur konversational sind, sondern im Namen von Benutzern handeln. Ein Agent könnte den Funktionsaufruf nutzen, um das Ziel eines Benutzers in Unteraufgaben zu zerlegen, eine Suchfunktion aufrufen, um Informationen zu sammeln, eine Berechnungsfunktion aufrufen, um Daten zu verarbeiten, und dann eine Nachrichtenfunktion aufrufen, um das Ergebnis zu liefern. Die Fähigkeit des Modells, zu entscheiden, wann Funktionen aufgerufen werden und wie Ergebnisse interpretiert werden, ist entscheidend für effektive Handlungsfähigkeit.
Frameworks wie LangChain, LlamaIndex und AutoGPT nutzen den Funktionsaufruf, um komplexe Arbeitsabläufe zu orchestrieren. Diese Frameworks bieten Abstraktionen zum Definieren von Werkzeugen, Verwalten des Konversationszustands und Behandeln von Fehlern. Der Aufstieg des Funktionsaufrufs hat auch zur Entwicklung von Werkzeugregistern und Marktplätzen geführt, auf denen Entwickler Funktionsdefinitionen teilen und wiederverwenden können.
Vergleich mit alternativen Ansätzen
Vor dem Funktionsaufruf verwendeten Entwickler mehrere Workarounds, um LLMs Zugriff auf Werkzeuge zu geben. Ein Ansatz war das Prompt-Engineering, bei dem das Modell angewiesen wurde, ein bestimmtes Format auszugeben (z. B. „antworte mit einem JSON-Objekt, das 'action' und 'action_input' enthält“), und die Anwendung diese Ausgabe parste. Dies war fragil, da Modelle vom Format abweichen konnten. Ein anderer Ansatz war das Feintuning, bei dem ein Modell auf Beispielen der Werkzeugnutzung trainiert wurde, was jedoch erhebliche Daten und Rechenleistung erforderte.
Der Funktionsaufruf verbessert diese Ansätze, indem er eine strukturierte API bereitstellt, der das Modell explizit trainiert ist zu folgen. Er reduziert Parsing-Fehler, verbessert die Zuverlässigkeit und vereinfacht die Entwicklererfahrung. Er ist jedoch nicht ohne Einschränkungen. Das Modell kann Funktionsaufrufe halluzinieren, die nicht existieren, falsche Argumente erzeugen oder eine Funktion nicht aufrufen, wenn sie benötigt wird. Entwickler müssen Validierung und Fehlerbehandlung implementieren, um diese Probleme zu mildern.
Sicherheits- und Zuverlässigkeitsüberlegungen
Der Funktionsaufruf führt Sicherheitsrisiken ein, da die Ausgabe des Modells direkt Aktionen auslöst. Eine böswillige Eingabe könnte das Modell dazu verleiten, eine Funktion mit schädlichen Argumenten aufzurufen, wie das Löschen von Daten oder das Senden unbefugter Nachrichten. Entwickler müssen strenge Validierung der Funktionsargumente implementieren, Whitelists zulässiger Funktionen verwenden und Funktionen in Sandbox-Umgebungen mit Zugriff nach dem Prinzip der geringsten Rechte ausführen.
Zuverlässigkeit ist ein weiteres Anliegen. Das Modell kann syntaktisch gültige, aber semantisch falsche Argumente erzeugen, oder es kann die falsche Funktion aufrufen. Techniken wie Few-Shot-Prompting, bessere Funktionsbeschreibungen und nachträgliche Validierung können die Genauigkeit verbessern. Einige Anbieter bieten strukturierte Ausgabemodi an, die die Einhaltung des JSON-Schemas erzwingen, wodurch das Risiko fehlerhafter Aufrufe reduziert wird.
Zukünftige Richtungen
Der Funktionsaufruf entwickelt sich rasant weiter. Forscher untersuchen Wege, die Fähigkeit des Modells zu verbessern, die richtige Funktion auszuwählen, mehrdeutige Eingaben zu behandeln und aus Fehlern zu lernen. Mehrstufiger Funktionsaufruf, bei dem das Modell Funktionen parallel oder sequenziell aufrufen kann, wird immer häufiger. Es gibt auch Arbeiten zur Effizienzsteigerung des Funktionsaufrufs, indem die Anzahl der Token für Funktionsdefinitionen reduziert und Werkzeugschemata zwischengespeichert werden.
Da LLMs leistungsfähiger werden, wird der Funktionsaufruf wahrscheinlich stärker mit anderen Funktionen wie Speicher, Planung und multimodalen Eingaben integriert. Die Grenze zwischen Funktionsaufruf und allgemeiner Werkzeugnutzung verschwimmt, wobei einige Modelle direkt Code aufrufen oder APIs ohne explizite Definitionen verwenden können. Die Standardisierung von Funktionsaufrufformaten über Anbieter hinweg, wie das OpenAI-kompatible API, trägt zur Schaffung eines Ökosystems interoperabler Werkzeuge und Agenten bei.