Ga naar de hoofdinhoud
BVDNET
Arnhem · websites & automatiseringBVDNET
Agentic AI

Function calling

Met function calling vraagt een AI-model je eigen software om iets te doen, zoals een bestelling opzoeken of de voorraad controleren, en antwoordt het met de echte uitkomst.

Ook bekend als: tool use, tool calling, functieaanroep

Met function calling (ook tool calling of tool use genoemd) vraagt een AI-model je software om iets te doen. Je beschrijft welke acties het mag aanvragen, zoals "zoek een bestelling op". Vraagt een klant in je webshopchat waar zijn pakket is, dan vraagt het model om die zoekactie, voert je systeem die uit en antwoordt het model met de actuele status. Je software bepaalt wat er echt gebeurt.

Waar komt de term vandaan?

OpenAI voegde function calling op 13 juni 2023 toe aan zijn Chat Completions API: nieuwe versies van GPT-4 en GPT-3.5 Turbo waren met fine-tuning geleerd te herkennen wanneer een functie nodig was en dan te antwoorden met een JSON-object met de argumenten. Anthropic maakte hetzelfde idee op 30 mei 2024 als tool use algemeen beschikbaar voor zijn Claude 3-modellen, en ook de Gemini API van Google noemt het function calling.

Hoe werkt het?

De handleiding voor function calling van OpenAI beschrijft vijf stappen:

  1. Je applicatie stuurt de vraag naar het model met de tools die het mag aanroepen: per tool een naam, een beschrijving van wat hij doet en wanneer je hem gebruikt, en zijn parameters als JSON Schema.
  2. Het model antwoordt direct of roept een tool aan. Een aanroep bevat de naam van de tool en de argumenten als JSON.
  3. Je applicatie voert de functie uit met die argumenten, bijvoorbeeld een databasequery.
  4. Ze stuurt het resultaat in een tweede verzoek terug naar het model.
  5. Het model schrijft zijn antwoord op basis van het resultaat, of vraagt om nog een aanroep.

Anthropic noemt dit een contract tussen je applicatie en het model: het model voert zelf nooit iets uit. Herhaal stap 2 tot en met 5 tot het model een eindantwoord geeft, en je hebt de basislus van een AI-agent.

Het model kan meerdere aanroepen in één beurt vragen (parallelle aanroepen); dat kun je uitzetten. Met de parameter tool_choice kun je een aanroep verplichten of één bepaalde functie afdwingen, bijvoorbeeld om gestructureerde gegevens uit een tekst te halen. In september 2026 noemt de documentatie van Anthropic Claude Opus 5.5 bij de modellen die zo'n afgedwongen aanroep weigeren. Met strict mode (strict: true) passen de argumenten altijd bij je schema, net als bij gestructureerde output.

Wat is het verband met MCP?

Function calling is de manier waarop het model om een actie vraagt. Het Model Context Protocol (MCP), dat Anthropic in november 2024 publiceerde, legt vast hoe een applicatie tools op externe servers vindt en bereikt. In de handleiding voor een MCP-client haalt de client de lijst met tools op bij een MCP-server, geeft die als gewone tooldefinities aan Claude en voert de toolaanroepen van Claude uit via die server. Een MCP-tool bereikt het model dus via function calling.

Waar gaat het mis?

  • Instructies verstopt in toolresultaten. Bij de lancering in 2023 waarschuwde OpenAI dat onbetrouwbare gegevens in de uitvoer van een tool het model tot onbedoelde acties kunnen aanzetten, een vorm van prompt injection. Het advies: gebruik alleen betrouwbare tools en laat de gebruiker acties met gevolgen in de echte wereld bevestigen, zoals een e-mail versturen of iets kopen (human-in-the-loop).
  • Gegokte waarden. Ontbreekt een verplichte parameter in de vraag, dan kan het model een aannemelijke waarde invullen. Het voorbeeld van Anthropic is "What's the weather?" zonder plaats: sommige Claude-modellen vragen ernaar, andere gokken.
  • Vage beschrijvingen. Volgens Anthropic zijn gedetailleerde toolbeschrijvingen verreweg de belangrijkste factor voor hoe goed tools werken. OpenAI raadt minder dan 20 functies aan het begin van een beurt aan.
  • Kosten en snelheid. Tooldefinities worden gefactureerd als invoer-tokens, en elke aanroep kost minstens één extra rondgang.

Voorbeeld

Stel: een webshop geeft zijn klantenservice-assistent één functie, hier in het formaat van OpenAI (Anthropic noemt het schemaveld input_schema):

JSON
1{
2 "type": "function",
3 "name": "get_order_status",
4 "description": "Zoek de verzendstatus van een bestelling op aan de hand van het bestelnummer.",
5 "parameters": {
6 "type": "object",
7 "properties": {
8 "order_id": {"type": "string", "description": "Het bestelnummer"}
9 },
10 "required": ["order_id"]
11 }
12}

Een klant schrijft: "Waar is mijn bestelling 1042?" Het model antwoordt met een aanroep van get_order_status met {"order_id": "1042"}. De code van de webshop zoekt de bestelling op en geeft {"status": "shipped", "carrier": "PostNL"} terug, waarna het model antwoordt: "Je bestelling 1042 is verzonden met PostNL." Een bestelling annuleren vraagt om een aparte functie, en de code van de webshop kan die aanroep vasthouden tot een medewerker hem goedkeurt.