Ga naar hoofdinhoud

OpenAI Function Calling-tutorial

Leer hoe de nieuwe Function Calling-functionaliteit van OpenAI GPT-modellen in staat stelt gestructureerde JSON-output te genereren en hoe dit veelvoorkomende dev-problemen door onregelmatige outputs oplost.
Bijgewerkt 2 jun 2026  · 8 min lezen

Wat is OpenAI Function Calling?

De OpenAI API is erg goed in het systematisch genereren van reacties. Je kunt je prompts beheren, de modeloutput optimaliseren en met een paar regels code taal- en andere applicaties bouwen.

Toch was de OpenAI API lange tijd een hoofdpijn voor developers en engineers. Waarom? Zij zijn gewend aan werken met gestructureerde datatypes, terwijl werken met ongestructureerde data zoals strings lastig is.

Om consistente resultaten te krijgen, moeten developers reguliere expressies (RegEx) of prompt engineering gebruiken om informatie uit tekststrings te halen.

Daar komt de function calling-functionaliteit van OpenAI om de hoek kijken. Hiermee kunnen GPT-3.5- en GPT-4-modellen door de gebruiker gedefinieerde functies als input nemen en gestructureerde output genereren. Daardoor hoef je geen RegEx te schrijven of aan prompt engineering te doen.

In deze tutorial leg ik stap voor stap uit hoe OpenAI function calling kan helpen veelvoorkomende developerproblemen op te lossen die ontstaan door onregelmatige modeloutputs.

OpenAI gebruiken zonder Function Calling

In deze sectie genereren we reacties met het GPT-3.5-Turbo-model zonder function calling om te zien of we consistente output krijgen.

Voordat je de OpenAI Python API installeert, moet je een API-sleutel krijgen en die instellen op je lokale systeem. Volg de tutorial GPT-3.5 en GPT-4 via de OpenAI API in Python om te leren hoe je de API-sleutel verkrijgt en instelt. De tutorial bevat ook voorbeelden voor het instellen van omgevingsvariabelen in DataLab, de AI-ondersteunde datanotebook van DataCamp.

Voor extra hulp kun je de code bekijken in de OpenAI Function Calling-workbook op DataLab.

Upgrade de OpenAI Python API naar V1 met:

pip install --upgrade openai -q

Initialiseer daarna de OpenAI-client met de API-sleutel.

import os
from openai import OpenAI

client = OpenAI(
  api_key=os.environ['OPENAI_API_KEY'],
)

Let op: OpenAI biedt geen gratis credits meer aan nieuwe gebruikers, dus je moet ze kopen om de API te gebruiken.

We schrijven een willekeurige beschrijving van een student. Je kunt zelf een tekst verzinnen of ChatGPT gebruiken om er een te genereren.

student_1_description = "David Nguyen is a sophomore majoring in computer science at Stanford University. He is Asian American and has a 3.8 GPA. David is known for his programming skills and is an active member of the university's Robotics Club. He hopes to pursue a career in artificial intelligence after graduating."

In het volgende deel schrijven we een prompt om studentinformatie uit de tekst te halen en de output als een JSON-object terug te geven. We halen de naam, major, school, cijfers en clubs uit de studentenbeschrijving.

# A simple prompt to extract information from "student_description" in a JSON format.
prompt1 = f'''
Please extract the following information from the given text and return it as a JSON object:

name
major
school
grades
club

This is the body of text to extract the information from:
{student_1_description}
'''

Voeg de prompt toe aan de chat completion-module van de OpenAI API om de reactie te genereren.

# Generating response back from gpt-3.5-turbo
openai_response = client.chat.completions.create(
    model = 'gpt-3.5-turbo',
    messages = [{'role': 'user', 'content': prompt_1}]
)

openai_response.choices[0].message.content

De reactie is best goed. Laten we hem omzetten naar JSON om het beter te begrijpen.

'{\n  "name": "David Nguyen",\n  "major": "computer science",\n  "school": "Stanford University",\n  "grades": "3.8 GPA",\n  "club": "Robotics Club"\n}'

We gebruiken de `json`-bibliotheek om de tekst om te zetten naar een JSON-object.

import json

# Loading the response as a JSON object
json_response = json.loads(openai_response.choices[0].message.content)
json_response

Het eindresultaat is vrijwel perfect. Dus, waarom hebben we Function Calling nodig?

{'name': 'David Nguyen',
 'major': 'computer science',
 'school': 'Stanford University',
 'grades': '3.8 GPA',
 'club': 'Robotics Club'}

