Come usare il tool calling di ChatGPT per automatizzare l'analisi dati in tempo reale?
Stai cercando un modo veloce per trasformare i tuoi dati grezzi in insight visuali senza scrivere ore di codice?La risposta è iltool callingdi ChatGPT, una funzionalità che permette al modello di invocare librerie, API e script esterni direttamente dal prompt. In questo articolo scoprirai, passo dopo passo, come progettare prompt intelligenti, collegare tool Python, gestire errori e latenza, e ottenere dashboard aggiornate in tempo reale.
Panoramica delle capacità di tool calling e delle API di ChatGPT
Iltool calling
- Identificare, dal contesto del prompt, quale funzione esterna è necessaria.
- Generare automaticamente gli argomenti richiesti e invocare la funzione tramite leChat Completion API.
- Ricevere il risultato in formato JSON, interpretarlo e usarlo per ulteriori passaggi del workflow.
Le API di OpenAI supportano due modalità principali:
- Function calling: definisci una lista di funzioni (nome, descrizione, parametri JSON Schema) e il modello decide se chiamarle.
- Tool calling (beta): estende il concetto a script arbitrari, come script Python ospitati su server o servizi esterni (AWS Lambda, Google Cloud Functions, ecc.).
Progettazione di prompt che attivano tool esterni
1. Definire le funzioni (tool) in modo esplicito
Ogni tool deve essere descritto con:
{
"name": "pulizia_dati",
"description": "Rimuove valori nulli, converte date e normalizza colonne.",
"parameters": {
"type": "object",
"properties": {
"file_path": {"type": "string", "description": "Percorso del CSV da pulire"},
"schema": {"type": "object", "description": "Mappatura colonna -> tipo"}
},
"required": ["file_path"]
}
}Questa struttura JSON viene passata aChatCompletion.createtramite il campofunctions. Il modello, leggendo il prompt, deciderà se è necessario chiamarepulizia_dati.
2. Scrivere un prompt chiaro e orientato all'azione
Esempio di prompt:
Ho appena caricato il filesales_2024.csvsu S3. Voglio pulirlo, raggruppare le vendite per regione e visualizzare un grafico a barre aggiornato ogni 5 minuti. Usa i toolpulizia_dati,aggregazione_venditeecrea_graficoper realizzare il workflow.Il modello riconosce le parole chiave corrispondenti ai nomi delle funzioni e le chiama in sequenza, restituendo i risultati al flusso di conversazione.
Esempio passo-a-passo di un workflow di analisi dati
Setup iniziale (Python)
import openai, json, os
openai.api_key = os.getenv("OPENAI_API_KEY")
# Definizione dei tool come funzioni Python
def pulizia_dati(file_path: str, schema: dict = None):
import pandas as pd
df = pd.read_csv(file_path)
# Rimozione valori nulli
df = df.dropna()
# Normalizzazione semplice
if schema:
for col, dtype in schema.items():
df[col] = df[col].astype(dtype)
cleaned_path = "/tmp/cleaned.csv"
df.to_csv(cleaned_path, index=False)
return {"cleaned_path": cleaned_path, "rows": len(df)}
def aggregazione_vendite(cleaned_path: str, group_by: str = "regione"):
import pandas as pd
df = pd.read_csv(cleaned_path)
agg = df.groupby(group_by)["importo"].sum().reset_index()
agg_path = "/tmp/agg.csv"
agg.to_csv(agg_path, index=False)
return {"agg_path": agg_path, "records": agg.to_dict(orient="records")}
def crea_grafico(agg_path: str, titolo: str = "Vendite per Regione"):
import pandas as pd, matplotlib.pyplot as plt, base64, io
df = pd.read_csv(agg_path)
plt.figure(figsize=(8,5))
plt.bar(df["regione"], df["importo"], color="#4CAF50")
plt.title(titolo)
plt.xlabel("Regione")
plt.ylabel("Importo (€)")
buf = io.BytesIO()
plt.savefig(buf, format="png")
buf.seek(0)
img_b64 = base64.b64encode(buf.read()).decode()
return {"image_base64": img_b64}
# Mappatura nome -> funzione
TOOLS = {
"pulizia_dati": pulizia_dati,
"aggregazione_vendite": aggregazione_vendite,
"crea_grafico": crea_grafico,
}3. Definire lo schema delle funzioni per l'API
functions = [
{
"name": "pulizia_dati",
"description": "Pulisce un CSV rimuovendo valori nulli e normalizzando le colonne.",
"parameters": {
"type": "object",
"properties": {
"file_path": {"type": "string"},
"schema": {"type": "object"}
},
"required": ["file_path"]
}
},
{
"name": "aggregazione_vendite",
"description": "Aggrega le vendite per una colonna specifica.",
"parameters": {
"type": "object",
"properties": {
"cleaned_path": {"type": "string"},
"group_by": {"type": "string", "default": "regione"}
},
"required": ["cleaned_path"]
}
},
{
"name": "crea_grafico",
"description": "Genera un grafico a barre a partire dal CSV aggregato.",
"parameters": {
"type": "object",
"properties": {
"agg_path": {"type": "string"},
"titolo": {"type": "string", "default": "Vendite per Regione"}
},
"required": ["agg_path"]
}
}
]4. Loop di chiamata all'API
messages = [{"role": "system", "content": "Sei un assistente esperto di data-analysis. Usa i tool forniti per rispondere alle richieste dell'utente."},
{"role": "user", "content": "Analizza il file sales_2024.csv, raggruppa per regione e mostra il grafico. Aggiorna ogni 5 minuti."}]
while True:
response = openai.ChatCompletion.create(
model="gpt-4o-mini",
messages=messages,
functions=functions,
function_call="auto"
)
choice = response["choices"][0]
if choice.get("finish_reason") == "function_call":
fc = choice["message"]["function_call"]
func_name = fc["name"]
arguments = json.loads(fc["arguments"])
# Esecuzione della funzione Python corrispondente
result = TOOLS[func_name](**arguments)
# Aggiungi il risultato al thread
messages.append({"role": "assistant", "content": None, "function_call": fc})
messages.append({"role": "function", "name": func_name, "content": json.dumps(result)})
else:
# Risposta finale dell'assistente
print("Assistant:", choice["message"]["content"])
break
# Per demo: esci dopo il primo ciclo
breakIl flusso sopra esegue automaticamente:
- Pulizia dei dati(tool
pulizia_dati) - Aggregazione per regione(tool
aggregazione_vendite) - Generazione del graficoin base64, pronto per essere inserito in una pagina web.
Per la parte "tempo reale", basta avvolgere il loop in un job scheduler (cron, Airflow o un semplicewhile Truecontime.sleep(300)) che richiama l'API ogni 5 minuti.
Best practice per gestione di errori, latenza e sicurezza
Gestione degli errori
- Validazione degli input: usa JSON Schema per definire i parametri richiesti; l'API restituirà errori chiari se mancanti.
- Timeout di funzione: imposta un limite (es. 30 s) con
signal.alarmoconcurrent.futuresper evitare blocchi. - Retry logic: quando la chiamata a OpenAI fallisce (rate-limit, 5xx), utilizza
backoffcon jitter.
Ottimizzare la latenza
- Batching dei dati: invia al tool solo le colonne necessarie, riducendo il payload.
- Cache dei risultati intermedi: salva
cleaned_patheagg_pathin Redis o S3 con TTL di pochi minuti. - Modello più leggero: per operazioni di orchestrazione usa
gpt-4o-miniinvece digpt-4oper risparmiare tempo e costi.
Sicurezza
- Whitelisting delle funzioni: espone solo i tool strettamente necessari; evita di dare accesso a funzioni di sistema.
- Sanitizzazione dei percorsi: usa
os.path.abspathe verifica che il percorso sia dentro una directory consentita. - Credenziali isolate: le chiavi API per database o storage devono essere gestite da un secret manager (AWS Secrets Manager, Azure Key Vault).
- Logging e audit: registra ogni
function_callcon timestamp, utente e risultato per compliance.
Takeaways azionabili
- Definisci i tuoi tool come funzioni Python con descrizioni JSON Schema.
- Scrivi prompt orientati all'azione, includendo i nomi dei tool.
- Usa il ciclo
per orchestrare più step. - Implementa timeout, retry e caching per garantire performance in tempo reale.
- Proteggi l'ambiente con whitelist, sanitizzazione e secret manager.
Conclusione
Iltool calling di ChatGPTtrasforma un LLM da semplice generatore di testo a vero orchestratore di workflow di data-analysis. Con pochi minuti di configurazione puoi creare pipeline che puliscono, aggregano e visualizzano dati in tempo reale, il tutto mantenendo controllo su latenza, errori e sicurezza. Sperimenta subito: definisci i primi due tool (pulizia e aggregazione), collega un endpoint di visualizzazione e avvia il loop di aggiornamento ogni 5 minuti. Il risultato è una dashboard dinamica alimentata da un'intelligenza artificiale che lavora dietro le quinte, lasciandoti più tempo per interpretare i risultati e prendere decisioni strategiche.
Domande Frequenti
Che cos'è il tool calling di ChatGPT?
Il tool calling è una funzionalità che permette a ChatGPT di invocare funzioni o script esterni definiti dall'utente, passando parametri in JSON e ricevendo il risultato per continuare la conversazione.
Quali linguaggi posso usare per i tool?
Puoi scrivere i tool in qualsiasi linguaggio esponibile tramite un'API (Python, Node.js, Go, ecc.). L'importante è che l'endpoint restituisca JSON conforme allo schema definito.