Output Strutturato, Function Calling e Agenti: differenze tra le versioni
(Creata pagina con "= Output Strutturato nei Modelli di Linguaggio = L'output strutturato rappresenta la capacità di un modello di linguaggio di generare risposte in formati predefiniti e organizzati, come JSON, XML, o altri schemi specifici. Questa caratteristica è fondamentale per l''''integrazione dei LLM in sistemi software.''' Un primo esempio di output strutturato viene dato nel seguente prompt: Estrai le seguenti informazioni dal testo in formato JSON: Mario Rossi lavora come sv...") |
|||
Riga 220: | Riga 220: | ||
Si invita a testare esternsivamente il sistema, anche con domande '''incomplete.''' Si ricorda che in un sistema "reale", a ogni interazione che richiede l'uso di un '''tool, viene effettuata una chiamata API o chiamata una funzione'''. | Si invita a testare esternsivamente il sistema, anche con domande '''incomplete.''' Si ricorda che in un sistema "reale", a ogni interazione che richiede l'uso di un '''tool, viene effettuata una chiamata API o chiamata una funzione'''. | ||
=== Definizione di Agenti AI | === Definizione di Agenti AI, relativamente al Function Calling e l'uso di Tools === | ||
In questo contesto, gli Agenti AI sono sistemi basati su modelli di linguaggio che utilizzano il '''Function Calling''' per interagire con funzioni e strumenti esterni. Questa capacità permette agli agenti di eseguire azioni concrete (come interrogare database, chiamare API o manipolare dati) e di recuperare informazioni addizionali prima di generare una risposta. A differenza di un semplice modello di linguaggio che può solo generare testo, un Agente AI può interpretare l'intenzione ('''intent)''' dell'utente, selezionare e chiamare le funzioni appropriate, e orchestrare una serie di operazioni per raggiungere un obiettivo specifico. | In questo contesto, gli Agenti AI sono sistemi basati su modelli di linguaggio che utilizzano il '''Function Calling''' per interagire con funzioni e strumenti esterni. Questa capacità permette agli agenti di eseguire azioni concrete (come interrogare database, chiamare API o manipolare dati) e di recuperare informazioni addizionali prima di generare una risposta. A differenza di un semplice modello di linguaggio che può solo generare testo, un Agente AI può interpretare l'intenzione ('''intent)''' dell'utente, selezionare e chiamare le funzioni appropriate, e orchestrare una serie di operazioni per raggiungere un obiettivo specifico. | ||
Versione delle 17:21, 18 dic 2024
Output Strutturato nei Modelli di Linguaggio
L'output strutturato rappresenta la capacità di un modello di linguaggio di generare risposte in formati predefiniti e organizzati, come JSON, XML, o altri schemi specifici. Questa caratteristica è fondamentale per l'integrazione dei LLM in sistemi software.
Un primo esempio di output strutturato viene dato nel seguente prompt:
Estrai le seguenti informazioni dal testo in formato JSON: Mario Rossi lavora come sviluppatore software presso TechCorp e può essere contattato all'email mario.rossi@google.com
Un modello di Linguaggio risponderà con qualcosa del genere:
{ "nome": "Mario Rossi", "professione": "sviluppatore software", "azienda": "TechCorp", "email": "mario.rossi@example.com" }
Si invita a provare, per esempio, il seguente prompt:
Analizza il seguente testo e fornisci un'analisi strutturata in JSON che includa: - Sentimento generale (positivo/negativo/neutro) - Parole chiave emotive - Punteggio di intensità (1-5) - Suggerimenti per migliorare il tono Testo: "Il servizio clienti è stato terribilmente lento e il personale sembrava disinteressato. Almeno il prodotto funziona bene, ma non credo che tornerò in questo negozio."
Fornire la struttura direttamente nel prompt
Per facilitare l'incorporazione e delle risposte in altri software, e conformarle ad una stessa struttura, spesso si "forza" il modello a aderire a un determinato schema di output. Ad esempio si provi il seguente prompt:
Analizza il seguente testo fornendo l'output nel formato JSON specificato dopo il testo. Testo: "La nuova piattaforma di e-learning ha un'interfaccia moderna e reattiva, ma ho riscontrato diversi bug durante i test. Il team di sviluppo ha risposto velocemente alle segnalazioni, anche se alcuni problemi persistono. Nel complesso è promettente ma necessita di miglioramenti." Output atteso: { "review_analysis": { "overall_sentiment": "STRING (positive/mixed/negative)", "rating": "NUMBER (1-5)", "aspects": { "positives": ["ARRAY OF STRINGS"], "negatives": ["ARRAY OF STRINGS"] }, "response_time": { "score": "NUMBER (1-5)", "comment": "STRING" }, "maturity_assessment": { "stage": "STRING (alpha/beta/production-ready)", "confidence": "NUMBER (1-5)" } } }
Fornire la struttura in formato "OpenAI schema"
Per utilizzare un formato ancora più standardizzato, è possibile specificare il formato di output con la sintassi OpenAI: https://spec.openapis.org/oas/v3.0.3#schema.
Per esempio, se nel prompt di sistema di un modello inserissimo:
Analizza il seguente testo fornendo l'output secondo lo schema JSON specificato dopo il testo.
Specificando la definizione dell'oggetto strutturato da tornare - per esempio nella sezione Structured Output in Gemini:
{ "type": "object", "properties": { "review_analysis": { "type": "object", "properties": { "overall_sentiment": { "type": "string", "enum": ["positive", "mixed", "negative"] }, "rating": { "type": "number", "minimum": 1, "maximum": 5 }, "aspects": { "type": "object", "properties": { "positives": { "type": "array", "items": { "type": "string" } }, "negatives": { "type": "array", "items": { "type": "string" } } } }, "response_time": { "type": "object", "properties": { "score": { "type": "number", "minimum": 1, "maximum": 5 }, "comment": { "type": "string" } } }, "maturity_assessment": { "type": "object", "properties": { "stage": { "type": "string", "enum": ["alpha", "beta", "production-ready"] }, "confidence": { "type": "number", "minimum": 1, "maximum": 5 } } } }, "required": ["overall_sentiment", "rating", "aspects", "response_time", "maturity_assessment"] } } }
Questo formato ha alcuni vantaggi aggiuntivi rispetto al precedente:
- Definisce esplicitamente i tipi di dati
- Permette di specificare valori minimi e massimi per i numeri
- Elenca esplicitamente i valori possibili per le enumerazioni
- Indica quali campi sono obbligatori
- È compatibile con gli strumenti di validazione JSON Schema
Function Calling nei Modelli di Linguaggio
Il Function Calling rappresenta un'evoluzione dell'output strutturato nei modelli di linguaggio, permettendo di mappare il linguaggio naturale a chiamate di funzioni predefinite. Questa caratteristica consente ai LLM di interpretare l'intento dell'utente (in inglese intent detection) e tradurlo in azioni concrete attraverso API o funzioni specifiche.
Il Function Calling si basa sui principi dell'output strutturato, ma richiede:
- Una definizione esplicita delle funzioni disponibili
- Mappatura automatica tra intento e funzione
- Struttura standardizzata per i parametri
- Validazione integrata dei tipi di dati
Esempio di function calling
Immaginiamo di voler creare un piccolo sistema di gestione automatica delle campagne di paid advertising, che possa eseguire query del tipo:
- "Crea una campagna awareness su Facebook con budget 100 euro al giorno, che inizi il 20/01/2025 e duri 14 giorni, audience professionisti_roma"
- "Quali sono le campagne attualmente attive?"
- "Interrompi la campagna 12345"
- "Avvia una campagna conversion su Instagram, budget giornaliero 150 euro, dal 01/03/2025 per 30 giorni, target giovani_milano"
- "Mostra tutte le campagne in corso"
Utilizziamo quindi i seguenti parametri per il function calling:
[ { "name": "createAdCampaign", "description": "Crea una nuova campagna pubblicitaria", "parameters": { "type": "object", "properties": { "objective": { "type": "string", "enum": [ "awareness", "consideration", "conversion" ] }, "platform": { "type": "string", "enum": [ "Facebook", "Instagram", "LinkedIn", "TikTok" ] }, "daily_budget": { "type": "integer" }, "start_date": { "type": "string" }, "duration_days": { "type": "integer" }, "audience_id": { "type": "string" } }, "required": [ "objective", "platform", "daily_budget", "start_date", "duration_days", "audience_id" ] } }, { "name": "listActiveCampaigns", "description": "Ritorna la lista delle campagne attive" }, { "name": "stopCampaign", "description": "Ferma una campagna specificia", "parameters": { "type": "object", "properties": { "campaign_id": { "type": "string" } }, "required": [ "campaign_id" ] } } ]
Si invita a testare esternsivamente il sistema, anche con domande incomplete. Si ricorda che in un sistema "reale", a ogni interazione che richiede l'uso di un tool, viene effettuata una chiamata API o chiamata una funzione.
Definizione di Agenti AI, relativamente al Function Calling e l'uso di Tools
In questo contesto, gli Agenti AI sono sistemi basati su modelli di linguaggio che utilizzano il Function Calling per interagire con funzioni e strumenti esterni. Questa capacità permette agli agenti di eseguire azioni concrete (come interrogare database, chiamare API o manipolare dati) e di recuperare informazioni addizionali prima di generare una risposta. A differenza di un semplice modello di linguaggio che può solo generare testo, un Agente AI può interpretare l'intenzione (intent) dell'utente, selezionare e chiamare le funzioni appropriate, e orchestrare una serie di operazioni per raggiungere un obiettivo specifico.
In pratica, un Agente AI può:
- Comprendere una richiesta in linguaggio naturale
- Decidere quali funzioni chiamare e in quale ordine
- Utilizzare i risultati delle funzioni per prendere decisioni successive
- Interagire con sistemi esterni per compiere azioni reali
- Fornire risposte basate sia sulla sua conoscenza che sui dati ottenuti
Esercizio: Gestione Email Customer Care con Function Calling
Un'azienda di software necessita di un sistema per gestire automaticamente le email in arrivo all'indirizzo info@azienda.it. Il sistema deve essere in grado di:
- Riconoscere se l'email fa riferimento a un ticket esistente (cercando un ID ticket nel formato #Txxxxx)
- Creare nuovi ticket per richieste di supporto che non fanno riferimento a un ticket esistente
- Informazioni commerciali
Implementare un sistema di Function Calling che gestisca i seguenti scenari:
Email 1:
Da: cliente@email.com A: info@azienda.it Oggetto: Re: Ticket #T12345 - Problema installazione Buongiorno, in riferimento al ticket #T12345, volevo sapere se ci sono novità sulla mia richiesta di supporto per l'installazione del software. Grazie
Email 2:
Da: nuovo.cliente@email.com A: info@azienda.it Oggetto: Richiesta supporto installazione software "Nausicaa" Buongiorno, ho acquistato il vostro software ieri e sto avendo difficoltà con l'installazione. Il sistema operativo è Windows 11 e ricevo un errore durante la fase di setup. Potete aiutarmi?
Email 3:
Da: potenziale.cliente@email.com A: info@azienda.it Oggetto: Informazioni prodotto "Telemaco" Salve, sono interessato al vostro software "Telemaco" per la mia azienda. Vorrei sapere i prezzi per 25 postazioni e se fate sconti per ordini multipli. Cordiali saluti
Requisiti:
- Definire le funzioni necessarie per:
- Gestire ticket esistenti
- Creare nuovi ticket
- Inoltrare le richiesta commerciali direttamente al dipartimento "vendite"
- Specificare i parametri necessari per ogni funzione (dati cliente, riassunto richiesta, Livello di priorità: [high, medium,low], ID ticket, nome prodotto (opzionale), versione prodotto (opzionale))
- Garantire che tutte le informazioni necessarie vengano estratte dall'email
Si richiede di implementare lo schema delle funzioni seguendo il formato OpenAI per il Function Calling.