Laten we dezelfde prompt proberen, maar met een andere studentenbeschrijving.

student_2_description="Ravi Patel is a sophomore majoring in computer science at the University of Michigan. He is South Asian Indian American and has a 3.7 GPA. Ravi is an active member of the university's Chess Club and the South Asian Student Association. He hopes to pursue a career in software engineering after graduating."

We veranderen alleen de tekst van de studentenbeschrijving in de prompt.

prompt2 = f'''
Please extract the following information from the given text and return it as a JSON object:

name
major
school
grades
club

This is the body of text to extract the information from:
{student_2_description}
'''

En we voeren de chat completion-functie uit met de tweede prompt.

# Generating response back from gpt-3.5-turbo
openai_response = client.chat.completions.create(
    model = 'gpt-3.5-turbo',
    messages = [{'role': 'user', 'content': prompt_2}]
)

# Loading the response as a JSON object
json_response = json.loads(openai_response.choices[0].message.content)
json_response

Zoals je ziet, is het niet consistent. In plaats van één club terug te geven, is de lijst met clubs van Ravi teruggegeven. Dat wijkt ook af van de eerste student.

{'name': 'Ravi Patel',
 'major': 'computer science',
 'school': 'University of Michigan',
 'grades': '3.7 GPA',
 'club': ['Chess Club', 'South Asian Student Association']}

Voorbeeld van OpenAI Function Calling

Om dit op te lossen, gebruiken we nu een recent geïntroduceerde functie genaamd Function Calling. Het is belangrijk om een aangepaste functie te maken waarmee je de nodige informatie toevoegt aan een lijst met dictionaries, zodat de OpenAI API de functionaliteit begrijpt.

  • name: zet hier de naam van de Python-functie die je zojuist hebt gemaakt.
  • description: de functionaliteit van de functie.
  • parameters: binnen de “properties” schrijven we de namen van de argumenten, het type en de beschrijving. Dit helpt de OpenAI API te herkennen waar we naar op zoek zijn.

Let op: Zorg dat je het juiste patroon volgt. Lees meer over function calling in de officiële documentatie.

student_custom_functions = [
    {
        'name': 'extract_student_info',
        'description': 'Get the student information from the body of the input text',
        'parameters': {
            'type': 'object',
            'properties': {
                'name': {
                    'type': 'string',
                    'description': 'Name of the person'
                },
                'major': {
                    'type': 'string',
                    'description': 'Major subject.'
                },
                'school': {
                    'type': 'string',
                    'description': 'The university name.'
                },
                'grades': {
                    'type': 'integer',
                    'description': 'GPA of the student.'
                },
                'club': {
                    'type': 'string',
                    'description': 'School club for extracurricular activities. '
                }
                
            }
        }
    }
]

Vervolgens genereren we reacties voor twee studentenbeschrijvingen met een aangepaste functie die is toegevoegd aan het argument "functions". Daarna zetten we de tekstreactie om in een JSON-object en printen we het.

student_description = [student_1_description,student_2_description]
for i in student_description:
    response = client.chat.completions.create(
        model = 'gpt-3.5-turbo',
        messages = [{'role': 'user', 'content': i}],
        functions = student_custom_functions,
        function_call = 'auto'
    )

    # Loading the response as a JSON object
    json_response = json.loads(response.choices[0].message.function_call.arguments)
    print(json_response)

Zoals we zien, krijgen we uniforme output. We hebben zelfs cijfers als numerieke waarde in plaats van als string. Consistente output is essentieel om foutloze AI-applicaties te bouwen.

{'name': 'David Nguyen', 'major': 'computer science', 'school': 'Stanford University', 'grades': 3.8, 'club': 'Robotics Club'} 

{'name': 'Ravi Patel', 'major': 'computer science', 'school': 'University of Michigan', 'grades': 3.7, 'club': 'Chess Club'}

Meerdere aangepaste functies

Je kunt meerdere custom functions toevoegen aan de chat completion-functie. In deze sectie bekijken we de magische mogelijkheden van de OpenAI API en hoe die automatisch de juiste functie kiest en de correcte argumenten teruggeeft.

In de Python-lijst van de dictionary voegen we nog een functie toe, “extract_school_info”, die ons helpt universiteitsinformatie uit de tekst te halen.

Om dit te bereiken, voeg je een extra dictionary toe voor een functie met name, beschrijving en parameters.

