Ga naar hoofdinhoud

GPT-4.5 Function Calling-tutorial: haal aandelenkoersen en nieuws op met AI

Bouw een AI-systeem met meerdere functie-aanroepen om aandelenkoersen en nieuws op te halen met het meest geavanceerde model van OpenAI.
· 12 min lezen

Verken met AI

Grote taalmodellen (LLM’s) hebben vaak moeite om consistent gestructureerde output te genereren, zoals JSON, zelfs met geavanceerde prompt-engineering. Prompt-engineering kan de resultaten verbeteren, maar is niet waterdicht: tijdens het testen kunnen nog steeds fouten optreden, met af en toe mislukte resultaten. Hoe zorg je er dus voor dat je elke keer nauwkeurige en betrouwbare gestructureerde output krijgt?

Function calling in LLM’s verwijst naar het vermogen van deze modellen om gestructureerde dataresponsen te produceren, meestal in de vorm van JSON-objecten. Deze functie stelt LLM’s in staat om verder te gaan dan eenvoudige tekstgeneratie en te communiceren met externe systemen, API’s en tools. Door gebruik te maken van function calling kunnen LLM’s complexere, contextgestuurde taken uitvoeren, terwijl ze de vereiste structuur en nauwkeurigheid behouden.

In deze tutorial leren we hoe je GPT-4.5, het meest nauwkeurige en feitelijke model, gebruikt om een script met functie-aanroepen te maken. Eerst implementeren we één functie om aandelenkoersen van internet te halen. Daarna voegen we een extra functie toe, zodat de LLM kan kiezen tussen meerdere tools en op basis van de gebruikersprompt de meest geschikte selecteert.

Aan het einde van deze tutorial kun je je eigen slimme applicatie bouwen die voor elk bedrijf aandelenkoersen kan geven en ook nieuwsfeeds kan leveren.

Afbeelding van de auteur

De mogelijkheden voor function calling van GPT-4.5

GPT-4.5, het nieuwste model van OpenAI, introduceert verschillende geavanceerde features, waaronder verbeterde mogelijkheden voor function calling. Deze zijn bedoeld om het vermogen van het model te verbeteren om met externe systemen te interageren en complexe taken uit te voeren door specifieke functies aan te roepen op basis van gebruikersinvoer.

Bron: Model - OpenAI API

Hier zijn de belangrijkste features van de function calling in GPT-4.5:

1. Integratie met API’s

GPT-4.5 ondersteunt function calling via de Chat Completions API, Assistants API en Batch API. Hierdoor kunnen developers het model naadloos integreren in hun applicaties, zodat het taken kan uitvoeren zoals data ophalen, verwerken en zelfs commando’s uitvoeren binnen een softwareomgeving.

2. Gestructureerde output

Het model kan gestructureerde output retourneren, zoals JSON. Dat is vooral handig voor developers die het model willen laten interacteren met andere systemen of tools die specifieke dataformaten vereisen.

3. Vision-mogelijkheden

Hoewel GPT-4.5 geen multimodale output zoals spraak of video ondersteunt, biedt het wel vision-mogelijkheden via afbeeldingsinvoer. Het model kan zo visuele data verwerken en analyseren, wat je kunt combineren met function calling voor taken die zowel tekst- als beelddata omvatten.

4. Geavanceerde functionaliteiten

De function calling in GPT-4.5 is ontworpen om complexe workflows te vereenvoudigen door het model functies te laten suggereren of aanroepen die in je code zijn geschreven. Dit is vooral handig om repetitieve taken te automatiseren of AI-gestuurde besluitvorming in bestaande softwaresystemen te integreren.

Ontdek alle details over het nieuwe OpenAI-model in de blog GPT 4.5: features, toegang, vergelijking met GPT-4o & meer.

Één functie aanroepen met GPT-4.5

