AI Agent · Function Calling

Was ist Function Calling 2026? So rufen OpenAI, Gemini und Claude APIs per JSON auf

2026.08.18 · ~12 Min. Lesezeit

Die Wasserscheide ist nicht das klügere Modell, sondern wer JSON ausgibt und wer Seiteneffekte ausführt. Protokoll, drei Vendor-Formate, Runtime-Grenzen, Szenariomatrix und 7-Schritte-Plan.

JSON-Editor und Werkzeuge auf einem Schreibtisch—Function Calling zu externen APIs

Function Calling (Tool Calling) ist 2026 das Standardprotokoll für Agents: Modelle tun nicht mehr so, als riefen sie APIs in Prosa auf. Sie geben JSON unter einem vereinbarten Schema aus, und Ihr Code holt Wetter, fragt Datenbanken ab, ändert Dateien oder startet Tests. Der Unterschied ist nicht, wer besser plaudert, sondern ob Schema validiert, Ausführung auditiert und Seiteneffekte isoliert sind.

Stand 18. August 2026. Feldnamen in SDKs driften; die Schleife nicht: Anfrage → Ausführen → Rückspeisen. Werkzeuge, die die Platte ändern, gehören zu einem Agent-Dateisystem-Sandbox. Präferenzen über Sitzungen gehören in Memory, nicht in das nächste arguments-Blob.

3
Vendor-JSON-Dialekte
1
Gemeinsame Schleife
MCP
Discovery & Transport

Warum Freitext-Prompts nicht reichen (Why)

Früher: „bitte get_weather(city=Beijing) aufrufen“ plus Regex. Demos laufen; Produktion bricht an drei Stellen:

  1. Instabiles Parsen — Höflichkeit, umgeordnete Argumente, fehlende Anführungszeichen; JSON.parse stirbt.
  2. Keine Typen — Enums werden Freitext; Pflichtfelder fehlen; parallele Calls lassen sich nicht zuordnen.
  3. Seiteneffekte im Chat — das Modell behauptet eine Löschung, die nie lief, oder Sie liefen und das Modell sah kein Ergebnis.

Function Calling lässt die Wahl beim Modell und die Ausführung in der Runtime. HTTP, SQL und Shell passieren nie im Modellprozess. Wie CI: eine Job, ein Workspace — Grenze vor Klugheit.

Drei Schichten (What)

„OpenAI tools verdrahtet“ ist keine Architektur. Mindestens drei Schichten:

SchichtAufgabeTrägerOwner
L1 SchemaNamen, JSON Schema, Beschreibungen, PflichtfelderOpenAI tools[].function, Gemini functionDeclarations, Claude input_schemaProdukt
L2 RuntimeValidieren, Secrets, Timeout, Retry, AuditEigene Schleife, LangGraph, Claude CodeBackend / lokaler Agent
L3 TransportEntdeckung und Verbindung der Tool-ProzesseHTTP, MCP stdio/SSE, internes RPCInfrastruktur

Asymmetrische These: Vendor-APIs standardisieren den L1-JSON-Umschlag. L2-Autorisierung und L3-Prozessisolation machen Sie selbst. MCP ist Discovery und Session — keine automatische Sicherheit.

Die Schleife: Das Modell hält keine API-Keys; Geheimnisse nur in der Runtime.

┌──────────────┐     JSON tool request      ┌──────────────────┐
│  LLM API     │  ────────────────────────► │  Your runtime    │
│  (OpenAI /   │     name + arguments       │  (Agent loop)    │
│   Gemini /   │                            │                  │
│   Claude)    │  ◄──────────────────────── │  execute tool    │
└──────────────┘     tool result JSON       │  • HTTP APIs     │
                                            │  • DB / search   │
                                            │  • shell / MCP   │
                                            └────────┬─────────┘
                                                     │
                                                     ▼
                                            ┌──────────────────┐
                                            │ Policy + secrets │
                                            │ allowlist, audit │
                                            │ Cloud Mac / VPC  │
                                            └──────────────────┘

Vergleich: OpenAI vs Gemini vs Claude