custom_functions = [
    {
        'name': 'extract_student_info',
        'description': 'Get the student information from the body of the input text',
        'parameters': {
            'type': 'object',
            'properties': {
                'name': {
                    'type': 'string',
                    'description': 'Name of the person'
                },
                'major': {
                    'type': 'string',
                    'description': 'Major subject.'
                },
                'school': {
                    'type': 'string',
                    'description': 'The university name.'
                },
                'grades': {
                    'type': 'integer',
                    'description': 'GPA of the student.'
                },
                'club': {
                    'type': 'string',
                    'description': 'School club for extracurricular activities. '
                }
                
            }
        }
    },
    {
        'name': 'extract_school_info',
        'description': 'Get the school information from the body of the input text',
        'parameters': {
            'type': 'object',
            'properties': {
                'name': {
                    'type': 'string',
                    'description': 'Name of the school.'
                },
                'ranking': {
                    'type': 'integer',
                    'description': 'QS world ranking of the school.'
                },
                'country': {
                    'type': 'string',
                    'description': 'Country of the school.'
                },
                'no_of_students': {
                    'type': 'integer',
                    'description': 'Number of students enrolled in the school.'
                }
            }
        }
    }
]

We genereren een beschrijving van “Stanford University” met ChatGPT om onze functie te testen.

school_1_description = "Stanford University is a private research university located in Stanford, California, United States. It was founded in 1885 by Leland Stanford and his wife, Jane Stanford, in memory of their only child, Leland Stanford Jr. The university is ranked #5 in the world by QS World University Rankings. It has over 17,000 students, including about 7,600 undergraduates and 9,500 graduates23. "

Maak de lijst met studenten- en schoolbeschrijvingen en geef die door aan de OpenAI chat completion-functie om de reactie te genereren. Zorg dat je de bijgewerkte custom function hebt meegegeven.

description = [student_1_description, school_1_description]
for i in description:
    response = client.chat.completions.create(
        model = 'gpt-3.5-turbo',
        messages = [{'role': 'user', 'content': i}],
        functions = custom_functions,
        function_call = 'auto'
    )

    # Loading the response as a JSON object
    json_response = json.loads(response.choices[0].message.function_call.arguments)
    print(json_response)

Het GPT-3.5-Turbo-model heeft automatisch de juiste functie gekozen voor verschillende beschrijvingstypen. We krijgen perfecte JSON-output voor zowel de student als de universiteit.

{'name': 'David Nguyen', 'major': 'computer science', 'school': 'Stanford University', 'grades': 3.8, 'club': 'Robotics Club'} 

{'name': 'Stanford University', 'ranking': 5, 'country': 'United States', 'no_of_students': 17000}

We kunnen zelfs onder de naam zien dat de reactie is gegenereerd met de functie “extract_school_info”.

Toepassingen van Function Calling

In deze sectie bouwen we een stabiele samenvatter die informatie over school en student op een bepaalde manier samenvat.

Eerst maken we twee Python-functies, extract_student_info en extract_school_info, die de argumenten uit function calling aannemen en een samengevatte string teruggeven.

def extract_student_info(name, major, school, grades, club):
    
    """Get the student information"""

    return f"{name} is majoring in {major} at {school}. He has {grades} GPA and he is an active member of the university's {club}."

def extract_school_info(name, ranking, country, no_of_students):
    
    """Get the school information"""

    return f"{name} is located in the {country}. The university is ranked #{ranking} in the world with {no_of_students} students."
  1. Maak de Python-lijst met de beschrijving van student één, een willekeurige prompt en de beschrijving van school één. De willekeurige prompt is toegevoegd om de automatische function calling te valideren.
  2. We genereren de reactie met elke tekst in de lijst `descriptions`.
  3. Als er een function call wordt gebruikt, krijgen we de naam van de functie en passen we op basis daarvan met de response de relevante argumenten toe op de functie. Anders geven we de normale reactie terug.
  4. Print de outputs van alle drie de samples.
descriptions = [
    student_1_description, 
    "Who was a Abraham Lincoln?",
    school_1_description
                ]