We bouwen nu een eenvoudig systeem voor functie-aanroepen met het GPT-4.5-model en de Yahooquery-bibliotheek. De Yahooquery-bibliotheek helpt ons om allerlei aandelen-gerelateerde data uit Yahoo Finance te halen. 

Onze oplossing laat gebruikers vragen stellen over aandelenkoersen, waarna een specifieke functie wordt getriggerd die de koers van internet ophaalt en een antwoord genereert. Zo simpel is het. 

We beginnen met het installeren van de libraries openai en yahooquery met het PIP-commando.

!pip install openai yahooquery -q

Een functie voor de aandelenkoers maken  

Maak een Python-functie die een ticker (bijv. AAPL) accepteert en de koers van die ticker retourneert. Onder de motorkap gebruikt deze yahooquery om relevante data te extraheren.

from openai import OpenAI
import json
from yahooquery import Ticker

def get_stock_price(ticker):
    try:
        # Create a Ticker object for the provided ticker symbol
        t = Ticker(ticker)
        # Retrieve the price data
        price_data = t.price
        # Check if we received valid data for the ticker
        if ticker in price_data and price_data[ticker].get("regularMarketPrice") is not None:
            price = price_data[ticker]["regularMarketPrice"]
        else:
            return f"Price information for {ticker} is unavailable."
    except Exception as e:
        return f"Failed to retrieve data for {ticker}: {str(e)}"
    
    return f"{ticker} is currently trading at ${price:.2f}"

De tools definiëren met de functie

De OpenAI-client begrijpt de Python-functie niet, dus moeten we een tool maken met een lijst van dictionaries. We moeten de benodigde naam, beschrijving en outputtype opgeven. 

Wanneer deze functie wordt aangeroepen, haalt hij de tickersymbol uit de prompt en geeft die terug in een gestructureerd formaat.

tools = [{
    "type": "function",
    "function": {
        "name": "get_stock_price",
        "description": "Get current stock price for a provided ticker symbol from Yahoo Finance using the yahooquery Python library.",
        "parameters": {
            "type": "object",
            "properties": {
                "ticker": {"type": "string"}
            },
            "required": ["ticker"],
            "additionalProperties": False
        },
        "strict": True
    }
}]

Het model laten beslissen of het de functie moet aanroepen

Laten we onze zojuist gemaakte OpenAI-functie testen. Geef de chat completion het gebruikersbericht, de modelnaam en de tools mee.

client = OpenAI()

messages = [{"role": "user", "content": "What's the current price of Meta stock?"}]

completion = client.chat.completions.create(
    model="gpt-4.5-preview",
    messages=messages,
    tools=tools,
)

print(completion.choices[0].message.tool_calls)

Zoals we zien heeft GPT-4.5 de get_stock_price correct aangeroepen en de juiste ticker (META) geretourneerd.

[ChatCompletionMessageToolCall(id='call_uVGbahRiMnn4AkOJYbv8gfIV', function=Function(arguments='{"ticker":"META"}', name='get_stock_price'), type='function')]

De functie uitvoeren met de meegegeven ticker

We kunnen deze ticker nu doorgeven aan onze Python-functie get_stock_price. 

tool_call = completion.choices[0].message.tool_calls[0]
args = json.loads(tool_call.function.arguments)

result = get_stock_price(args["ticker"])

print(result)

Als resultaat krijg je een respons met de tickernaam en de bijbehorende koers.

META is currently trading at $640.00

Je kunt hier stoppen, maar om een goed antwoord in natuurlijke taal te geven, moet je de resultaten opnieuw aan de chat completion doorgeven.

De functieaanroep en toolresultaat toevoegen

We voegen de gegenereerde respons uit het vorige gesprek toe en nemen ook de toolaanroep op met tool-ID en toolresultaten.

messages.append(completion.choices[0].message)  # Model's function call message
messages.append({
    "role": "tool",
    "tool_call_id": tool_call.id,
    "content": str(result)
})

Het bijgewerkte gesprek terug naar het model sturen

