Die Mechanismen von Funktionsaufrufen, APIs und wie man KI dazu bringt, tatsächlich etwas zu tun
Lesezeit: 14 Minuten | Schwierigkeitsgrad: Mittel
In Teil 1 und 2 haben wir gelernt, was Agenten sind und welche Frameworks man verwenden sollte. Aber es fehlt noch ein entscheidendes Puzzleteil: Wie führen Agenten tatsächlich Aufgaben aus?
Wenn ein KI-Agent einen Flug bucht, im Internet sucht oder Code ausführt – was passiert dabei eigentlich hinter den Kulissen?
Die Antwort lautet Tool-Nutzung (auch „Funktionsaufruf“ genannt). Und dies zu verstehen ist der Schlüssel zum Bau von Agenten, die tatsächlich funktionieren.
Hier ist etwas, das fast jeden überrascht:
> Das LLM führt keine Tools aus. Das tut Ihr Code.
Wenn Claude oder GPT-4 „im Internet suchen“ oder „Code ausführen“, führt das Modell diese Aktionen nicht tatsächlich selbst aus. Es schlägt vor, welches Tool verwendet und welche Argumente übergeben werden sollen. Ihre Anwendung empfängt diesen Vorschlag, validiert ihn und führt die eigentliche Funktion aus.
Diese Unterscheidung ist wichtig für die Sicherheit, die Zuverlässigkeit und das Verständnis dessen, was wirklich möglich ist.
Schauen wir uns einmal genau an, was passiert, wenn Sie einen Agenten bitten, das Wetter zu überprüfen:
Bevor irgendetwas passiert, teilen Sie dem LLM mit, welche Tools es gibt:
{ "name": "get_weather", "description": "Aktuelles Wetter für einen Ort abrufen", "parameters": { "location": { "type": "string", "description": "Name der Stadt, z. B. 'Tokio, Japan'" } } }
Das ist so, als würde man jemandem eine Speisekarte geben – man kann nur bestellen, was darauf steht.
Benutzer: „Wie ist das Wetter in Tokio?“
Deine App sendet dies zusammen mit der Liste der verfügbaren Tools an das LLM.
Das LLM antwortet nicht direkt. Stattdessen gibt es Folgendes zurück:
{ "tool_call": { "name": "get_weather", "arguments": { "location": "Tokio, Japan" } } }
Hinweis: Dies ist nur ein Vorschlag. Das LLM sagt: „Ich denke, du solltest get_weather mit diesem Argument aufrufen.“
Dies ist der entscheidende Teil. Dein Code erhält den Vorschlag und entscheidet, ob er:
# IHR CODE führt dies aus, nicht das LLM if tool_call.name == "get_weather": result = weather_api.get(tool_call.arguments["location"])
Sie senden die Ergebnisse an das LLM zurück:
{ "tool_result": { "temperature": "18°C", "condition": "Cloudy", "humidity": "65%" } }
Das LLM formuliert daraufhin eine Antwort in natürlicher Sprache: „Das Wetter in Tokio ist derzeit 18 °C und bewölkt bei einer Luftfeuchtigkeit von 65 %.“
Die Tatsache, dass Ihre App Tools ausführt und nicht das LLM, hat enorme Auswirkungen:
Sie kontrollieren genau, welche Aktionen zulässig sind. Das LLM kann zwar vorschlagen, alle Ihre Dateien zu löschen, aber Ihr Code entscheidet, ob dies tatsächlich geschieht.
Sie können Argumente vor der Ausführung überprüfen. Ist diese E-Mail-Adresse gültig? Ist dieser Dateipfad sicher?
Jeder Tool-Aufruf läuft über Ihren Code. Sie können alles protokollieren, die Ausführungsrate begrenzen und überprüfen.
Wenn ein Tool fehlschlägt, kann Ihr Code einen erneuten Versuch unternehmen, auf einen Fallback zurückgreifen oder den Benutzer um Hilfe bitten – anstatt dass das LLM ein Ergebnis „halluziniert“.
Moderne Agenten können sich mit einer enormen Bandbreite an Tools verbinden. Hier ist die Übersicht:
| Tool-Typ | Was es tut | Beispiel |
|---|---|---|
| Websuche | Suchmaschinen abfragen | „Neueste KI-Nachrichten finden“ |
| Web Scraping | Daten von Websites extrahieren | „Produktpreise von Amazon abrufen“ |
| RAG-Abfrage | Wissensdatenbanken durchsuchen | „Unsere Unternehmensrichtlinie zu X finden“ |
| API-Abfragen | Strukturierte Daten abrufen | „Bevölkerungszahl von Frankreich abrufen“ |
| Tool-Typ | Funktion | Beispiel |
|---|---|---|
| Codeausführung | Python/JS in Sandbox ausführen | „Zinseszinsen berechnen“ |
| Code-Interpreter | Daten analysieren, Diagramme erstellen | „Diese CSV-Datei visualisieren“ |
| Shell-Befehle | Systemoperationen | „Dateien im Verzeichnis auflisten“ |
| Git-Funktionen | Repositorys verwalten | „Pull-Anfrage erstellen“ |
| Tool-Typ | Funktion | Beispiel |
|---|---|---|
| SQL-Datenbanken | Abfrage relationaler Daten | „Umsatz nach Region abrufen“ |
| Vektorspeicher | Semantische Ähnlichkeitssuche | „Ähnliche Dokumente finden“ |
| Dateisysteme | Lesen, schreiben, organisieren | „Bericht in Ordner speichern“ |
| Tool-Typ | Funktion | Beispiel |
|---|---|---|
| Senden, lesen, organisieren | „Einladung zur Besprechung senden“ | |
| Slack/Teams | Nachrichten posten | „Team über Problem informieren“ |
| Kalender | Planen, Verfügbarkeit prüfen | „Besprechungsraum buchen“ |
| Tool-Typ | Funktion | Beispiel |
|---|---|---|
| Bilderzeugung | DALL-E, Midjourney | „Logo-Entwurf erstellen“ |
| Bildanalyse | Vision, OCR | „Text von Quittung lesen“ |
| Dokumentenerstellung | PDF, Word, Folien | „Quartalsbericht erstellen“ |
Die wichtigste Erkenntnis: Wenn ein Dienst über eine API verfügt, kann ein Agent diese nutzen. Die einzigen Grenzen sind die Tools, die Sie aktivieren möchten.
Wenn man KI die Fähigkeit gibt, Aktionen auszuführen, entstehen echte Risiken. Hier ist, was Sie wissen müssen:
Prompt-Injection – Böswillige Anweisungen, die in den vom Agenten gelesenen Daten versteckt sind
Missbrauch von Tools – Der Agent nutzt legitime Tools auf schädliche Weise
Scope Creep — Der Agent überschreitet seine vorgesehenen Befugnisse
Sandboxing: Führen Sie die Codeausführung in isolierten Containern durch (Docker, gVisor, Firecracker)
Least Privilege: Gewähren Sie Tools nur die minimal erforderlichen Berechtigungen
Human-in-the-Loop: Für Aktionen mit erheblichen Auswirkungen ist eine Bestätigung erforderlich
Agent: „Ich bin dabei, 500 Dateien zu löschen. Bestätigen? [J/N]“
Rate Limiting: Verhindern Sie ausufernde Kosten und Aktionen
if tool_calls_this_minute > 10: raise RateLimitError("Zu viele Tool-Aufrufe")
Eingabevalidierung: Vertraue Daten niemals blind
# SCHLECHT: Der Agent kann jeden beliebigen Befehl ausführen os.system(agent_suggestion) # GUT: Erlaube nur Befehle aus der Whitelist if agent_suggestion in ALLOWED_COMMANDS: execute(agent_suggestion)
Ein aktueller Durchbruch verdient besondere Erwähnung: Strukturierte Ausgaben.
Das Problem: LLMs geben manchmal fehlerhaftes JSON zurück, wodurch Ihr Code nicht mehr funktioniert.
Die Lösung: Eingeschränkte Dekodierung, die eine gültige Ausgabe garantiert.
# Mit dem Strict-Modus von OpenAI response = client.chat.completions.create( model="gpt-4o", response_format={ "type": "json_schema", "json_schema": my_schema, "strict": True # Garantiert gültige Ausgabe } )
Mit strict: True kann das Modell buchstäblich kein ungültiges JSON erzeugen. Die Ausgabe entspricht garantiert Ihrem Schema.
Dies beseitigt eine ganze Klasse von Fehlern und macht den Aufruf von Tools wesentlich zuverlässiger.
Erinnern Sie sich aus Teil 2 daran, wie sich MCP (Model Context Protocol) zum Standard entwickelt? Hier ist der Grund, warum es für Tools wichtig ist:
Vor MCP: Jedes Framework hatte sein eigenes Tool-Format. Man musste ein Tool für LangChain erstellen, es für CrewAI neu erstellen und erneut für Claude.
Nach MCP: Einmal erstellen, überall verwenden. Wie USB für KI-Tools.
# MCP-Tool-Definition (funktioniert mit jedem MCP-kompatiblen Framework) @mcp.tool() def search_database(query: str) -> list[dict]: """Durchsuche die Unternehmensdatenbank nach relevanten Datensätzen.""" return db.search(query)
Wichtige Akteure, die MCP einsetzen: Anthropic (Entwickler), OpenAI, Google, Microsoft, AWS.
LLMs schlagen Tools vor, Ihr Code führt sie aus — Diese Trennung ist entscheidend für Sicherheit und Kontrolle
Der 5-Schritte-Tanz: Tools definieren → Anfrage senden → LLM schlägt vor → Ihre App führt aus → Ergebnisse zurückgeben
Agenten können sich mit allem verbinden, was über eine API verfügt — Web, Datenbanken, E-Mail, Codeausführung, Bildgenerierung...
Sicherheit erfordert mehrschichtige Abwehr — Sandboxing, Prinzip der geringsten Berechtigungen, menschliche Freigabe, Ratenbegrenzung, Validierung
Strukturierte Ausgaben garantieren gültiges JSON — Eliminiert Parsing-Fehler, macht den Aufruf von Tools zuverlässig
MCP standardisiert die Tool-Konnektivität — Einmal erstellen, mit jedem Framework nutzen
In Teil 4 befassen wir uns mit Anwendungsbeispielen aus der Praxis verschiedener Branchen (mit konkreten Zahlen), der Situation im Jahr 2025 und der Frage, wie man auf dem Laufenden bleibt, während sich dieses Gebiet rasant weiterentwickelt.
Navigation durch die Serie:
Zuletzt aktualisiert: Dezember 2025