for i, sample in enumerate(descriptions):
    response = client.chat.completions.create(
        model = 'gpt-3.5-turbo',
        messages = [{'role': 'user', 'content': sample}],
        functions = custom_functions,
        function_call = 'auto'
    )
    
    response_message = response.choices[0].message
    
    if dict(response_message).get('function_call'):
        
        # Which function call was invoked
        function_called = response_message.function_call.name
        
        # Extracting the arguments
        function_args  = json.loads(response_message.function_call.arguments)
        
        # Function names
        available_functions = {
            "extract_school_info": extract_school_info,
            "extract_student_info": extract_student_info
        }
        
        fuction_to_call = available_functions[function_called]
        response_message = fuction_to_call(*list(function_args .values()))
        
    else:
        response_message = response_message.content
    
    print(f"\nSample#{i+1}\n")
    print(response_message)
  • Sample#1: Het GPT-model heeft “extract_student_info” gekozen en we kregen een korte samenvatting over de student.
  • Sample#2: Het GPT-model heeft geen functie gekozen en de prompt behandeld als een gewone vraag; daardoor kregen we de biografie van Abraham Lincoln.
  • Sample#3: Het GPT-model heeft “extract_school_info” gekozen en we kregen een korte samenvatting over Stanford University.
Sample#1

David Nguyen is majoring in computer science at Stanford University. He has 3.8 GPA and he is an active member of the university's Robotics Club.

Sample#2

Abraham Lincoln was the 16th President of the United States. He served as president from March 1861 until his assassination in April 1865. Lincoln led the country through its greatest internal crisis, the American Civil War, and his Emancipation Proclamation declared slaves in Confederate territory to be free. He is known for his leadership, his commitment to preserving the Union, and his efforts to abolish slavery. Lincoln's presidency is widely regarded as one of the most transformative in American history.

Sample#3

Stanford University is located in the United States. The university is ranked #5 in the world with 17000 students.

Conclusie

In deze tutorial hebben we OpenAI's function calling leren kennen. We hebben ook gezien hoe je het gebruikt om consistente outputs te genereren, meerdere functies te maken en een betrouwbare tekstsamenvatter te bouwen.

Wil je meer leren over de OpenAI API? Volg dan de cursus Working with OpenAI API en gebruik de OpenAI API in Python-cheat sheet om je eerste AI-project te bouwen.

Veelgestelde vragen

Hoe gaat OpenAI function calling om met complexe geneste JSON-outputs?

OpenAI function calling laat je geneste JSON-structuren definiëren in het functieschema. Door de hiërarchische relaties binnen de eigenschap parameters te specificeren, zorg je ervoor dat het model correct geneste en gestructureerde JSON-outputs genereert voor complexe data-eisen.

Kan OpenAI function calling worden gebruikt met externe API's of databases?

Ja, OpenAI function calling kan worden geïntegreerd met externe API's of databases door custom functions te maken die API-calls of databasequeries uitvoeren op basis van de argumenten die door het model worden doorgegeven. Zo kun je dynamisch interacteren met externe systemen en toch consistente, gestructureerde reacties behouden.

Wat gebeurt er als de function call van het model met geen enkele gedefinieerde functie overeenkomt?

Als de function call van het model niet overeenkomt met een gedefinieerde functie of het opgegeven schema, wordt de functie niet getriggerd en behandelt het model de invoer als een standaard tekstprompt. Je krijgt dan een gewone tekstreactie terug. Dat biedt flexibiliteit om verschillende invoertypen af te handelen.


Abid Ali Awan's photo
Author
Abid Ali Awan
LinkedIn
Twitter

Als gecertificeerd data scientist haal ik met passie het maximale uit de nieuwste technologie om innovatieve machinelearning-toepassingen te bouwen. Met een sterke achtergrond in spraakherkenning, data-analyse en -rapportage, MLOps, conversationele AI en NLP heb ik mijn vaardigheden aangescherpt in het ontwikkelen van intelligente systemen die echt impact maken. Naast mijn technische expertise ben ik ook een sterke communicator met een talent om complexe concepten terug te brengen tot heldere, beknopte taal. Daardoor ben ik uitgegroeid tot een veelgelezen blogger over data science, waar ik mijn inzichten en ervaringen deel met een groeiende community van data-professionals. Op dit moment richt ik me op contentcreatie en redactie, waarbij ik met large language models werk aan krachtige en aansprekende content die zowel bedrijven als individuen helpt het beste uit hun data te halen.

Onderwerpen
Gerelateerd

blog

AI vanaf nul leren in 2026: een complete gids van de experts

Ontdek alles wat je moet weten om in 2026 AI te leren, van tips om te beginnen tot handige resources en inzichten van industrie-experts.
Adel Nehme's photo

Adel Nehme

15 min

Meer zienMeer zien