Voer de chat completion opnieuw uit met het bericht dat de inhoud van de toolaanroepen bevat.

completion_2 = client.chat.completions.create(
    model="gpt-4.5-preview",
    messages=messages,
    tools=tools,
)

# The final model response incorporating the stock price information
print(completion_2.choices[0].message.content)

Zoals je ziet kregen we het juiste resultaat. 

The current price of Meta stock (META) is $640.00.

Je denkt misschien dat dit een nutteloze stap is, maar bij complexe output helpt deze stap je om de resultaten in gewoon Engels te begrijpen in plaats van in JSON-formaat.

Ben je nog niet helemaal thuis in de OpenAI API en wil je meer leren? Overweeg dan de OpenAI Fundamentals-carrièretrack om te leren hoe je de OpenAI API gebruikt voor prompts met OpenAI’s GPT- en Whisper-modellen.

Meerdere functies aanroepen met GPT-4.5

Nu leren we hoe we nog een functie aan ons AI-systeem toevoegen, zodat GPT-4.5 automatisch kan beslissen welke functie moet worden aangeroepen op basis van de gebruikersprompt. We voegen een nieuwe feed-functie toe die de top 3 nieuwsartikelen retourneert met links voor de opgegeven ticker. 

Begin met het installeren van de feedparser-bibliotheek met het pip-commando. We gebruiken deze bibliotheek om de headlines voor de opgegeven ticker op te halen.

!pip install feedparser -q

De functie voor beursnieuws definiëren

Maak de Python-functie get_stock_news die de ticker als input neemt en de drie belangrijkste nieuwskoppen met hun links retourneert.

import feedparser


def get_stock_news(ticker):
    # Construct the RSS feed URL for the given ticker.
    rss_url = f"https://feeds.finance.yahoo.com/rss/2.0/headline?s={ticker}&region=US&lang=en-US"
    try:
        feed = feedparser.parse(rss_url)
        if not feed.entries:
            return f"No news found for {ticker}."
        # Extract the top 3 news items (title and link)
        news_items = []
        for entry in feed.entries[:3]:
            title = entry.get("title", "No Title")
            link = entry.get("link", "No Link")
            news_items.append(f"{title} ({link})")
        news_str = "\n".join(news_items)
    except Exception as e:
        return f"Failed to retrieve news for {ticker}: {str(e)}"
    
    return f"Latest news for {ticker}:\n{news_str}"

get_stock_news("AAPL")

We hebben de drie belangrijkste headlines over Apple verzameld met bijbehorende links.

