I large language model (LLM) spesso faticano a generare in modo coerente output strutturati, come il JSON, anche quando si usano tecniche avanzate di prompt engineering. Il prompt engineering può migliorare i risultati, ma non è infallibile: durante i test possono ancora verificarsi errori, portando a occasionali fallimenti. Quindi, come puoi garantire ogni volta output strutturati accurati e affidabili?
Il function calling negli LLM indica la capacità di questi modelli di produrre risposte con dati strutturati, tipicamente sotto forma di oggetti JSON. Questa funzionalità permette agli LLM di andare oltre la semplice generazione di testo e interagire con sistemi esterni, API e strumenti. Sfruttando il function calling, gli LLM possono svolgere compiti più complessi e guidati dal contesto mantenendo la struttura e l’accuratezza richieste.
In questo tutorial, impareremo a usare GPT-4.5, il modello più accurato e fattuale, per creare uno script di function calling. Prima implementeremo una singola funzione per estrarre i prezzi azionari da internet. Poi aggiungeremo un’altra funzione, consentendo all’LLM di scegliere tra più strumenti e selezionare quello più appropriato in base al prompt dell’utente.
Alla fine di questo tutorial, saprai costruire una tua applicazione intelligente in grado di fornire i prezzi azionari di qualsiasi azienda e anche distribuire feed di notizie.
Immagine dell’autore
Le capacità di Function Calling di GPT-4.5
GPT-4.5, l’ultimo modello di OpenAI, introduce diverse funzionalità avanzate, tra cui capacità di function calling migliorate. Queste capacità sono pensate per migliorare la capacità del modello di interagire con sistemi esterni ed eseguire compiti complessi invocando funzioni specifiche in base agli input dell’utente.
Ecco le caratteristiche chiave del Function Calling di GPT-4.5:
1. Integrazione con le API
GPT-4.5 supporta il function calling tramite le Chat Completions API, Assistants API e Batch API. Questo consente agli sviluppatori di integrare senza soluzione di continuità il modello nelle proprie applicazioni, permettendogli di eseguire attività come il recupero e l’elaborazione dei dati e persino l’esecuzione di comandi all’interno di un ambiente software.
2. Output strutturati
Il modello può restituire output strutturati, come JSON, particolarmente utili per gli sviluppatori che necessitano che il modello interagisca con altri sistemi o strumenti che richiedono formati di dati specifici.
3. Capacità visive
Sebbene GPT-4.5 non supporti output multimodali come voce o video, supporta le capacità di visione tramite input di immagini. Questo consente al modello di elaborare e analizzare dati visivi, che possono essere combinati con il function calling per svolgere attività che coinvolgono sia dati testuali sia immagini.
4. Funzionalità avanzate
La funzionalità di function calling in GPT-4.5 è progettata per semplificare workflow complessi, consentendo al modello di suggerire o invocare funzioni scritte nel tuo codice. Questo può essere particolarmente utile per automatizzare attività ripetitive o integrare processi decisionali guidati dall’IA in sistemi software esistenti.
Ora costruiremo un semplice sistema di function calling usando il modello GPT-4.5 e la libreria Yahooquery. La libreria Yahooquery ci aiuterà a estrarre qualsiasi dato relativo ai titoli azionari da Yahoo Finance.
La nostra soluzione permetterà agli utenti di fare domande sui prezzi azionari, attivando una funzione specifica che recupera il prezzo da internet e genera una risposta. È davvero così semplice.
Cominceremo installando le librerie openai e yahooquery usando il comando PIP.
Crea una funzione Python che prende un ticker (ad es., AAPL) e restituisce il prezzo di quel ticker. Usa yahooquery nel backend per estrarre i dati rilevanti.
from openai import OpenAI
import json
from yahooquery import Ticker
defget_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 tickerif ticker in price_data and price_data[ticker].get("regularMarketPrice")isnotNone:
price = price_data[ticker]["regularMarketPrice"]else:returnf"Price information for {ticker} is unavailable."except Exception as e:returnf"Failed to retrieve data for {ticker}: {str(e)}"returnf"{ticker} is currently trading at ${price:.2f}"Offerto da
Definire gli strumenti usando la funzione
Il client OpenAI non comprende la funzione Python, quindi dobbiamo creare uno strumento usando un elenco di dizionari. Dobbiamo fornire il nome, la descrizione e il tipo di output necessari.
Ogni volta che questa funzione viene invocata, estrarrà il nome del ticker dal prompt e lo restituirà in un formato strutturato.
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}}]Offerto da
Lascia che sia il modello a decidere se chiamare la funzione
Testiamo la nostra funzione OpenAI appena creata. Fornisci alla chat completion il messaggio dell’utente, il nome del modello e gli strumenti.
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)Offerto da
Come possiamo vedere, GPT-4.5 ha invocato correttamente get_stock_price e ha restituito il ticker corretto (META).
[ChatCompletionMessageToolCall(id='call_uVGbahRiMnn4AkOJYbv8gfIV', function=Function(arguments='{"ticker":"META"}', name='get_stock_price'),type='function')]Offerto da
Eseguire la funzione con il ticker fornito
Ora possiamo passare questo ticker alla nostra funzione Python 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)Offerto da
Come risultato, ricevi una risposta che include il nome del ticker e il relativo prezzo.
Puoi fermarti qui, ma per fornire una risposta appropriata in linguaggio naturale, devi passare di nuovo i risultati alla chat completion.
Aggiungere la chiamata di funzione e il risultato dello strumento
Aggiungeremo la risposta generata dalla conversazione precedente e includeremo anche la chiamata allo strumento con l’ID dello strumento e i risultati.
messages.append(completion.choices[0].message)# Model's function call message
messages.append({"role":"tool","tool_call_id": tool_call.id,"content":str(result)})Offerto da
Inviare la conversazione aggiornata di nuovo al modello
Esegui di nuovo la chat completion con il messaggio che include il contenuto delle chiamate agli strumenti.
completion_2 = client.chat.completions.create(
model="gpt-4.5-preview",
messages=messages,
tools=tools,)# The final model response incorporating the stock price informationprint(completion_2.choices[0].message.content)Offerto da
Come puoi vedere, abbiamo ottenuto il risultato corretto.
The current price of Meta stock (META)is $640.00.Offerto da
Potresti pensare che questo sia un passaggio inutile, ma quando hai un output complesso, questo step ti aiuterà a comprendere i risultati in inglese semplice invece che in formato JSON.
Se l’API di OpenAI ti crea confusione e vuoi saperne di più, valuta di seguire il percorso di carriera OpenAI Fundamentals per imparare a usare l’API di OpenAI per effettuare prompt ai modelli GPT e Whisper di OpenAI.
Multiple Function Calling con GPT4.5
Ora impareremo ad aggiungere un’altra funzione al nostro sistema di IA, in modo che GPT-4.5 possa decidere automaticamente quale funzione invocare in base al prompt dell’utente. Aggiungeremo una nuova funzione di feed che restituirà i 3 articoli di notizie principali con i relativi link per il ticker specificato.
Inizia installando la libreria feedparser usando il comando pip. Useremo questa libreria per estrarre i titoli per il ticker specificato.
Crea la funzione Python get_stock_news che prenderà il ticker in input e restituirà i tre titoli di notizie principali con i loro link.
import feedparser
defget_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}®ion=US&lang=en-US"try:
feed = feedparser.parse(rss_url)ifnot feed.entries:returnf"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:returnf"Failed to retrieve news for {ticker}: {str(e)}"returnf"Latest news for {ticker}:\n{news_str}"
get_stock_news("AAPL")Offerto da
Abbiamo raccolto i tre titoli principali su Apple con i relativi link.
'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)'Offerto da
Definisci strumenti multipli per prezzo e notizie
Ora dobbiamo aggiungere un’altra funzione OpenAI chiamata get_stock_news con la descrizione e l’output appropriati.
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}}]Offerto da
Lascia che il modello decida se chiamare una o entrambe le funzioni
Proviamo a testare la funzione chiedendo a GPT-4.5 del titolo Google e delle ultime notizie su 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_callsOfferto da
Come possiamo vedere, ha invocato entrambe le funzioni per i prezzi azionari e per le ultime notizie.
[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')]Offerto da
Salvare il risultato della chiamata di funzione
Il problema è che entrambe le funzioni restituiscono il ticker come risultato. Dobbiamo ideare una condizione if-else per determinare quale funzione è stata invocata. Salveremo i risultati della funzione nel dizionario.
# 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"])Offerto da
Aggiungere la chiamata di funzione e i risultati degli strumenti
Ora aggiungeremo i risultati generati in precedenza e il risultato della funzione con l’ID dello strumento.
messages.append(completion.choices[0].message)# Append the model's function call messagefor 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
})Offerto da
Inviare la conversazione aggiornata di nuovo al modello
Quando passiamo il messaggio risultante a GPT-4.5, ha generato risultati eccellenti e perfettamente ragionevoli.
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)Offerto da
Abbiamo ottenuto il prezzo del titolo Google e i link alle principali notizie su Google.
Il codice sorgente e gli output sono disponibili nel DataLab Workspace. Tutto ciò che devi fare è aggiungere la tua chiave API di OpenAI alla variabile d’ambiente, e potrai eseguire tutto in autonomia.
Conclusione
Abbiamo costretto i large language model a generare output strutturati e poi a passarli a un’API o a un’altra funzione Python per eseguire un compito specifico. Le IA avanzate, come GPT-4.5, possono usare più servizi o API per generare risposte altamente integrate.
In futuro useremo il function calling e gli agenti per controllare tutto ciò che ci circonda; ti basterà inviare un comando vocale alla tua IA, che invocherà gli strumenti necessari in base al tuo comando e apporterà modifiche al sistema.
Abbiamo GPT-4.5, ma molti esperti di IA stanno aspettando GPT-5, che si prevede sarà più vicino all’AGI. Puoi scoprire tutto sul modello in arrivo leggendo il blog Tutto quello che sappiamo su GPT-5.
In quanto data scientist certificato, sono appassionato di sfruttare tecnologie all’avanguardia per creare applicazioni di machine learning innovative. Con una solida esperienza in riconoscimento vocale, analisi e reportistica dei dati, MLOps, AI conversazionale e NLP, ho affinato le mie competenze nello sviluppo di sistemi intelligenti in grado di avere un impatto concreto. Oltre alla mia expertise tecnica, sono anche un comunicatore efficace, con il talento di rendere chiari e sintetici concetti complessi. Di conseguenza, sono diventato un blogger molto seguito in ambito data science, condividendo idee ed esperienze con una community in crescita di professionisti dei dati. Attualmente mi concentro sulla creazione e sull’editing di contenuti, lavorando con large language model per sviluppare contenuti potenti e coinvolgenti che possano aiutare aziende e singoli a valorizzare al meglio i propri dati.
Scopri i 15 migliori server MCP remoti che stanno trasformando lo sviluppo AI nel 2026. Scopri come migliorano automazione, ragionamento, sicurezza e velocità dei workflow.
I large language model (LLM) spesso faticano a generare in modo coerente output strutturati, come il JSON, anche quando si usano tecniche avanzate di prompt engineering. Il prompt engineering può migliorare i risultati, ma non è infallibile: durante i test possono ancora verificarsi errori, portando a occasionali fallimenti. Quindi, come puoi garantire ogni volta output strutturati accurati e affidabili?
Il function calling negli LLM indica la capacità di questi modelli di produrre risposte con dati strutturati, tipicamente sotto forma di oggetti JSON. Questa funzionalità permette agli LLM di andare oltre la semplice generazione di testo e interagire con sistemi esterni, API e strumenti. Sfruttando il function calling, gli LLM possono svolgere compiti più complessi e guidati dal contesto mantenendo la struttura e l’accuratezza richieste.
In questo tutorial, impareremo a usare GPT-4.5, il modello più accurato e fattuale, per creare uno script di function calling. Prima implementeremo una singola funzione per estrarre i prezzi azionari da internet. Poi aggiungeremo un’altra funzione, consentendo all’LLM di scegliere tra più strumenti e selezionare quello più appropriato in base al prompt dell’utente.
Alla fine di questo tutorial, saprai costruire una tua applicazione intelligente in grado di fornire i prezzi azionari di qualsiasi azienda e anche distribuire feed di notizie.
Immagine dell’autore
Le capacità di Function Calling di GPT-4.5
GPT-4.5, l’ultimo modello di OpenAI, introduce diverse funzionalità avanzate, tra cui capacità di function calling migliorate. Queste capacità sono pensate per migliorare la capacità del modello di interagire con sistemi esterni ed eseguire compiti complessi invocando funzioni specifiche in base agli input dell’utente.
Fonte: Model - OpenAI API
Ecco le caratteristiche chiave del Function Calling di GPT-4.5:
1. Integrazione con le API
GPT-4.5 supporta il function calling tramite le Chat Completions API, Assistants API e Batch API. Questo consente agli sviluppatori di integrare senza soluzione di continuità il modello nelle proprie applicazioni, permettendogli di eseguire attività come il recupero e l’elaborazione dei dati e persino l’esecuzione di comandi all’interno di un ambiente software.
2. Output strutturati
Il modello può restituire output strutturati, come JSON, particolarmente utili per gli sviluppatori che necessitano che il modello interagisca con altri sistemi o strumenti che richiedono formati di dati specifici.
3. Capacità visive
Sebbene GPT-4.5 non supporti output multimodali come voce o video, supporta le capacità di visione tramite input di immagini. Questo consente al modello di elaborare e analizzare dati visivi, che possono essere combinati con il function calling per svolgere attività che coinvolgono sia dati testuali sia immagini.
4. Funzionalità avanzate
La funzionalità di function calling in GPT-4.5 è progettata per semplificare workflow complessi, consentendo al modello di suggerire o invocare funzioni scritte nel tuo codice. Questo può essere particolarmente utile per automatizzare attività ripetitive o integrare processi decisionali guidati dall’IA in sistemi software esistenti.
Scopri tutti i dettagli sul nuovo modello OpenAI leggendo il blog GPT 4.5: caratteristiche, accesso, confronto con GPT-4o e altro.
Single Function Calling con GPT-4.5
Ora costruiremo un semplice sistema di function calling usando il modello GPT-4.5 e la libreria Yahooquery. La libreria Yahooquery ci aiuterà a estrarre qualsiasi dato relativo ai titoli azionari da Yahoo Finance.
La nostra soluzione permetterà agli utenti di fare domande sui prezzi azionari, attivando una funzione specifica che recupera il prezzo da internet e genera una risposta. È davvero così semplice.
Cominceremo installando le librerie
openaieyahooqueryusando il comando PIP.Creare una funzione per il prezzo azionario
Crea una funzione Python che prende un ticker (ad es., AAPL) e restituisce il prezzo di quel ticker. Usa
yahooquerynel backend per estrarre i dati rilevanti.Definire gli strumenti usando la funzione
Il client OpenAI non comprende la funzione Python, quindi dobbiamo creare uno strumento usando un elenco di dizionari. Dobbiamo fornire il nome, la descrizione e il tipo di output necessari.
Ogni volta che questa funzione viene invocata, estrarrà il nome del ticker dal prompt e lo restituirà in un formato strutturato.
Lascia che sia il modello a decidere se chiamare la funzione
Testiamo la nostra funzione OpenAI appena creata. Fornisci alla chat completion il messaggio dell’utente, il nome del modello e gli strumenti.
Come possiamo vedere, GPT-4.5 ha invocato correttamente
get_stock_pricee ha restituito il ticker corretto (META).Eseguire la funzione con il ticker fornito
Ora possiamo passare questo ticker alla nostra funzione Python
get_stock_price.Come risultato, ricevi una risposta che include il nome del ticker e il relativo prezzo.
Puoi fermarti qui, ma per fornire una risposta appropriata in linguaggio naturale, devi passare di nuovo i risultati alla chat completion.
Aggiungere la chiamata di funzione e il risultato dello strumento
Aggiungeremo la risposta generata dalla conversazione precedente e includeremo anche la chiamata allo strumento con l’ID dello strumento e i risultati.
Inviare la conversazione aggiornata di nuovo al modello
Esegui di nuovo la chat completion con il messaggio che include il contenuto delle chiamate agli strumenti.
Come puoi vedere, abbiamo ottenuto il risultato corretto.
Potresti pensare che questo sia un passaggio inutile, ma quando hai un output complesso, questo step ti aiuterà a comprendere i risultati in inglese semplice invece che in formato JSON.
Se l’API di OpenAI ti crea confusione e vuoi saperne di più, valuta di seguire il percorso di carriera OpenAI Fundamentals per imparare a usare l’API di OpenAI per effettuare prompt ai modelli GPT e Whisper di OpenAI.
Multiple Function Calling con GPT4.5
Ora impareremo ad aggiungere un’altra funzione al nostro sistema di IA, in modo che GPT-4.5 possa decidere automaticamente quale funzione invocare in base al prompt dell’utente. Aggiungeremo una nuova funzione di feed che restituirà i 3 articoli di notizie principali con i relativi link per il ticker specificato.
Inizia installando la libreria
feedparserusando il comando pip. Useremo questa libreria per estrarre i titoli per il ticker specificato.Definisci la funzione per le notizie azionarie
Crea la funzione Python
get_stock_newsche prenderà il ticker in input e restituirà i tre titoli di notizie principali con i loro link.Abbiamo raccolto i tre titoli principali su Apple con i relativi link.
Definisci strumenti multipli per prezzo e notizie
Ora dobbiamo aggiungere un’altra funzione OpenAI chiamata
get_stock_newscon la descrizione e l’output appropriati.Lascia che il modello decida se chiamare una o entrambe le funzioni
Proviamo a testare la funzione chiedendo a GPT-4.5 del titolo Google e delle ultime notizie su Google.
Come possiamo vedere, ha invocato entrambe le funzioni per i prezzi azionari e per le ultime notizie.
Salvare il risultato della chiamata di funzione
Il problema è che entrambe le funzioni restituiscono il ticker come risultato. Dobbiamo ideare una condizione if-else per determinare quale funzione è stata invocata. Salveremo i risultati della funzione nel dizionario.
Aggiungere la chiamata di funzione e i risultati degli strumenti
Ora aggiungeremo i risultati generati in precedenza e il risultato della funzione con l’ID dello strumento.
Inviare la conversazione aggiornata di nuovo al modello
Quando passiamo il messaggio risultante a GPT-4.5, ha generato risultati eccellenti e perfettamente ragionevoli.
Abbiamo ottenuto il prezzo del titolo Google e i link alle principali notizie su Google.
Il codice sorgente e gli output sono disponibili nel DataLab Workspace. Tutto ciò che devi fare è aggiungere la tua chiave API di OpenAI alla variabile d’ambiente, e potrai eseguire tutto in autonomia.
Conclusione
Abbiamo costretto i large language model a generare output strutturati e poi a passarli a un’API o a un’altra funzione Python per eseguire un compito specifico. Le IA avanzate, come GPT-4.5, possono usare più servizi o API per generare risposte altamente integrate.
In futuro useremo il function calling e gli agenti per controllare tutto ciò che ci circonda; ti basterà inviare un comando vocale alla tua IA, che invocherà gli strumenti necessari in base al tuo comando e apporterà modifiche al sistema.
Abbiamo GPT-4.5, ma molti esperti di IA stanno aspettando GPT-5, che si prevede sarà più vicino all’AGI. Puoi scoprire tutto sul modello in arrivo leggendo il blog Tutto quello che sappiamo su GPT-5.