FlächeEinstiegAusführungKontextFür wen
OpenAI toolsChat Completions / ResponsesSie führen aus; arguments oft JSON-StringParallele tool_calls[]; optional strictBestehendes OpenAI-SDK oder Gateways
Gemini functionDeclarationsGemini API / VertexSie führen aus; toolConfig.mode erzwingt oder verbietetTypen oft OBJECT/STRING großGCP; Produkte mit Mode-Schalter
Claude tool_useMessages API / Claude CodeSie führen aus; input ist schon ObjektContent-Blöcke: tool_use / tool_resultAnthropic, IDE-Agents, MCP
MCP-ToolsClient ↔ MCP-ServerIm Serverprozess; Modell emittiert nur JSONTool-Liste zur LaufzeitHot-Plug von Katalogen

2026 trennt nicht „unterstützt Function Calling“ (alle drei tun es), sondern String- vs Objekt-Argumente, parallele Zuordnung und Fehler-Rückschreiben. Gateways normalisieren auf ToolCall{name, id, args} und eine L2-Runtime.

So sieht das JSON aus (How)

Dasselbe get_weather. In Produktion Grenzen in die Description („nur öffentliches Wetter, nie persönlicher Standort“).

OpenAI: tools + tool_calls

Tools an die Anfrage hängen. Bei einem Call enthält die Assistant-Nachricht tool_calls. arguments ist stringifiziertes JSON — parsen, dann validieren.

{
  "model": "gpt-4.1",
  "messages": [{"role": "user", "content": "What's the weather in Beijing?"}],
  "tools": [{
    "type": "function",
    "function": {
      "name": "get_weather",
      "description": "Current weather for a city",
      "parameters": {
        "type": "object",
        "properties": {
          "city": {"type": "string", "description": "City name"},
          "unit": {"type": "string", "enum": ["celsius", "fahrenheit"]}
        },
        "required": ["city"]
      }
    }
  }]
}
{
  "role": "assistant",
  "tool_calls": [{
    "id": "call_abc123",
    "type": "function",
    "function": {
      "name": "get_weather",
      "arguments": "{\"city\":\"Beijing\",\"unit\":\"celsius\"}"
    }
  }]
}

Danach role: tool (oder Responses-Äquivalent) mit passender tool_call_id und String-content.

Gemini: functionDeclarations + toolConfig

Deklarationen unter tools[].functionDeclarations. mode: AUTO, ANY, NONE — Produktschalter, keine Sandbox.

{
  "contents": [{"role": "user", "parts": [{"text": "What's the weather in Beijing?"}]}],
  "tools": [{
    "functionDeclarations": [{
      "name": "get_weather",
      "description": "Current weather for a city",
      "parameters": {
        "type": "OBJECT",
        "properties": {
          "city": {"type": "STRING"},
          "unit": {"type": "STRING", "enum": ["celsius", "fahrenheit"]}
        },
        "required": ["city"]
      }
    }]
  }],
  "toolConfig": {"functionCallingConfig": {"mode": "AUTO"}}
}

Modell: functionCall-Part; Sie: functionResponse. Feldnamen nicht mit OpenAI gleichsetzen.

Claude: tools + tool_use / tool_result

input_schema. Antwort ist ein Array von Content-Blöcken. input ist Objekt, Validierung bleibt Pflicht.

{
  "model": "claude-sonnet-4-6",
  "max_tokens": 1024,
  "tools": [{
    "name": "get_weather",
    "description": "Current weather for a city",
    "input_schema": {
      "type": "object",
      "properties": {
        "city": {"type": "string"},
        "unit": {"type": "string", "enum": ["celsius", "fahrenheit"]}
      },
      "required": ["city"]
    }
  }],
  "messages": [{"role": "user", "content": "What's the weather in Beijing?"}]
}
{
  "role": "assistant",
  "content": [{
    "type": "tool_use",
    "id": "toolu_01XYZ",
    "name": "get_weather",
    "input": {"city": "Beijing", "unit": "celsius"}
  }]
}
{
  "role": "user",
  "content": [{
    "type": "tool_result",
    "tool_use_id": "toolu_01XYZ",
    "content": "{\"temp_c\": 28, \"condition\": \"clear\"}"
  }]
}

Claude Code und Cursor legen MCP drauf. Das Modell sieht weiter JSON-Schema-Tools. Transport ändert sich, die Schleife nicht.

Auswahlmatrix