'Latest news for AAPL:\nNvidia AI Server Maker Hon Hai Posts 25% Jump in Two-Month Sales 
(https://finance.yahoo.com/news/nvidia-ai-server-maker-hon-075011863.html?.tsrc=rss)\nFoxconn says February revenue rose 56.43% y/y
(https://finance.yahoo.com/news/foxconn-says-february-revenue-rose-074433615.html?.tsrc=rss)\nApple Inc. (AAPL): Among the Best Stocks To Invest In According to Billionaires 
(https://finance.yahoo.com/news/apple-inc-aapl-among-best-051548210.html?.tsrc=rss)'

Meerdere tools definiëren voor koers en nieuws

We moeten nu een extra OpenAI-functie toevoegen genaamd get_stock_news met de juiste beschrijving en output.

tools = [
    {
        "type": "function",
        "function": {
            "name": "get_stock_price",
            "description": "Get current stock price for a provided ticker symbol using yahooquery.",
            "parameters": {
                "type": "object",
                "properties": {
                    "ticker": {"type": "string"}
                },
                "required": ["ticker"],
                "additionalProperties": False
            },
            "strict": True
        }
    },
    {
        "type": "function",
        "function": {
            "name": "get_stock_news",
            "description": "Get the latest news for a provided ticker symbol by parsing the Yahoo Finance RSS feed using feedparser.",
            "parameters": {
                "type": "object",
                "properties": {
                    "ticker": {"type": "string"}
                },
                "required": ["ticker"],
                "additionalProperties": False
            },
            "strict": True
        }
    }
]

Het model laten beslissen of het één of beide functies moet aanroepen

Laten we de functie testen door GPT-4.5 te vragen naar de Google-aandelen en het laatste nieuws over Google.

messages = [{
    "role": "user",
    "content": "What's the current price of Google stock and can you show me the latest news about it?"
}]


completion = client.chat.completions.create(
    model="gpt-4.5-preview",
    messages=messages,
    tools=tools,
)

completion.choices[0].message.tool_calls

Zoals we zien heeft het beide functies aangeroepen voor aandelenkoers en het laatste nieuws.

[ChatCompletionMessageToolCall(id='call_zfcRJ4EcIUUqHCcN8SErjeoi', function=Function(arguments='{"ticker": "GOOGL"}', name='get_stock_price'), type='function'),
 ChatCompletionMessageToolCall(id='call_jBv8TlSPOyFKcRWHwByxLMb4', function=Function(arguments='{"ticker": "GOOGL"}', name='get_stock_news'), type='function')]

Het resultaat van de functieaanroep opslaan

Het probleem is dat beide functies de ticker als resultaat retourneren. We moeten met een if-else-structuur bepalen welke functie is aangeroepen. We slaan de resultaten van de functie op in de dictionary.

# The model returns function call requests.
tool_calls = completion.choices[0].message.tool_calls

# Execute each function call based on the tool the model requested
tool_results = {}
for tool_call in tool_calls:
    func_name = tool_call.function.name
    args = json.loads(tool_call.function.arguments)
    if func_name == "get_stock_price":
        tool_results["price"] = get_stock_price(args["ticker"])
    elif func_name == "get_stock_news":
        tool_results["news"] = get_stock_news(args["ticker"])

De functieaanroep en toolresultaten toevoegen

We voegen nu de eerder gegenereerde resultaten toe en het functieresultaat met de tool-ID. 

messages.append(completion.choices[0].message)  # Append the model's function call message

for tool_call in tool_calls:
    func_name = tool_call.function.name
    result_content = tool_results.get("price") if func_name == "get_stock_price" else tool_results.get("news")
    messages.append({
        "role": "tool",
        "tool_call_id": tool_call.id,
        "content": result_content
    })

Het bijgewerkte gesprek terug naar het model sturen

Wanneer we het resulterende bericht aan GPT-4.5 doorgeven, genereert het geweldige resultaten die helemaal logisch zijn.

from IPython.display import display, Markdown

completion_2 = client.chat.completions.create(
    model="gpt-4.5-preview",
    messages=messages,
    tools=tools,
)

# The final model response incorporates both stock price and news.
Markdown(completion_2.choices[0].message.content)

We hebben de Google-aandelenkoers en links naar het belangrijkste nieuws over Google verkregen. 

De broncode en outputs zijn beschikbaar in de DataLab-werkruimte. Je hoeft alleen je eigen OpenAI API-sleutel toe te voegen aan de omgevingsvariabele en je kunt alles zelf draaien.

Conclusie

We hebben LLM’s gedwongen om gestructureerde output te genereren en die vervolgens door te geven aan een API of een andere Python-functie om een specifieke taak uit te voeren. Geavanceerde AI, zoals GPT-4.5, kan meerdere services of API’s gebruiken om sterk geïntegreerde antwoorden te genereren. 

In de toekomst zullen we function calling en agents gebruiken om alles om ons heen te besturen; geef simpelweg een spraakcommando aan je AI, en die roept de benodigde tools aan op basis van je opdracht en brengt wijzigingen aan in het systeem.

We hebben GPT-4.5, maar veel AI-experts wachten op GPT-5, waarvan wordt verwacht dat het dichter bij AGI ligt. Je kunt alles over het aankomende model lezen in de blog Everything We Know About GPT-5 .

Abid Ali Awan

Auteur

Abid Ali Awan

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