Begriff
Tool Calling (AI)
Warum wichtig?
Dieser Begriff ist ein Knoten im SengakujiWorks-Wissensnetz. Nutze Level 0 für die erste Einordnung, Level 1 für Praxis, Level 2 für technische Struktur und Level 3 für Grenzen, Fallstricke und Expertenkontext.
Ein LLM (ChatGPT) kann gut reden, aber nichts tun.
Es kann keine Pizza bestellen und nicht nach dem Wetter schauen (es weiß nur, was 2023 im Training war).
Tool Calling gibt dem LLM Hände.
Du sagst ihm: "Hier ist ein Werkzeug get_weather(city). Wenn du das Wetter brauchst, sag Bescheid."
User: "Wie ist das Wetter in Berlin?"
LLM (denkt): "Ich brauche das Tool." -> Output: {"tool": "get_weather", "args": {"city": "Berlin"}}.
Dein Code führt das Tool aus (API Call) und gibt das Ergebnis ("20 Grad") zurück an das LLM.
LLM antwortet dem User: "Es sind 20 Grad."
Merksatz: Die Fähigkeit eines KI-Modells, strukturierten Output (meist JSON) zu generieren, der eine externe Funktion oder API aufruft, um Aktionen in der realen Welt auszuführen oder aktuelle Informationen abzurufen.
OpenAI API:
tools = [{
"type": "function",
"function": {
"name": "send_email",
"parameters": {
"type": "object",
"properties": {
"recipient": {"type": "string"},
"body": {"type": "string"}
}
}
}
}]
Das LLM "sieht" diese Definition. Es halluziniert keine Argumente, sondern hält sich strikt an das JSON Schema.
Praxisroutine
In der Praxis lernst du Tool Calling (AI), indem du mit einem kleinen, kontrollierten Beispiel beginnst. Baue zuerst einen Minimalfall, prüfe das Ergebnis, veraendere genau eine Sache und beobachte, was sich ändert. Notiere dir Eingabe, Aktion, Ausgabe und typischen Fehler.
Übung: Erstelle ein Beispiel aus deinem Alltag, fuehre den Ablauf gedanklich Schritt für Schritt durch und markiere die Stelle, an der du Feedback oder ein Log brauchst. Wenn du diese Stelle benennen kannst, verstehst du den Begriff praktisch.
1. Parallel Tool Calling
Das LLM kann mehrere Tools gleichzeitig rufen. User: "Wie ist das Wetter in Berlin und Tokio?" LLM Output:
[
{"name": "get_weather", "args": {"city": "Berlin"}},
{"name": "get_weather", "args": {"city": "Tokio"}}
]
Dein Backend kann diese Requests parallel abfeuern (Async IO). Das halbiert die Wartezeit.
2. Hallucinated Tool Calls
Manchmal ruft das LLM Tools, die es gar nicht gibt (get_stock_price), oder erfindet Parameter.
Gute Modelle (GPT-4) sind sehr stabil. Schwache Modelle (Llama-2) machen oft Syntax-Fehler im JSON.
Lösung: Constrained Decoding (Grammar). Man zwingt das Modell auf Token-Ebene, nur valides JSON zu generieren, das dem Schema entspricht.
3. Human-in-the-Loop
Sicherheitsrisiko: "Lösche alle Emails."
LLM ruft delete_all_emails().
Katastrophe.
Bei kritischen Tools ("Side Effects") muss der Code pausieren und den User fragen: "Die KI will alle Emails löschen. Erlauben? (J/N)".
Erst nach Bestätigung wird das Tool ausgeführt.
Forced Tooling und das JSON Schema (Structured Output)
Entwickler verlassen sich oft blind auf LLMs. Ein großes Problem (besonders in Mistral oder alten GPT Versionen): Das Modell weigert sich oft aus Unverstandniss, das Tool zu nutzen, und fängt im Output stattdessen an zu schwafeln.
Ein API-Design-Trick ist Forced Tooling (tool_choice: {"type": "function", "name": "get_stock_price"}). Damit wird das Modell in die Enge getrieben, die Funktion absolut garantiert aufzurufen.
Damit das Modell zudem valides JSON abliefert (die Parsing-Hölle!), unterstützt Pydantic via OpenAI inzwischen "Strict Structured Outputs". Der Prompt-Interpreter auf Serverseite der KI baut aus dem JSON-Schema eine grammatische Restricted-State-Machine: Die KI kann auf Byte/Token-Ebene dann mathematisch keinen fehlgeleiteten Output, keinen fehlenden Key oder fehlerhaftes Comma mehr produzieren.
Der Tool Retry Loop und Error Handling
Wenn du ein Backend-Tool der KI zur Verfügung stellst: search_customer_by_id(user_123) und das liefert einen 404 Error, weil der Kunde User-123 heißt (Großschreibung), darf der Agent nicht implodieren.
Das Architektur-Prinzip dahinter ist der Autonomous Execution Loop. Dein Python-Backend fängt den Fehler "404" ab und füttert denselben Error als puren Textstring zurück in die KI-Historie: {"role": "tool", "content": "Kunde nicht gefunden. Überprüfe die Syntax (Case Sensitivity) nochmal!"}. Die KI analysiert im zweiten Turn den Fehler und probiert ihr Tool erneut (Self-Correction). Dieser Retry-Limit Loop (max_steps=5) rettet 80% aller fehlschlagenden Tool-Orchestrierungen in Produktion.
System Prompts und Tool "Side-Loading"
Ein weit verbreitetes Missverständnis: "Die KI kennt die API, wenn ich sie übergebe".
Das Modell sieht das JSON-Schema und baut daraus einen Schatten-Systemprompt (// Hier sind Tools, die du nutzen kannst: Func(), ...).
Fängst du an, hunderte extrem komplexe Tools (check_sap_invoice(vendorId, refNr, subClient)) ohne Dokumentation in den Stack zu rotzen, fängt das Modell wüst zu Raten an. Jedes komplexe Tool muss durch eine glasklare "description" im JSON-Docstring unterfüttert sein, in der zwingend das 'Wie' und 'Wann' spezifiziert ist ("Nutzen sie dies NUR für B2B Verträge!"). Ohne ausführliche Metadaten im Tool-Dictionary erzeugt die "Halluzination" sonst gnadenlose Endlosschleifen über Parametrisierungs-Fehler.
Quick-Check
Ist das ein Plugin?
Ja. ChatGPT Plugins waren der Vorläufer. Function Calling ist die technische API-Implementierung davon für Entwickler.RAG als Tool?
Genau.search_knowledge_base(query)ist ein klassisches Tool. Der Agent entscheidet selbst: "Weiß ich das? Nein. Ich suche in der DB." Das macht RAG dynamischer.OpenAPI Spec?
Der Standard, um Tools zu beschreiben. Du kannst deine Swagger/OpenAPI Datei direkt in das LLM füttern, und es lernt sofort, wie es deine ganze API bedienen kann.