Wenn Sie …WählenWarum
schon ein OpenAI-kompatibles Gateway habenOpenAI-tools-Dialektgrößtes Ökosystem; Adapter einmal
primär GCP / VertexGemini + modeweniger Übersetzung; „dieser Turn muss suchen“
Claude Code zuerstClaude tools + MCPpasst zum IDE-Katalog
drei Modell-Vendoren routeninternes ToolCall + Adapterkein Vendor-if-else in Fachlogik
Dateien ändern oder CommandsRemote-Mac + Pfad-Allowlisthübsches JSON stoppt kein falsches rm
nur lesende SaaS-APIsServerless + Secret Managerkeine ganze Maschine; Parameter weiter allowlisten

A — Solo, halber Tag: ein Modell, 1–3 Lesetools, JSON Schema ohne additionalProperties, Secrets in Env, Logs nur Hashes. Schreiben Sie die Tool-Beschreibungen so eng, dass das Modell weiß, wann es nicht rufen darf — das spart Round-Trips und Fehlschläge in der Parse-Schicht.

B — kleines Team: internes ToolCall, Timeouts und Caps je Tool, Writes auf Cloud-Mac-Sessions, Memory getrennt. Dieselbe Destroy-Disziplin wie Remote-Mac-Automatisierung. Fügen Sie eine Idempotenz-ID in schreibende Tools ein, damit parallele Retries nicht doppelt buchen. Halten Sie Audit-JSONL außerhalb des Workspace-Volumes, damit ein Destroy die Spur nicht löscht.

C — Enterprise: Katalog-Review, Schema als PR, MCP in VPC, kein unbeschränktes bash. Pflicht: Secret-Rotation unabhängig vom Prompt, und ein Break-Glass-Pfad, der Function Calling für destruktive Tools global auf NONE schaltet, ohne das Modell neu zu deployen.

Fallstricke

  1. Glauben, das Modell authentifiziert — Keys in der Runtime.
  2. OpenAI-arguments als Objekt behandeln — erst parsen.
  3. Beschreibungen „mach alles“ — Über-Calls.
  4. Parallele tool_calls ignorieren — Writes serialisieren.
  5. Fehler schlucken — strukturierte Errors zurück.
  6. MCP = Sicherheit — Home-Root ist volle Platte.

Rollout in 7 Schritten

  1. Tool-Inventar (Seiteneffekt, Timeout, Residenz).
  2. JSON Schema (required, enum, keine additionalProperties).
  3. Minimale Schleife, ein Tool.
  4. Validierung, Secret-Isolation, Audit.
  5. Zweiter Vendor-Adapter als Beweis für das interne Modell.
  6. Write-Tools sandboxen.
  7. 7 Tage beobachten, häufige Fehlschemas verengen.

FAQ

Unterschied zu JSON mode?

JSON mode formt die Endantwort. Function Calling formt Zwischen-Tool-Requests und läuft oft über mehrere Turns nach der Ausführung.

Kann das Modell die Datenbank direkt abfragen?

Nein, außer die Runtime exponiert beliebiges SQL ohne Autorisierung. Standard: nur schema-gültige Parameter vorschlagen.

Ein Schema für drei Vendoren?

Kern-JSON-Schema teilen, Umschläge wrappen. Enums und Pflichtfelder regressionstesten; Strict-Modi sind nicht identisch.

Sind Claude-Code-Tools Function Calling?

Dieselbe Schleife; der Katalog kommt dynamisch von IDE/MCP statt eines handgeschriebenen tools-Arrays.

Tool-Ergebnisse ins Langzeitgedächtnis?

Roh-Payloads sind groß und flüchtig. Zusammenfassen in Memory. Siehe Hilfe.

Fazit

Function Calling 2026 ist schema-typisiertes RPC. Drei JSON-Dialekte, eine Grammatik: Modell schlägt vor, Runtime führt aus, Ergebnis kommt zurück. Sicherheit sitzt in L2-Validierung und isolierten Hosts. Wenn Sie nicht sagen können, wohin ein write_file jetzt fällt, keine Write-Tools anschließen. Lesende APIs können heute live. Code und Tests auf entsorgbare Cloud-Mac-Knoten — zuerst Preise.

Weiterlesen

Tool-Ausführung auf isolierten Cloud-Mac-Knoten

Wetterabfragen passen in Serverless; Repo-Edits, Tests und interne APIs brauchen einen entsorgbaren Host. Remote-Mac isoliert Workspaces pro Session.

Jetzt bestellen · Preise

Function Calling

Tool-Ausführung auf isolierten Cloud-Mac-Knoten

M4 · Cloud Mac · isolated tool runtime

Jetzt bestellen